Всего нубов, изучающих openGL, и у меня нет кода для публикации, потому что это вопрос о концепции, а не о моей текущей реализации. Если код абсолютно необходим, дайте мне знать, и, к моему стыду, я выложу немного.
В основном у меня есть VBO, который отображает 2D-изображение в GL. Тем не менее, поскольку размер моего окна просмотра составляет 800x600, а изображение - 1024x1024, изображение уменьшается в соответствии с размером окна просмотра. Я очень долго гуглял по этой проблеме, и все, что я могу найти, - это ссылки на такие вещи, как учебные пособия NeHe, в которых говорится, что это произойдет, но без объяснения причин и способов предотвращения этого. Я думаю, что нашел один форум, который сказал, что это можно предотвратить, но опять же, никаких подробностей.
Итак, мне любопытно, как это можно сделать? Я просто изучаю GL, так что я в значительной степени новичок в этой области. Если это помогает, я делаю 2D-игру и пытаюсь использовать это VBO для отображения фонового изображения для уровня, так что при перемещении камеры влево и вправо, вверх и вниз вы, по сути, прокручиваете это фоновое изображение. , Любая помощь будет принята с благодарностью и благодарностью. :)
P.S. Кроме того, я понимаю, что это, вероятно, должно быть в отдельном вопросе, но любые объяснения или ссылки для объяснения системы координат для карт вершин / текстур также будут оценены. Я не совсем понимаю, как можно отображать текстуры с 0-1 и преобразовывать их в пиксельные координаты в пространстве.
UPDATE
Хорошо, после еще одного приближения к поиску ЕДИНСТВЕННОЕ решение, которое я нашел, состоит в том, чтобы временно настроить область просмотра по крайней мере на размер вашей 2D-текстуры, затем нарисовать 2D-текстуру, а затем вернуть область просмотра обратно к размеру окна (или каким бы оно ни было). Вот так:
//Set viewport so size of the current texture - note this is using a VBO
glViewport(0, 0, 1024, 1024);
glBindTexture(GL_TEXTURE_2D, texture);
glDrawArrays(GL_QUADS, 0, 4 );
glPopAttrib();
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindTexture(GL_TEXTURE_2D, 0);
//Set the viewport back to the window size
glViewport(0, 0, 800, 600);
Единственное, это похоже на ОСНОВНОЙ взлом. Это официальное или приемлемое решение?