标签: opengl

曾几何时,当>比<......快,等等,什么?

我正在阅读一个很棒的OpenGL教程.这真的很棒,相信我.我目前的主题是Z-buffer.除了解释它的全部内容之外,作者还提到我们可以执行自定义深度测试,例如GL_LESS,GL_ALWAYS等.他还解释了深度值的实际含义(顶部是哪个,哪个不是)也可以定制.到目前为止我明白了.然后作者说了一些令人难以置信的事:

zNear的范围可以大于zFar的范围; 如果是,则窗口空间值将根据与观看者最近或最远的内容来反转.

早些时候,据说窗口空间Z值为0,最接近1.但是,如果我们的剪辑空间Z值被否定,则1的深度将最接近视图,0的深度将最远.然而,如果我们翻转深度测试的方向(GL_LESS到GL_GREATER等),我们得到完全相同的结果.所以这真的只是一个惯例.事实上,翻转Z的标志和深度测试曾经是许多游戏的重要性能优化.

如果我理解正确,性能方面,翻转Z的符号和深度测试只不过是将<比较改为>比较.所以,如果我理解正确并且作者没有说谎或做事,那么<改为>以前是许多游戏的重要优化.

是作者胡编,我误解的东西,或者是它确实是曾经的情况下<较慢(至关重要,正如作者说)比>

谢谢你澄清这个非常奇怪的事情!

免责声明:我完全清楚算法复杂性是优化的主要来源.此外,我怀疑现在肯定没有任何区别,我不是要求它优化任何东西.我非常痛苦,也许是令人望而却步的好奇心.

c opengl cpu optimization gpu

276
推荐指数
1
解决办法
1万
查看次数

如何在OpenGL中将基元渲染为线框?

如何在OpenGL中将基元渲染为线框?

opengl

207
推荐指数
5
解决办法
12万
查看次数

从版本4.1开始,OpenGL中的文本渲染技术是什么?

关于OpenGL中的文本呈现已经有很多问题,例如:

但主要讨论的是使用固定功能管道渲染纹理四边形.当然着色器必须做出更好的方法.

我并不真正关心国际化,我的大部分字符串都是情节刻度标签(日期和时间或纯数字).但是这些图将以屏幕刷新率重新渲染,并且可能会有相当多的文本(屏幕上不超过几千个字形,但足够硬件加速布局会很好).

使用现代OpenGL进行文本渲染的推荐方法是什么?(引用现有软件使用该方法是很好的证据,它运作良好)

  • 接受例如位置和方向以及字符序列并发出纹理四边形的几何着色器
  • 渲染矢量字体的几何着色器
  • 如上所述,但改为使用曲面细分着色器
  • 用于进行字体光栅化的计算着色器

opengl shader text glsl opengl-4

196
推荐指数
4
解决办法
7万
查看次数

3D游戏如何高效?

有一些我从未理解过的东西.像GTA IV这样伟大的大型PC游戏如何使用50%的CPU并以60fps运行,而旋转茶壶@ 60fps的DX演示使用率高达30%?

opengl performance direct3d

188
推荐指数
7
解决办法
8314
查看次数

如何调试GLSL着色器?

我需要调试一个GLSL程序,但我不知道如何输出中间结果.是否可以使用GLSL制作一些调试跟踪(如printf)?

opengl debugging glsl

179
推荐指数
6
解决办法
12万
查看次数

glLoadIdentity()在OpenGL中做什么?

我是OpenGL的新手,我对代码中的所有随机函数都有点不知所措.他们工作,我知道何时使用它们,但我不知道为什么我需要它们或他们实际做什么.

我知道glLoadIdentity()用当前矩阵替换当前矩阵,但究竟是做什么的呢?如果每个程序都需要它,除非另有说明,为什么默认情况下不是单位矩阵?除非我知道他们做了什么,否则我不喜欢在我的代码中使用函数.我应该注意到,我专门为丰富的2D客户端使用OpenGL,所以请原谅我的无知,如果这对于3D非常明显.

关于glMatrixMode(GL_PROJECTION)VS 也有点困惑glMatrixMode(GL_MODELVIEW).

opengl graphics

130
推荐指数
3
解决办法
8万
查看次数

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个目标中的任何一个中获取数据?这是让我很困惑的部分.

opengl textures

129
推荐指数
3
解决办法
3万
查看次数

OpenGL中Framebuffer和Renderbuffer的概念和区别是什么?

我对Framebuffer和Renderbuffer的概念感到困惑.我知道他们需要渲染,但我想在使用之前了解它们.

我知道存储临时绘图结果需要一些位图缓冲区.后缓冲区.当这些图纸正在进行时,需要在屏幕上看到另一个缓冲区.前缓冲区.翻转它们,再画一遍.我知道这个概念,但很难将这些对象与这个概念联系起来.

它们的概念和差异是什么?

opengl rendering framebuffer

126
推荐指数
2
解决办法
4万
查看次数

GLSL着色器的正确文件扩展名是什么?

我正在学习glsl着色,我遇到了不同的文件格式.我见过人们给出他们的顶点和片段着色器.vert.frag扩展.但我也看到.vsh.fsh扩展,甚至两个着色器在一个.glsl文件中.所以我想知道是否有标准的文件格式,或者哪种方式是'正确的'?

opengl shader glsl

124
推荐指数
4
解决办法
5万
查看次数

在C#中使用OpenGl?

C#有免费的OpenGL支持库吗?如果是这样,我使用哪一个,在哪里可以找到样本项目?

C#是否为OpenGL提供类?

c# opengl

117
推荐指数
7
解决办法
15万
查看次数