Questions tagged «opengl»

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

1
为什么此几何着色器会使我的程序减慢这么多?
我有一个OpenGL程序,正在渲染一个地形网格物体。我将顶点放置在顶点缓冲区中,但还没有在片段着色器中真正着色它们。我一次添加了一个几何着色器。 在添加几何体着色器之前,当我仅对流水线的片段和顶点着色步骤进行编程时,我获得的帧率约为30+。足够使我看不到任何断断续续的情况。添加几何体着色器后,我每秒获得大约5帧。为什么?这是整个几何着色器: #version 420 layout (triangles) in; layout (triangle_strip, max_vertices = 3) out; void main() { for (int i = 0; i < gl_in.length(); i++) { gl_Position = gl_in[i].gl_Position; EmitVertex(); } EndPrimitive(); } 这不是OpenGL在没有几何着色器的情况下所做的吗?
27 opengl  glsl 

3
团队如何防止覆盖源文件中的工作?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 4年前关闭。 在我看来,有一种可能性,例如由多个人同时处理游戏引擎时,如何防止覆盖? 假设开发者一在工作,Audio.cpp而开发者二也在工作Audio.cpp,这在大型团队中通常如何进行管理以应对覆盖?(换句话说,要阻止开发人员2打开文件,直到开发人员1完成)
26 project-management  version-control  teamwork  java  2d  collision-detection  vector  collision-resolution  unity  directx  directx11  directx10  xna  ios  monogame  windows-phone-8  xamarin  design-patterns  oop  xna  collision-detection  collision-resolution  bounding-boxes  rotation  collision-detection  mathematics  javascript  algorithm  separating-axis-theorem  xna  2d  monogame  image  xna  directx  graphics  performance  opengl  2d  3d  c++  directx11  unity  c#  scale  c#  xna  collision-detection  collision-resolution  leaderboards  scoring  glsl  srgb  tilemap  three.js  tiled  unity  physics  xml  dialog-tree  xna  c#  .net  opengl  lwjgl  vbo  physics  graphics  procedural-generation  simulations  water  opengl  java  textures  lwjgl  frame-buffer  unity  unity  2d  collision-detection  collision-resolution  trigonometry  java  android  libgdx  xna  c#  frame-rate  c++  unreal-4  procedural-generation  java  graphics  lwjgl  slick  c++  software-engineering 

1
Freeglut vs SDL vs GLFW
我需要将我的游戏项目从Android(用C,OpenGL ES 2.0编写,感谢NDK)移植到Windows和Linux平台。当然,我将需要重写一些依赖于平台的代码,但是现在我想知道哪个库可以创建OpenGL和使用输入句柄。 迅速搜寻一下,即可获得3名候选人: 1)Freeglut-重写并免费提供良好的旧GLUT。 2)SDL-最广为人知的一个库,用于许多游戏中。 3)GLFW-一种新的但简单实用的功能。 我对PC的开发还很陌生,并且看不到任何明显的差异。您能帮我选择哪一个吗?我显然只需要核心鼠标/键盘输入和OpenGL上下文的创建,我也将使用GLEW轻松实现现代OpenGL。
26 opengl  windows  linux 

3
对于体素渲染,更有效的方法是:预制的VBO或几何着色器?
给定一个相当静态的体素数组,效率更高:使用CPU预先生成VBO来渲染体素面(暂时忽略更高级的渲染形式,如行进立方体),或在GPU上使用几何体着色器生成脸上苍蝇? 我不是担心更新变化的体素,但是这当然是GPU版本的好处,因为您不必重建VBO。另外,GS方法感觉更现代了:) 另一方面,我还没有研究过GS如何真正与现代GPU中的栅格化管道一起工作的细节。它是将顶点输出到某种流缓存中,还是将顶点写入两者之间的普通GPU内存中?如果是后者,那么即时生成可能会减少我猜想的其余GPU任务的可用带宽和处理能力,然后在CPU上进行将更为有益。

9
OpenGL优化技巧
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 要提高OpenGL的效率,您有什么技巧?

5
为什么像Unity3D这样的引擎相对于像OpenGL这样的本机库更适合初学者?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我只是3D游戏的初学者,我的首选平台是Android。我在其他论坛上发布了一个有关“使用什么:OpenGL或Unity3d?”的问题。他们都强调Unity3D并使用其内置的功能和工具,如果我要使用OpenGL,则必须自己编写代码。但是后来有人说,大多数复杂的游戏都需要自定义引擎。为什么要在OpenGL上使用像Unity3D这样的引擎?
25 opengl  android  unity 

3
OpenGL顶点数组对象(VAO)中存储什么状态?如何正确使用VAO?
我想知道OpenGL VAO中存储了什么状态。我知道VAO包含与缓冲顶点的顶点规范有关的状态(缓冲区中包含哪些属性,绑定了哪些缓冲区,...)。为了更好地了解VAO的正确用法,我想确切知道它们的状态。 我如何假设应使用VAO 通过简单的示例,我了解到VAO的正确用法如下: 设定 Generate VAO BindVAO ---- Specify vertex attributes ---- Generate VBO's ---- BindVBO's -------- Buffer vertex data in VBO's ---- Unbind VBO's Unbind VAO 渲染图 Bind VAO ---- Draw Unbind VAO 据此,我假设至少顶点缓冲区绑定和顶点属性规范存储在VAO中。但是我不确定这种使用模式如何扩展到(多个)纹理和(多个)着色器程序起作用的情况。是主动着色器程序存储在VAO?并且纹理绑定(及其采样/包装设置)也存储在VAO中吗?同上制服? 因此,我的问题是: OpenGL VAO中存储了什么确切状态?(VBO绑定,属性规范,活动着色器程序,纹理绑定,纹理采样/包装设置,制服...?) 如何在更复杂的渲染设置中正确使用VAO,其中包含(多个)纹理以及相关的采样/包装设置,(多个)着色器程序和均匀性?
25 opengl  vao 

8
与软件渲染相比,OpenGL,SFML和SDL有什么优势?
我开始观看Handmade Hero系列视频,其中Casey Muratori在不使用框架等的情况下创建了一个游戏引擎。昨天我到了那儿,他展示了如何在屏幕上绘制图像。据我了解,他只是分配了一些内存,该内存与他要绘制的屏幕大小一样大。然后,他创建了一个位图,然后将其传递到分配的缓冲存储器中,并使用特定于操作系统的功能将其绘制到屏幕上。 这似乎很简单。我曾经使用GameMaker,后来改为Love2D,并与Sprite Kit一起工作了一些,但我一直想知道在有时令人困惑的图层下到底发生了什么。 既然如此,为什么当您只需要分配一些缓冲区,传递位图并将其绘制到屏幕上时,为什么还要使用图形库(OpenGL,SFML,SDL等)呢? 如果要在屏幕上绘制不同的内容,只需将它们写入位图,然后将其传递到缓冲区中。我对编程很陌生,但这对我来说似乎很简单。如果我错了,请纠正我。

1
我的游戏似乎与录制软件不兼容。是什么原因造成的?
我刚刚完成了一个大学的Game-Dev小项目,我需要录制一个视频以伴随我的提交(以防万一他们无法使我的资料投入工作)。基本上,当FRAPS或Bandicam尝试附加游戏时,我的游戏根本无法正常工作,我从错误报告代码中得到了黑屏和GL INVALID OPERATION消息流。Dxtory似乎根本无法正确连接到它,它没有显示FPS计数器或任何东西。我的游戏逻辑似乎从调试跟踪中正确运行,似乎所有gl库调用都中断了。 我对这些程序的运行方式一无所知,所以我真的不知道该怎么做才能导致这种情况。我听说它们是从OpenGL帧缓冲区读取的,所以也许我在这里做错了什么?我让GLFW和GLEW进行所有的低级初始化,但是我已经使用相同的设置和录制软件成功录制了项目。 从本质上讲,是否有人曾经遇到过这样的事情,或者您对这些程序的工作方式一无所知,从而可以找出问题的起因吗?

7
如何在没有访问开发套件的情况下获得PS3 / Xbox 360体验?
我是一个崭露头角的游戏程序员,试图进入PS3,Xbox 360的行业编程。我看到的主要问题是需要向潜在的雇主证明我的技能,但是却无法获得PS3或Xbox 360的开发套件,这直接是不可能的。 我的问题是,向控制台开发人员展示我的技能的最佳替代方法是什么? Windows DirectX中的C ++编程似乎接近于展示Xbox 360编程技能,而OpenGL中的C ++编程则相对接近于展示PS3编程技能。不幸的是,从网络研究看来,Xbox 360和PS3实际上都拥有自己的专有库,因此,这似乎并不是100%富有成果的努力。这种方法似乎最接近,但也最耗时。另外,您实际上并没有使任何内容在控制台上运行。 另一方面,使用XNA编程的好处是您的游戏实际上是在控制台上,尽管我的印象是这不是“真正的交易”,因为它只是DirectX的包装,并且使用C#代替C ++。 有没有人具有行业内的知识或经验,从而知道哪种游戏演示对向潜在雇主展示最有用?DirectX,OpenGL,XNA,虚幻引擎,Unity3d,Flash等中的C ++?一天只有几个小时,我很想知道如何指导我的努力。 我的直觉是,DirectX是最好的选择,因为它似乎更接近Xbox 360上使用的东西,但是如果以另一种语言/引擎进行出色的演示同样好,那么显然花费的时间会更少另一条路线。 预先感谢您的帮助和建议!


1
滚动我自己的场景图
您好游戏开发SE! 我正在通过OpenGL爬行,希望创建一个简单且非常轻便的游戏引擎。我认为该项目是一种学习经验,最终可能会赚点钱,但无论哪种方式都会很有趣。 到目前为止,我已经使用GLFW获得了一些基本的I / O,一个窗口(带有一个非常漂亮的F11全屏键)以及一个OpenGL上下文。我还使用GLEW公开了其余的OpenGL扩展,因为我正在使用Windows,并且我想使用所有OpenGL 3.0+。 这使我进入了场景图。简而言之,我想自己动手。这个决定是在看完OSG并阅读了几篇有关场景图的概念如何扭曲,弯曲和折断之后做出的。一篇这样的文章描述了场景图如何发展为... 然后,我们添加了所有这些额外的东西,例如将装饰品挂在圣诞树上,除了一些装饰品是多汁的牛排,还有一些是整头活牛。 打个比方,我想要牛排,场景图应该是什么样的肉,而不必捆成一堆多余的代码或任何整头母牛。 因此,考虑到这一点,我发现自己确实想知道场景图应该是什么以及应该如何实现简单的场景图?到目前为止,这就是我所拥有的... 一棵父树,n子树或DAG,其中... 应该跟踪游戏对象的转换(位置,旋转,比例) 应该保留渲染状态以进行优化 应该提供剔除视锥范围内的对象的方法 具有以下属性... 所有节点都应视为可渲染的(即使它们不渲染),这意味着它们... 应该都具有cull(),state()和draw()方法(如果不可见,则返回0) cull()递归地在所有子节点上调用cull(),从而为整个节点和所有子节点生成一个完整的cull网格。另一种方法hasChanged()可以使所谓的静态网格物体不必在每帧中都计算出其剔除几何形状。这将起作用,如果子树中的任何节点发生了更改,则所有几何结构都将重建到根。 渲染状态将保存在一个简单的枚举中,每个节点将从该枚举中选择所需的OpenGL状态集,并且将在该节点上调用draw()之前设置该状态。这样可以进行批处理,将将给定状态集的所有节点一起呈现,然后设置下一个状态集,依此类推。 任何节点都不应直接保存几何/着色器/纹理数据,而应指向共享对象(可能由诸如资源管理器之类的单例对象管理)。 场景图应该能够引用其他场景图(也许使用代理节点),以允许像的情况下此,因此允许复杂的多网眼模型/对象周围的场景图被复制而不增加一吨的数据。 我希望获得有关当前设计的一些有价值的反馈。是否缺少功能?有没有更好的方法/设计模式?我是否错过了一些更简单的3D游戏必须包含在此设计中的更大概念?等等。 谢谢,-Cody
23 opengl  3d  scene-graph 

1
哪种方法最适合渲染星球?
我目前正在研究论文,它是渲染行星大小地形的引擎。 我仍在完成研究,并且遇到了很多与此主题有关的问题,但问题是我无法确定应该使用哪种详细程度(LOD)方法。 我了解Ulrich的geomipmapping,几何剪贴图(GPU)和分块LOD,它们在较大的地形上都能很好地工作,并且可以用于渲染多维数据集的6个面,然后通过此方法 “球形化”多维数据集,并且我了解如何实现所有这些在GPU上使用C ++ / OpenGL / GLSL的方法(使用ROAM之类的方法或任何其他不使用多维数据集的方法都无法使用,因为纹理化是很麻烦的)。另外我最近也在这里学习了使用镶嵌细分着色器渲染地形的教程。 因此,我没有时间去实现所有方法,而是看看哪种方法最合适,更适合于行星尺度,我在这里询问是否有人进行了这种比较,并帮助我确定了哪种方法我应该实现和使用吗(我的导师有点疯狂,想让我用二十面体做某事,但是除非使用ROAM,否则我无法理解该方法) 无论如何,如果您能帮助我做出决定或有其他建议或方法,我将不胜感激。一个条件是该方法应该能够实现GPU端(至少是其中的大部分),以防止CPU瓶颈。 另一个要求是,当我在地形中获取大量细节时,我知道关于浮子精度的数值问题,我不知道如何解决,我在论坛上阅读了一个解决方案,但无法理解如何解决。实现,我失去了对该线程的跟踪,我想知道如何解决这个精度问题。 我目前正在阅读有关一些矩阵转换的信息,以解决浮点精度,z对抗问题,使用动态z值进行视锥剔除以及大块的数据表示(使用具有浮点的补丁空间及其在世界坐标中的位置为double)我认为我可以轻松解决精度问题。我仍然需要在LOD方法与您的意见和建议之间进行比较,以决定哪种方法更适合该项目。考虑实施难度,视觉质量,性能,我想要最好的。 我忘了提到的是,这一代是混合的,我的意思是,我应该能够完全使用GPU(即时计算的高度)和/或使用基本的高度图图像渲染地球,并使用GPU(顶点)添加细节着色器)。纹理化是我会麻烦的一个侧面部分,现在我很高兴只使用取决于高度的颜色,或者使用片段着色器上生成的某种噪声纹理。

2
我通常一次可以绑定多少个纹理?
我正在开发一个游戏引擎,并且只能在现代(Shader Model 4+)硬件上工作。我认为,当我完成此工作时,这将不是一个不合理的要求。 我的问题是:现代图形卡上一次可以绑定多少个纹理?16就足够了。我可以期望大多数现代图形卡支持这种数量的纹理吗? 我的GTX 460似乎支持32,但是我不知道这是否代表大多数现代视频卡。

1
您将如何实现色差?
如何使用着色器实现色差的效果? 用每种颜色的不同焦距渲染世界是否可以解决问题(也许仅使用一次深度渲染遍历)?
22 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.