Я работаю над интерфейсом на основе OpenGL, написанным на C. У меня есть иерархия элементов управления - небольшие квадратные 2D-блоки внутри прокручиваемой области большего элемента управления.Внутри маленьких коробочек нарисованы 3D сцены.3D-сцену нужно прорезать в маленьких двухмерных прямоугольниках, а маленькие двухмерные прямоугольники следует обрезать в пределах большей области.
glScissor()
является очевидным кандидатом на то, чтобы рисование занимало место в требуемой области.Проблема в том, что я не могу одновременно вызвать glScissor()
для большой области, а затем снова вызвать glScissor()
для субрегионов внутри большей ножничной области.
Пример кода для демонстрации того, что я хочу:
void drawBigBox() {
glScissor( ... ); //set the bounds of the larger region
for each little box {
//these might be anywhere, but they should only be visible if inside the glScissor bounds
drawLittleBoxes();
}
}
void drawLittleBoxes() {
//draw only inside little box -- Whoops! This replaces the big box bounds!
//How can I meet this constraint while retaining the outer scissor region?
glScissor( ... );
draw3dScene();
}
Есть ли простой способ делать то, что я хочу?Очевидно, что я также могу рассчитать пересечение маленьких и больших ножничных ящиков, или я мог бы более тщательно обрезать / спроецировать мою 3D-сцену, но это сложнее, чем вызов OpenGL.Возможно, есть другой подход к этому, о котором я не знаю.
Спасибо!