ich habe mich mit dem Tutorial für OpenGL für 2D befasst und habe einige Probleme damit. Ich habe es geschafft, die Textur anzeigen zu lassen, jedoch wird sie immer noch perspektivisch dargestellt. Wenn OpenGL erfolgreich auf 2D umgestellt hat, müsste sich der Z-Wert ja nicht auf die Größe der Objekte auswirken, was er jedoch tut.
In deiner Render-procedure rufst du gluPerspective auf. Ich schätz mal, dass deine perspektivische Verzerrung von da kommt. das glOrtho dürfte nämlich statt gluPerspective hingehören.
Wie groß ist denn dein mx und dein my ungefähr? wenn jetzt nämlich deine Vertexdaten zB alle zwischen 0 und 1 liegen (wo man ja bei Perspektive durchaus noch was sieht), ist das ganze höchstens 4 Pixel groß, weil bei Ortho werden die Vertexdaten in Pixel angegeben.
mx und my liegen zwischen 0 und 1 und geben die Mausposition wieder. Das habe ich probeweise eingebaut, um zu sehen, wie sich die Werte auf das Bild auswirken.
sry, mx und my haben mit der größe ja nix zu tun. aber dein quad is ja genau 2x2 pixel groß! und so, wie das mit mx und my aussieht können die koordinaten leicht alle negativ werden. Dann siehst du auch nix.
Aber mit dem im ersten post geposteten code funktioniert es ja immerhin so, dass man eine textur sieht. und die textur ist immer etwa da, wo auch die maus ist. und mit dem abgeänderten code ist die textur komplett verschwunden.
Warum eig. 2x2 Pixel? Meine nächste Frage wäre dann, wie man die Position von Quads beeinflusst, weil es ja irgendwie relativ zur Größe der Ausgabefläche ist und 0|0 unten links liegt oder so. Aber ich dachte mir, wenn 3D ausgeschaltet ist, erklärt sich das vllt von selbst.
Registriert: Di Okt 13, 2009 17:25 Beiträge: 365
Programmiersprache: C++
Hast du dir schonmal die Wiki-Seite zu glOrtho angesehen? Bei den Parametern, die du da in deinem Quelltext angibst, scheint es mir, als wolltest du dir das Umrechnen von Maus- zu Weltkoordinaten ersparen. Wenn du nämlich bei einer Auflösung von 640x480 renderst (im Fullscreen-Modus), kannst du dein Quad z.B. einfach so zeichnen:
Code:
glBegin(GL_QUADS); glTexCoord2f(0,1); glVertex3f(mx - half_width, my - half_height, 1); glTexCoord2f(1,1); glVertex3f(mx + half_width, my - half_height, 1); glTexCoord2f(1,0); glVertex3f(mx + half_width, my + half_height, 1); glTexCoord2f(0,0); glVertex3f(mx - half_width, my + half_height, 1); glEnd;
half_width und half_height musst du natürlich noch deklarieren und solltest sie mit sinnvollen Werten füllen (z.B. 50), damit du überhaupt etwas siehst.
Ok, habe diesen Code jetzt übernommen, aber die Textur bleibt unsichtbar. Ich sehe nur den blauen Hintergrund.
btw: ich kann irgendwie nicht verstehen, dass das nicht klappt, weil mein problem doch irgendwie nicht soo exotisch ist. ich bin doch wohl nicht der erste, der eine textur in einem 2D-Feld anzeigen möchte, und dazu das 2D-Tutorial verwendet ?
Registriert: Di Okt 13, 2009 17:25 Beiträge: 365
Programmiersprache: C++
Sorry, ich hatte vergessen zu erwähnen, dass bei meinem Code die Werte mx und my *nicht* zwischen 0 und 1, sondern echte Mauskoordinaten in Pixel sein sollten.
Des Weiteren (auch wenn das mit deinem Problem nichts zu tun hat) scheint dir der Unterschied zwischen Textur und Quad nicht ganz klar zu sein. Das Quad sind einfach zwei Dreiecke, deren Eckpunkte du angibst. Die Textur selbst ist ein Bild, dass du auf das Quad "klebst". Genau genommen, ist es also nicht die Textur, sondern das Quad, dass du bewegen willst.
Habe es sowohl mit 0-1 er Pixeln, als auch mit 0-700 pixeln versucht, auch die veränderung der glortho-parameter hat nichts gebracht. Allerdings wäre es auch unwahrscheinlich, dass dort das problem liegt, weil es ja im 3d modus alles halbwegs funktioniert hat (wenigstens das Bild war zu sehen...)
Zitat:
Des Weiteren (auch wenn das mit deinem Problem nichts zu tun hat) scheint dir der Unterschied zwischen Textur und Quad nicht ganz klar zu sein. Das Quad sind einfach zwei Dreiecke, deren Eckpunkte du angibst. Die Textur selbst ist ein Bild, dass du auf das Quad "klebst". Genau genommen, ist es also nicht die Textur, sondern das Quad, dass du bewegen willst.
Dem bin ich mir wohl bewusst. Da ich aber noch keine Erfahrung mit opengl habe, kann ich mich auch nicht so präzise ausdrücken. Sorry für das Missverständnis .
Naja ich bin aber schon ziehmlich enttäuscht von mir, dass ich schon so früh gescheitert bin. Könnte vllt jemand ein funktionierendes Template posten, dann könnte ich nach Unterschieden suchen...
glBegin(GL_QUADS); glTexCoord2f(0,1); glVertex3f(mx - half_width, my - half_height, -1); glTexCoord2f(1,1); glVertex3f(mx - half_width, my + half_height, -1); glTexCoord2f(1,0); glVertex3f(mx + half_width, my + half_height, -1); glTexCoord2f(0,0); glVertex3f(mx + half_width, my - half_height, -1); glEnd;
end;
beachte das wir farclipping positiv angeben wärend wir beim zeichnen das Z negativ wählen
desweiteren war die reihenfolge der Vertexe falschherum, grundsätzlich solltest du die coordinaten gegen den uhrzeigersin angeben damit eventuelles Backface culkling dein quad nicht gleich filtert mx und my übergibst du im OnMouseMove und half[...] sind const
die textur hab ich wieder mit textures.pas geladen
Mitglieder in diesem Forum: 0 Mitglieder und 38 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.