Hi,
Ich habe in einem Blender - Forum mal nachgefragt, ob man ein LOD (Level of detail ) auch mit C++ für Blender programmieren kann.
Ja, man kann, kam die Antwort und dann auch noch eine ausführliche Beschreibung, mit der ich auch etwas anfagen kann.
Hier ist mal der Beitrag:
Das LOD funktioniert Folgendermaßen:
Jedes Objekt, das von LOD
beeinflusst werden soll, hat eine Property, die den Typ (Da manche
Objekte anders beandelt werden sollen, ein Grasbüschel braucht z.B.
nicht mehrere LOD Stufen, ein Baum schon eher) enthält. Bei Spielstart
werden nun alle Objekte der Szene duchgegangen, und die Erforderlichen
Daten (Also Position,Rotation,Skallierung,Name, Sonstiges) in Listen
(für jeden Typ eine) gesammtelt. Dort kommt nun die LOD dll ins Spiel.
Diese verwaltet diese Daten als Punkte in einem KD-Baum (Da gibt es ja
schon implementationen für C/C++). Die .dll wird mit ctypes eingebunden,
wie das geht kannst du in der Doku nachlesen.
Während des Spiels
wird nun aller paar Logic tics das LOD-Script aufgerufen. Dort wird
zuerst eine Funktion aus der DLL aufgerufen, die alle Punkte in einem
best. Radius vom Spieler entfernt sucht, und mit ihren Daten in einem
Array ablegt. Diese vorgehensweise hat eingendlich nur den Grund, dass
man nicht so einfach Arrays zurückgeben kann, und ich nicht viel
Erfahrung in C++ habe.
Jedenfalls wird dann vom Script solange
eine Funktion, die immer den nächsten datensatz des ergebnisarrays
zurückgibt, aufgerufen, bis keine weiteren Ergebnisse vorhanden sind.
(Also z.B. "0" zurückgegeben wird) Diese funktion gibt es jede mögliche
Operation eines Typs und führen diese aus. (Also bei Gras z.B.
"getNextGrassObjectToAdd()" und "getNextGrassObjectToDelete()")
Die Daten werden also komplett in der DLL verwaltet, und das Script ist sozusagen die "Ausgabe".
Beitrag von "Rolli" :
http://www.blendpolis.de/viewtopic.php?f=15&t=38912&start=20
Nun ja, mein Problem ist, dass ich keinerlei Ansatz habe, wie ich diese Sachen programmieren soll!
Ich habe mich bisher nur sehr wenig mit .dll Dateien auseinander gesetzt!
Ich würde mich über jegliche Anregungen und Tipps freuen!
Gruß
Lukas