Показать сообщение отдельно
  #3  
Старый 17.04.2012, 19:28
Аватар для Gravitas
Gravitas Gravitas вне форума
Новичок
 
Регистрация: 12.06.2011
Сообщения: 61
Версия Delphi: 7
Репутация: 38
По умолчанию

Код:
// Тут предварительные вычисления и др
	
// прорисовка "дырявой" стены  (!!!)
	glEnable(GL_STENCIL_TEST);
	glStencilFunc(GL_ALWAYS, 1, 0);
	glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
	glBegin(GL_QUADS);
		glTexCoord2f(0, 0); glVertex3f(-2, 0, 2);
		glTexCoord2f(0, 1); glVertex3f(-2, 2, 2);
		glTexCoord2f(1, 1); glVertex3f(2, 2, 2);
		glTexCoord2f(1, 0); glVertex3f(2, 0, 2);
	glEnd();
	glStencilFunc(GL_ALWAYS, 2, 0);
	glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
	glBegin(GL_QUADS);
		glTexCoord2f(0, 0); glVertex3f(-1, 0, 2);
		glTexCoord2f(0, 1); glVertex3f(-1, 1, 2);
		glTexCoord2f(1, 1); glVertex3f(1, 1, 2);
		glTexCoord2f(1, 0); glVertex3f(1, 0, 2);
	glEnd();
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glStencilFunc(GL_EQUAL, 1, 255);
	glColor3f(0.0f, 1.0f, 0.0f);
	glBegin(GL_QUADS);
		glTexCoord2f(0, 0); glVertex3f(-2, 0, 2);
		glTexCoord2f(0, 1); glVertex3f(-2, 2, 2);
		glTexCoord2f(1, 1); glVertex3f(2, 2, 2);
		glTexCoord2f(1, 0); glVertex3f(2, 0, 2);
	glEnd();
	glDisable(GL_STENCIL_TEST);
// остальные стены и пол
glColor3f(0.0f, 0.0f, 1.0f);
	glBegin(GL_QUADS);
		glTexCoord2f(0, 0); glVertex3f(2, 0, 2);
		glTexCoord2f(0, 1); glVertex3f(2, 2, 2);
		glTexCoord2f(1, 1); glVertex3f(2, 2, -2);
		glTexCoord2f(1, 0); glVertex3f(2, 0, -2);
	glEnd();
...
При таком раскладе появляется моргание при прорисовке. Нужный кусок стены хоть и становится прозрачным, но частично и не всегда.
__________________
Gravitas
Ответить с цитированием