LINUX.ORG.RU

opengl: как обрезать сцену с четырёх сторон ?


0

0

вообщем имеется маленькая текстурка, размноженная с помощью GL_REPEAT по всему окну. как с помощью клип плейнов обрезать её так, чтобы остался прямоугольник по центру размеров w x h ? У меня фигня получается ... glClipPlane(GL_CLIP_PLANE0, ev); первая плоскость при любых значениях ev[0],ev[1],ev[3] вращается вдоль оси z. А надо что первая плоскость отсечения была параллельно плоскости yz, а пересекала ось х в точке w/2 .. [Матрица в момент осечения == нормальной] Спасибо.


[Матрица в момент осечения != нормальной]

CKulT
() автор топика

Используй ортогональную проекцию и просто меняй рамеры плоскости на которую накладываешь текстуру. Можно по кординатам можно при помощи glScale

anonymous
()
Ответ на: комментарий от anonymous

Вот так всё получилось:
			static GLdouble eq[4][4] =
			{
				{0.0, 1.0, 0.0, 0.0},
				{1.0, 0.0, 0.0, 0.0},
				{0.0, -1.0, 0.0, 0.0},
				{-1.0, 0.0, 0.0, 0.0}
			};

			glPushMatrix();
			glTranslatef (-finfo->image[current].w/2, -finfo->image[current].h/2, 0.0);

			glClipPlane (GL_CLIP_PLANE0, eq[0]);
			glClipPlane (GL_CLIP_PLANE1, eq[1]);
			glEnable (GL_CLIP_PLANE0);
			glEnable (GL_CLIP_PLANE1);
			glPopMatrix();
			glPushMatrix();
			glTranslatef(finfo->image[current].w/2, finfo->image[current].h/2, 0.0);
			glClipPlane (GL_CLIP_PLANE2, eq[2]);
			glClipPlane (GL_CLIP_PLANE3, eq[3]);
			glEnable (GL_CLIP_PLANE2);
			glEnable (GL_CLIP_PLANE3);
			glPopMatrix();

			matrix_push();
			matrix_pure_reset();
			matrix_move_z(-8.0f);
			draw_background(BGquads.bits(), &texQuads, 32, width(), height(), t);
			matrix_pop();
			write_gl_matrix();

			glDisable (GL_CLIP_PLANE3);
			glDisable (GL_CLIP_PLANE2);
			glDisable (GL_CLIP_PLANE1);
			glDisable (GL_CLIP_PLANE0);

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