2013-01-24 10 views
6

próbuję stosować tekstury do tablicy wierzchołków odrobina poniższy kod:OpenGL, tekstury mają zawsze ten sam rozmiar

glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, texture); 
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glColor3f(1.0f, 1.0f, 1.0f); 

glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
glEnableClientState(GL_VERTEX_ARRAY); 
glTexCoordPointer(2, GL_FLOAT, 0, texcoords); 
glVertexPointer(3, GL_FLOAT, 0, vertices); 
glDrawElements(GL_QUADS, 12, GL_UNSIGNED_BYTE, faceIndices); 
glDisableClientState(GL_VERTEX_ARRAY); 
glDisableClientState(GL_COLOR_ARRAY); 

glDisable(GL_TEXTURE_2D); 

z tym konsystencja: texture

więc mam ten wynik : Result

Teraz zastanawiam się, jak mogę skalować teksturę podłogi, już próbowałem przeskalować teksturę w Photoshopie, ale wynik jest taki sam, ale większy.

Odpowiedz

2

To zależy od współrzędnych tekstury, w jaki sposób chcesz zmapować teksturę. Niech brać przykład, obejmować cały wielokąt

glTexCoord2f(0.0f, 0.0f); 
glTexCoord2f(1.0f, 0.0f); 
glTexCoord2f(1.0f, 1.0f); 
glTexCoord2f(0.0f, 1.0f); 

Teraz, jeśli chcesz, aby powtórzyć tekstury pięciokrotnie następnie podać współrzędne jak `

glTexCoord2f(0.0f, 0.0f); 
glTexCoord2f(5.0f, 0.0f); 
glTexCoord2f(5.0f, 5.0f); 
glTexCoord2f(0.0f, 5.0f);` 

Jak wyżej przykład zmienić wartość, jak chcesz mapować tekstura.

+2

dziękuję: D, to jest poprawna odpowiedź. – Luca

7

Zakładam, że masz na myśli, że chcesz, aby tekstura była mniej płytkowa lub więcej płytek. W takim przypadku zmień współrzędne tekstury, a nie teksturę (tj. Jakiekolwiek dane znajdują się w texcoords).

Twoja przykładowa tekstura jest niebieska, ale na wyświetlanym obrazie jest brązowa. Podczas ładowania możesz zmieniać kanały R + B.

+2

również dziękuję za wskazówkę dotyczącą zamiany kanału, nawet nie zauważyłem :) – Luca