-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How to manually start and stop capturing? #1
Comments
Check out the following example: use bevy::{
prelude::*,
render::{
camera::RenderTarget,
render_resource::{
Extent3d, TextureDescriptor, TextureDimension, TextureFormat, TextureUsages,
},
},
window::WindowResolution,
winit::WinitSettings,
};
use bevy_image_export::{ImageExportBundle, ImageExportPlugin, ImageExportSource};
use std::f32::consts::TAU;
fn main() {
let export_plugin = ImageExportPlugin::default();
let export_threads = export_plugin.threads.clone();
App::new()
.insert_resource(WinitSettings {
return_from_run: true,
..default()
})
.add_plugins(DefaultPlugins.set(WindowPlugin {
primary_window: Some(Window {
resolution: WindowResolution::new(768.0, 768.0).with_scale_factor_override(1.0),
..default()
}),
..default()
}))
.add_plugin(export_plugin)
.insert_resource(AmbientLight {
color: Color::WHITE,
brightness: 1.0,
})
.add_startup_system(setup)
.add_system(update)
.run();
export_threads.finish();
}
fn setup(
mut commands: Commands,
mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<StandardMaterial>>,
mut images: ResMut<Assets<Image>>,
mut export_sources: ResMut<Assets<ImageExportSource>>,
) {
let output_texture_handle = {
let size = Extent3d {
width: 768,
height: 768,
..default()
};
let mut export_texture = Image {
texture_descriptor: TextureDescriptor {
label: None,
size,
dimension: TextureDimension::D2,
format: TextureFormat::Rgba8UnormSrgb,
mip_level_count: 1,
sample_count: 1,
usage: TextureUsages::COPY_DST
| TextureUsages::COPY_SRC
| TextureUsages::RENDER_ATTACHMENT,
view_formats: &[],
},
..default()
};
export_texture.resize(size);
images.add(export_texture)
};
commands
.spawn((
VisibilityBundle::default(),
TransformBundle::default(),
Turntable,
))
.with_children(|parent| {
parent
.spawn(Camera3dBundle {
transform: Transform::from_translation(4.2 * Vec3::Z),
..default()
})
.with_children(|parent| {
parent.spawn(Camera3dBundle {
camera: Camera {
target: RenderTarget::Image(output_texture_handle.clone()),
..default()
},
..default()
});
});
});
commands.spawn((
ImageExportBundle {
source: export_sources.add(output_texture_handle.into()),
..default()
},
ExportBundleMarker,
));
commands.spawn(PbrBundle {
mesh: meshes.add(Mesh::try_from(shape::Cube::default()).unwrap()),
material: materials.add(Color::rgb(1.0, 0.0, 0.0).into()),
transform: Transform::from_rotation(Quat::from_euler(EulerRot::XYZ, 0.5, 0.0, 0.5)),
..default()
});
}
#[derive(Component)]
struct Turntable;
#[derive(Component)]
struct ExportBundleMarker;
fn update(
mut commands: Commands,
export_bundles: Query<Entity, With<ExportBundleMarker>>,
mut transforms: Query<&mut Transform, With<Turntable>>,
mut frame: Local<u32>,
) {
if *frame == 360 {
commands.entity(export_bundles.single()).despawn();
} else {
let theta = TAU * *frame as f32 / 360.0;
for mut transform in &mut transforms {
transform.rotation = Quat::from_euler(EulerRot::XYZ, 0.0, theta, 0.0);
}
}
*frame += 1;
} |
Cooool! Many thanks! |
Closed
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I want to capture all angle of an object so...
everything work fine, images output correctly in
output
folder as expected but...// Seem like it capture every frame while rendering.
// i also need to see each captured result on screen while capturing.
Any hint is welcome.
The text was updated successfully, but these errors were encountered: