将3D光标吸附到平面不透明部分(Blender)
我有一个关于在Blender中使用Python脚本的问题,如果有人能给我一些概念上的指导,我会非常感激。
简单来说,我大约有100个平面(就是简单的平面图形),每个平面都有自己的材质,而每个材质都有自己的透明度贴图。
我需要一种方法,把每个平面的中心点(也叫枢轴点)对准它们的不透明部分。也就是说,我想通过Python语言告诉Blender:“嘿,去检查每一个平面,然后对每个平面做以下事情——把一个3D光标放到平面的不透明部分(具体放在哪里无所谓,只要是在不透明部分里面),然后把平面的中心点移动到这个3D光标的位置。”
当然,我不指望有人给我写出完整的算法,我只是想要一点帮助和正确的方向,因为我有Python的经验,但对Blender不太熟悉 :/
任何帮助都会很感激。
1 个回答
在Blender的图像类中,你可以通过image.pixels
访问像素数据,这些数据是一个浮点数组,每个像素有4个浮点数(我想是RGBA格式)。image.size[0]
表示图像的宽度(以像素为单位),image.size[1]
表示高度。
给定bpy.data.objects['Plane'].bound_box
是一个[8][3]的数组,定义了平面的外部边界,你可以根据像素位置在平面上找到一个点,以确定原点的位置。你还会发现bpy.data.objects['Plane'].matrix_world
很有用,它可以帮助你将对象坐标转换为全局坐标。
bpy.context.scene.cursor_location = Vector((x,y,z))
可以将光标移动到你想要的位置。
bpy.ops.object.origin_set(type='ORIGIN_CURSOR')
会将活动对象的原点设置为光标的位置。请注意,这个操作只对当前选中的对象有效,所以你需要在操作过程中调整你的选择。