草庐IT

c++ - 我什么时候可以发布源 PBO?

我正在使用PBO在我的cpu和gpu之间异步移动数据。当从GPU移动时,我知道在PBO上调用glMapBuffer后我可以删除源纹理。但是,反过来呢?我什么时候知道从PBO到纹理(glTexSubImage2D(...,NULL))的传输已经完成并且我可以安全地释放或重新使用PBO?是在我绑定(bind)纹理后还是其他什么时候? 最佳答案 我认为在调用glTexImage之后,您可以安全地删除或重新使用缓冲区而不会出错,因为驱动程序会为您处理所有事情,包括延迟销毁(这是缓冲区对象的优势)。但这意味着,对glMapBuffer的调用可

c++ - 如何让相机跟随 opengl 中的 3d 对象?

我是第一次使用opengl进行赛车,我面临的第一个问题是如何让相机以恒定的距离跟随汽车。这是键盘功能的代码。V是速度汽车。voidOnSpecial(intkey,intx,inty){floatstep=5;switch(key){caseGLUT_KEY_LEFTa:carAngle=step;V.z=carAngle;camera.Strafe(-step/2);break;caseGLUT_KEY_RIGHT:carAngle=-step;V.z=carAngle;camera.Strafe(step/2);break;caseGLUT_KEY_UP:V.x+=(-step);

c++ - 在 opengl 阴影映射中将顶点深度信息存储在纹理中

我目前正在将阴影贴图(准确地说是级联阴影贴图)编程到我的C++opengl引擎中。因此,我想要一个包含我的光源和我的阴影贴图中每个像素之间的距离的纹理。我应该使用哪种纹理类型?我看到有一个GL_DEPTH_COMPONENT纹理内部格式,但是它将我想要给纹理的数据缩放到[0,1]。我是否应该在创建阴影贴图时反转一次长度,然后在最终渲染期间反转第二次以取回实际长度?好像没什么用!有没有一种方法可以使用纹理来存储长度而不用将它们反转2次?(一次在创建纹理时,一次在使用过程中)。 最佳答案 我不确定你说的反转是什么意思(我敢肯定你不是说要

c++ - 将 OpenGL 纹理打印到文件而不显示?

我正在尝试使用OpenGL来帮助将Kinect深度图输入处理成图像。目前,我们将Kinect用作​​基本运动传感器,该程序会计算路过的人数,并在每次检测到新人时拍摄屏幕截图。问题是我需要让这个程序在没有显示的情况下运行。我们希望通过SSH远程运行它,而来自其他服务的网络流量对于X11转发来说将是一个好主意。将显示器连接到运行程序的机器是可能的,但出于能源消耗的原因,我们希望避免这样做。该程序确实为OpenGL生成了一个2D纹理对象,并且通常只是在读取像素并使用FreeImage将它们输出到.PNG文件之前使用GLUT对其进行渲染。我遇到的问题是,一旦删除了GLUT函数调用,所有打印到.

c++ - 无法使 mask 与 OpenGL 一起正常工作

我正在尝试使用OpenGL遮盖图像,以便它的一部分是透明的。这是我的代码,它不起作用:draw_img(background);...glEnable(GL_BLEND);glDisable(GL_DEPTH_TEST);glBlendFunc(GL_ONE,GL_ZERO);draw_img(mask);glBlendFunc(GL_DST_ALPHA,GL_ONE_MINUS_DST_ALPHA);draw_img(foreground);glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);这是我的背景图片,我正在尝试在其上绘制:这里分

c++ - 拥有 2 个较小的渲染目标还是一个较大的渲染目标更好?

我正在编写一个延迟渲染器,并试图打包我的gbuffer。将漫反射和高光存储在一起会更好吗:vec4difSpec=(diffuse.xyz,specular)//FORMAT_RGBAgl_FragData[0]=difSpc;或使用2个渲染目标vec3diffusefloatspeculargl_FragData[0]=diffuse//FORMAT_RGBgl_FragData[1]=specular//FORMAT_RED问题是一个比另一个更好,为什么。 最佳答案 您使用的缓冲区绑定(bind)/重新绑定(bind)操作越少越

c++ - 使用 SDL_ttf 和 OpenGL,TTF_RenderUTF8_Blended 打印红色矩形

当我使用TTF_RenderUTF8_Blended呈现我的文本时,我在屏幕上获得了一个实心矩形。颜色取决于我选择的那个,在我的例子中,矩形是红色的。我的问题我错过了什么?似乎我没有从使用SDL_DisplayFormatAlpha(TTF_RenderUTF8_Blended(...))生成的表面获得正确的Alpha值,还是我?有人认识或知道这个问题吗?附加信息如果我使用TTF_RenderUTF8_Solid或TTF_RenderUTF8_Shaded,文本会正确绘制,但当然不会混合。我还在屏幕上绘制其他纹理,所以我最后绘制文本以确保混合会考虑到当前表面。编辑:SDL_Colorg

C++ OpenGL Pong 球移动得太快

我正在尝试使用opengl在C++中创建一个简单的乒乓球游戏。我在屏幕上显示了边框、Racket、球,它们都在移动,太棒了!问题是球即使以一个像素的速度也能闪电般地移动。我正在更新它在名为init的回调函数中的位置,然后我将其传递给glutIdleFunc,如下所示:glutIdleFunc(idle);空闲函数如下:voididle(){ball.moveLeft();glutPostRedisplay();}基本上我只是让它向左移动一个像素,但是,我猜idle被调用了很多,所以它移动得快如闪电。如何修复此错误?如果您需要更多信息,请询问! 最佳答案

c++ - OpenGL 教程错误

我设法从here构建了教程但是在执行它们时发生错误:XErroroffailedrequest:BadRequest(invalidrequestcodeornosuchoperation)Majoropcodeoffailedrequest:154(GLX)Minoropcodeoffailedrequest:34()Serialnumberoffailedrequest:34Currentserialnumberinoutputstream:33Google告诉我这个错误不知何故与图形驱动程序有关,所以关于我的系统的信息也许有用;我在三星700Z7C笔记本电脑上使用Ubuntu12

c++ - OpenGL _ Front 对象被 Back 对象覆盖。所以看不到

问题是,'table上的物体被table板覆盖,所以看不到它。'(我使用的是openGL3.7beta。我安装的文件是:http://ihoo1836.dothome.co.kr/opengl_vs2010+glutdlls37beta.zip)所有代码如下。#include#include#include#includefloatTableX=5.0;//Table'sXsizefloatTableY=8.0;//Table'sYsizefloatTableHeight=2.0;//Table'sHeightintwidth=400,height=400;//WindowSizein