Python下Open3D实现纹理贴图渲染

利用open3d的python库来实现三维模型的纹理贴图渲染。

渲染原理类似OpenGL,需要指定顶点信息,三角网格顶点的索引,以及UV贴图坐标。

需要提前安装open3d库:

pip install open3d

实现代码如下:

import os
import cv2
import numpy as np
import open3d as o3d

vert = [[0,0,0],[0,1,0],[1,1,0],[1,0,0],
        [0,0,1],[0,1,1],[1,1,1],[1,0,1]]
        
faces = [[3, 0, 1], [1, 2, 3],
         [1, 5, 6], [6, 2, 1], 
         [5, 4, 7], [7, 6, 5], 
         [4, 0, 3], [3, 7, 4], 
         [6, 7, 3], [3, 2, 6], 
         [1, 0, 4], [4, 5, 1]]

m=o3d.geometry.TriangleMesh(o3d.open3d.utility.Vector3dVector(vert),
                            o3d.open3d.utility.Vector3iVector(faces))

m.compute_vertex_normals()

text=cv2.imread('./cupe_uv.png')

DX,DY=0.5/2,0.66/2 # UV坐标

one = [[3*DX,1*DY], [3*DX,2*DY], [4*DX,2*DY], [4*DX,2*DY], [4*DX,1*DY], [3*DX,1*DY]]
two = [[2*DX,1*DY], [2*DX,2*DY], [3*DX,2*DY], [3*DX,2*DY], [3*DX,1*DY], [2*DX,1*DY]]
three=[[1*DX,1*DY], [1*DX,2*DY], [2*DX,2*DY], [2*DX,2*DY], [2*DX,1*DY], [1*DX,1*DY]]
four= [[0*DX,1*DY], [0*DX,2*DY], [1*DX,2*DY], [1*DX,2*DY], [1*DX,1*DY], [0*DX,1*DY]]
five= [[1*DX,0*DY], [1*DX,1*DY], [2*DX,1*DY], [2*DX,1*DY], [2*DX,0*DY], [1*DX,0*DY]]
six = [[1*DX,2*DY], [1*DX,3*DY], [2*DX,3*DY], [2*DX,3*DY], [2*DX,2*DY], [1*DX,2*DY]]

v_uv=np.concatenate((one,two,three,four,five,six),axis=0)
print(v_uv.shape) # (48, 2)

m.triangle_uvs = o3d.open3d.utility.Vector2dVector(v_uv)
m.triangle_material_ids = o3d.utility.IntVector([0]*len(faces))
m.textures = [o3d.geometry.Image(text)]

o3d.visualization.draw_geometries([m])

 代码中使用到的纹理贴图cupe_uv.png下载网址:https://i.stack.imgur.com/QwIKM.png

纹理贴图:

 

渲染效果是一个三维的骰子,拖动鼠标可以手动旋转:

参考:How to add texture to a mesh in python Open3d? - Stack Overflow

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值