在OpenGL中保存一个特定的相机视图为图像
Saving a specific Camera View in OpenGL as Image
我有一个带有对象的3D场景,我想保存该对象的视图,该视图与我当前看到的屏幕不同。所以我想我只需要做这样的事情(伪代码):
PushMatrix()
LoadIdentity()
TranslateAndRotate()
gluperspective()
setViewport()
DrawScene()
saveScreenshot()
PopMatrix()
但是我只得到相机当前视图的图片,而不是我指定的那个。我忘了什么吗?
编辑:由于下面的答案,我尝试了以下代码:
void ScenePhotograph(GLubyte* Target, float *Translation, float RotationAroundY)
{
glMatrixMode(GL_PROJECTION);
gluPerspective(54.0f, (GLfloat)openGLControl1->Width / (GLfloat)openGLControl1->Height, 1.0f, 3000.0f);
glViewport(0,0,openGLControl1->Width, openGLControl1->Height);
glMatrixMode(GL_MODELVIEW);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(Translation[0],Translation[1],Translation[2]);
glRotatef(RotationAroundY, 0,1,0);
openGLControl1_OnDrawGL(NULL,System::EventArgs::Empty);
openGLControl1->Refresh();
glReadPixels(0, 0, openGLControl1->Width, openGLControl1->Height, GL_RGB, GL_UNSIGNED_BYTE, Target);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
cam->SetView();
openGLControl1_OnDrawGL(NULL,System::EventArgs::Empty);
openGLControl1->Refresh();
glutSwapBuffers();
}
这给了我一个访问冲突在glutSwapBuffers();什么好主意吗?
首先,确保在代码中没有混合使用不同的矩阵。要获得屏幕截图,您需要将相机的位置与您通常在屏幕上查看它的位置完全相同,但是,在交换缓冲区之前,您需要从当前帧缓冲区读取像素并将其存储为图像。
所以,你需要的是这样的东西:
glMatrixMode(GL_PROJECTION);
gluPerspective();
glMatrixMode(GL_MODELVIEW);
glClear(); // clear buffers here
loadIdendity();
setCameraPosition();
TranslateRotate();
DrawScene();
screenShot();
// do again to set your camera to correct position
glClear(); // clear buffers here
loadIdendity();
setCameraPosition();
TranslateRotate();
DrawScene();
swapBuffers();
正如您所看到的,,屏幕截图负责从当前framebuffer读取像素并将其保存为图像。所以再做一遍,把相机定位到正确的位置
相关文章:
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 视图中的参数推导失败:take_while
- 了解 GLM- openGL 中的相机转换
- OpenGL相机和相机空间转型的困惑
- 如何维护资源管理器项目视图中当前可见的项目列表
- 在另一个类视图中添加最多2个图表的正确方法是什么
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- OpenVR:向视图方向移动
- 使用 WIN32 API (C/C++) 对特定树视图项进行着色
- 将所选值(通过视图)从 boost::multi_array 复制到另一个数组 (C++)
- 如何在不使用滚动条的情况下使视图更改
- 通过 API 控制 DJI 相机
- 如何使用gluLookAt围绕OpenGL中的点旋转相机视图
- 基于Quaternion的第一人称视图相机
- GlviewPort问题 - 获得伸展的相机视图
- 嵌入UI视图内部现场相机视图BlackBerry 10
- 计算相机视图矩阵
- GLFW - 用鼠标旋转相机的视图矩阵使其旋转
- 在OpenGL中保存一个特定的相机视图为图像
- 相机/视图矩阵