官网的example,没有跑起来,但是有助于理解数据的变换处理。
1、引入所需要的package,同时新建一个ColoredRenderer()对象。
1 2 from opendr.renderer import ColoredRendererrn = ColoredRenderer()
2、加载几何结构,实例中使用了一个earth。加载的几何结构包括mesh的vertices和faces,以及反射率albedo。分别对应v, f, vc。
1 2 3 4 5 6 from opendr.util_tests import get_earthmeshimport chumpy as chm = get_earthmesh(trans=ch.array([0 ,0 ,4 ]), rotation=ch.zeros(3 )) v = ch.array(m.v) vc = ch.array(m.vc) 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 ProjectPointsw, 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 LambertianPointLightrn.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 pltplt.ion() plt.imshow(rn.r) plt.draw()
Reference Simple Rendering · mattloper/opendr Wiki (github.com)
三维重建(2): 渲染工具OpenDR论文和源码部分阅读-2 – guodong’s blog (52zju.cn)