LINUX.ORG.RU

OpenGL: Текстура вращается как бешеная

 , ,


0

2

Здравствуйте! Рисую текстуру с памощью openGL:

glEnable(GL_TEXTURE_2D);

		glBindTexture(GL_TEXTURE_2D, texture.texture);
		glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
		glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_NEAREST);

		glRotatef((double)angle, 0.0, 0.0, 1.0);

		glBegin(GL_QUADS);
			switch(flip){
				case EGE_FLIP_NONE:
					glTexCoord2f(0.0f, 0.0f); glVertex2f(x, y);
					glTexCoord2f(1.0f, 0.0f); glVertex2f(x + w, y);
					glTexCoord2f(1.0f, 1.0f); glVertex2f(x + w, y + h);
					glTexCoord2f(0.0f, 1.0f); glVertex2f(x, y + h);
				break;
				case EGE_FLIP_VERTICAL:
					glTexCoord2f(0.0f, 0.0f); glVertex2f(x, y + h);
					glTexCoord2f(1.0f, 0.0f); glVertex2f(x + w, y + h);
					glTexCoord2f(1.0f, 1.0f); glVertex2f(x + w, y);
					glTexCoord2f(0.0f, 1.0f); glVertex2f(x, y);
				break;
				case EGE_FLIP_HORIZONTAL:
					glTexCoord2f(0.0f, 0.0f); glVertex2f(x + w, y);
					glTexCoord2f(1.0f, 0.0f); glVertex2f(x, y);
					glTexCoord2f(1.0f, 1.0f); glVertex2f(x, y + h);
					glTexCoord2f(0.0f, 1.0f); glVertex2f(x + w, y + h);
				break;
			}
		glEnd();

glDisable(GL_TEXTURE_2D);

Решил добавить поворот:

...
glRotatef((double)angle, 0.0, 0.0, 1.0);
glBegin(GL_QUADS);
...

Но при запуске программы, текстура начинает вращатся вокруг своей оси как бешеная. Мне нужно, что бы она оставалась на месте, а не крутилась! Что не так?

Ответ на: комментарий от O02eg

При чём тут SDL вообще?

например при том, что это тоже набор библиотек (во многих дистрибутивах есть) но предоставляет он ещё и работу со шрифтами (рендер в текстуру, как и глют) и работу со звуком

Frost ★★★
()
Ответ на: комментарий от O02eg

да и приложения работают на кофеварках со старенькими встроенными видеокартами

Frost ★★★
()

Поворот матрицы преобразования выполняется при каждой перерисовке. Нужно делать

glLoadIdentity();
glRotatef((double)angle, 0.0, 0.0, 1.0);
glBegin(GL_QUADS);

Либо делать

glRotatef((double)angle, 0.0, 0.0, 1.0);

при инициализации, а не перерисовке. Наверняка сказали уже.

robus ★★★★★
()
Ответ на: комментарий от egordorichev

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_NEAREST);

И зачем вы каждый раз устанавливаете один и тот же стейт? Если он не меняется, то установить его достаточно только один раз при загрузке текстуры.

andreyu ★★★★★
()
Ответ на: комментарий от Frost

SDL - прослойка между системой, useroм и opengl. Свою сейчас пишу

egordorichev
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.