Registriert: Fr Mai 14, 2004 18:56 Beiträge: 804 Wohnort: GER/OBB/TÖL-WOR/Greiling
So. jetzt hääte ich gerne noch die Syntax von glrotate, etwa als glrotate(vertikal,horizontal,par1,par2);
ausserdem: wenn ich bei dem ereignis "nach rechts drehen" inc(rotatehor) aufrufe, kann es dann sein, dass irgendwann rotatehor zu groß wird, um von glrotate verarbeitet zu werden? sprich: muss ich, wenn rotatehor=360 ist, es wieder auf 0 setzen?
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
zu 1.: Ich hoffe ich hab dich falsch verstanden!? Wenn du die Syntax willst, dann setz mal den Cursor auf glrotate und drück F1. Das solltest du immer machen, wenn fragen zu Befehlen auftauchen. (Oder du guckst in Wiki, auch wenn du momentan dort noch nicht alles findest)
zu 2.: Ja. Das solltest du machen.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Fr Mai 14, 2004 18:56 Beiträge: 804 Wohnort: GER/OBB/TÖL-WOR/Greiling
oh sorry ihr habt ja recht.. aber ich muss erst den umweg über win32 developers reference gehen, weder in der Standard-delphihilfe noch im codevervollstänfiger sind ogl-routinen drin!
verständnisfrage: Winkel ist, wieviel gedreht wird, x,y,z sind vektorenkoordinaten??
OK, gecheckt, x,y,z gibt die achse um die gedreht wird.
PS: im wiki hab ich schon gesucht, aber nicht gefunden
PPS: omg, ihr habt recht, der macht mir tatsächlich codevervollständiger!!
edit:
x,y,z beschreibt einen ursprungsvektor, oder? aus einem Punkt alein kann man ja keinen Vektor machen, oder?
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Nochmal:
Cursor auf glRotate (im Quelltext) setzen und F1 drücken. Dann geht er automatisch in die OpenGL Hilfe. Und dort steht auch was x,y,z und Angle bedeutet.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Fr Mai 14, 2004 18:56 Beiträge: 804 Wohnort: GER/OBB/TÖL-WOR/Greiling
Tut mir leid, aber dazu muss ich ja wohl erst irgendwie die Hilfedatei in Delphi einbinden, oder? Delphi 7 PE hat auf jeden Fall keine Opengl-hilfe. Nur im Startmenü gehts zur win32 Developer reference. da finde ich aber nur+
Zitat:
The glRotated and glRotatef functions multiply the current matrix by a rotation matrix.
void glRotated( GLdouble angle, GLdouble x, GLdouble y, GLdouble z ) void glRotatef( GLfloat angle, GLfloat x, GLfloat y, GLfloat z )
Parameters
angle
Specifies the angle of rotation, in degrees.
x, y, z
Specify the x, y, and z coordinates of a vector, respectively. Remarks
The glRotate function computes a matrix that performs a counterclockwise rotation of angle degrees about the vector from the origin through the point (x, y, z). The current matrix (see glMatrixMode) is multiplied by this rotation matrix, with the product replacing the current matrix. That is, if M is the current matrix and R is the translation matrix, then M is replaced with M·R. If the matrix mode is either GL_MODELVIEW or GL_PROJECTION, all objects drawn after glRotate is called are rotated. Use glPushMatrix and glPopMatrix to save and restore the unrotated coordinate system.
The following functions retrieve information related to the glRotate function: glGet with argument GL_RENDER_MODE glGet with argument GL_MATRIX_MODE glGet with argument GL_MODELVIEW_MATRIX glGet with argument GL_PROJECTION_MATRIX glGet with argument GL_TEXTURE_MATRIX
Errors
GL_INVALID_OPERATION is generated if glRotate is called between a call to glBegin and the corresponding call to glEnd.
Und da ein Vektor( ein Pfeil) ja aus 2 Punkten definiert werden muss, man aber nur einen Punkt an glrotate übergibt, muss ein zweiter Punkt vordefiniert sein, und dieser Punkt ist logischerweise, da der einzige "besondere" Punkt im Koordinatensystem, der Nullpunkt/Ursprungspunkt. Also wird der Vektor vom Nullpunkt nach 3DPoint(x,y,z) laufen, und die Achse bilden, um die gedreht wird.
UNd wenn ich da falsch denke, dann schreibt es bitte hier rein, und wenn ihr andere opengl-hilfedateien habt, dann postet mir bitte eine! Bitte!
Registriert: Fr Mai 14, 2004 18:56 Beiträge: 804 Wohnort: GER/OBB/TÖL-WOR/Greiling
soweit bin ich auch schon. jetzt muss ich nur noch rauskriegen, wie ich es so hinbekomm, dass ich die kamera wie aus der egoperspektive bewegen kann. aber das find ich schon.
edit: ich habs geschafft....
einfach:
glrotatef(rotation,0,1,0)
dann dreht man sich "rotation grad " um seine eigene höhenachse!!
Registriert: Fr Mai 14, 2004 18:56 Beiträge: 804 Wohnort: GER/OBB/TÖL-WOR/Greiling
Nachdem ich mich vor lauter offenen Arrays und einer chaotischen Programmstruktur total entnervt habe, hab ich alles gelöscht und noch mal von vorn angefangen. Ich mach bis jetzt nur Dreiecke, der einfachheit halber, und habe dazu eine paintbox gemacht(größe: 500 mal 500) auf der ich ein dreieck zeichne, wenn ich das dritte,neunte, ..., n*3 te mal in die paintbox geklickt habe, übergeb ich die gesammelten daten an die struktur
Wo dein Problem ist kann ich dir zwar nicht sagen,
aber ein beep zum debuggen zu benutzen ist schon ziemlich extrem (noch schlimmer als Showmessage )
setzte einfach nen breakpoint ans ende der Schleife und schau ob er den ausführt oder nicht.
Eventuell stimmt auch einfach die betrachtungsposition nicht so das du das Zeug hinter der Kamera renders...
Stimmt die ATris.Count variable? Ist sie vielleicht einfach 0?
Warum benutzt du eigentlich nicht einfach dynamische Arrays?
Da kannste dir das mit dem Count sparen und nimmst einfach High(ATris)...
Registriert: Do Jun 19, 2003 10:44 Beiträge: 991 Wohnort: Karlsfeld (nahe München)
Ohne mir den ganzen Thread durchgelesen zu haben kann ich dir so sagen das es mit einer Paintbox nicht klappt da die kein Window Handle hat.
Oder vestehe ich dich jetzt falsch, und hätte doch den ganzen Text lesen müssen?
Zitat:
aber ein beep zum debuggen zu benutzen ist schon ziemlich extrem (noch schlimmer als Showmessage Wink ) setzte einfach nen breakpoint ans ende der Schleife und schau ob er den ausführt oder nicht.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Nochn Tipp am Rande...count gibt garantiert die Anzahl der Elemente zurück. Wenn du aber bei 0 anfängst, dann ist der Index an der Stelle count bereits hinter dem Array. Ein -1 hilft da ab...
Kommt ein Fehler?
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Fr Mai 14, 2004 18:56 Beiträge: 804 Wohnort: GER/OBB/TÖL-WOR/Greiling
ES RENDERT! Hat es auch von Anfang an getan. Allerdings etwas verdreht, und ich sehe erst etwas, wenn ich so weit zurückgehe(gltranslate(0,0,-x)), dass das zeug schon fast wieder hinter der far clipping verschwindet. das beep ist jetzt übrigens weg .
Wie kann ich denn das far-clipping höhersetzen bzw. warum muss ich so weit weg zoomen? Ausserdem zeichnet er alles um 180° gedreht und dann noch mal an der senkrechten Achse gespiegelt... Inzwischen hab ich glrotate(180,0,1,0), dann hab ichs wenigstens nur noch gespiegelt.
CW und CCW??
Und zu -1: Ich weiss auch nicht, warum ich keinen Fehler kriege... Wahrscheinlich gibt er bei dem Dreieck, bei dem alle koords 0 sind gar keinen Fehler, sondern ignoriert es einfach.
PS: Kennt jemand einen Link zu einer Sonderzeichen-Char-Tabelle? Also wie ich im onkeypress-ereignis z.B. die linke pfeiltaste identifiziere? bei esc weiss ichs schon, das ist #27.
Zu den weiteren Posts: Ich rendere in die FOrm, hab auf der aber einige Objekte verteilt(Panel->Paintbox und eine memo-box)
Das mit low und high hab ich noch gar nicht gewusst. aber um ein neues tri zu machen muss ich dann immer erst setlength machen, das gibt mir dann hundert laufzeitfehler... ich bin halt noch einsteiger. aber das programm läuft zurzeit absolut absturzfrei!
PS: Kennt jemand einen Link zu einer Sonderzeichen-Char-Tabelle? Also wie ich im onkeypress-ereignis z.B. die linke pfeiltaste identifiziere? bei esc weiss ichs schon, das ist #27.
Delphi Hilfe unter "Virtuelle Tastencodes"
luketheduke hat geschrieben:
Das mit low und high hab ich noch gar nicht gewusst. aber um ein neues tri zu machen muss ich dann immer erst setlength machen, das gibt mir dann hundert laufzeitfehler... ich bin halt noch einsteiger. aber das programm läuft zurzeit absolut absturzfrei!
Du erhöhst einfach jedesmal bevor du ein neues Tri hinzufügst die länge des Arrays um 1...
setlength(ATris,length(ATris)+1);
und die Werte für das neuste fügst du danach einfach über ATris[High(Atris)].xyz := ... hinzu
für die for schleife ists dann einfach : for := 0 to High(ATris) do
da kann nicht viel schiefgehen
Mitglieder in diesem Forum: 0 Mitglieder und 7 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.