Draw 2D-Image Opengl 3+
-
Okay danke
habe jetzt ein eindimensionales Array mit Pixeldaten 1024*1024
Bin noch anfänger mit OpenGL und hab jetzt kA wie ich das auf meinen Bildschirm kriegeAlso in Theorie soweit klar, aber dadurch wie ich daraus code mache blick ich noch nicht durch, hab das mit den Vertices usw wohl noch nich ganz gerafft.
Gruß
Jango
-
Na wie du schon gesagt hast: Dein Bild in eine Textur packen und dann ein Quad mit der Textur drauf rendern...
-
Muss ich mir da nicht auch noch diese UV-Vectoren erstellen?
-
Du meinst Texturkoordinaten!? Ja, die wirst du brauchen, um die Textur auf dein Quad zu bekommen...
-
Muss ich mir da nicht auch noch diese UV-Vectoren erstellen?
Ja aber die sind ja simpel. Einfach (0,0) (0,1) (1,0) (1,1). Das kannst du zur Not auch durchprobieren.
-
Ok, müssten das nicht eigentlich auch 3 UVs pro Dreieck sein?
Demnach also 6?
-
Ja schon...
Aber letztlich zeichnest du ein Viereck. Nur dass du 2 Punkte doppelt zeichnen musst wenn du das Viereck als Triangles zeichnest.
-
Also ist es bei den UVs, anders als bei den Vertices, möglich die tatsächlichen Eckpunkte an zu geben und die nicht in Dreiecke zerlegen zu müssen.
Okay danke
Noch ne Frage zu den UVs.
Die UVs sind doch immer in den relativen Koordinaten zwischen -1 und 1 an zu geben oder?
Mein Rechteck gebe ich nämlich in tatsächlichen "pixeldaten" an und (Pixel breite und höhe eben)
-
Also ist es bei den UVs, anders als bei den Vertices, möglich die tatsächlichen Eckpunkte an zu geben und die nicht in Dreiecke zerlegen zu müssen.
Äh was ? Du hast da was falsch verstanden. Du hast ein Viereck bestehend aus 4 Punkten. Da du nur Dreiecke zeichnest brauchst du dafür 6 Vertices. Das bedeutet 2 Vertces sind doppelt. Und jedes der 6 Vertices hat neben den 3 Koordinaten (XYZ) noch 2 Texturkoordinaten (UV).
Die UVs sind doch immer in den relativen Koordinaten zwischen -1 und 1 an zu geben oder?
Nein ? Immer zwischen 0 und 1. 0 Die eine Seite (unten/links) und 1 die andere (oben/rechts).
Mein Rechteck gebe ich nämlich in tatsächlichen "pixeldaten" an und (Pixel breite und höhe eben)
Geht aber auch nur im entsprechenden Ortografischen View. Normal sind auch die Koordinaten nicht in Pixeln angegeben.
-
Hallo das kannst Du so erreichen.
Pseudocode:
gluBuild2DMipmaps(GL_TEXTURE_2D,(m_bpp>>3), m_width, m_height,mode,GL_UNSIGNED_BYTE,pMapMem); void CTerrain::Render(CGLfont *pFnt) { if(!m_pVert) return; if(!m_dib.GetBmih() || !m_nVBONormals || !m_nVBOVertices || !m_nVBOIdx || !m_pLastMap) return; if(m_TexOn) { glEnable(GL_TEXTURE_2D), glBindTexture(GL_TEXTURE_2D, m_texid), glEnableClientState(GL_TEXTURE_COORD_ARRAY); glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_nVBOTexCoords); glTexCoordPointer(2, GL_FLOAT, 0, 0); } glEnableClientState(GL_NORMAL_ARRAY); glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_nVBONormals); glNormalPointer(GL_FLOAT, 0, 0); glEnableClientState(GL_VERTEX_ARRAY); glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_nVBOVertices); glVertexPointer(3, GL_FLOAT, 0, 0); if(!m_TexOn) { glEnableClientState(GL_COLOR_ARRAY); glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_nVBOColors); glColorPointer(3, GL_FLOAT, 0, 0); } glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, m_nVBOIdx); glScalef(1,1,m_UsrScale); glDrawElements(GL_TRIANGLES, m_idsz, GL_UNSIGNED_INT, 0); glScalef(1,1,1); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_COLOR_ARRAY); if(m_TexOn) glDisableClientState(GL_TEXTURE_COORD_ARRAY),glDisable(GL_TEXTURE_2D); }
Allerdings gibt es hier verschiedene umfangreiche Optionen, bei Fragen melden.
Beispiel:
http://youtu.be/pDi9gXCzTps