Seite 1 von 1

Frage zu einem Code [Python, VRED]

Verfasst: Samstag 5. Mai 2007, 19:32
von Snake
Hallo,

dies ist mein erster Post im Forum und ich bin noch ein ziemlicher Python-Neuling, also nicht boese sein wenn dass sich hier alles nach Newbie anhoert :)

Habe folgendes Problem:
Ich hab zwei einfache Wuerfel einmal einen roten und einmal einen blauen. Die sollen sich beide auf nach links, rechts, oben und unten bewegen koennen.
Das hab ich auch schon geschafft, aber mein Problem ist, dass ich die Tasten AWSD fest an den roten Wuerfel und JIKL fest an den blauen Wuerfel gebunden habe.
Ich moechte es aber so haben, dass einen Wuerfel selektiere (per Mausklick) und dann mit vordefinierten Tasten ihn bewegen kann (mit diesen Tasten sollte der andere Wuerfel auch zum bewegen gebracht werden, wenn ich ihn selektiere).

Benuetzen tu ich das Programm VRED (www.vred.org), falls es von Interesse ist.

Danke schonmal

Snake

hier noch der Code:

Code: Alles auswählen

newScene() 
red=createBox(3,3,3,1,1,1,1,0,0) #rot
blue=createBox(3,3,3,1,1,1,0,0,1) #blau

red.makeTransform()
blue.makeTransform()

step=1


#blubb ist platzhalter fuer ein knoten

def left(blubb, step):
    pos = blubb.getTranslation()
    blubb.setTranslation(pos[0]-step,pos[1],pos[2])
def right(blubb, step):
    pos = blubb.getTranslation()
    blubb.setTranslation(pos[0]+step,pos[1],pos[2])
def up(blubb, step):
    pos = blubb.getTranslation()
    blubb.setTranslation(pos[0],pos[1]+step,pos[2])
def down(blubb, step):
    pos = blubb.getTranslation()
    blubb.setTranslation(pos[0],pos[1]-step,pos[2])
def front(blubb, step):
    pos=blubb.getTranslation()
    blubb.setTranslation(pos[0],pos[1],pos[2]+step)

# rote Box: A-W-S-D 
A=vrKey(Key_A)
A.connect(left,red,step)
W=vrKey(Key_W)
W.connect(up,red,step)
S=vrKey(Key_S)
S.connect(down,red,step)
D=vrKey(Key_D)
D.connect(right,red,step)


# blaue Box: J-I-K-L
J=vrKey(Key_J)
J.connect(left,blue,step)
I=vrKey(Key_I)
I.connect(up,blue,step)
K=vrKey(Key_K)
K.connect(down,blue,step)
L=vrKey(Key_L)
L.connect(right,blue,step)
Edit (Leonidas): Highlighting eingeschaltet.

Verfasst: Samstag 5. Mai 2007, 22:01
von joost
VRED sieht ja toll aus - deshalb antworte ich hier. Keine Ahnung davon. Aber was Du willst, hinge davon ab, ob du J.connect(...) mit VRED später modifizieren kannst. In gtk z.B. gibt widget.connect(..) ein Handle zurück, mit dem man blockieren, entblockieren, den Event-Handler aber auch ganz abschalten kann. Und man kann ein Widget für gedes zu spezifizierende Event auch an mehrere Handler binden ( es kann auch mehr als einer pro Event verarbeitet werden).

Ob hier jemand weiß, was da in VRED geht, weiß ich nicht. Das ist eigentlich keine 3D-Rendering-Sache.

Verfasst: Sonntag 6. Mai 2007, 10:16
von Snake
Danke fuer die Antwort, aber wenn ich ehrlich bin, hab ich davon nur sehr wenig verstanden.
Was meinst du mit 'gedes' und 'handle'?

Verfasst: Sonntag 6. Mai 2007, 10:37
von lunar
Snake hat geschrieben:Danke fuer die Antwort, aber wenn ich ehrlich bin, hab ich davon nur sehr wenig verstanden.
Was meinst du mit 'gedes' und 'handle'?
"gedes" würde ich jetzt mal als Tippfehler ansehen (was den Rest aber auch nicht verständlicher macht).

Verfasst: Sonntag 6. Mai 2007, 12:31
von Bernhard
Hi!

Also wenn ich auf www.vred.org auf "Documentation" klicke, kommt da leider gar nichts. Woher hast Du denn Dein bisheriges Wissen über die Programmierung von VRED?
Irgendwo da muss ja auch stehen, wie Du erfährst, wann einer Deiner Würfel angeklickt wurde, und dann kannst Du den Teil mit

x=vrKey(...)
x.connect( Richtung, Würfel, 1)

doch für den jeweils angeklickten Würfel neu durchführen. Oder übersehe ich Dein Problem?

Ciao,
Bernhard

Verfasst: Sonntag 6. Mai 2007, 13:13
von Snake
Bernhard hat geschrieben:Hi!

Also wenn ich auf www.vred.org auf "Documentation" klicke, kommt da leider gar nichts. Woher hast Du denn Dein bisheriges Wissen über die Programmierung von VRED?
Irgendwo da muss ja auch stehen, wie Du erfährst, wann einer Deiner Würfel angeklickt wurde, und dann kannst Du den Teil mit

x=vrKey(...)
x.connect( Richtung, Würfel, 1)

doch für den jeweils angeklickten Würfel neu durchführen. Oder übersehe ich Dein Problem?

Ciao,
Bernhard
Hab mein bisheriges Wissen nur aus den Beispielen die da mitgeliefert wurden.
Dazu muss man das ganze Teil aber erst installieren. Da sind aber einige nette Beispiele dabei.

Das problem ist, dass ich bisher die Wuerfel immer direkt anspreche (im Code verankert) und nicht wenn ich sie per mouse-klick anwaehle :(

Verfasst: Sonntag 6. Mai 2007, 17:19
von Bernhard
Ok, damit hast Du primär nicht ein Python sondern ein VRED-Problem. Ich schlage vor, dass Du das im Thread-Titel klar machst. Sollte hier jemand sein, der sich damit auskennt, findet der diesen Thread dann leichter und liest ihn hoffentlich.
Sorry,
Bernhard

Verfasst: Sonntag 6. Mai 2007, 21:29
von Snake
Bernhard hat geschrieben:Ok, damit hast Du primär nicht ein Python sondern ein VRED-Problem. Ich schlage vor, dass Du das im Thread-Titel klar machst. Sollte hier jemand sein, der sich damit auskennt, findet der diesen Thread dann leichter und liest ihn hoffentlich.
Sorry,
Bernhard
Okay, werd ich machen. Hoffe dass mir dann jemand helfen kann.

Verfasst: Montag 7. Mai 2007, 01:52
von joost
Ja, sorry, gedes hatte 'jedes' heißen sollen.

handles sind hier, was sie wohl überall sind: Kleine ints als eine Art Nummern, wie bei file-handles oder handles im Windows-API.
Ich moechte es aber so haben, dass einen Wuerfel selektiere (per Mausklick) und dann mit vordefinierten Tasten ihn bewegen kann (mit diesen Tasten sollte der andere Wuerfel auch zum bewegen gebracht werden, wenn ich ihn selektiere).
Wenn Du dies haben, willst musst Du die Wirkung Deiner ...connect(..)-statements später jederzeit verändern können - auf die Selektionen mit der Maus hin. Ich könnte mir sehr primitive Systeme vorstellen, die so etwas gar nicht unterstützen, wo also nur ein (erstes) connect pro event möglich ist.

Mit den handles in gtk könnte man die callbacks zu den events hin- und herschalten, das dürfte wesentlich resourcenschonender sein, als sie - wenn das möglich ist - jedesmal wieder neu zu überschreiben. Wie es Bernhard hier vorschlägt:
und dann kannst Du den Teil mit

x=vrKey(...)
x.connect( Richtung, Würfel, 1)

doch für den jeweils angeklickten Würfel neu durchführen. Oder übersehe ich Dein Problem?
- das ist ja in VRED wahrscheinlich möglich.

Verfasst: Montag 14. Mai 2007, 21:08
von Snake
joost hat geschrieben:
handles sind hier, was sie wohl überall sind: Kleine ints als eine Art Nummern, wie bei file-handles oder handles im Windows-API.
koenntest du das etwas genauer erklaeren?. waer super :)

Verfasst: Dienstag 15. Mai 2007, 12:37
von thelittlebug
Eventuell hilft es eine andere 3D Engine zu nehmen die besser Dokumentiert ist als die kostenpflichtige VRED Engine.

Freie Alternativen gibt es ja genug.

http://www.vrplumber.com/py3d.py beinhaltet eine Liste mit 3D Engines die auch mit Python ansteuerbar sind. Es kommt immer auf den Anwendungsfall an welche Engine gut ist.

Wenn es ein Spiel werden soll ist sicherlich Panda3D einen Blick wert. Wenn es "harte" Simulationen sein sollen warscheinlich eher Geist3D.

Auch ist man nicht unbedingt an eine fertige Engine gebunden und könnte mittels OpenGL einiges bewerkstelligen.

Also wenn du nicht unbedingt an VRED gebunden bist würde ich wechseln, ohne Dokumentation arbeitet es sich meist sehr schlecht.

lgherby

edit: unnötigen Satz entfernt