Member 13013288 Ответов: 0

Поддержка OpenGL блоки glbegin последний объект наследует атрибуты от предыдущего объекта.


Я пытаюсь создать несколько отдельных объектов с помощью openGL и freeGLUT.

У меня есть 3d-куб, представляющий моего игрока, который я могу перемещать с помощью пользовательских входов.
И у меня есть очень большой квадроцикл 100х100 (квадроциклов), представляющий землю.
У меня также есть свет, и я отслеживаю положение камеры с помощью третьего, неподвижного Куба.


Итак, вот в чем проблема:

Квадроцикл, очевидно, намного больше крошечного Куба в масштабе 1f, поэтому я масштабирую этот огромный квадроцикл до 0,03 f с помощью функции glScalef ().

Когда я рисую свой куб игрока, я рисую его после того, как нарисовал землю, и мой куб игрока наследует масштаб (становится крошечным и появляется в начале квадрата земли, а не в реальном начале.

Как я могу это исправить? так что мой игрок появляется в правильном начале, а не в начале земли, и что он не наследует масштаб земли?

void Scene::DrawCameraCube(float x, float y, float z)
{
	glTranslatef(x, y, z);
	glScalef(1, 1, 1);
	glRotatef(0, 1, 0, 0);
	
	glBegin(GL_QUADS);

        > <snip> drawing cube

        glEnd();
}



void Scene::DrawGround()
{
	glTranslatef(-3, -3, 0);
	glScalef(0.03, 0.03, 0.03);

	glBegin(GL_QUADS);

	> <snip> drawing quad ground. 

	glEnd();
}


Что я уже пробовал:

куча всякой всячины, меняющейся вокруг значений переменных, переключающей порядки преобразований и вращений.

Понятия не имею, что еще делать.

0 Ответов