草庐IT

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

c++ - 如何应用位置变换

如何通过着色器在世界中应用绘图位置?我的顶点着色器看起来像这样:invec2position;uniformmat4x4model;uniformmat4x4view;uniformmat4x4projection;voidmain(){gl_Position=projection*view*model*vec4(position,0.0,1.0);}其中position是三角形顶点的位置。我按如下方式绑定(bind)矩阵。查看:glm::mat4x4view=glm::lookAt(glm::vec3(0.0f,1.2f,1.2f),//camerapositionglm::vec3

c++ - 从非主线程加载的 VAO 崩溃

在我的代码中,我有一个对象的包装类,该对象由两个缓冲区对象和一个顶点数组对象支持。我在构造函数中使用它生成它们(稍微简化):glGenVertexArrays(1,&vao);glBindVertexArray(vao);glGenBuffers(1,&ibo);glGenBuffers(1,&vbo);printf("Indbuffers%d%d%d\n",vao,ibo,vbo);glBindBuffer(GL_ARRAY_BUFFER,vbo);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,ibo);printf在主线程的前几个创建时给出了这个。Ind