2014-07-19 60 views
1

最近我已經開始使用C++和OpenGL建立3D遊戲引擎,但是我想用Python編寫一個腳本來將實際場景中的一些對象導出到文件。一切都已成功,除了我有一些關於Python API如何與對象和不同類型的對象一起工作的問題?我對Blender中的Python腳本有嚴重的問題

代碼:

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識別爲變量由不同的對象使用。如果我遍歷每個對象並首先獲取對象的類型(實際上是一盞燈),但同樣的事情發生,但控制檯會顯示一條錯誤消息,顯示例如光點半徑或其他任何內容不是「攪拌器對象「。在前面的例子中,我已經解釋了Python並沒有意識到「Blender Lamp」實際上是一個「Blender Object」,但「Blender Lamp」也應該保持它們原來的屬性繼承自「Blender Object」 。因爲在Blender中,無論物體有什麼類型,它都有一個位置旋轉,比例等等。到目前爲止,正如你所知,每個燈都有位置(像物體一樣),還有光性質(淺色等)。但是如果我想爲了獲得一個攪拌燈的位置,它不起作用,因爲它表明這種燈不是一個物體,但是在攪拌器中,一盞燈也具有像普通物體那樣的位置和一切。我也沒有在Blender 2.49 python api文檔中找到對光源位置的引用。

請幫忙! 在此先感謝...

P. S.對不起,英語我來自匈牙利,沒有專業。以及我在匈牙利寫的一些變數,但我希望你能理解這個問題。 thx

回答

0

你還在使用2.49嗎?現在已經很老了,如果你沒有使用2.49,那麼2.49 API文檔不會像2.50那樣幫助從Python改變一切。如果您使用的是更新版本,那麼您應該會發現當前的blender API documentation更有幫助。

使用最新攪拌器的版本以下應該會有幫助 -

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.data.colorobj.colorobj.color是對象屬性,可用於所有對象,但燈使用obj.data.color