OpenGL Textur-Koordinaten in Pixel Leerzeichen
Ich arbeite an einer iPhone-app, die verwendet OpenGL ES 2 für seine Zeichnung. Ich weiß, dass in der Regel die textur-Koordinaten definiert sind 0-1 Auswahl, aber im Idealfall möchte ich diese zuordnen von 0-1023 (die Größe von meinem TextureAtlas) zur besseren Lesbarkeit Willen. Ich habe gesehen, sample-code, definiert die Koordinaten in dieser Weise, aber nicht in der Lage zu suss, was im Vergleich zu früheren Ausschreibungen gemacht wurden, sind erlaubt. glMatrixMode(GL_TEXTURE)
wie es scheint, beteiligt sein könnten, aber ich bin mir nicht ganz sicher, wie es zu implementieren.
Mein end-Ziel wäre zu erreichen, so etwas wie dieses, wo die textur ich verwenden innerhalb der atlas ist in der linken oberen 48px Platz:
GLshort texcoords[]={
48,48,
0,48,
48,0,
0,0,
};
glVertexAttribPointer(ATTRIB_TEXTUREPOSITON, 2, GL_SHORT, 0, 0, texcoords);
glEnableVertexAttribArray(ATTRIB_TEXTUREPOSITON);
InformationsquelleAutor der Frage Sam | 2011-05-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser wurde ein paar mal nachgefragt, aber ich habe nicht die links zur hand, so kann eine schnelle und grobe Erklärung. Lassen Sie uns sagen, die textur ist 8 Pixel breit:
Die Ziffern bezeichnen die textur-Pixel, die bars, die die Ränder der textur und bei der nächsten Filterung der Grenze zwischen den Pixeln. Sie aber wollen, um zu schlagen die Pixel' - Zentren. Sie sind also daran interessiert, die textur-Koordinaten
(0/8 + 1/8)/2 = 1 /(2 * 8)
(1/8 + 2/8)/2 = 3 /(2 * 8)
...
(7/8 + 8/8)/2 = 15 /(2 * 8)
Oder mehr im Allgemeinen für das pixel i in eine N große textur die richtige textur Koordinate
(2i + 1)/(2N)
Allerdings, wenn Sie wollen, um perfekt ausrichten, Ihre textur mit der Bildschirm-Pixel, denken Sie daran, dass das, was Sie angeben, wie die Koordinaten sind nicht ein quad-Pixel, aber die Kanten, die je nach Projektion kann die Angleichung an pixel auf dem Bildschirm Kanten, keine Zentren, so erfordern andere textur-Koordinaten.
InformationsquelleAutor der Antwort datenwolf
Ich Abfälle 1 Stunde zu finden, intuitiv Abbildung, aber erstaunlicherweise niemand gemalt. Also Tat ich es.
Gegeben 4-pixel-textur, normalisierte textur-Koordinate [0,1], nicht normalisierte textur-Koordinate [0, Breite), gl_FragCoord [0, Breite] sind wie folgt
Referenz
InformationsquelleAutor der Antwort Huang Dongsung
Herausstellt ist dies möglich in OpenGl ES 2. Hier ist, wie ich es vollbracht:
Fragment-Shader:
Obj-C:
Wenn jemand Kommentare auf, wie dies funktionieren könnte, performance-wise, ich wäre interessiert.
InformationsquelleAutor der Antwort Sam