Ich werde versuchen, mein Problem mit Bildern zu erklären. Das ist also ein Test Textur ich für meine OpenGL-Anwendung bin mit:Textur nicht richtig angezeigt - wahrscheinlich Koordinaten sind falsch OpenGL, C++
Wie Sie sehen können, gibt es einen 2-Pixel breiter Rahmen um das Bild mit verschiedenen Farben für mich in der Lage sein zu sehen, wenn die Koordinaten in meiner Anwendung richtig eingestellt sind.
Ich verwende ein 9-Zellen-Muster, also zeichne ich 9 Quads mit bestimmten Texturkoordinaten. Auf den ersten Blick alles funktioniert gut, aber es gibt ein kleines Problem mit der Anzeige einer Textur:
Im Bild I markiert, wo erste Quad ist, und wo ist die zweite. Wie Sie sehen können, wird der erste korrekt angezeigt, aber der zweite geht glatt von den Farben des ersten Quads zu seinem eigenen, aber er sollte mit reinem Grün und Rosa beginnen. Ich vermute also, dass es ein Problem mit Texturkoordinaten ist. Diese
ist, wie sie festgelegt sind:
// Bottom left quad [1st quad]
glBegin(GL_QUADS);
// Bottom left
glTexCoord2f(0.0f, 1.0);
glVertex2i(pos.x, pos.y + height);
// Top left
glTexCoord2f(0.0f, (GLfloat)1.0 - maxTexCoordBorderY);
glVertex2i(pos.x, pos.y + height - m_borderWidth);
// Top right
glTexCoord2f(maxTexCoordBorderX, (GLfloat)1.0 - maxTexCoordBorderY);
glVertex2i(pos.x + m_borderWidth, pos.y + height - m_borderWidth);
// Bottom right
glTexCoord2f(maxTexCoordBorderX, 1.0);
glVertex2i(pos.x + m_borderWidth, pos.y + height);
glEnd();
// Bottom middle quad [2nd quad]
glBegin(GL_QUADS);
// Bottom left
glTexCoord2f(maxTexCoordBorderX, 1.0);
glVertex2i(pos.x + m_borderWidth, pos.y + height);
// Top left
glTexCoord2f(maxTexCoordBorderX, (GLfloat)1.0 - maxTexCoordBorderY);
glVertex2i(pos.x + m_borderWidth, pos.y + height - m_borderWidth);
// Top right
glTexCoord2f((GLfloat)1.0 - maxTexCoordBorderX, (GLfloat)1.0 - maxTexCoordBorderY);
glVertex2i(pos.x + width - m_borderWidth, pos.y + height - m_borderWidth);
// Bottom right
glTexCoord2f((GLfloat)1.0 - maxTexCoordBorderX, 1.0);
glVertex2i(pos.x + width - m_borderWidth, pos.y + height);
glEnd();
Sie können sehen, dass ich maxTexCoordBorderX
Variable bin mit der Rand und die Bildgröße auf Basis berechnet wird. Bildbreite ist 32 und Randbreite ist 2.
maxTexCoordBorderX
= 2/32 = 0,0625
Könnte jemand bitte helfen Sie mit bei herauszufinden, wo das Problem ist?
Vielen Dank für die Antwort Jason, aber könnten Sie mir erklären, was Sie durch Abtasten auf den Texel-Zentren bedeuten haben? –
Ich habe mit einem groben Diagramm aktualisiert. – JasonD
Danke Jason, es hat mein Problem gelöst! –