Мое изображение 1280x800, а мой размер экрана 1280x800. Это должно нарисовать отлично. Я создаю четырехугольник размером с экран и настраиваю текстуру так, чтобы она соответствовала квадрату. Но сейчас он рисует квадратную текстуру в левом верхнем углу экрана, которая не в масштабе и недостаточно велика.
Я не знаю, почему это не работает, я пытался написать размер текстуры больше при рисовании, и кажется, что это работает, но я не знаю, почему это не работает при рисовании на 1280x800 квад.
Как мне создать полноэкранный квад?
Вот как я сейчас это делаю:
Это мой OPENGL и код настройки дисплея:
DisplayMode displayMode = null;
DisplayMode[] modes = Display.getAvailableDisplayModes();
for (int i = 0; i < modes.length; i++) {
if (modes[i].getWidth() == World.SCREEN_WIDTH && modes[i].getHeight() == World.SCREEN_HEIGHT && modes[i].isFullscreenCapable()) {
displayMode = modes[i];
}
}
Display.setDisplayMode(displayMode);
Display.setFullscreen(false);
Display.create();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, World.SCREEN_WIDTH, World.SCREEN_HEIGHT, 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
Это мой код для рисования текстурированного четырехугольника:
background = TextureLoader.getTexture("PNG", new FileInputStream(new File("res/menu/background.png")));
glBindTexture(GL_TEXTURE_2D, background.getTextureID());
glPushMatrix();
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(0, 0); // Upper left
glTexCoord2f(1, 0);
glVertex2f(World.SCREEN_WIDTH, 0); // Upper right
glTexCoord2f(1, 1);
glVertex2f(World.SCREEN_WIDTH, World.SCREEN_HEIGHT); // Lower right
glTexCoord2f(0, 1);
glVertex2f(0, World.SCREEN_HEIGHT); // Lower left
glEnd();
glPopMatrix();
Ответы:
Вероятной причиной является то, что у вас может не быть идентичности в матрице вида модели, когда вы рисуете полноэкранный квад. Это может произойти, если вы рисуете что-то еще до четверки.
Из вашего установочного кода я отмечаю, что вы правильно переключаете матричный режим на GL_MODELVIEW, но после этого вы не делаете вызов glLoadIdentity (это нормально, так как изначально это должна быть идентификация, но это хорошая привычка, в которую можно войти).
Когда вы рисуете свой квад, вы окружаете его вызовом glPushMatrix / glPopMatrix. Этого само по себе недостаточно для того, чтобы сделать идентичность матрицы; из спецификации :
(Мой акцент.)
Другими словами, если ваша предыдущая матрица вида модели не была идентичностью, то после вызова glPushMatrix новая матрица вида модели также не будет идентичностью.
Самое простое решение - добавить glLoadIdentity после вызова glPushMatrix.
источник