问题标签 [blender]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
blender - 搅拌机不使用 Python
我正在尝试使用搅拌机 2.49b 和 2.57 运行外部脚本
我尝试安装 Python 版本 2.4、2.6 和 2.7。
我在控制台窗口中收到此错误。有人知道我错过了什么吗?
回溯(最后一次调用):文件“”,第 1 行,在文件“C:\Program Files\Blender 2.49b.blender\scripts\blended_cities_24hook.py”中,第 77 行,来自随机导入 randint,random,uniform File “C:\Python24\LIB\random.py”,第 41 行,从警告导入警告作为 _warn 文件“C:\Python24\LIB\warnings.py”,第 258 行,在 simplefilter("ignore", category=OverflowWarning , append=1) NameError: name 'OverflowWarning' 未定义
计算机信息:操作系统:Win7 x64。处理器:英特尔。
python - 提取 Blender 原始坐标 (ORCO)
我已经从 Blender(2.5+)制作了一个导出器(在 Python 中)到自定义格式。困扰我的是,我下载的大多数模型都不包含 UV 层,而是使用自动生成的纹理坐标。
问题是:如何从 Python 访问 Blender 生成的坐标(ORCO)?
编辑 2:示例文件: http ://dl.dropbox.com/u/16317117/orco.blend
通过使用立方体加载默认场景并将其纹理单元类型更改为“木材”来创建。默认映射已经生成:平面。如果您渲染场景,您可以看到正确应用了木材纹理,就好像立方体具有适当的 UV 展开一样。
编辑3:答案。
我在 Yafaray blender exporter 源中找到了答案。谢谢你们!如果您看到此线程-请回复,以便我可以奖励您。
生成坐标 (ORCO) 是顶点的“标准化”局部坐标。基本上,给定对象的局部边界框:Orco(v) = 2*(v-center)/size
.
android - 3d opengl Android中的复杂对象
我的任务是在 opengl android 中制作一些复杂的 3d 对象。之前我只使用 nehe 教程处理 opengl 的原始对象。我用谷歌搜索,发现 Blender 用于制作 3d 对象,然后将其导入到 android 项目中。但我不知道怎么做?
android - 纹理/顶点的不同索引数组
我试图在 Android 中绘制一个地球仪,为此我使用 OpenGL。然而,为了更容易理解,我将从制作一个简单的 3D 立方体开始。我使用 Blender 创建我的 3D 对象(立方体),并在解包后将其导出为 .obj 文件以获取纹理坐标(vt)。问题是我得到 8 个不同的顶点和 9 个不同的纹理坐标。
V 1.000000 -1.0000 -1.000000 v
1.000000
-1.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 来 入 _ 1.000000 VT -1.000000 -1.000000 VT -1.000000 0.000000 VT 0.000000 1.000000 VT 1.000000 1.000000 VT 1.000000 VT 1.000000 0.000000 VT -1.000000 1.000000 1.000000 VT 1.000000 -1.000000 -1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000 vt
因此,我也得到了一个真正混乱的索引设置,这使得无法重新排列纹理坐标的位置以匹配顶点中的位置。
f 5/1 1/2 4/3
f 5/1 4/3 8/4
f 3/1 7/5 8/6
f 3/1 8/6 4/7
f 2/1 6/5 3/4
f 6/7 7/1 3/2
f 1/1 5/5 2/4
f 5/7 6/1 2/2
f 5/5 8/8 6/1
f 8/1 7/2 6/9
f 1/1 2/2 3/3
f 1/1 3/3 4/4
由于我现在明白了,我只能使用一个数组作为索引,因为一个顶点由顶点和纹理坐标组成。因此,我需要重新排列其中一个 v/vt 数组。但我不能,因为如果我将 vt(在位置 1)移动到位置 5(第一行面),我需要再次移动它以使其一直通过索引数组。
所以基本上我想知道这是否是程序“Blender”的问题,或者是否有我可以应用的解决方案。
python - Python Blender 数学.trunc()
我正在尝试在 Blender 2.49b Python 中使用 math.trunc
但是我收到了这个错误
我还导入了数学
它在线
我也通过 int 尝试了它,比如
这给了我一个错误
TypeError:'float' 对象不可订阅
那么我应该如何截断值:(
谢谢你
opengl-es - OBJ 格式和平面与平滑阴影
我正在使用 OpenGL ES 1.1 并致力于将 Blender 的 OBJ 导出转换为一些包含顶点数据的二进制文件。我实际上已经有了一个工作工具,但我正在努力改变一些事情并遇到了一个问题。
即使使用平滑着色,使用正确的法线(垂直于面平面)似乎也可以实现面的平坦外观。启用平滑着色和适当的法线(只需通过在 Blender 中标记为锐利的边缘并应用边缘分割修改器),我可以获得平滑部分和锐利边缘的影响。
我要去哪里带来两个问题。
从平滑着色和使用法线的角度来看,在 OBJ 文件中表示平滑或平坦着色的“s 1”或“s off”行是否完全不需要?
当在 OpenGL 中实际设置为平面着色时,法线是否完全被忽略(或者只是假设都垂直于面)?
camera - 在 Python 中使用 Blender 游戏引擎相机的输出
我在 Blender 游戏引擎中模拟一个乐高 nxt 机器人。其中一个步骤是模拟乐高 nxt 拥有的传感器。我设法模拟了碰撞和距离,但我还需要一个颜色传感器。
一种方法是使用寻找特定材料或属性但仅限于一种颜色的射线传感器。
我的想法是使用视野非常窄的相机并从那里获取颜色。如果我想模拟机器人上的相机,我也会非常有用。
有谁知道如何使用搅拌机相机的输出?
我需要一种从某个相机中抓取帧然后处理它们的方法。
c# - 通过 DynamicObject 的 TryInvokeMember 覆盖使用扩展方法
我觉得我需要提供一些关于我为什么要做我正在做的事情的背景信息,因为我想把它打开以接受建议和批评,并给可能会读到这篇文章的使用 Blender 的 XNA 程序员带来希望。考虑到这篇文章的长度,如果你不关心我的问题的细节,请随时跳到最后一段。
我正在开发一个 XNA 内容管道扩展项目,该项目读取 .blend 文件(由Blender创建)并将它们转换为可从 XNA 游戏加载的数据,以避免每次我都必须从 Blender 导出新的 .FBX 或 .OBJ 模型进行任何小的调整,以及(希望)为 Blender 的出色粒子和物理功能提供一些与 XNA 兼容的支持。
在不深入了解Blender 的内部工作原理的情况下,我想描述一下我对 .blend 文件如何工作的理解。如果您对该主题更了解,请纠正我。
Blender 将文件保存在“块”字节中。这些块中的大多数包含表示 3D 场景中的对象和设置的数据,文件中的最后一个块(称为 SDNA 块)包含可以被认为是非常简单的 C 样式结构,每个结构都有一个唯一的标识符,以及各种类型的几个领域。这些结构的字段可以是简单类型,例如int
或float
,也可以是 SDNA 块中定义的类型。
ID
例如,这是SDNA 结构的半伪代码表示:
如您所见,字段*pointer
、val
和val2
可以在运行时由简单的类型值表示void*
或int
。但是,该group
字段的类型是ListBase
,它在文件的 SDNA 块中的其他地方定义。
这就是 C# 的新动态特性发挥作用的地方:我创建了一个类(称为BlenderObject
),给定一个 SDNA 结构(它是“SDNA 类型”)和一大块字节,通过存储自身的简单类型值,或其他BlenderObject
实例的集合,每个实例代表其“字段”之一。这允许我的库的用户编写如下代码:
scene
andrenderData
都是“复杂”BlenderObject
实例(每个都有字段集合,而不是直接值),andxparts
和yparts
都是“简单”BlenderObject
实例(每个都有自己的直接、简单类型的值,而不是字段的集合)。如果其 SDNA 类型是程序集中的具体编译类型,则每个BlenderObject
行为都与您期望的完全一样,这是我使用动力学来表示 Blender 对象的目标。
为了简化使用我的库,我正在重载DynamicObject
's 方法,以使“简单”BlenderObject
实例表现为它们的直接值。例如,让foo
aBlenderObject
具有直接int
类型的值,例如 4。我希望能够使用 执行以下操作foo
:
第一行的目的是调用foo
' 内部值的 ToString 方法,而不是调用foo
自身,因此foo
'TryInvokeMember
覆盖使用反射来调用Int32.ToString()
其值 4,而不是BlenderObject.ToString()
自身。这种反射方法调用效果很好(同样的概念也适用于数组类型直接值的索引器),除非我尝试如下操作:
Bar
是在我的程序集中定义的扩展方法,因此反射foo
4 的值显然无法找到它,当然,也会引发异常。最后,我的问题是:
如何查找和/或缓存可应用于对象的扩展方法?我知道如何使用反射找到扩展方法,但是每次在动态BlenderObject
实例上调用扩展方法时这样做会非常慢。除了该问题中描述的方法之外,是否有更快的方法来查找扩展方法?如果没有,我应该如何去实习扩展方法,这样我只需要找到它们一次就可以再次快速访问它们?对不起,长寿,并提前感谢任何有用的答案/评论。
编辑:
正如@spender 回答的那样,解决我的问题的一种简单方法是使用字典(尽管我正在使用 aDictionary<Type, Dictionary<CallInfo, MethodInfo>>
来轻松使用InvokeMemberBinder
传递给的 CallInfo DynamicObject.TryInvokeMember
)。不过,我的实现给我带来了另一个问题:
如何获取调用程序集引用的程序集中定义的类型?例如,考虑以下代码: object Foo(dynamic blenderObject) { return blenderObject.x.Baz(); 如果此代码在引用我的 Blender 库的项目中,并且扩展方法Baz()
是在该项目引用的另一个程序集中定义的,但不是由我的 Blender 管道,我将如何Baz()
从我的 Blender 管道中查找?这甚至可能吗?
python - 哪个工具/程序可以根据面部关键点(眼睛之间的距离等)创建人脸的 2d/3d 模型?
我需要根据 60 个面部关键点控制现有模型或从地面创建新模型。换句话说,我有 60 个人脸关键位置(人脸点),我需要根据这些关键点绘制一张新脸。我还需要在命令行模式下进行(首选python语言)。你知道一些方法吗?
一段时间以来,我尝试使用 Blender 的 python api,但是在命令行模式下存在一些与失败的运算符有关的问题,例如 bpy.ops.translate(我想使用比例工具)。
谢谢。
iphone - 如何在 iphone 项目中使用 .blend 文件?
我不想在我的项目中使用任何 3D 引擎,例如 SIO2 等引擎。但我仍然想在我的正常项目中使用.blender 3d 文件。
谁能指导我如何进行。
谢谢