|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
OpenGL Вырезание окна
Средствами OpenGL сделал простенькую комнату и наложил текстуры. Возникла потребность создать небольшое прямоугольное отверстие в "стене". Поискав, наткнулся на отсечение, но в данном случае оно не подходит. Как еще можно попробовать?
Gravitas |
#2
|
||||
|
||||
Цитата:
|
#3
|
||||
|
||||
Код:
// Тут предварительные вычисления и др // прорисовка "дырявой" стены (!!!) 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 Последний раз редактировалось Gravitas, 17.04.2012 в 19:34. |
#4
|
||||
|
||||
скинь весь проект, время будет поковыряюсь..
|
#5
|
||||
|
||||
Проект на С++. Просто на другом форуме регаться с моим интернетом очень утомительно, а OpenGL в этом случае и там и сям одинаков.
Gravitas |