【发布时间】:2014-06-01 06:19:30
【问题描述】:
所以我有一个分屏的 OpenGL 程序。经过研究,我的代码如下所示:
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT);
// 1
// ----- Camera -----
glViewport(0, 0, _windowW/2, _windowH);
// Tell OpenGL we want to manipulate the projection matrix
glMatrixMode(GL_PROJECTION);
// Undo previous transformations
glLoadIdentity();
// Perspective transformation
gluPerspective(_fov,_asp,_worldSize/_trolly,_trolly*_worldSize);
// Move main camera
_cameraLook[0] = _cameraLoc[0] + Sin(_th1)*Cos(_ph1)*_lookDistance;
_cameraLook[1] = _cameraLoc[1] + Sin(_ph1)*_lookDistance;
_cameraLook[2] = _cameraLoc[2] + Cos(_th1)*Cos(_ph1)*_lookDistance;
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(_cameraLoc[0], _cameraLoc[1], _cameraLoc[2], _cameraLook[0], _cameraLook[1], _cameraLook[2], 0, 1, 0);
// ----- Drawing of scene -----
drawSceneContents();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_DEPTH_BUFFER_BIT);
//glBindTexture(GL_TEXTURE_2D,_framebufImg1);
glBegin(GL_QUADS);
glTexCoord2f(0.25, 0.0); glVertex2f(-1.0, -1.0);
glTexCoord2f(0.25, 1.0); glVertex2f(-1.0, +1.0);
glTexCoord2f(0.75, 1.0); glVertex2f(+0.0, +1.0);
glTexCoord2f(0.75, 0.0); glVertex2f(+0.0, -1.0);
glEnd();
// 2
// ----- Camera -----
glViewport(_windowW/2, 0, _windowW/2, _windowH);
// Tell OpenGL we want to manipulate the projection matrix
glMatrixMode(GL_PROJECTION);
// Undo previous transformations
glLoadIdentity();
// Perspective transformation
gluPerspective(_fov,_asp,_worldSize/_trolly,_trolly*_worldSize);
// Move main camera
_cameraLook[0] = _cameraLoc[4] + Sin(_th2)*Cos(_ph2)*_lookDistance;
_cameraLook[1] = _cameraLoc[5] + Sin(_ph2)*_lookDistance;
_cameraLook[2] = _cameraLoc[6] + Cos(_th2)*Cos(_ph2)*_lookDistance;
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(_cameraLoc[4], _cameraLoc[5], _cameraLoc[6], _cameraLook[0], _cameraLook[1], _cameraLook[2], 0, 1, 0);
// ----- Drawing of scene -----
drawSceneContents();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_DEPTH_BUFFER_BIT);
//glBindTexture(GL_TEXTURE_2D,_framebufImg1);
glBegin(GL_QUADS);
glTexCoord2f(0.25, 0.0); glVertex2f(-0.0, -1.0);
glTexCoord2f(0.25, 1.0); glVertex2f(-0.0, +1.0);
glTexCoord2f(0.75, 1.0); glVertex2f(+1.0, +1.0);
glTexCoord2f(0.75, 0.0); glVertex2f(+1.0, -1.0);
glEnd();
但是,我不明白它为什么会起作用,而且我一定错过了 OpenGL 所做的一些基本工作。 我不明白的部分是在每个“屏幕”的末尾,我在其中绘制了一个带纹理的四边形(最后 5 行代码)。但是这种纹理是从哪里来的呢?为什么它恰好是我为该屏幕绘制的场景的纹理?我从来没有做过 glBindTexture 或 glEnable(GL_TEXTURE_2D) 任何事情,事实上在所有这些代码之前我可以放一个 glDisable(GL_TEXTURE_2D) 并且代码仍然有效!如何?除了纹理坐标之外,如何在代码中不提及纹理的情况下获得纹理四边形?
【问题讨论】: