1 != 1 Pixel
-
irgendwie versteh ich das nicht ganze
wenn ich das ganze orthogonal mache: glOrtho(0, 640, 480, 0, 1, 1);
dann dürften Objekte die weiter hinten sind ja nicht kleiner sein
soweit stimmt das ganze ja auchnur wenn ich um zB ein Vierreck zeichnen will:
glBegin(GL_QUADS); glVertex2f(0.5,0.5); glVertex2f( 0,0.5); glVertex2f( 0, 0); glVertex2f(0.5, 0); glEnd();dann geht eine Einheit gleich über den halben Bildschirm (also von der Mitte bis zum Rand)
aber wie erreiche ich das bei einer orthogonalen Matrix nun, dass eine "Einheit" ein Pixel ist
ich will nämlich eigentlich einfach nur auf die einzelnen Pixel zugreifen können,
aber das scheint ja bei OpenGL nicht so einfach zu sein
wenn DirectX nur auf Linux laufen würde...
-
Du bist im orthogonalen Modus, okay?
Dein Bildschirm in Pixel eingeteilt, von 0 bis 640 und 0 bis 480.Und du willst jezt das Qudrat an Pixel 0.5 zeichnen? Wie soll das gehen?
Du musst ganze Zahlen nehmen.
-
nein du verstehsts nicht
so wie du das sagst will ich es ja haben
aber so ist es komischerweiße nicht
0,5 ist bei mir genau 1/4 des Fensters 1 ist genau die hälfte
aber warum? das muss man doch ändern können
ich will nicht die ganze Zeit mit Kommazahlen arbeiten müssen
-
Du musst den Viewport mit 640x480 initialisieren. Ausserdem muss der Aufruf von gluPerspective entsprechend angepasst werden.
-
Nick H. schrieb:
0,5 ist bei mir genau 1/4 des Fensters 1 ist genau die hälfte
aber warum?Weil nun mal standardmässig der Nullpunkt in der Mitte ist. Rechts und runter geht's auf der X- bzw. Y-Achse bis +1. Links und rauf geht's auf diesen bis -1 jeweils.
Entsprechend sind die Einheiten bei unterschiedlicher Auflösung auch unterschiedlich lang.Nick H. schrieb:
das muss man doch ändern können
Klar. Du kannst doch Koordinaten-Umrechnungs-Matrizen darüber jagen soviel wie Du willst...
-
Cpp_Junky schrieb:
Du musst den Viewport mit 640x480 initialisieren. Ausserdem muss der Aufruf von gluPerspective entsprechend angepasst werden.
nöö, er wills ja orthogonal
-
Um den Orthoscreen zu erstellen, benutze ich
glOrtho(0, WND_X, 0, WND_Y, -1, 1);(wnd = window, huh?)
glBegin(GL_QUADS); glVertex2i(0,0); glVertex2i(size,0); glVertex2i(size,size); glVertex2i(0,size); glEnd();Erstellt ein Quadrat mit der Größe von size. Man beachte die Funktion glVertex2i.
::edit::
Der Punkt 0|0 ist unten links, btw.
-
Um den Orthoscreen zu erstellen, benutze ich
C/C++ Code:
glOrtho(0, WND_X, 0, WND_Y, -1, 1);
(wnd = window, huh?)ich wollte halt das DirectX Koordinaten-System mit Ursprung links oben
deswegen ist meins andersMan beachte die Funktion glVertex2i.
die macht aber keinen Unterschied ausser das sie Integer statt Floats nimmt
1 ist bei mir dann immernoch der halbe Bildschirmdie Frage war aber wie ich das ändern kann
-
Nick H. schrieb:
ich wollte halt das DirectX Koordinaten-System mit Ursprung links oben
deswegen ist meins andersAchso okay, ich bin mir jetzt aber auch gar nicht sicher, ob das überhaupt funktioniert?
Nick H. schrieb:
Man beachte die Funktion glVertex2i.
die macht aber keinen Unterschied ausser das sie Integer statt Floats nimmt
1 ist bei mir dann immernoch der halbe BildschirmWeiß ich nicht, mir war nur der Unterschied von f und i aufgefallen. Hab gedacht, dass das vielleicht Einfluss hat.
-
doch das mit dem DirectX Koordinaten System ist nicht das Problem
habs auch schon mit dem normalen probiert, aber irgendwas läuft da schief
hat von euch noch niemand ne orthogonale Matrix für OpenGL benutzt?
-
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=21
Schau dir das einfach an, da steht alles.
-
ich hab jetzt ewig rumgesucht
auch bei dem Linkaber ein 1 ist bei mir immer ganz genau die hälfte des Fensters
auch wenn ich die Größe änderda scheint MS echt mal was besser gemacht zu haben
da kann man so schön einfach an die Pixelhat jemand vielleicht noch irgendeine Idee?
-
Ich glaub, du stellst dich einfach zu doof an :p
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=17
hier noch ein Ortho-Beispiel
-
das glaub ich auch
aber ich lad genau den gleichen Viewport und Matrizen wie in den Beispielen
bei mir bleibt 1 bei einem Vektor immer genau die Strecke von der Mitte bis zum Randegal ich probiers mal mit dem neuen Beispiel danke!
-
na endlich, bin ich doof
ich dachte die Reihenfolge bei Resize wäre egal
ein Problem gibts allerdings doch noch:
der Ursprung ist plötzlich links oben, dabei wollte ich den jetzt eigentlich in der Mitte haben
und zwar so das y nach oben und x nach rechts gehthier ist der Code: http://cemoi.ce.funpic.de/gl.txt
kann mir kurz jemand sagen was ich dafür ändern muss
-
Nick H. schrieb:
na endlich, bin ich doof
ich dachte die Reihenfolge bei Resize wäre egal
ein Problem gibts allerdings doch noch:
der Ursprung ist plötzlich links oben, dabei wollte ich den jetzt eigentlich in der Mitte haben
und zwar so das y nach oben und x nach rechts gehthier ist der Code: http://cemoi.ce.funpic.de/gl.txt
kann mir kurz jemand sagen was ich dafür ändern mussVersuch mal für glOrtho andere Parmeter zu übergeben. Ich würde jetzt mal tippen auf -320,320,120,-120 oder sowas in der Art. Du verstehst was ich meine

Hier nochmal die Doku dazu: http://www.rush3d.com/reference/opengl-bluebook-1.0/ch05.html#id5511492
mfg.
-
habs hinbekommen
die Werte waren echt falsch
man muss den Abstand zu den Rändern angebenaber was hat es dann mit den letzten beiden Parametern auf sich?
-
Near und Far Clipping Plane
-
das wusst ich auch, aber was heißt das?
-
...the starting point and ending point for how deep we can draw into the screen.