Я не могу нарисовать глубину сложности, используя буфер трафарета.
Я пытался использовать эти шаги :
void CALLBACK display(void)
{
MatriceUmbra(points, sourcePosition, shadowMatrix);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
glLoadIdentity();
glRotatef(50.0, 1.0, 1.0, 1.0);
glRotatef(beta, 0, 1, 0);
//glRotatef (gama, 1, 1, 1);
glClear(GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_STENCIL_TEST);
glStencilFunc(GL_ALWAYS, 0, 0);
glStencilOp(GL_KEEP, GL_INCR, GL_INCR);
glPushMatrix();
pamant();
glPushMatrix();
glDisable(GL_LIGHTING);
//glDisable(GL_DEPTH_TEST);
glColor4f(0.0, 0.1, 0.0, 0.7);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glMultMatrixf((GLfloat*)shadowMatrix);
glStencilFunc(GL_EQUAL, 1, 1);
glStencilMask(GL_FALSE);
glDisable(GL_DEPTH_TEST);
caruta();
glPopMatrix();
glEnable(GL_LIGHTING);
glEnable(GL_DEPTH_TEST);
caruta();
glPopMatrix();
glFlush();
int *data = malloc(500 * 500 * 4);
glReadPixels(0, 0, 500, 500, GL_STENCIL_INDEX, GL_INT, data);
glDrawPixels(500, 500, GL_COLOR_INDEX, GL_INT, data);
}
void CALLBACK myReshape(GLsizei w, GLsizei h)
{
if (!h) return;
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
glOrtho(-400, 400, -400 * (GLfloat)h / (GLfloat)w, 400 * (GLfloat)h / (GLfloat)w, -600.0, 600.0);
else
glOrtho(-400 * (GLfloat)w / (GLfloat)h, 400 * (GLfloat)w / (GLfloat)h, -400, 400, -600.0, 600.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main(int argc, char** argv)
{
auxInitDisplayMode(AUX_SINGLE | AUX_RGB | AUX_DEPTH16 | AUX_STENCIL);
auxInitPosition(0, 0, 500, 500);
auxInitWindow("Iluminarea");
myinit();
auxKeyFunc(AUX_RIGHT, inainte);
auxKeyFunc(AUX_LEFT, inapoi);
auxKeyFunc(AUX_UP, interiorul_carutei);
auxReshapeFunc(myReshape);
auxMainLoop(display);
return(0);
}
В настоящее время я вижу начальную сцену и не вижу сложности глубины как сцены.
Мой объект - тележка, и я ее вижу, но я также попытался нарисовать глубину сложности, как я упоминал ранее в ссылке.
Вот шаги, которые я попытался безуспешно:
Очистить буфер глубины и трафарета:
glClear(GL_STENCIL_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
Включить трафарет:
glEnable(GL_STENCIL_TEST)
Установите правильные параметры трафарета:
glStencilFunc(GL_ALWAYS, 0, 0)
glStencilOp(GL_KEEP, GL_INCR, GL_INCR)
Нарисуйте сцену.
- Считать буфер трафарета с помощью
glReadPixels()
, используя GL_STENCIL_INDEX
в качестве аргумента формата.
- Нарисуйте буфер трафарета на экране, используя
glDrawPixels()
с GL_COLOR_INDEX
в качестве аргумента формата.