我想通过glReadPixels()从动画中获取每个OpenGL帧,并将数据转换为OpenCV :: Mat.我知道glReadPixels()从左到右按行从下一行到上一行获取数据.另一方面,OpenCV以不同方式存储数据.
有没有人知道任何库或任何帮助我将数据从glReadPixels转换为OpenCV的教程/示例: C++中的Mat?
摘要
OpenGL frame -----------------------> CV::Mat
Data from left to right, Data from left to right,
bottom to top. top to bottom.
Run Code Online (Sandbox Code Playgroud) 我有一个程序模拟随时间变化的物理系统.我希望以预定的间隔(例如每10秒)输出模拟状态到文件的可视化.我想以这样的方式做到这一点,即很容易"关闭可视化"而根本不输出可视化.
我正在将OpenGL和GLUT作为图形工具来进行可视化.然而问题似乎是,首先,它看起来只是输出到窗口而无法输出到文件.其次,为了生成可视化,您必须调用GLUTMainLoop并停止执行main函数 - 从那时起调用的唯一函数是来自GUI的调用.但是我不希望这是一个基于GUI的应用程序 - 我希望它只是一个从命令行运行的应用程序,它会生成一系列图像.有没有办法在GLUT/OpenGL中执行此操作?或者OpenGL完全是错误的工具,我应该使用别的东西
我正在尝试使用glReadPixels从图像中获取颜色数据.我应该使用glReadPixels,但我似乎无法搞清楚.它是一个更大的项目的一部分,但现在我想要的只是知道如何正确使用它.
我查了一下,得到了这样的东西:
void glReadPixels(GLint x,
GLint y,
GLsizei width,
GLsizei height,
GLenum format,
GLenum type,
GLvoid* data);
Run Code Online (Sandbox Code Playgroud)
但我不确定我应该在最后一个论点中加入什么,当我这样做时,我甚至会使用它.真的很感激帮助!(即:如何使用它的简单示例,或如何获得颜色)
我正在尝试对图像文件执行一些OpenGL ES 2.0渲染,而不依赖于在屏幕上向用户显示的渲染.我渲染的图像尺寸与用户屏幕不同.我只需要一个GL_RGB数据的字节数组.我对glReadPixels很熟悉,但我不认为它会在这种情况下发挥作用,因为我没有从已经渲染的用户屏幕中拉出来.
伪代码:
// Switch rendering to another buffer (framebuffer? renderbuffer?)
// Draw code here
// Save byte array of rendered data GL_RGB to file
// Switch rendering back to user's screen.
Run Code Online (Sandbox Code Playgroud)
如何在不中断用户显示的情况下执行此操作?我宁愿不必忽略用户的屏幕,为单帧绘制我想要的信息,glReadPixeling然后让它消失.
同样,我不希望它向用户显示任何内容.这是我的代码.不行......我错过了什么吗?
unsigned int canvasFrameBuffer;
bglGenFramebuffers(1, &canvasFrameBuffer);
bglBindFramebuffer(BGL_RENDERBUFFER, canvasFrameBuffer);
unsigned int canvasRenderBuffer;
bglGenRenderbuffers(1, &canvasRenderBuffer);
bglBindRenderbuffer(BGL_RENDERBUFFER, canvasRenderBuffer);
bglRenderbufferStorage(BGL_RENDERBUFFER, BGL_RGBA4, width, height);
bglFramebufferRenderbuffer(BGL_FRAMEBUFFER, BGL_COLOR_ATTACHMENT0, BGL_RENDERBUFFER, canvasRenderBuffer);
unsigned int canvasTexture;
bglGenTextures(1, &canvasTexture);
bglBindTexture(BGL_TEXTURE_2D, canvasTexture);
bglTexImage2D(BGL_TEXTURE_2D, 0, BGL_RGB, width, height, 0, BGL_RGB, BGL_UNSIGNED_BYTE, 0);
bglFramebufferTexture2D(BGL_FRAMEBUFFER, BGL_COLOR_ATTACHMENT0, BGL_TEXTURE_2D, canvasTexture, 0);
Matrix::matrix_t identity; …Run Code Online (Sandbox Code Playgroud)