58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
# ==============================================================================================================
|
|
# The following snippet demonstrates how to use the camera for generating a view-projection matrix
|
|
# as used in opengl shaders.
|
|
# ==============================================================================================================
|
|
|
|
import torch
|
|
import numpy as np
|
|
from kaolin.render.camera import Camera
|
|
|
|
# !!! This example is not runnable -- it is minimal to contain integration between the opengl shader and !!!
|
|
# !!! the camera matrix !!!
|
|
try:
|
|
from glumpy import gloo
|
|
except:
|
|
class DummyGloo(object):
|
|
def Program(self, vertex, fragment):
|
|
# see: https://glumpy.readthedocs.io/en/latest/api/gloo-shader.html#glumpy.gloo.Program
|
|
return dict([])
|
|
gloo = DummyGloo()
|
|
|
|
|
|
device = 'cuda'
|
|
|
|
camera = Camera.from_args(
|
|
eye=torch.tensor([4.0, 4.0, 4.0]),
|
|
at=torch.tensor([0.0, 0.0, 0.0]),
|
|
up=torch.tensor([0.0, 1.0, 0.0]),
|
|
fov=30 * np.pi / 180, # In radians
|
|
x0=0.0, y0=0.0,
|
|
width=800, height=800,
|
|
near=1e-2, far=1e2,
|
|
dtype=torch.float64,
|
|
device=device
|
|
)
|
|
|
|
|
|
vertex = """
|
|
uniform mat4 u_viewprojection;
|
|
attribute vec3 position;
|
|
attribute vec4 color;
|
|
varying vec4 v_color;
|
|
void main()
|
|
{
|
|
v_color = color;
|
|
gl_Position = u_viewprojection * vec4(position, 1.0f);
|
|
} """
|
|
|
|
fragment = """
|
|
varying vec4 v_color;
|
|
void main()
|
|
{
|
|
gl_FragColor = v_color;
|
|
} """
|
|
|
|
# Compile GL program
|
|
gl_program = gloo.Program(vertex, fragment)
|
|
gl_program["u_viewprojection"] = camera.view_projection_matrix()[0].cpu().numpy().T
|