将 3D 光标捕捉到平面的不透明部分(搅拌机)
Posted
技术标签:
【中文标题】将 3D 光标捕捉到平面的不透明部分(搅拌机)【英文标题】:Snap 3D cursor to an opaque part of plane (blender) 【发布时间】:2014-10-31 22:10:30 【问题描述】:我有一个关于 Blender 中的 python 脚本的问题,如果有人能给我至少一些概念上的指导,我将非常感激:
基本上我有大约 100 个平面(简单的原始平面),每个平面都有自己的材质,每种材质都应用了自己的透明度贴图。
我需要一种方法将每个平面的各自枢轴捕捉到它们的不透明部分。 IE。如果有办法通过 python 语言告诉搅拌机以下内容 - “嘿,遍历这些平面中的每一个,并为每个平面执行以下操作 - 将 3D 光标捕捉到平面的不透明部分(没关系确切的位置,只要它在平面的不透明部分内),然后将平面的枢轴点捕捉到 3D 光标”。
当然,我不希望任何人为此编写完整的算法,我只是寻求一点帮助并朝着正确的方向前进,因为我确实有使用 python 的经验,但没有使用搅拌机:/
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:您可以在 blender's python api here 上找到文档。
在搅拌机的image class 中,您可以访问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')
将活动对象的原点设置为光标。请注意,这适用于活动对象,因此您需要随时更改您的选择。
【讨论】:
首先,非常感谢您对sambler的帮助,对于延迟回复我深表歉意!我发现你在这里写的东西非常有帮助,而且我觉得我肯定在正确的道路上多亏了你。但是现在的主要问题是我不知道搅拌机如何将像素视为 3D 空间中的单位,以及如何将 uv 空间中的像素位置转换为它在 3D 空间中的确切位置:/... 玩了一会儿,我成功了! :) 非常感谢你!你给我的正是我需要的!我只需要进一步研究一些基本的 3D 数学知识,并在打印方面进行大量实验 :) Blender 似乎已经很容易了!再次非常感谢你! :)以上是关于将 3D 光标捕捉到平面的不透明部分(搅拌机)的主要内容,如果未能解决你的问题,请参考以下文章
ImageView 上的透明背景 EditText 不会显示光标
UNITY3D切换到GUI场景鼠标就消失了用Cursor.visible=(true);光标就在中间不动了,怎么让光标移动?