草庐IT

c++ - 在 opengl 中混合固定功能管道和可编程管道

好的,这是我的问题。我有一个学校使用的可视化框架,我一直在尝试将其设置为进行3d图形处理。问题是,该框架目前仅使用固定功能管道进行绘制。为了不搞砸,我一直在尝试解决仍然需要使用固定功能管道的旧代码,并且我一直在设置设施以允许创建着色器和着色器程序。我有一个简单的颜色着色器可以编译,我还制作了一个测试顶点数组(一个绿色三角形)。现在,当我尝试渲染它时,屏幕变黑了。之前,有很多2dSprite和屏幕上没有移动的东西,但是通过我添加到渲染函数的代码,我发现在我调用glUseProgram时屏幕变黑了。如果我注释掉glUseProgram,以及我设置制服和绘制的部分,一切正常。glUsePro

c++ - 用于 OpenGL3.1+ 上下文的分层 COLLADA 加载器

哪些层有助于有效地实现这一点?最好是这样我能够将下面列出的这三个组件与早期层放在一起,并在我进行时对其余部分进行编码。我正在编写一个COLLADA加载库以与我的图形引擎一起使用。所以当然,一开始我就注意到这似乎是一项相当大的任务。我现在打算编写库以使用不同的层。我不还不了解COLLADA。我假设可能有:几何层着色器层纹理层即使是我不确定的这些,也可能需要成为另一种分层方案的一部分。旁注,我很可能会使用irrXML或者这个interestingXMLlibrary我刚读到here除非另有说明,否则阅读文件。 最佳答案 您是否知道开放A

c++ - OpenGL glLinkProgram 返回 false 但信息日志为空;检查了一切

我必须承认这是我第一次实现着色器,之前我只使用固定功能管道;然而,尽管我确信我所做的一切都是正确的——但肯定有错误。glLinkProgram(program)-在查询GL_LINK_STATUS时返回GL_FALSE。此外,信息日志是空的(当我查询日志长度时-它是1,根据文档这是空终止符,它会checkout)。所以链接器错误,没有日志。此外,我刚刚发现,只要我在顶点着色器中使用gl_Position变量,就会出现链接器问题,无论是在分配期间还是在我将其用于计算时。我尝试了各种着色器变体,它出错但无法生成日志-它似乎只是在每次触摸gl_Position时返回GL_FALSE。有趣的是

c++ - Opengl 渲染到具有部分透明度(半透明)的纹理,然后将其渲染到屏幕

我找到了一些被问到这个问题的地方,但我还没有找到一个好的答案。问题:我想渲染到纹理,然后我想将渲染的纹理绘制到屏幕上,如果我跳过渲染到纹理步骤并且直接渲染到屏幕,它会如何显示。我目前正在使用混合模式glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)。我也有glBlendFuncSeparate可以玩。我希望能够将部分透明的重叠项目渲染到此纹理。我知道混合函数目前正在根据Alpha弄乱RGB值。我已经看到了一些使用“预乘alpha”的模糊建议,但关于这意味着什么的描述很差。我在photoshop中制作png文件,我知道它们有一个半透明位,你不

c++ - OpenGL glGetError 1281 错误值

我正在使用带顶点和着色器的OpenGL,屏幕上没有显示任何内容,所以我使用glGetError进行调试:我在一个名为color_array_buffer的缓冲区上收到错误1281(错误值),这是我正在谈论的部分:GLenumerror=glGetError();if(error){cout这是我将缓冲区链接到数组的代码:if(textured){texture=newsf::Texture();if(!texture->loadFromFile("textures/simple.jpeg"/*,sf::IntRect(0,0,128,128)*/))std::cout和我的uvs值:u

c++ - 退出 OpenGL 应用程序时清理

我有一个正在尝试修改的OSXOpenGL应用程序。当我创建整个应用程序时调用了一堆初始化函数——包括我可以指定我自己的鼠标和键盘处理程序等的方法。例如:glutInit(&argc,argv);glutInitDisplayMode(GLUT_DEPTH|GLUT_DOUBLE|GLUT_RGBA);glutInitWindowPosition(100,100);glutInitWindowSize(700,700);glutCreateWindow("MapAbstraction");glutReshapeFunc(resizeWindow);glutDisplayFunc(rend

c++ - Pre Z 缓冲区通过 OpenGL?

我如何使用openGL进行Z缓冲区预传递。我试过这个:glcolormask(0,0,0,0);//disablecolorbuffer//drawsceneglcolormask(1,1,1,1);//reenablecolorbuffer//drawscene//flipbuffers但它不起作用。这样做之后我什么也看不到。执行此操作的更好方法是什么?谢谢 最佳答案 //cleareverythingglClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//z-prepassglEna

c++ - 在 openGL 中设置每秒最大帧数

有没有什么方法可以计算应该进行多少更新才能达到所需的帧速率,而不是特定于系统的?我发现它适用于Windows,但我想知道openGL本身是否存在类似的东西。它应该是某种计时器。或者我还能如何防止FPS急剧下降或上升?这一次,我正在测试它是否在线绘制大量顶点,并使用fraps我可以看到帧速率从400到200fps,绘制速度明显变慢。 最佳答案 你有两种不同的方法来解决这个问题:假设您有一个名为maximum_fps的变量,其中包含您要显示的最大帧数。然后你测量在最后一帧上花费的时间量(一个计时器就可以了)现在假设您说您希望在您的应用程

c++ - 如何在没有 VAO 的情况下使用具有 OpenGL 核心配置文件的 VBO?

在不使用顶点数组对象的情况下使用顶点缓冲区对象时遇到问题。我的理解是VAO只是封装了VBO周围的状态。但VBO不应该在没有VAO的情况下使用吗?这是一个小例子。使用use_vao=true这可以正常工作(呈现橙色矩形)。使用use_vao=false这不会呈现任何内容并在glDrawElements上生成一个GL_INVALID_OPERATION错误。//makesurethemodernopenglheadersareincludedbeforeanyothers#include#define__gl_h_#include#include#include//Forrendering

c++ - OpenGL 3.2 核心配置文件指南

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。谁能推荐学习OpenGL3.2核心配置文件的指南?SDK很难读懂,我看到的大多数指南都只教老方法。