示例图:

相机渲染出图后,图片上每个像素点中对应的纹理的像素值。获取这个对应关系存到数据库
基本思路是
从相机圆心发射射线接触到物体时获取接触点(三维坐标)所在三角面,通过这个三角面的三个顶点坐标及其三个纹理坐标,通过重心坐标求出接触点所对应的纹理坐标。在发射射线时,通过相机分辨率中某一点的二维坐标(即渲染出图后图片上的坐标)转三维坐标,结合相机圆心确认射线方向。至此【图片上每个像素点中对应的纹理的像素值】对应关系所需要的数据已具备,
示例代码
如上图,相机视野中存在一个半球模型(已贴图),一个模型船
import bpy
import mathutils
import sqlite3
import time
import numpy as np
from PIL import Image
# 虚拟相机名称的变量,用与获取自定义命名方式的物体。
name = 'bow'
# 导出数据库位置
dbpath = 'D:/syncdisk/blender_export/' + name + '.db'
# 渲染出图的位置
export_image_path = 'D:/syncdisk/blender_export/' + name + '.png'
# 获取当前场景中的相机对象
camera = bpy.data.objects[name + ".001"]
# 获取对象的网格数据
back_mesh = bpy.data.objects["球体.001"]
ship = bpy.data.objects["Box5885.001"]
line = bpy.data.objects["Box5885.003"]
# 链接数据库的句柄
db = sqlite3.connect(dbpath)
# cursor对象
db_cur = db.cursor()
# 获取当前渲染设置
render_settings = bpy.context.scene.render
# 获取渲染图的尺寸
render_width = render_settings.resolution_x
render_height = render_settings.resolution_y
# 获取所有材质,用于获取材质颜色
materials = bpy.data.materials
mesh = back_mesh.data
# 获取模型的世界变换矩阵
world_mat = back_mesh.matrix_world
# 获取uv层,用于遍历获取uv数据
uv_layers_data = back_mesh.data.uv_layers.active.data
# 存储要写入数据库的数据
sql_value = []
# 清空表格
def clearTable(tableName, cur):
print('开始清空表'+tableName)
sql = 'delete from ' + tableName + ' where 1 = 1'
try:
cur.execute(sql)
print('清空表' + tableName + '成功')
except Exception as e:
print(e)
print('清空表' + tableName + '失败')
def dissconnectDB(cur):
# 关闭游标
cur.close()
# 关闭连接
db.close()
print('断开数据库链接')
# 执行sql创建表
def createTable(cur):
print('开始创建表:pixelmap')
# 执行sql创建表
sql = 'create table pixelmap(id integer primary key,canvas integer not null,row0 float not null,col0 float not null,source integer not null,row1 float not null,col1 float not null,wt float not null)'
try:
cur.execute(sql)
print('创建表:pixelmap成功')
except Exception as e:
print(e)
print('创建表:pixelmap失败')
print('开始创建表:keyvalue')
sql = 'create table keyvalue(id integer primary key,key string,value string)'
try:
cur.execute(sql)
print('创建表:keyvalue成功')
except Exception as e:
print(e)
print('创建表:keyvalue失败')
Blender中获取渲染图像素对应纹理像素值

最低0.47元/天 解锁文章
4868

被折叠的 条评论
为什么被折叠?



