Вопрос

Я работаю с OpenGL, и я пытаюсь создать сферу, которая имеет отражающую поверхность. У меня это отражается, но отражение не правильно. Объект в отражении должен согнуться и деформироваться в соответствии с кривой поверхности, вместо этого я получаю только прямое отражение. Я не использовал GL_Stactress много, поэтому помощь будет очень ценится. Я предоставил кусочки кода, такого как создание сферы и метод рисования. Если кому-то нужно больше, дайте мне знать.

Творчество:

sphere = gluNewQuadric();
gluQuadricDrawStyle(sphere,  GLU_FILL);
gluQuadricNormals(sphere, GLU_SMOOTH);
gluSphere(sphere, 1, 100, 100);
gluDeleteQuadric(sphere);

Рисунок:

glClearColor (0.0,0.0,0.0,1);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
glLoadIdentity();

glTranslatef(0, 0, -10);

glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); //disable the color mask
glDepthMask(GL_FALSE); //disable the depth mask
glEnable(GL_STENCIL_TEST); //enable the stencil testing
glStencilFunc(GL_ALWAYS, 1, 0xFFFFFFFF);
glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); //set the stencil buffer to replace our data

sphereDraw(); //the mirror surface

glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); //enable the color mask
glDepthMask(GL_TRUE); //enable the depth mask

glStencilFunc(GL_EQUAL, 1, 0xFFFFFFFF);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); //set the stencil buffer to keep our next lot of data

glPushMatrix();
glScalef(1.0f, -1.0f, 1.0f); //flip the reflection vertically
glTranslatef(0,2,-20); //translate the reflection onto the drawing plane
glRotatef(angle,0,1,0); //rotate the reflection
//draw object as our reflection
glPopMatrix();

glDisable(GL_STENCIL_TEST); //disable the stencil testing

glEnable(GL_BLEND); //enable alpha blending
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); //set the blending function
sphereDraw(); //draw our bench
glDisable(GL_BLEND); //disable alpha blending

//draw object

Поскольку я новичок, чтобы использовать GL_STEND I, не был уверен, что это просто что-то маленькое или, если гораздо больше необходимо сделать, чтобы обнаружить этот угол отражения.

Это было полезно?

Решение

Вы считаете, что используете Отражение / сопоставление окружающей среды?

Есть 2 основных формы. Сферическое отображение окружающей среды Обычно работает, имея предварительно рассчитанную карту окружающей среды. Это может, однако, было сделано динамически. Его основным недостатком является то, что это зависит от.

Другая система Картирование кубической среды. Отказ Кубика очень проста в настройке и включает просто оказание вашей сцены 6 раз в 6 разных направлениях (т.е. на каждом лицевом кубе). Картирование Cubics Env - независимая.

Есть другая система, которая сидит между сферической и кубической. Это называется Двойная параболоидная среда отображение. Отказ Он имеет обратную спину, что генерируют двойные параболоиды, довольно сложны (например, сферические), но (например, CUBIC) это вид независимо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top