Texturen auf Polygonen malen (OpenGL)?
lima-city → Forum → Programmiersprachen → C/C++ und D
anleitung
arbeiten
array
beispiel
blocken
buffer
code
datum
detailfrage
eigene textur
falschen hals
gerade aufgefallen
koordinate
malen
menge
stellen
textur
url
verwenden
weben
-
Aus Strategiespielen und Sandboxspielen wo man eigene Maps machen kann kennt man es ja das man verschiedene texturen auf ein Modell malen kann wo es so aussieht das jede Ecke eine eigene textur hat. Aber wie funktioniert das (in OpenGL) genau? Muss man da für jede Textur ne eigene UV Map machen?
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Wie du schon richtig festgestellt hast läuft die Texturierung unter anderem über die UV-Koordinaten der Textur. Dazu gibt man jedem Vertex eine UV Koordinate mit. Die Funktion glTexCoord..() übernimmt das zum Beispiel in einem glBegin/glEnd Block. Natürlich können solche Daten auch in einem Array auf der Grafikkarte als Buffer-Object zwischengespeichert werden. Am besten informierst du dich zu dem Thema mal in einem NeHe-Tutorial wie diesem hier: nehe.gamedev.net/data/lessons/lesson.asp?lesson=06
Edit:
So mir ist gerade aufgefallen, dass ich das etwas in den falschen Hals bekommen hab. ^^
Also das wonach du fragst nennt sich wohl Multitexturing und da wirst du im Web wohl auch einiges an Anleitungen zu finden. Ich selbst habe das Multitexturing noch nicht verwendet (zumindest nicht um Oberflächen damit zu Texturieren) aber ich weiß, dass es dazu einen zusätzlichen Funktionssatz gibt, der sich zb hier finden lässt: www.opengl.org/resources/code/samples/sig99/advanced99/notes/node61.html
Beitrag zuletzt geändert: 27.6.2010 20:32:04 von sektor -
Nehe ist alt und nicht mehr konform. Den Code sollte man nicht mehr verwenden, auch wenns mal die besten tuts waren.
Generell sollte man nur noch über Arrays arbeiten.
// Push Vertices glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 0, &m_vertices[0]); // Do Texturing if ( m_texture ) { glEnableClientState(GL_TEXTURE_COORD_ARRAY); m_texture->attachTexture(); const NLTextureCoord* c = m_texture->getTextureCoords(); glTexCoordPointer(2, GL_FLOAT, 0, &c[0]); } // Do Coloring glEnableClientState(GL_COLOR_ARRAY); glColorPointer(4, GL_FLOAT, 0, &m_simple_color[0]); // Draw Array glDrawArrays(m_drawmode, 0, 4); // Disable everything glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_COLOR_ARRAY);
Etwas aus dem Context gerissen der Code (aus einem Game von mir), aber so schaut das ca. aus. Auf jede Fall ne Menge Stichwörter erstmal.
Zu Texturen solltest du nach glBindTexture, glGenTexture und glTexImage2D und glTexParameter googlen.
Dann bitte Detailfragen stellen :).
rya. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage