Questions tagged «opengl»

OpenGL是针对台式机和工作站市场的图形标准和API。它的设计易于通过专用计算机硬件进行加速,因此与传统的软件渲染相比,大多数实现方式都可以大大提高性能。当前,OpenGL用于CAD软件和计算机游戏等应用程序。它也是跨平台的。OpenGL标准由Khronos组控制,该组还控制OpenGL ES。

2
即使不使用深度测试,我也会失去/获得丢弃像素的性能吗?
当我第一次搜索废弃指令时,我发现专家说使用废弃将导致性能下降。他们说,丢弃像素将破坏GPU正确使用zBuffer的能力,因为GPU必须首先为两个对象运行Fragment shader,以检查是否更靠近相机的对象被丢弃。对于我目前正在开发的2D游戏,我同时禁用了深度测试和深度写入功能。我正在绘制按深度排序的所有对象,仅此而已,无需GPU即可完成精美的工作。现在我想知道是否可以将片段着色器中的像素丢弃吗?

1
静态和动画3D模型的文件格式
此问题是从Stack Overflow 迁移而来的,因为可以在Game Development Stack Exchange上回答。 迁移 8年前。 我目前正在使用C ++和OpenGL编写3D游戏,而我即将加载3D模型。因此,我正在寻找流行的文件格式和技术来 显示静态网格物体和 渲染动画网格。 我已经发现了很多可能的格式和技术,例如关键帧动画,骨骼动画,MD2到MD5、3DS,X,Collada等。 为了简单起见,我想使用一种允许同时使用的格式(和技术),即静态和动画网格。所以我的问题是,是否有一种格式适合该任务,您建议使用哪种格式。并澄清一下:我不需要超平滑动画或全新功能。 旁注:因为我是搅拌机爱好者(但不是专家;-),所以可以将其与之配合使用-但这当然不应该成为表演的障碍。
22 c++  opengl 


4
在OpenGL ES中绘制四边形的最快方法?
我正在使用OpenGL ES 2.0,我要绘制一堆四边形,希望能够像在使用GL_QUADS一样,每四边形仅传递4个顶点,但是基本上我只是想知道绘制一个四边形的最佳方法一堆单独的四边形。 到目前为止,我发现我可以做的是:-GL_TRIANGLES(每个四角形6个顶点)-退化GL_TRIANGLE_STRIP(每个四角形6个顶点) 我发现的可能性:-GL_TRIANGLE_STRIPS具有特殊的索引值,该值可重置四边形带(这意味着每个四边形5个索引,但是我不认为这是OpenGL ES 2.0)
22 opengl  3d  iphone  android  shaders 

6
将游戏数据/逻辑与渲染分离
我正在使用C ++和OpenGL 2.1编写游戏。我在想如何将数据/逻辑与渲染分开。目前,我使用基类“ Renderable”,该基类提供了一种纯虚拟方法来实现绘图。但是每个对象都有如此专门的代码,只有对象知道如何正确设置着色器制服和组织顶点数组缓冲区数据。最后,我在代码中多次进行gl *函数调用。有没有通用的绘制对象的方法?
21 c++  opengl  rendering  logic  data 

3
为什么OpenGL> = 3只允许VBO?
我看到OpenGL版本3和更高版本取消了客户端渲染的使用。立即模式已被消除,并且顶点数组似乎已被弃用。相反,如果我理解正确,则VBO是渲染顶点的主要方法。 虽然我看到采用统一的方式呈现所有内容的逻辑,但VBO是否在顶点阵列方面没有重大缺点?我以为VBO通常应该是包含大于1MB数据的大缓冲区。如果我的场景具有许多较小的几何形状怎么办?我有一个场景图,其中包含大量节点,每个节点都需要自己的变换,等等。每个节点也应该能够分别删除,单独添加,等等。我以前使用的是顶点数组。因此,我的第一个问题是,如果我切换到VBO,现在是否需要为每个场景分配一个VBO,这会给我的场景图对象带来更大的开销。 另一个问题是我渲染的几何图形可能是高度动态的。在最坏的情况下,有时可能需要在一段时间内每帧重新发送所有几何图形。在这种用例中,VBO的性能是否会比顶点阵列差,或者最差的VBO的工作量与顶点阵列一样多,但没有更多? 因此,以更简洁的格式,我的问题是: 1)分配/取消分配VBO是否有相当大的开销(我的意思是仅仅建立一个缓冲区)? 2)如果我要每帧更新CPU的数据,这是否会比使用顶点数组的情况差很多? 最后,我想知道: 3)如果对以上两个问题的回答均为“是”,为什么不赞成使用其他渲染模式,而不是VBO?我在这里缺少什么,比如我应该用来减轻这些潜在分配成本等的技术吗? 4)根据我使用的OpenGL版本,这些问题的答案是否会发生实质性变化?如果我通过使用高性能的VBO将代码重构为OpenGL 3或4向前兼容,那么相同的技术可能会在OpenGL 2中很好地发挥作用,或者某些技术在OpenGL 3中可能会快得多+和其他使用OpenGL 2的软件? 我在堆栈溢出时问了这个问题,但是我在这里重新发布,因为我意识到这个站点可能更适合我的问题。

1
三重缓冲的好处是什么?
我阅读了上一个问题中写的所有内容。据我了解,在双缓冲中,程序必须等到复制或交换完成的图形后才能开始下一个图形。在三重缓冲中,程序具有两个后备缓冲区,并且可以立即开始绘制不涉及这种复制的缓冲区。 但是,如果在可以利用第三个缓冲区的情况下使用三重缓冲,这并不意味着绘制帧的速度快于监视器可以刷新的速度。因此,您实际上并没有获得更高的帧速率。那么,三重缓冲的好处是什么?

7
现代着色书?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 3年前关闭。 我对了解着色器感兴趣:它们是什么,何时/何地使用它们,以及如何使用它们。(特别是我对水和光晕效果感兴趣,但是我对着色器的了解接近于0,因此我需要进行一般性介绍)。 我看到了很多已经有两年历史的书籍,所以我不知道它们是否仍然适用。目前,我的目标是XNA 4.0(我认为这意味着适用于Shader Model 4.0的HLSL Shaders),但是我认为通常针对DirectX 11和OpenGL 4的任何东西都是有帮助的。

7
对于2D游戏,是否有任何理由不使用Direct3D或OpenGL等3D API?
我已经很长时间没有从事游戏开发了。当我这样做时,大多数人都使用Direct Draw来创建2D游戏。在我停下脚步的时候,人们说采用正交投影的OpenGL或Direct3D只是要走的路。 我正在考虑重新创建2D游戏,尤其是在手机上,但也可能在XNA平台上。要使用OpenGL制作东西,我需要(充分)小的学习曲线来使自己适应3D开发。 是否有任何理由跳过它,而是使用2D框架工作,而我只有一个宽度x高度帧缓冲区,我需要用像素填充?
20 2d  opengl  directx 

5
矩阵代表什么?
我最近开始学习OpenGL,但在可视化矩阵及其在计算机图形学中的作用时遇到了问题。给定这样的4x4矩阵模板: 我假设像这样的每个矩阵都是世界空间中顶点的坐标。然后将它们中的几个放在一起并加阴影给一个对象? 但是为什么会有a Xx,a Xy和an Xz?我读到它的轴是不同的(上,左,前),但仍然无法使意义变得有意义。
19 opengl  matrix 

5
OpenGL:为什么必须使用glNormal设置法线?
我正在学习OpenGL的一些基础知识,但我想知道为什么要调用glNormal一个设置顶点法线的方法。 如果我这样创建一个简单的三角形: glBegin(GL_TRIANGLES); glVertex3f(0,0,0); glVertex3f(1,0,0); glVertex3f(0,1,0); glEnd(); 法线不应该由几何图元的类型隐式定义吗?如果我不设置法线,OpenGL将对其进行计算吗?
19 opengl  normals 

6
给定兼容性和性能考虑,我应该为哪个版本的OpenGL编码?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 去年关闭。 更新OpenGL规范后,它们只会添加功能。因此,从理论上讲,支持Core和Compatibility配置文件的最新最好的硬件应该可以很好地运行超老的OpenGL1.1代码。事实证明这是事实。我花了12个月的时间学习OpenGL1.1,并且对它有了一个相当的了解。 我阅读了其中一些花哨的新OpenGL4.2书的一些章节。我所依赖的几乎所有功能都已弃用(例如“显示列表”),这使我认为可以采用更好的方法来完成所有这些操作。 让我们考虑一下,所有现代硬件都可能完全支持1.1。1.1发布于1992年。我不是编码硬盘的方式只是支持20岁的电脑。:-p我认为,假设大多数游戏者所运行的硬件都达到5年左右的中端水平,这是合理的。 我认为,较新的方法被设计为普遍成为以下两种情况之一:更好的性能或更易于编写代码。我读过某个地方,但从来没有!XD 大约5岁以下的硬件最广泛地支持哪种版本的OpenGL?考虑到这些考虑因素,最适合使用哪个版本?
19 opengl 

3
如何对渲染输出进行单元测试?
我最近一直在接受测试驱动开发(TDD),它对我的​​开发输出和代码库的弹性产生了出色的影响。我想将此方法扩展到我在OpenGL中所做的一些渲染工作,但是我一直找不到任何好的方法。 我将从一个具体的例子开始,以便我们知道我想测试什么类型的东西;可以说,我想创建一个绕某个轴旋转的单位立方体,并且要确保对于一定数量的帧,每个帧都可以正确渲染。 我如何为此创建一个自动化测试用例?最好,我什至能够编写一个测试用例,然后再编写任何代码以呈现多维数据集(按照常规的TDD惯例。)除其他外,我想确保多维数据集的大小,位置和方向是在每个渲染帧中正确。我什至可能要确保着色器中的光照方程在每帧中都是正确的。 我遇到的唯一对此有用的远程方法是将渲染的输出与参考输出进行比较,这通常会妨碍TDD的实践,而且非常麻烦。 我可以继续执行其他所需的要求,但恐怕我已经列出的要求已无法实现。

4
程序行星,高度图和纹理
我目前正在开发OpenGL程序行星生成器。我希望将其用于太空RPG,它将不允许玩家进入行星表面,因此我忽略了与ROAM相关的任何内容。目前,我正在绘制带有VBO的立方体并将其映射到球体上。 我熟悉大多数分形高度图生成技术,并且已经实现了我自己的中点位移版本(在我所知道的情况下没有那么有用)。 我的问题是,程序上生成高度图的最佳方法是什么。我看过libnoise,它使我可以创建可调整的高度图/纹理,但据我所知,我需要生成一个像这样的网。 使平铺变得明显。 有人可以建议我采取最佳路线吗? 任何输入将不胜感激。

3
在Windows上升级OpenGL版本?
如何在Windows上更新OpenGL的版本,以便可以使用比Platform SDK中包含的Version 1.1头文件新的内容?Windows 7 SDK的7.0A版甚至只包含OpenGL 1.1版的GL.h和GLU.h。我已经为板安装了NVidia驱动程序,该驱动程序包含OpenGL 4.1支持,但没有看到此包中包含头文件。
19 c++  opengl 

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.