Questions tagged «opengl»

OpenGL(开放图形库)是一种图形标准和API,与平台无关,可用于台式机,工作站和移动设备。它旨在提供硬件加速的渲染,因此与传统的软件渲染相比,性能大大提高。OpenGL用于CAD软件和计算机游戏等应用程序。OpenGL标准以及OpenGL ES由Khronos组控制。

4
从前,当>快于<…时,等等?
我正在阅读一个很棒的OpenGL教程。真的很好,相信我。我当前所在的主题是Z缓冲区。除了解释全部内容之外,作者还提到我们可以执行自定义深度测试,例如GL_LESS,GL_ALWAYS等。他还解释了深度值的实际含义(最高和最低)也可以是定制。到目前为止我还了解。然后作者说了一些难以置信的话: zNear范围可以大于zFar范围;如果是这样,那么就构成距观看者最近或最远的位置而言,窗口空间值将反转。 此前,有人说窗口空间Z值0最接近,而1最远。但是,如果我们的剪辑空间Z值被取反,则深度1将最接近视图,深度0将最远。但是,如果翻转深度测试的方向(GL_LESS到GL_GREATER等),我们将得到完全相同的结果。因此,这实际上只是一个约定。确实,翻转Z的符号和深度测试曾经是许多游戏中至关重要的性能优化。 如果我正确理解,从性能角度来看,翻转Z的符号和深度测试仅是将&lt;比较更改为比较而已&gt;。因此,如果我理解正确,而作者并没有在撒谎或编造东西,那么更改&lt;为&gt;过去对于许多游戏来说都是至关重要的优化。 作者是在编造东西吗,我是在误解某些东西,还是真的曾经比&lt;他慢(如作者所说,生命至关重要)&gt;? 感谢您澄清这个非常奇怪的问题! 免责声明:我完全知道算法复杂性是优化的主要来源。此外,我怀疑现在绝对不会有任何改变,我不是要优化它。我只是极度,痛苦,甚至是好奇。
280 c  optimization  opengl  cpu  gpu 


5
从4.1版开始,OpenGL中的文本呈现技术是什么?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 改善这个问题 关于OpenGL中的文本渲染,已经存在许多问题,例如: 如何为GUI进行OpenGL实时文本渲染? 但主要讨论的是使用固定功能管线渲染带纹理的四边形。当然,着色器必须提供更好的方法。 我并不真正在意国际化,我的大多数字符串都将是图形刻度标签(日期和时间或纯数字)。但是这些图将以屏幕刷新率重新渲染,并且可能会有很多文本(屏幕上不超过几千个字形,但足以使硬件加速的布局就不错了)。 使用现代OpenGL进行文本渲染的推荐方法是什么?(使用该方法引用现有软件是很好的证据,证明它运行良好) 几何着色器,接受例如位置和方向以及字符序列,并发出带纹理的四边形 渲染矢量字体的几何着色器 如上,但是使用镶嵌着色器代替 计算着色器以进行字体光栅化
199 opengl  text  glsl  shader  opengl-4 


17
3D游戏的效率如何?[关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加详细信息并通过编辑此帖子来澄清问题。 4个月前关闭。 改善这个问题 有一些我从未理解过的东西。像GTA IV这样的大型PC游戏如何使用50%的CPU并以60fps的速度运行,而旋转茶壶@ 60fps的DX演示则要使用高达30%的速度?

4
glActiveTexture和glBindTexture之间的区别和关系
根据我的收集,glActiveTexture设置活动的“纹理单位”。每个纹理单元可以具有多个纹理目标(通常为GL_TEXTURE_1D,2D,3D或CUBE_MAP)。 如果我理解正确,您必须先调用glActiveTexture设置纹理单元(初始化为GL_TEXTURE0),然后将(一个或多个)“纹理目标”绑定到该纹理单元? 可用的纹理单位数量取决于系统。我在库中最多看到32个枚举。我想这实质上意味着我可以减少GPU的限制(我认为这是168)是否可以同时在GPU内存中添加32个纹理?我猜还有一个额外的限制,那就是我不超过GPU的最大内存(据说是1 GB)。 我是否正确理解纹理目标和纹理单位之间的关系?假设我被允许16个单位和4个目标,这是否意味着16 * 4 = 64个目标有空间,还是不能那样工作? 接下来,您通常要加载纹理。您可以通过进行此操作glTexImage2D。其第一个参数是纹理目标。如果这类似于glBufferData,则我们实质上将“句柄” /“纹理名称”绑定到纹理目标,然后将纹理数据加载到该目标中,从而将其与该句柄间接关联。 那glTexParameter呢 我们必须绑定一个纹理目标,然后再次选择相同的目标作为第一个参数?还是只要我们具有正确的活动纹理单位,就不需要绑定纹理目标? glGenerateMipmap 也可以在目标上操作...该目标是否仍必须绑定到纹理名称才能成功? 然后,当我们想在其上绘制带有纹理的对象时,是否必须同时选择一个活动的纹理单位和一个纹理目标?还是选择纹理单元,然后可以从与该单元关联的4个目标中的任意一个获取数据?这部分确实让我感到困惑。
137 opengl  textures 

2
OpenGL中的帧缓冲区和渲染缓冲区的概念和区别是什么?
我对Framebuffer和Renderbuffer的概念感到困惑。我知道需要渲染它们,但是我想在使用之前先了解它们。 我知道需要一些位图缓冲区来存储临时绘图结果。后台缓冲区。在进行这些绘图时,需要在屏幕上看到另一个缓冲区。前缓冲区。翻转它们,然后再次绘制。我知道这个概念,但是很难将这些对象连接到这个概念。 它们的概念和区别是什么?

6
glLoadIdentity()在OpenGL中做什么?
我是OpenGL的新手,但是我对代码中的所有随机函数有点不知所措。它们可以工作,我知道何时使用它们,但我不知道为什么需要它们或它们实际做什么。 我知道glLoadIdentity()用身份矩阵替换当前矩阵,但是那到底是做什么的呢?如果每个程序都需要它,为什么除非另有说明,否则默认情况下为什么不使用身份矩阵?除非我知道它们的作用,否则我不喜欢在代码中包含函数。我应该注意,我仅将OpenGL用于丰富的2D客户端,因此如果这对于3D非常明显,请原谅我的无知。 对glMatrixMode(GL_PROJECTION)VS 也有些困惑glMatrixMode(GL_MODELVIEW)。
132 opengl  graphics 

6
GLSL着色器的正确文件扩展名是什么?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 12个月前关闭。 改善这个问题 我正在学习glsl底纹,并且遇到了不同的文件格式。我见过人们给他们的顶点和片段着色器.vert和.frag扩展。但是,我也看到了.vsh,并.fsh在一个单一的扩展,甚至两者一起着色器.glsl文件。所以我想知道是否存在标准文件格式,或者“正确”的格式是哪种?
127 opengl  glsl  shader 

7
如何使用gcc / g ++在Linux上为Windows编译?
我已经在Linux上使用freeglut在C ++(g ++)中编写了一些效果,并使用 g++ -Wall -lglut part8.cpp -o part8 所以我想知道是否可以让g ++制作包含所需一切的静态Windows可执行文件? 我没有Windows,所以如果我可以在Linux上这样做,那真的很酷:)
119 c++  opengl  gcc  glut  freeglut 

9
在C#中使用OpenGl?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 5年前关闭。 改善这个问题 是否有针对C#的免费OpenGL支持库?如果是这样,我应该使用哪一个?在哪里可以找到示例项目? C#是否为OpenGL提供类?
118 c#  opengl 

4
什么是顶点数组对象?
我今天才从本教程开始学习OpenGL:http : //openglbook.com/the-book/ 我进入了第2章,在这里画了一个三角形,并且我理解除了VAO以外的所有内容(这个缩写好吗?)。本教程具有以下代码: glGenVertexArrays(1, &amp;VaoId); glBindVertexArray(VaoId); 虽然我知道代码是必需的,但我不知道它的作用。尽管在这一点上我从未使用过VaoId(除非要销毁它),但是如果没有它,代码将无法运行。我假设这是因为必须将其绑定,但是我不知道为什么。是否需要将这些确切的代码包含在每个OpenGL程序中?本教程将VAO解释为: 顶点数组对象(或VAO)是描述顶点属性如何存储在顶点缓冲区对象(或VBO)中的对象。这意味着VAO不是存储顶点数据的实际对象,而是顶点数据的描述符。顶点属性可以通过glVertexAttribPointer函数及其两个姊妹函数glVertexAttribIPointer和glVertexAttribLPointer来描述,我们将在下面探讨其中的第一个。 我不了解VAO如何描述顶点属性。我没有以任何方式描述它们。它是否从glVertexAttribPointer获取信息?我想一定是这样。VAO是否仅仅是glVertexAttribPointer提供信息的目的地? 附带说明一下,我遵循的教程是否可以接受?有什么我应该注意的或更好的教程吗?
114 opengl  vbo  vertex-array  vao 

8
opengl:glFlush()与glFinish()
我在区分调用glFlush()和之间的实际区别方面遇到困难glFinish()。 该文档说glFlush(),并glFinish()将推所有缓存操作的OpenGL,这样一个可以放心,他们都将被执行,不同之处在于glFlush()将立即返回,在那里为glFinish()块,直到所有操作完成。 阅读了定义后,我发现如果使用该定义,glFlush()可能会遇到向OpenGL提交比其可执行的操作更多的问题。因此,尝试一下,我换了glFinish()一个glFlush()和一个,然后看,我的程序运行了(据我所知),完全一样。帧速率,资源使用情况,一切都一样。 所以我想知道这两个调用之间是否有很大区别,或者我的代码是否使它们运行没有区别。还是应该使用一个与另一个。我还认为OpenGL会调用一些命令glIsDone()来检查a的所有缓冲命令glFlush()是否完整(因此,向OpenGL发送操作的速度不会比执行它们快),但是我找不到这种功能。 我的代码是典型的游戏循环: while (running) { process_stuff(); render_stuff(); }
105 c++  c  opengl  graphics 


9
如何使用透明背景制作OpenGL渲染上下文?
渲染上下文通常在背景上具有纯色(黑色或其他颜色,请参见下图): 我想知道是否可以设置一个没有装饰且具有透明背景的窗口,同时允许我在其上渲染OpenGL。 这会使人产生三角形在屏幕上浮动的错觉。透明的背景应该可以让您看到桌面或背后的其他应用程序。 您能举例说明源代码吗? 平台:Windows(仅Win32)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.