Struct re_types::archetypes::Pinhole
source · pub struct Pinhole {
pub image_from_camera: PinholeProjection,
pub resolution: Option<Resolution>,
pub camera_xyz: Option<ViewCoordinates>,
}
Expand description
Archetype: Camera perspective projection (a.k.a. intrinsics).
§Examples
§Simple pinhole camera
use ndarray::{Array, ShapeBuilder};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let rec = rerun::RecordingStreamBuilder::new("rerun_example_pinhole").spawn()?;
let mut image = Array::<u8, _>::default((3, 3, 3).f());
image.map_inplace(|x| *x = rand::random());
rec.log(
"world/image",
&rerun::Pinhole::from_focal_length_and_resolution([3., 3.], [3., 3.]),
)?;
rec.log("world/image", &rerun::Image::try_from(image)?)?;
Ok(())
}
§Perspective pinhole camera
fn main() -> Result<(), Box<dyn std::error::Error>> {
let rec = rerun::RecordingStreamBuilder::new("rerun_example_pinhole_perspective").spawn()?;
let fov_y = std::f32::consts::FRAC_PI_4;
let aspect_ratio = 1.7777778;
rec.log(
"world/cam",
&rerun::Pinhole::from_fov_and_aspect_ratio(fov_y, aspect_ratio)
.with_camera_xyz(rerun::components::ViewCoordinates::RUB),
)?;
rec.log(
"world/points",
&rerun::Points3D::new([(0.0, 0.0, -0.5), (0.1, 0.1, -0.5), (-0.1, -0.1, -0.5)]),
)?;
Ok(())
}
Fields§
§image_from_camera: PinholeProjection
Camera projection, from image coordinates to view coordinates.
resolution: Option<Resolution>
Pixel resolution (usually integers) of child image space. Width and height.
Example:
[1920.0, 1440.0]
image_from_camera
project onto the space spanned by (0,0)
and resolution - 1
.
camera_xyz: Option<ViewCoordinates>
Sets the view coordinates for the camera.
All common values are available as constants on the components.ViewCoordinates
class.
The default is ViewCoordinates::RDF
, i.e. X=Right, Y=Down, Z=Forward, and this is also the recommended setting.
This means that the camera frustum will point along the positive Z axis of the parent space,
and the cameras “up” direction will be along the negative Y axis of the parent space.
The camera frustum will point whichever axis is set to F
(or the opposite of B
).
When logging a depth image under this entity, this is the direction the point cloud will be projected.
With RDF
, the default forward is +Z.
The frustum’s “up” direction will be whichever axis is set to U
(or the opposite of D
).
This will match the negative Y direction of pixel space (all images are assumed to have xyz=RDF).
With RDF
, the default is up is -Y.
The frustum’s “right” direction will be whichever axis is set to R
(or the opposite of L
).
This will match the positive X direction of pixel space (all images are assumed to have xyz=RDF).
With RDF
, the default right is +x.
Other common formats are RUB
(X=Right, Y=Up, Z=Back) and FLU
(X=Forward, Y=Left, Z=Up).
NOTE: setting this to something else than RDF
(the default) will change the orientation of the camera frustum,
and make the pinhole matrix not match up with the coordinate system of the pinhole entity.
The pinhole matrix (the image_from_camera
argument) always project along the third (Z) axis,
but will be re-oriented to project along the forward axis of the camera_xyz
argument.
Implementations§
source§impl Pinhole
impl Pinhole
sourcepub const NUM_COMPONENTS: usize = 4usize
pub const NUM_COMPONENTS: usize = 4usize
The total number of components in the archetype: 1 required, 2 recommended, 1 optional
source§impl Pinhole
impl Pinhole
sourcepub fn new(image_from_camera: impl Into<PinholeProjection>) -> Self
pub fn new(image_from_camera: impl Into<PinholeProjection>) -> Self
Create a new Pinhole
.
sourcepub fn with_resolution(self, resolution: impl Into<Resolution>) -> Self
pub fn with_resolution(self, resolution: impl Into<Resolution>) -> Self
Pixel resolution (usually integers) of child image space. Width and height.
Example:
[1920.0, 1440.0]
image_from_camera
project onto the space spanned by (0,0)
and resolution - 1
.
sourcepub fn with_camera_xyz(self, camera_xyz: impl Into<ViewCoordinates>) -> Self
pub fn with_camera_xyz(self, camera_xyz: impl Into<ViewCoordinates>) -> Self
Sets the view coordinates for the camera.
All common values are available as constants on the components.ViewCoordinates
class.
The default is ViewCoordinates::RDF
, i.e. X=Right, Y=Down, Z=Forward, and this is also the recommended setting.
This means that the camera frustum will point along the positive Z axis of the parent space,
and the cameras “up” direction will be along the negative Y axis of the parent space.
The camera frustum will point whichever axis is set to F
(or the opposite of B
).
When logging a depth image under this entity, this is the direction the point cloud will be projected.
With RDF
, the default forward is +Z.
The frustum’s “up” direction will be whichever axis is set to U
(or the opposite of D
).
This will match the negative Y direction of pixel space (all images are assumed to have xyz=RDF).
With RDF
, the default is up is -Y.
The frustum’s “right” direction will be whichever axis is set to R
(or the opposite of L
).
This will match the positive X direction of pixel space (all images are assumed to have xyz=RDF).
With RDF
, the default right is +x.
Other common formats are RUB
(X=Right, Y=Up, Z=Back) and FLU
(X=Forward, Y=Left, Z=Up).
NOTE: setting this to something else than RDF
(the default) will change the orientation of the camera frustum,
and make the pinhole matrix not match up with the coordinate system of the pinhole entity.
The pinhole matrix (the image_from_camera
argument) always project along the third (Z) axis,
but will be re-oriented to project along the forward axis of the camera_xyz
argument.
source§impl Pinhole
impl Pinhole
sourcepub fn from_focal_length_and_resolution(
focal_length: impl Into<Vec2D>,
resolution: impl Into<Vec2D>
) -> Self
pub fn from_focal_length_and_resolution( focal_length: impl Into<Vec2D>, resolution: impl Into<Vec2D> ) -> Self
Creates a pinhole from the camera focal length and resolution, both specified in pixels.
The focal length is the diagonal of the projection matrix. Set the same value for x & y value for symmetric cameras, or two values for anamorphic cameras.
Assumes the principal point to be in the middle of the sensor.
sourcepub fn from_fov_and_aspect_ratio(fov_y: f32, aspect_ratio: f32) -> Self
pub fn from_fov_and_aspect_ratio(fov_y: f32, aspect_ratio: f32) -> Self
Creates a pinhole from the camera vertical field of view (in radians) and aspect ratio (width/height).
Assumes the principal point to be in the middle of the sensor.
sourcepub fn fov_y(&self) -> Option<f32>
pub fn fov_y(&self) -> Option<f32>
Field of View on the Y axis, i.e. the angle between top and bottom (in radians).
sourcepub fn aspect_ratio(&self) -> Option<f32>
pub fn aspect_ratio(&self) -> Option<f32>
Width/height ratio of the camera sensor.
sourcepub fn focal_length_in_pixels(&self) -> Vec2D
pub fn focal_length_in_pixels(&self) -> Vec2D
X & Y focal length in pixels.
Trait Implementations§
source§impl Archetype for Pinhole
impl Archetype for Pinhole
§type Indicator = GenericIndicatorComponent<Pinhole>
type Indicator = GenericIndicatorComponent<Pinhole>
source§fn name() -> ArchetypeName
fn name() -> ArchetypeName
rerun.archetypes.Points2D
.source§fn indicator() -> MaybeOwnedComponentBatch<'static>
fn indicator() -> MaybeOwnedComponentBatch<'static>
source§fn required_components() -> Cow<'static, [ComponentName]>
fn required_components() -> Cow<'static, [ComponentName]>
source§fn recommended_components() -> Cow<'static, [ComponentName]>
fn recommended_components() -> Cow<'static, [ComponentName]>
source§fn optional_components() -> Cow<'static, [ComponentName]>
fn optional_components() -> Cow<'static, [ComponentName]>
source§fn all_components() -> Cow<'static, [ComponentName]>
fn all_components() -> Cow<'static, [ComponentName]>
source§fn from_arrow_components(
arrow_data: impl IntoIterator<Item = (ComponentName, Box<dyn Array>)>
) -> DeserializationResult<Self>
fn from_arrow_components( arrow_data: impl IntoIterator<Item = (ComponentName, Box<dyn Array>)> ) -> DeserializationResult<Self>
ComponentNames
, deserializes them
into this archetype. Read moresource§fn from_arrow(
data: impl IntoIterator<Item = (Field, Box<dyn Array>)>
) -> Result<Self, DeserializationError>where
Self: Sized,
fn from_arrow(
data: impl IntoIterator<Item = (Field, Box<dyn Array>)>
) -> Result<Self, DeserializationError>where
Self: Sized,
source§impl AsComponents for Pinhole
impl AsComponents for Pinhole
source§fn as_component_batches(&self) -> Vec<MaybeOwnedComponentBatch<'_>>
fn as_component_batches(&self) -> Vec<MaybeOwnedComponentBatch<'_>>
ComponentBatch
s. Read moresource§impl PartialEq for Pinhole
impl PartialEq for Pinhole
source§impl SizeBytes for Pinhole
impl SizeBytes for Pinhole
source§fn heap_size_bytes(&self) -> u64
fn heap_size_bytes(&self) -> u64
self
on the heap, in bytes.source§fn total_size_bytes(&self) -> u64
fn total_size_bytes(&self) -> u64
self
in bytes, accounting for both stack and heap space.source§fn stack_size_bytes(&self) -> u64
fn stack_size_bytes(&self) -> u64
self
on the stack, in bytes. Read moreimpl StructuralPartialEq for Pinhole
Auto Trait Implementations§
impl Freeze for Pinhole
impl RefUnwindSafe for Pinhole
impl Send for Pinhole
impl Sync for Pinhole
impl Unpin for Pinhole
impl UnwindSafe for Pinhole
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more