Struct rerun::sdk::archetypes::Pinhole
source · pub struct Pinhole {
pub image_from_camera: PinholeProjection,
pub resolution: Option<Resolution>,
pub camera_xyz: Option<ViewCoordinates>,
pub image_plane_distance: Option<ImagePlaneDistance>,
}
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::from_color_model_and_tensor(rerun::ColorModel::RGB, 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)
.with_image_plane_distance(0.1),
)?;
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)])
.with_radii([0.025]),
)?;
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.
image_plane_distance: Option<ImagePlaneDistance>
The distance from the camera origin to the image plane when the projection is shown in a 3D viewer.
This is only used for visualization purposes, and does not affect the projection itself.
Implementations§
source§impl Pinhole
impl Pinhole
sourcepub const NUM_COMPONENTS: usize = 5usize
pub const NUM_COMPONENTS: usize = 5usize
The total number of components in the archetype: 1 required, 2 recommended, 2 optional
source§impl Pinhole
impl Pinhole
sourcepub fn new(image_from_camera: impl Into<PinholeProjection>) -> Pinhole
pub fn new(image_from_camera: impl Into<PinholeProjection>) -> Pinhole
Create a new Pinhole
.
sourcepub fn with_resolution(self, resolution: impl Into<Resolution>) -> Pinhole
pub fn with_resolution(self, resolution: impl Into<Resolution>) -> Pinhole
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>) -> Pinhole
pub fn with_camera_xyz(self, camera_xyz: impl Into<ViewCoordinates>) -> Pinhole
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.
sourcepub fn with_image_plane_distance(
self,
image_plane_distance: impl Into<ImagePlaneDistance>
) -> Pinhole
pub fn with_image_plane_distance( self, image_plane_distance: impl Into<ImagePlaneDistance> ) -> Pinhole
The distance from the camera origin to the image plane when the projection is shown in a 3D viewer.
This is only used for visualization purposes, and does not affect the projection itself.
source§impl Pinhole
impl Pinhole
sourcepub fn from_focal_length_and_resolution(
focal_length: impl Into<Vec2D>,
resolution: impl Into<Vec2D>
) -> Pinhole
pub fn from_focal_length_and_resolution( focal_length: impl Into<Vec2D>, resolution: impl Into<Vec2D> ) -> Pinhole
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) -> Pinhole
pub fn from_fov_and_aspect_ratio(fov_y: f32, aspect_ratio: f32) -> Pinhole
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 with_principal_point(self, principal_point: impl Into<Vec2D>) -> Pinhole
pub fn with_principal_point(self, principal_point: impl Into<Vec2D>) -> Pinhole
Principal point of the pinhole camera, i.e. the intersection of the optical axis and the image plane.
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 resolution(&self) -> Option<Vec2>
pub fn resolution(&self) -> Option<Vec2>
The resolution of the camera sensor in pixels.
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.
sourcepub fn principal_point(&self) -> Vec2
pub fn principal_point(&self) -> Vec2
Principal point of the pinhole camera, i.e. the intersection of the optical axis and the image plane.
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 display_name() -> &'static str
fn display_name() -> &'static str
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>)>
) -> Result<Pinhole, DeserializationError>
fn from_arrow_components( arrow_data: impl IntoIterator<Item = (ComponentName, Box<dyn Array>)> ) -> Result<Pinhole, DeserializationError>
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 ArchetypeReflectionMarker for Pinhole
impl 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> CheckedAs for T
impl<T> CheckedAs for T
source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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 moresource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request