- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个自定义导出脚本来解析 blender 文件中的所有对象,按名称过滤它们,然后检查以确保它们满足某些特定条件。
我使用的是 Blender 2.68a。我创建了一个混合器文件,其中包含一些基本的 2d 和 3d 网格,以及一些不符合我的测试标准的网格。我正在 Blender 的内部 Python 控制台中工作。这是使用 Blender Python API 的唯一方法,因为它们的 Python 环境是定制的。
我已经排序了如何使用 for 循环和 D.objects 迭代器迭代对象,然后使用正则表达式检查名称匹配,然后使用以下方法从对象获取网格:
mesh = obj.to_mesh(C.scene, True, 'RENDER') #where obj is an bpy.data.object[index] in the scene
mesh.update(True, True)
mesh.polygons[index].<long list of possible functions>
让我访问一个多边形数组,以了解是否存在一组具有形成多边形的边的顶点,以及它们的键值是什么。
我无法解决的是如何从 python 控制台确定多边形是面还是只是多边形。是否有内置函数,或者我可以执行哪些测试来以编程方式确定这一点?例如,我可以有一个网格 4 个顶点,4 个边没有面,我不想导出它,但如果我要编辑相同的 4 个顶点/边并在其上放置一个面,那么它成为理想的导出产品。
任何人都可以解释 bpy.data.object 数据结构或解释“面孔”的存储位置吗?看起来好像它是 npoly 本身的一个属性,但 API 并没有让它变得显而易见。任何澄清这一点的帮助将不胜感激。干杯。
最佳答案
所以,我在 Blender.org 论坛上问了这个问题,http://www.blender.org/forum/viewtopic.php?t=28286&postdays=0&postorder=asc&start=0在过去的几天里,每次我在自己的努力中陷入困境时,一个非常乐于助人的人都会帮助我。
简短的答案列表是:
1) 所有多边形都是面。如果它没有存储为多边形,那么它就不是面。
2)在对象上使用 to_mesh() 函数会返回该函数的副本,因此对副本所做的任何选择都不会反射(reflect)在上下文中,因此我使用的方法是有缺陷的。访问事件对象的唯一方法是使用:
bpy.data.objects[<index or object name>].data.vertices[<index>].co[<0,1,2> which correspond to x,y,z respectively]
bpy.data.objects[<index or object name>].data.polygons[<index>].edge_keys
第一个使您可以访问对象中所有顶点的有序索引(假设其类型为“MESH”)及其坐标。
第二个使您可以访问代表边的有序对的二维数组。它在元组中包含的数字对应于第一个命令中顶点列表中的索引值,因此您可以获得边之间的坐标。还可以创建一个新的 BMesh 对象,并将您感兴趣的对象复制到 BMesh 中。这为您提供了更多无法在事件对象上访问的功能。答案 3 中的代码显示了一个示例。
3)请参阅下文,了解有关检查网格中的面的问题的答案。
事实证明,确定一个对象是否有面且所有边都是面的一部分的一种方法是使用由有用的用户 CoDEmanX 在上述线程上编写的以下代码片段。
import bpy, bmesh
for ob in bpy.context.scene.objects:
if ob.type != 'MESH':
continue
bm = bmesh.new()
bm.from_object(ob, bpy.context.scene)
if len(bm.faces) > 0 and 0 not in (len(e.link_faces) for e in bm.edges):
print(ob.name, "is valid")
else:
print(ob.name, "has errors")
我对此做了一些更改,因为我不希望它循环遍历所有对象,而是将其作为一个函数,如果传入的对象有效则返回 true,否则返回 false。这让我可以序列化我的调用,以便我的插件仅尝试验证名称与正则表达式匹配的对象。
def validate(obj):
import bpy, bmesh
if obj.type == 'MESH':
bm = bmesh.new()
bm.from_object(obj, bpy.context.scene)
if len(bm.faces) > 0 and 0 not in (len(e.link_faces) for e in bm.edges):
return True
return False
关于python - 使用 Blender Python API 2.6 选择性导出场景对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19101662/
只是想知道如何在 Blender 中反转平滑阴影。 当网格被平滑着色时,由于硬件开销,编辑速度要慢得多。 撤消平滑着色的设置/选项组合是什么,以便我可以回到硬/“锯齿”多边形模型以进行更快的编辑? 最
我正在尝试计算各种游戏 Assets 的顶点法线。我计算的法线用于“膨胀”模型(在真实模型后面绘制产生粗轮廓)。 我目前计算每张脸的法线并平均所有脸(堆栈溢出的其他几个问题建议这种方法)。但是,这不适
当我打开 Blender 2.64 时,它会自动显示开始/启动屏幕(我的意思是页面中间的小框,您可以在其中打开最近的 .blend 文件)。我想禁用它,但不知道如何禁用。有人知道吗? 你可能想知道:你
我们正在使用 Blender 打开一个 .blend 模型,通过 python 控制台应用一些 python 代码并创建一个 .dae 文件。 现在我们需要在 linux 服务器上实现这个功能,以便根
在 blender 中绘制纹理时,我想将现有图像添加到纹理图像中。但是blender好像没有提供这样的功能。 我尝试在 photoshop 中进行外部编辑,但 uv 展开的顶点丢失了,因此没有可用的引
我正在使用 Blender 渲染模型。该模型由其位置发生变化的相机捕获。然后我将图像写入文件。如何找到图像中的边界框,以便该框可用于对训练对象检测模型有用的注释? 最佳答案 blender 中的每个对
我是 Blender 动画的新手,我有一个简单的 3d 模型,它具有要制作动画的骨骼并按预期进行动画处理,现在我想做的是重置 blender 时间轴中的帧,例如,我的动画循环介于250 到 300 帧
我创建了一个网格,我在 GLSL 中应用了具有附加效果的不同 Material :有没有办法导出这些程序? 我正在使用 blender 2.61 最佳答案 有一个用于 blender 的通用 GLSL
我在 Blender 中制作了一个立方体。使用 Python,我确实进入了编辑模式并选择了一个顶点: import bpy bpy.ops.mesh.primitive_cube_add() bpy.
我尝试在谷歌中找到一个Python脚本,它将在游戏开始时(或每次玩家前进到一个新场景时)生成一个随机地形,但我找到的所有工具都是用于创建地形来渲染它,而不是对于游戏模式。 知道如何/在哪里找到一个吗?
我对 blender 很陌生,我正在用它做一些实验。 我一直在寻找一种方法,可以让对象在特定关键帧处从视线中消失,而无需将其移出相机 View 。例如。在第 1 帧,立方体在那里,在 (0, 0, 0
我在这里几乎捕获了救命稻草,因为我不知道我在问什么,但这就是问题。 出于纯粹的兴趣,我一直在研究 3D 建模,并偶然发现了骨骼的概念。现在,即使在维基上查找后,我也不太确定骨头是什么,但它们似乎是现实
我有一个 blender 插件,我想将其与 blender 分离并独立运行。唯一的依赖项是 mathutils 模块。有没有办法在独立项目中使用 Blender3d 的 mathutils 模块。 最
我最近开始使用 Blender 来创建我自己的游戏模型等。我已经创建了一个模型,对其进行了装配,分别制作了衣服,现在我想将这些衣服添加到我的模型中,以便它可以随着装配一起移动而不会穿透皮肤。 所以有很
我发现自由风格的 SVG 导出器可以从 blender 导出 SVG 图像,但这会给我 3D SVG 图像。 我想导出带有相机顶 View 的 2D View 图像,有人知道我们如何在 blender
我正在尝试编写一个非常基本的导出到 blender (从原始形状)脚本。我必须以不同的角度和位置绘制圆柱体。我有偏移位置和尺寸的信息。 import bpy import bgl from mathu
我想可视化一些科学数据,目前只是一些具有不同颜色和大小的球体的动画。 我已经在 Mathematica 中创建了一个脚本,它为 POV-Ray 创建了输入。 我的问题是,我对 POV-Ray 的结果质
我正试图找到一个在子进程中添加病毒的方法。Popen 使用打开它的脚本打开 blender ,将 bpy 代码写入 blender 进程。如果这不可能,是否有办法让 blender python 接收
我正在完成本教程: https://docs.blender.org/manual/en/latest/advanced/scripting/addon_tutorial.html 我从教程中复制了下
如何在 blender 中制作一个简单的输入对话框(如图所示)并处理通过 python 输入的文本。我找不到任何关于此的好的教程。 最佳答案 对于对话框,来自 how to show a messag
我是一名优秀的程序员,十分优秀!