Jonathan Lee
1. Cameras
1.1 360-degree GIF
1.2 Dolly Zoom
2. Meshes
2.1 Tetrahedron
The mesh has 4 vertices and 4 triangle faces
2.2 Cube
The mesh has 8 vertices and 12 triangle faces
3. Re-texturing a mesh
For color1
I used green ([0., 1., 0.]
) and for color2
I used red ([1., 0., 0.]
).
4. Camera Transformations
R_relative
and t_relative
apply the transformation from the inital camera
position (0,0,-3)
to move it to the final desired camera position.
First we set R_relative
to be the relative rotation from the inital camera orientation.
Then we set t_relative
to be the vector of the initial camera position in the
new camera frame.
Pytorch FoVPerspectiveCameras(R=R, T=T)
expects R
and T
to be transforms
from world to camera. However, since pytorch3d operates
on batches, they represent points using row vectors and right hand multiply by
matrices. Therefore, they expect the rotation matrix to be transposed, so
R_relative
$=R_{cw}^T=R_{wc}$.
T_relative
is the vector that when added to $t^w_{cw}=-R_{wc} t_{cw}$,
we get the vector to the world origin from the camera coordinate frame.




5. Rendering Generic 3D Representations
5.1 Point Clouds from RGB-D Images



Since those GIFs play a little fast, here’s some renders of each point cloud at different viewing angles. Top row: point cloud 1. Middle row: point cloud 2. Bottom row: combined point cloud.
5.2 Parametric Functions
Torus:
Trefoil knot (wiki):
Klein bottle figure 8 immersion (wiki):
5.3 Implicit Surfaces
Mesh vs Point Clouds
Meshes have the advantage of representing the entire surface as opposed to point clouds which are samples from the surface.
When rendering a mesh, the surface will appear solid, which makes it appealing for rendering opaque objects. They can also be made watertight for 3D printing and many assets online are available as meshes.
Point clouds have an advantage of being the direct output of many sensors (depth and lidar). They are also easy to manipulate (e.g. coloring and downsampling). However, point clouds can be sparse, which is not ideal for rendering.
Torus mesh:
Genus 2 mesh (wiki):
6. Something Fun
I experimented with texturing meshes using a measure of curvature of the surface.
I used trimesh.curvature.discrete_mean_curvature_measure
to color the mesh using the
discrete mean curvature measure of a sphere centered at each vertex.
Then I mapped the scalar curvature value to the range (color1
, color2
).
For color1
I used green ([0., 1., 0.]
) and for color2
I used red ([1., 0., 0.]
).
Negative curvature (green) indicates the surface is locally concave and positive
curvature (red) indicates the surface is locally convex.
Cow curvature:
Moai Statue (free3d):
7. Sampling Points on Meshes




