в функции Draw () GLForm (openGL с Borland Builder) я сначала рисую изображение с помощью SDK-функции capture_card :: paintGL ().И эта функция заставляет иметь эту проекцию перед вызовом:
glViewport(0, 0, (GLsizei)newSize.width, (GLsizei)newSize.height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
И на переднем плане этого нарисованного изображения я должен нарисовать другой слой, который уже был закодирован для другого видового экрана и другой проекции glortho:
(в MainResizeGL (), вызываемом для событий "onResize"):
glViewport(-width, -height, width * 2, height * 2);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(double(-width)*viewport_ratio, double(width)*viewport_ratio, double(-height), double(height), 1000.0, 100000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
(и в MainDraw (), вызываемом "Ontimer"):
glLoadIdentity();
glTranslatef(0.0, 0.0, -50000.0);
mpGLDrawScene->DrawScene(); //(this calls a doDrawScene() I don't understand exactly how it draws : with calling this->parent, etc.)
glFlush();
SwapBuffers(ghDC);
Таким образом, я преобразовал MainDraw () в следующее:
// viewport and projection needed for the paintGL
glViewport(0, 0, (GLsizei)newSize.width, (GLsizei)newSize.height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
// call of the paintGL
if(capture_button_clicked) capture_card::paintGL();
// content of the ResizeGL in order to get back to the projection desired and to matrixmode modelview
glViewport(-width, -height, width * 2, height * 2);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(double(-width)*viewport_ratio, double(width)*viewport_ratio, double(-height), double(height), 1000.0, 100000.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// original drawscene call
glLoadIdentity();
glTranslatef(0.0, 0.0, -50000.0);
mpGLDrawScene->DrawScene(); //(this calls a doDrawScene() I don't understand exactly how it draws : with calling this->parent, etc.)
glFlush();
SwapBuffers(ghDC);
В результате я вижу элементы «drawscene» древнего проекта, но когда я нажимаю на «capture_button», paintGL остается невидимым, инарисованные элементы превращаются в нечто вроде канвы альфа-канала.
Я попытался добавить glScalef (width, height, 1) после paintGL, изменил glTranslatef (0,0,50000), в результате чего я увиделнебольшое количество пикселей с цветами paintGL, но элементы наложения затем исчезают.
Как я могу заставить эти два разных видовых экрана наложить друг на друга (т. е. drawscene above the paintGL)?
Заранее спасибо, ура, Арно.