ich lasse den einen stein jetzt per tastendruck rotieren. aber wie kriege ich es hin, das:
1.) ich die taste nicht immer festhalten muss, damit die bewegung vollzogen wird, sondern einmal drücken genügt?
2.) der stein rotiert zwar, aber immer um seine "mittelpunktsachse". ich will aber das er um die "fallachse" (also um den linken bzw. rechten unteren rand) rotiert. wie mache ich das denn? (also quasi um seinen schwerpunkt)
3.) ich quasi um wirkliche winkel rotieren kann? im moment lasse ich ihn per rotatef(wert,0,0) rotieren und inkrementiere den wert immer um 0.05. das ist ja nicht wirklich eine winkelangabe, da bei 90 er ja nicht um 90° rotiert. genau das meinte ich auch mit den WK's. wie geht denn das wenn ich ihn, wenn ich ne 90 eingebe er dann auch um 90° rotiert wird?
Registriert: Fr Mai 14, 2004 18:56 Beiträge: 804 Wohnort: GER/OBB/TÖL-WOR/Greiling
1. machs mit newton. dann brauchst du gar nicht auf die taste drücken
2. machs mit newton. dann rotiert er ncht nur um eine beliebige fallachse, sondern physikalisch korrekt.
3.rotatef(winkel,x,y,z) rotiert bei x um x*winkel grad,bei y um y*winkel grad und bei z um z*winkel grad. glaub ich zumindest.
ein kleines beispielprogramm(ich hoffe sascha willems verzeiht mir dass ich auf basis seines source code werbung für newton mache):
war übrigens nur ne viertelstunde arbeit.
nimm einen der dominos einfach mit dem mauszeiger und mach damit was du willst .
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
die engine is zwar gut, aber ich will es doch erstmal so alleine probieren um die basis mal kennenzulernen.
also, habe jetzt mal die koordinatenachsen eingezeichnet. das ganze sieht so aus:
was ich jetzt nicht verstehe: die rote linie ist die x-achse und ich lasse beide steine per tastendruck um die x-achse rotieren. das der stein, der im koordinatenzentrum liegt im ursprung (auf seiner mittelachse) rotiert, ist mir ja gerade noch geläufig (was ich jedoch auch schon ein wenig unlogisch finde...UM den vektor ist für mich eigentlich was anderes - aber naja..), aber wieso tut der andere stein das ebenfalls? das ist doch vollkommen unlogisch, da der dum UM den vektor der zwischen (0,0,0) und (1,0,0) liegt rotieren soll - wieso dreht der sich ebenfalls in seinem ursprung? kann mir mal bitte jemand erklären, wie ich die steine um ihren rechten bzw. linken unteren rand rotieren lassen kann? ich steh da voll auf dem schlauch...
Wenn du um einen anderen Punkt, als den gerade aktuellen Ursprung rotieren willst, dann den Ursprung vor der Rotation mit glTranslate verschieben und nacher wieder zurück. Eventuell die erste und dritte Zeile vertauschen. Mal ausprobieren.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Du möchtest ja auch alle objekte einzeln gedreht haben. Da ist das nur logisch, dass dusie auch alle einzeln drehst.
Is aber faktisch kein großer Aufwand. Wenn man ne Klasse TDomino macht, kann man der ja ne procedure renderliegend; und eine procedure FallAnimation; etc geben.
Wenn du z.B. das Umkippen eines Steins realisieren willst kannste das folgendermaßen machen.
Du gibst deiner Klasse ne Eigenschaft Kippwinkel und erhöhst diesen bei jedem rendervorgang oder nach ner bestimmten Zeit. Dann wird bei jedem Durchlauf der Stein bisl weiter umgekippt gezeichnet. Du kannst in einem speziellen Unterprogramm die Animation sogar noch verfeinern, von wegen bisl zurückprallen und so. (Is dann wohl net physikalisch korrekt aber das scheinst du ja auch nicht zu wollen.)
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Fr Mai 14, 2004 18:56 Beiträge: 804 Wohnort: GER/OBB/TÖL-WOR/Greiling
ich stör noch mal. ich hab mich vielleicht falsch ausgedrückt. ich meine nicht einzeln drehen, sondern einzeln rendern.
wär es nicht performanter, für jeden domino über trigonometrische funktionen die vertexdaten zu kriegen, und die dann in einem schwung zu rendern, oder sogar die vertices vorzudefinieren und je nach "fallstadium" zu rendern? denn wenn jedesmal
Code:
verschieben;
drehen;
rendern;(==glbegin-...-glend)
zurückschieben;
zurückdrehen;
ausgeführt wird, und das für 100 dominosteine, ist das doch ziemlich rechenleistungfressend, oder??
wär es nicht performanter, für jeden domino über trigonometrische funktionen die vertexdaten zu kriegen, und die dann in einem schwung zu rendern, oder sogar die vertices vorzudefinieren und je nach "fallstadium" zu rendern?
Trigonometrische Funktionen? Ich denke nicht, dass es sonderlich schnell wäre, über Sinus die Vertexdaten zu bekommen. Und 100 Dominosteine sollten eigentlich kein Problem für heutige Grafikkarten darstellen. 12 Dreiecke pro Domino * 100 sind gerade mal 1200 Dreiecke.
Nur das Rotieren und Verschieben könnte negativ auffallen. Aber dank Hardware T&L dürfte sich der Performanceeinbruch bei 100 Dominosteinen in Grenzen halten.
Hab's gerade auprobiert. Man merkt nichts von Performanceeinbrüchen.
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
aber ich verstehe immer noch nicht ganz wie mir das helfen soll...wäre jemand so freundlich mir aus meinem codepost mal ein beispiel zusammen zu basteln? ich verstehe nicht ganz was ihr meint
bzw: das klappt auch alles so irgendwie ned....
aktueller code sieht so aus:
Code:
procedure glDraw;
begin
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glloadidentity;
gltranslatef(posvect[0],posvect[1],viewwidth);
glRotatef(RotateX, 1, 0, 0);
glRotatef(RotateY, 0, 1, 0);
glRotatef(RotateZ, 0, 0, 1);
glcoordinate;
glscalef(0.3,0.3,0.3);
gltranslatef(0,2,0);
glpushmatrix();
glRotatef(winkel, 1, 0, 0); <------------ hier wird auf tastendruck gedreht
Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.