При вращении прямоугольника (НЕ КВАДРАТА!) из-за aspect ratio наложенная текстура искажается. Подскажите как избавиться от этого эффекта? Нельзя менять Viewport и подгонять параметры Ortho, именно изменить aspect ratio или размеры прямоугольника. Буду рад любому совету! В аттаче PNG-картинка с этим искажением (2.5Кб): круг ДОЛЖЕН остаться кругом. С ней сразу понятно.
Я может чего не понимаю, но помоему ошибка в том, что ты вращаешь прямоугольник не в плоскости экрана. Т.е. тебе нужно выбрать правильную ось вращения. PS: Если ты используешь настройки проекции по умолчанию, то нужно вращать, так glRotatef,[theta],0.0,0.0,1.0
NaZGuL> В плоскости: "glRotatef(FAngle, 0, 0, 1);"r90 r90> Именно. Как в планиметрии. Проблема вот в чем: Допустим есть квадратный объект, скажем 20x20. При некотором разрешении он занимает X*Y пикселей экрана (не факт, что X равен Y). При повороте объекта на угол (скажем 90 градусов), объект будет занимать Y*X пикселей. И, если X не равен Y, то тут и получается это самое искажение. Из-за того, что я не могу менять разрешение и размер области вывода OpenGL, нужно как-то по-другому. Сейчас я просто пересчитываю размеры в зависимости от угла поворота и AspectRatio. Но хочется найти более элегантный способ Все еще жду советов...
Bohdan200> Мне нельзя изменять общий размер области вывода NaZGuL> Тогда квадрат будет некрадратным (вроде как)
Вокруг Z (в плоскости экрана). Для примера положи на стол лист и поверни в плоскости стола Из-за aspect ratio OpenGL исказит пропорции и текстура будет внешне другой ((
Xerx Вот с такими параметрами все будет Ок! Окно размер: 640x480 ... glFrustum(-1.0,1.0,-0.75,0.75,0.1,100.0); .... Смысл уловил? Нужно просто установить вместо (-0.75,0.75) свои числа. Получить их можно вот так Window_Y_Size/Window_X_Size. PS: 480/640 = 0.75, 600/800 = 0.75, 768/1024 = 0.75 Это для тех, кому лень цифры считать! И еще. Для glOrtho тоже должно прокатить.
Xerx При ортографической проекции, практически создаются двухмерные изображения в плоскости z=0. То есть перспектива не учитывается. И при изменении координаты z размеры объектов и углы между ними не изменяются. В отличие от перспективной. Вот стандартный пример инициализации. На входе размеры окна. Код (Text): GLvoid ReSizeGLScene(GLsizei width, GLsizei height) { if (height==0) { height=1; } glViewport(0,0,width,height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }