0%

OpenDR Renderer Example

官网的example,没有跑起来,但是有助于理解数据的变换处理。

1、引入所需要的package,同时新建一个ColoredRenderer()对象。

1
2
from opendr.renderer import ColoredRenderer
rn = ColoredRenderer()

2、加载几何结构,实例中使用了一个earth。加载的几何结构包括mesh的vertices和faces,以及反射率albedo。分别对应v, f, vc。

1
2
3
4
5
6
from opendr.util_tests import get_earthmesh
import chumpy as ch
m = get_earthmesh(trans=ch.array([0,0,4]), rotation=ch.zeros(3))
v = ch.array(m.v)
vc = ch.array(m.vc) # albedo
f = m.f

3、设置相机参数,同时把renderer的相关参数初始化。

相机参数camera包括内参数和外参数,外参数包括:v-刚体坐标、rt-旋转矩阵1*3、t-平移向量1*3,内参数包括:f-焦距1*2,c-中点坐标1*2,k-畸变参数1*5。

1
2
3
4
5
6
7
8
from opendr.camera import ProjectPoints
w, h = (320, 240) # 渲染后的图片大小
rn.camera = ProjectPoints(v=v, rt=ch.zeros(3), t=ch.zeros(3),
f=ch.array([w,w])/2.,c=ch.array([w,h])/2., k=ch.zeros(5))
rn.frustum = {'near': 1., 'far': 10., 'width': w, 'height': h}
rn.v = v
rn.f = f
rn.bgcolor = ch.zeros(3) # 背景色

4、建立一个V*3的数组设置每个顶点的颜色,包括albedo、灯光的位置和颜色。

1
2
3
4
5
6
7
8
from opendr.lighting import LambertianPointLight
rn.vc = LambertianPointLight(
f=f,
v=v,
num_verts=len(v),
light_pos=ch.array([-1000,-1000,-1000]),
vc=vc,
light_color=ch.array([1., 1., 1.]))

5、结果保存在rn.r中,绘制结果

1
2
3
4
import matplotlib.pyplot as plt
plt.ion()
plt.imshow(rn.r)
plt.draw()

Reference

Simple Rendering · mattloper/opendr Wiki (github.com)

三维重建(2): 渲染工具OpenDR论文和源码部分阅读-2 – guodong’s blog (52zju.cn)