So nach einer längeren Pause versuch ich mein 3D Schach doch zum laufen zu bringen ...
... doch leider hängst wie damals an der Selektion.
Normal sollte jedes der 8*8 Felder eine Zahl von 1 - 64 zurückgeben
Doch leider sieht das wie folgt aus (in der weißen Fläche, die ungefähr mit der wirklich Fläche überseinstimmt, bekommt man bei klick eine der zahlen 1-64)
1 Quadrat ist 1 x 1 OglEinheit Groß ... die Selection quetscht aber 8 verschiedene Selection Rückgaben auf 6 Felder
In den bisherigen Threads hab ich nichts gefunden da es dort meist an falscher Perspektive o.ä. lag.
- gluPerspective ist gleich
- wird auch gleich verschoben und gezeichnet
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also ich denke mal ich weiß wo dein Fehler liegt. Rufst du deine Selection methode in der Methode Render auf? Wenn ja dann schiebst du dein Feld zwei mal in die Richtung. Du müsstest das entweder zu Begin der methode ApplicationEventsIdle oder im MouseMove aufrufen. Dadurch findet es nicht mehr in einem Rendervorgang statt und kommt somit wohl auch nicht mehr mit deinem Zeichnen durcheinander.
Dein Schachbrett würde ich persönlich anders rendern. Ich würde eine Textur binden, dann ein glBegin aufrufen und die entsprechenden Flächen am Stück rendern. Also alle die zu der Textur gehören. Das kann man ziemlich einfach ausrechnen. Denn die Matrixoperationen und ständigen Texturwechsel sind der Tot für OpenGL. Dadurch bremmst du das ein ganzes Stück aus. Evtl kannst du ja auch zu begin deines Programs ein mal alle Koordinaten berechnen und in einer Liste oder einem Array ablegen. Beim Zeichnen läufst du dann ein mal durch sie hindurch und das wars. Dann brauchst du nur noch rendern und nichts mehr berechnen. Das dürfte ziemlich schnell sein. Aber erst einmal die Selektion.
Also ich denke mal ich weiß wo dein Fehler liegt. Rufst du deine Selection methode in der Methode Render auf? Wenn ja dann schiebst du dein Feld zwei mal in die Richtung. Du müsstest das entweder zu Begin der methode ApplicationEventsIdle oder im MouseMove aufrufen. Dadurch findet es nicht mehr in einem Rendervorgang statt und kommt somit wohl auch nicht mehr mit deinem Zeichnen durcheinander.
Leider ist es auch das nicht. Steht im MouseDown Ereignis
statusbar1.Simpletext:='Sie haben auf '+IntToStr(Brett.Selection)+' geklickt!';
end;
Lossy eX hat geschrieben:
Dein Schachbrett würde ich persönlich anders rendern. Ich würde eine Textur binden, dann ein glBegin aufrufen und die entsprechenden Flächen am Stück rendern. Also alle die zu der Textur gehören. Das kann man ziemlich einfach ausrechnen. Denn die Matrixoperationen und ständigen Texturwechsel sind der Tot für OpenGL. Dadurch bremmst du das ein ganzes Stück aus. Evtl kannst du ja auch zu begin deines Programs ein mal alle Koordinaten berechnen und in einer Liste oder einem Array ablegen. Beim Zeichnen läufst du dann ein mal durch sie hindurch und das wars. Dann brauchst du nur noch rendern und nichts mehr berechnen. Das dürfte ziemlich schnell sein.
Wenn die Selektion funktioniert werd ich den kompletten Code nochmal überarbeiten und optimieren.
Ein kurzer Kommentar von mir: Bitte den Quelltext mal richtig Formartieren, sprich: EINRÜCKEN!!!
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Mitglieder in diesem Forum: 0 Mitglieder und 3 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.