将模型渲染到帧缓冲区
Render model to frame buffer
在OpenGL程序中,我想渲染内存中的所有内容。我不想将数据呈现到窗口/屏幕上。所以我创建了一个帧缓冲区。我想做的下一件事是渲染一个三维模型到帧缓冲区。
我已经下载了Assimp库来处理模型的加载。我只是不知道该怎么处理。它看起来像是希望你把所有东西都直接画到一个窗口上?
我现在想做的就是加载该模型并将其绘制到我的帧缓冲区中。基本上就是这些。
关于如何轻松做到这一点,有什么建议吗?另一个图书馆的提示(可能更适合我的需求)也很受欢迎。
我的代码,我想在哪里绘制到我的帧缓冲区:
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo); // Bind our frame buffer for rendering
glPushAttrib(GL_VIEWPORT_BIT | GL_ENABLE_BIT); // Push our glEnable and glViewport states
glViewport(0, 0, window_width, window_height); // Set the size of the frame buffer view port
glClearColor (0.0f, 1.0f, 0.0f, 1.0f); // Set the clear colour
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear the depth and colour buffers
glLoadIdentity(); // Reset the modelview matrix
// RENDER 3D MODEL HERE....
// TEAPOT AS EXAMPLE
glTranslatef(0.0f, 0.0f, -5.0f); // Translate back 5 units
glRotatef(rotation_degree, 1.0f, 1.0f, 0.0f); // Rotate according to our rotation_degree value
//glFrontFace(GL_CW);
glutSolidTeapot(1.0f); // Render a teapot
//glFrontFace(GL_CCW);
int r = glGetError();
int s = glCheckFramebufferStatus(GL_FRAMEBUFFER);
glPopAttrib(); // Restore our glEnable and glViewport states
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); // Unbind our texture
assimp库只是一个加载程序;它不在乎你是绘制到屏幕外的帧缓冲区还是窗口的后台缓冲区。
请尝试检查glGetError和glCheckFramebufferStatus的返回代码。
在我的OpenGL程序中,我想渲染内存中的所有内容。我不想将数据呈现到窗口/屏幕上。所以我创建了一个帧缓冲区。我想做的下一件事是渲染一个三维模型到帧缓冲区。
您有OpenGL上下文吗?我看到你在用GLUT。要使用GLUT获取OpenGL上下文,必须创建一个窗口。如果没有OpenGL上下文,就无法创建帧缓冲区对象。
对你来说,这意味着你不能使用GLUT。但这没什么大不了的,因为GLUT只是一个库,很多人认为它是OpenGL的一部分,但事实并非如此。
我建议您使用PBuffer进行屏幕外渲染。在X11/GLX中,这很简单,但在Windows中有点乏味。在Windows中,您需要创建一个代理窗口,以获得第一个扩展加载阶段的中间OpenGL上下文,您需要访问该函数来创建PBuffer;但是,该代理窗口不需要变得可见。请注意,不能使用带有OpenGL上下文的不可见窗口进行屏幕外渲染,因为在这种情况下,像素将无法通过像素所有权测试,因此不会被处理。
- C++字符*缓冲区的大小
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- ostream过载时的缓冲区冲洗
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- QTableView:endMoveRows在模型中重置水平页眉大小
- Xaudio2在更改缓冲区或循环时弹出声音
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 将IBM Rhapsody模型集成到VS 2019中
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 多线程双缓冲区
- 旋转模型矩阵时的形状失真
- Android P-9.0.0_r53 Logcat主缓冲区超出定义大小
- 套接字读取后,我在缓冲区中看到意外输入
- std::带有自定义缓冲区的 iostream 不允许我写入
- 成员函数调用和C++对象模型
- 从返回的顶点缓冲区查询顶点结构
- 使用模具缓冲区绘制三维模型的轮廓
- 将模型渲染到帧缓冲区