Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jul 13, 2025 20:45

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 33 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 18, 2005 20:10 
Offline
DGL Member

Registriert: Fr Feb 18, 2005 13:35
Beiträge: 11
jo, da wäre z.b was:

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?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 18, 2005 20:44 
Offline
DGL Member
Benutzeravatar

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.

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 18, 2005 21:29 
Offline
DGL Member

Registriert: Fr Feb 18, 2005 13:35
Beiträge: 11
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:

Bild

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...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 18, 2005 21:50 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
dann kann ich dir nicht mehr weiterhelfen. tut mir leid.

ich bin vom template gleich auf newton aufgesprungen...

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 18, 2005 21:59 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
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.

glTranslatef(x,y,z);
glRotatef(...);
glTranslatef(-x,-y,-z)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 18, 2005 22:06 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
wenn man das für einzelne tris machen will, muss man dann folglcih

Code:
  1.  
  2.  
  3. gltranslatef(xx,yy,zz) //ursprüngliche verschiebung der szene
  4.  
  5. gltranslatef(x,y,z)   // drehzentrum finden
  6. glrotatef(r,rx,ry,rz) //drehen
  7.  
  8. glbegin(...)               //rendern
  9. (...)
  10. glend;
  11.  
  12. gltranslatef(-x,-y,-z //zurückschieben
  13.  
  14. glbegin(...)  //rest rendern
  15. ....
  16.  


wenn man das für jeden stein enzeln machen muss, dann ist das doch nicht elegant, oder???

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 18, 2005 22:11 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Naja eigentlich ist es schöner mit glPushMatrix die aktuelle Matrix zu sichern und dann wieder herzustellen. Da habe ich wohl nicht nachgedacht.

glPushMatrix;
// lokales Koordinatensystem setzen
glTranslatef
glRotatef
glMultMatrix
...
Zeichnen

glPopMatrix;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 18, 2005 22:15 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
:arrow: :idea: :idea: :wink:

ach so geht das....

EDIT: aber da muss man das ja immer noch für jedes objekt einzeln machen. :?:

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 19, 2005 00:04 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 19, 2005 16:44 
Offline
DGL Member
Benutzeravatar

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:
  1.  
  2.  
  3. verschieben;
  4. drehen;
  5. rendern;(==glbegin-...-glend)
  6.  
  7. zurückschieben;
  8. zurückdrehen;
  9.  
  10.  
  11.  


ausgeführt wird, und das für 100 dominosteine, ist das doch ziemlich rechenleistungfressend, oder??

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 19, 2005 18:32 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
luketheduke hat geschrieben:
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'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 19, 2005 19:08 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
und ich hatte immer im hinterkopf, dass man sowenig glbegin...glend wie möglich im renderlop haben sollte.... war dann wohl falsch. :D

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 19, 2005 19:27 
Offline
DGL Member

Registriert: Fr Feb 18, 2005 13:35
Beiträge: 11
LarsMiddendorf hat geschrieben:

glPushMatrix;
// lokales Koordinatensystem setzen
glTranslatef
glRotatef
glMultMatrix
...
Zeichnen

glPopMatrix;


genau um dieses " // lokales Koordinatensystem setzen" geht es mir....mit welchem befehl geht denn das?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 19, 2005 19:31 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 28, 2002 19:27
Beiträge: 568
Wohnort: Chemnitz / Sachsen
das macht eigentlich das pushmatrix ...

_________________
Aktuelles Projekt :
www.PicPlace.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 19, 2005 19:35 
Offline
DGL Member

Registriert: Fr Feb 18, 2005 13:35
Beiträge: 11
ach so...ich depp :D

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:
  1.  
  2. procedure glDraw;
  3. begin
  4.   glClearColor(0,0,0,0);
  5.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  6.   glloadidentity;
  7.   gltranslatef(posvect[0],posvect[1],viewwidth);
  8.   glRotatef(RotateX, 1, 0, 0);
  9.   glRotatef(RotateY, 0, 1, 0);
  10.   glRotatef(RotateZ, 0, 0, 1);
  11.   glcoordinate;
  12.   glscalef(0.3,0.3,0.3);
  13.   gltranslatef(0,2,0);
  14.   glpushmatrix();
  15.   glRotatef(winkel, 1, 0, 0);     <------------ hier wird auf tastendruck gedreht
  16.   glDominoe;
  17.   glpopmatrix();
  18.   glboden;
  19.   gltranslatef(0,0,2);
  20.   glpushmatrix();
  21.   glRotatef(winkel, 1, 0, 0);
  22.   gldominoe2;
  23.   glpopmatrix();
  24. end;


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 33 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.011s | 15 Queries | GZIP : On ]