python - 我对 Blender 中的 Python 脚本有一个严重的问题

标签 python class scripting blender

最近我开始主要使用 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.colorobj.data.color 混淆。 obj.color 是一个对所有对象都可用的对象属性,但灯使用 obj.data.color 来表示它的光。

关于python - 我对 Blender 中的 Python 脚本有一个严重的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24841165/

相关文章:

python - 将字符串转换成

C++ - 派生类 "inherit"的安全/标准方法是来自基类的重载赋值运算符

PHP - 私有(private)类变量给出错误 : undefined variable

linux - 遍历目录中的文件;拉出文件名以替换现有文件中的字符串

python - 根据字典中的值对字符串列表进行排序

python - 按另一个数据框中的日期过滤数据框

class - 我如何在 Scala 中引用未实例化的类?

linux - 遍历文件列表并替换字符串

javascript - javascript 代码应该始终加载在 html 文档的头部吗?

如果 TCPServer 在另一个线程中运行,Python 2 不处理信号