最近我开始主要使用 C++ 和 OpenGL 构建 3D 游戏引擎,但我想用 Python 编写一个脚本来将一些对象从实际场景导出到文件中。一切都成功了,除了我有一些关于 Python API 如何处理对象和不同类型的对象的问题?
代码:
for Lampa in Lamp.Get(): # In this case we are working with lamps
Lampatipus=Lampa.getType()
if Lampa.getParent()==Targy\ # Objects have parents in blender, but it shows error that lamps doesn't have functions like getParent()
and Lampatipus=="Lamp":
self.file.write(Lampa.getName())
self.file.write("\00")
# Lampa beallitasai
Lampa_alap_tomb=array('f', [\
Lampa.LocX, # Shows error message that lamps doesnt have position x...
Lampa.LocY,
Lampa.LocZ,
Lampa.R,
Lampa.G,
Lampa.B,
Lampa.getEnergy()/10.0,
Lampa.color[0],
Lampa.color[1],
Lampa.color[2],
Lampa.color[3]\
])
Lampa_alap_tomb.tofile(self.file)
# Another case:
for Lampa in Jelenet.objects: # In this case we are working with objects
Lampatipus=Lampa.getType()
if Lampa.getParent()==Targy\ # no problem here
self.file.write(Lampa.getName())
self.file.write("\00")
# Lampa beallitasai
Lampa_alap_tomb=array('f', [\
Lampa.LocX,
Lampa.LocY,
Lampa.LocZ,
Lampa.R, # Shows error message that objects doesnt have R (red component of color of a light)
Lampa.G,
Lampa.B,
Lampa.getEnergy()/10.0,
Lampa.color[0],
Lampa.color[1],
Lampa.color[2],
Lampa.color[3]\
])
Lampa_alap_tomb.tofile(self.file)
代码结束!!
例如,如果我想遍历所有灯并将它们的一些属性写入文件中(名称、颜色、父对象等),Python 不会将灯的某些属性识别为所使用的变量由不同的对象。如果我遍历每个对象并首先获取对象的类型(实际上是一盏灯),也会发生同样的事情,但控制台会显示一条错误消息,显示例如点半径或其他任何内容都不是“的属性” blender 对象”。在前面的例子中,我已经解释过Python并没有意识到“Blender Lamp”实际上是一个“Blender Object”,但是“Blender Lamp”也应该保留从“Blender Object”继承的原始属性,正如我认为的那样。因为在 Blender 中,无论对象具有什么类型,它都有位置旋转、缩放等。到目前为止,正如您所知,每个灯都有位置(就像对象一样)以及光属性(光颜色等)但是如果我愿意要获取 Blender 灯的位置,它不起作用,因为它表明这种灯不是一个对象,但在 Blender 中,灯也有位置和一切像普通对象一样。我也没有在 Blender 2.49 python api 文档中找到对灯光位置的引用。
请帮忙! 提前致谢...
P。 S.对不起,英语我来自匈牙利,没有职业。以及我用匈牙利语写的一些变量,但我希望你理解这个问题。谢谢
最佳答案
你还在用2.49吗?它现在已经很老了,如果你不使用 2.49,那么 2.49 API 文档将不会有帮助,因为从 2.50 开始,一切都随着 python 改变了。如果您使用的是更新版本,那么您应该找到当前的 blender API documentation更有帮助。
使用最新版本的 blender ,以下内容应该会有所帮助 -
import bpy
for obj in bpy.context.scene.objects:
if obj.type == 'LAMP' and obj.parent == Targy:
print(obj.name)
print(obj.location.x)
print(obj.data.color.r)
print(obj.data.energy)
不要将 obj.color
与 obj.data.color
混淆。 obj.color
是一个对所有对象都可用的对象属性,但灯使用 obj.data.color
来表示它的光。
关于python - 我对 Blender 中的 Python 脚本有一个严重的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24841165/