Frage zu einem Code [Python, VRED]

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Snake
User
Beiträge: 5
Registriert: Samstag 5. Mai 2007, 19:11

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.
Zuletzt geändert von Snake am Sonntag 6. Mai 2007, 21:29, insgesamt 1-mal geändert.
joost
gelöscht
Beiträge: 134
Registriert: Sonntag 29. April 2007, 13:28

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.
[color=green][size=75]Never use idle.pyw, if you need sys.stdin[/size][/color]
Snake
User
Beiträge: 5
Registriert: Samstag 5. Mai 2007, 19:11

Danke fuer die Antwort, aber wenn ich ehrlich bin, hab ich davon nur sehr wenig verstanden.
Was meinst du mit 'gedes' und 'handle'?
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).
Bernhard
User
Beiträge: 136
Registriert: Sonntag 15. Januar 2006, 20:31
Wohnort: Greifswald
Kontaktdaten:

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
Snake
User
Beiträge: 5
Registriert: Samstag 5. Mai 2007, 19:11

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 :(
Bernhard
User
Beiträge: 136
Registriert: Sonntag 15. Januar 2006, 20:31
Wohnort: Greifswald
Kontaktdaten:

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
Snake
User
Beiträge: 5
Registriert: Samstag 5. Mai 2007, 19:11

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.
joost
gelöscht
Beiträge: 134
Registriert: Sonntag 29. April 2007, 13:28

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.
[color=green][size=75]Never use idle.pyw, if you need sys.stdin[/size][/color]
Snake
User
Beiträge: 5
Registriert: Samstag 5. Mai 2007, 19:11

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 :)
thelittlebug
User
Beiträge: 188
Registriert: Donnerstag 20. Juli 2006, 20:46
Wohnort: Wien
Kontaktdaten:

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
Antworten