Questions tagged «opengl»

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

2
相对于框架/引擎,裸机OpenGL为小型开发人员提供了哪些优势?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 6年前关闭。 我注意到一种趋势,独立开发人员会放弃框架和引擎,转而使用裸机OpenGL或将其与SDL / SFML2结合使用。作为独立开发人员,我看不到低级OpenGL在单独的引擎或框架上可以提供什么。 大多数像样的引擎和框架都提供了您需要的功能,而不会妨碍您。他们可能还会打开直接处理OpenGL的选项。有些甚至提供了编译跨平台的功能! 我了解渴望了解幕后情况的愿望,但我看不到OpenGL可能为独立开发人员带来的任何好处引擎或框架方面的。 您能解释一下使用OpenGL从头开始构建游戏的原因吗?
16 opengl  c++ 

1
现代阴影渲染技术?
就阴影渲染而言,最新的技术水平是什么?我的目标是OpenGL 3.2,如果需要的话,使用延迟渲染管道。 自从我研究阴影渲染已经有好几年了,那时有很多可用的技术,从模具到各种阴影贴图方法。那时,渲染阴影需要由CPU控制的单独渲染通道。但是最近我看到了一个演示,其中一个场景完全在GPU上渲染,包括阴影。我不知道该如何实现,或者甚至是合理的事情(除了技术演示之外)。 鉴于互联网上有大量的旧信息,我想了解人们最近使用的是什么方法,以及有多少方法可以推送到GPU(假设我的目标OpenGL版本支持它)。
16 opengl  shadows 

1
OpenGL:调整显示大小和glOrtho / glViewport
我已经从多个来源研究了这个问题,但还没有找到一个明确的答案,说“是的,这是正确的想法”或“否,这是怎么做的”。 我正在尝试确保OpenGL渲染的分辨率独立性。我认为应该采用的方法是使用glOrtho我想要的世界坐标系来创建投影。例如,glOrtho(-50.0, 50.0, -50.0, 50.0, 1.0, -1.0)。接下来,将视口设置为屏幕分辨率,即- glViewport(0, 0, 800, 600)。最后,每当调整窗口大小时,以glViewport更新的屏幕分辨率进行调用。这将扩展您的数字。 这是确保模型在不同分辨率下占据相同比例的屏幕空间的正确方法吗?我是否也应该使用与分辨率相等的投影?我发现一些答案说glOrtho应该使用窗口的分辨率,而其他人则说应该/可以不同。 有什么想法吗?

1
使用分层的alpha四边形是否适合地面雾?
分层方法将使用一系列与地面平行排列的大块alpha纹理化四边形,与所有介入的地形几何相交,从而从上到下,俯视到地面时都非常有效地提供了地面雾的幻觉,而在雾中时,效果却稍差一些。朝着地平线看(见下图)。 替代地,主要基于着色器的方法将改为根据进入地面雾化基底的视距来计算密度,并基于该密度输出片段值。 在不必亲自测试每种方法的性能的情况下,我想先听听别人对分层alpha纹理方法可能会产生什么样的性能影响的经验(而不是猜测!)。我特别要问的是,透支经常会受到影响(不确定填充率对普通台式机系统的限制)。使用此方法的游戏列表,尤其是较旧的游戏,将非常有用:如果在DX9 / OpenGL2之前的硬件上可行,那么对我来说可能很好用。 关于这种效果,一个大问题是: (图片来源:lume.com的Lume) 请注意垂直雾的渐变如何连续/平滑。OTOH,使用带纹理的四层,我只能假设遍历它们时这些层会非常明显-它们越稀疏,就越明显。这与雾面对齐以每帧面向播放器的情况相反,在这种情况下,这种粗糙程度将不那么明显。
16 opengl  3d  textures  shaders 

2
OpenGL:VBO或glBegin()+ glEnd()?
最近,我将原始OGL红皮书的读者链接到了教程站点。向下的第三个标头明确表示忘记了glBegin()和glEnd()作为典型的渲染方法。我是通过Redbook的方法学习的,但我发现VBO有一些好处。这真的是可行的方法吗?如果是,是否有一种方法可以轻松地将渲染代码和后续的着色器转换为VBO和后续的数据类型?
16 opengl  graphics  glsl  vbo 

4
固定功能与着色器:适合初学者?
我目前正在上大学,攻读计算机科学。尽管我确实计划在某个时候利用现有的引擎来制作一款小型游戏,但我现在的目标是学习基础知识:即3D编程。我已经对DirectX和OpenGL之间的选择进行了一些研究,由此得出的普遍看法是,无论您选择OpenGL还是DirectX作为培训平台,很多知识都可以转移到其他平台上。因此,由于OpenGL得到更多系统的支持(可能是选择学习内容的愚蠢理由),所以我决定首先学习OpenGL。 做出学习OpenGL的决定后,我进行了更多研究,发现我一直都不知道这种二分法:固定功能OpenGL与基于现代可编程着色器的OpenGL。起初,我认为学习基于着色器的OpenGL是一个显而易见的选择,因为这是当今行业中最常用的。但是,然后我偶然发现了Jason L. McKesson 非常受欢迎的“ 学习现代3D图形编程”,位于:http : //www.arcsynthesis.org/gltut/ 我通读了介绍性文章,并在“关于本书”部分中指出: “首先,当用户遇到必须通过可编程性解决的图形问题时,必须不可避免地放弃使用这种方法学到的很多知识。可编程性会抹去几乎所有的固定功能流水线,因此知识不容易转移。” 但同时也说明固定功能为初学者提供了更轻松,更直接的学习曲线,方法是: “通常认为,使用固定功能管线教新手图形程序员最容易。” 自然地,您可以理解为什么在学习哪种范式上可能会产生矛盾:我是否花了大量时间学习(然后在随后的学习中)固定功能的方式,还是选择从着色器开始?我主要关心的是现代可编程着色器以某种方式要求程序员已经了解固定功能管线,但是我怀疑情况确实如此。 TL; DR =作为一个有抱负的游戏图形程序员,通过固定功能或基于现代着色器的编程学习3D编程是我的最大利益吗?

2
要学习和/或使用哪些OpenGL版本?
因此,我是OpenGL的新手...我具有游戏编程的一般知识,但几乎没有实践经验。 我一直在研究各种文章和书籍,并尝试深入研究OpenGL,但是我发现各种版本以及旧的与新的处理方式令人困惑。 我想我的第一个问题是,是否有人知道可以运行每个版本OpenGL的游戏玩家所占的百分比。市场份额如何?2.x,3.x,4.x ... 我了解了Half Life 2的要求,因为我知道Valve用OpenGL将其更新为可以在Mac上运行,并且我知道他们通常会吸引非常广泛的用户群,并且他们说至少要有GeForce 8系列。我在Nvidia网站上查看了8800 GT,其中列出了对OpenGL 2.1的支持。也许我是错的,对我来说听起来很古老,因为已经有了4.x版本。我查了一下8800GT的驱动程序,它说它支持4.2!有点不一样,大声笑。 我还读过类似的文章,例如XP仅支持特定版本,或者OS X仅支持3.2或其他各种东西。总体而言,我只是对各种版本有多少支持以及要学习/使用哪个版本感到困惑。 我也在寻找学习资源。到目前为止,我的搜索结果使我指向了OpenGL SuperBible。第4版在Amazon上获得了好评,但它教授2.1。第五版讲授3.3版本,并且在评论中有几点提到第四版更好,而第五版没有正确地讲授新功能或其他内容?基本上,即使在学习材料中,我也看到差异,我什至不知道从哪里开始。 据我了解,3.x开始了一种全新的工作方式,我读过各种文章和评论,它们都希望“远离已弃用的功能,例如glBegin(),glEnd()”,但还有很多书我见过的教程都使用该方法。我见过一些人在说,基本上,新的做事方式比较复杂,而旧的做事方式不好。 就个人而言,我只是想补充一点,但我对镶嵌技术很感兴趣。所以我想这也是其中的原因,因为据我了解,这仅在4.x中? [顺便说一句,我的桌面支持4.2]

5
当大多数教程过时时,从OpenGL开始[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 4年前关闭。 我确定已经有很多这样的问题,但是OpenGL库的不断更新使它们全都消失了,而在一两个月后,这里的答案将再无价值。 我准备开始使用C ++在OpenGL中进行编程。我有一个正在运行的编译器(DevCpp;不要问我切换到VC ++,不要问我为什么)。现在,我只是在寻找有关如何使用OpenGL进行编程的可靠教程。我的助手找到了NeHe Productions提供的教程,但是当我发现时,它已经过时了!(尽管我确实汇总了一个基本窗口以支持OpenGL画布) 然后我上网,找到了明显使用freeglut的OpenGL SuperBible?但是我想知道的是SuperBible 5th Edition是否已经更新。我发现关于freeglut的建议说最新版本是2.6.0,但现在是2.8.0! OpenGL SuperBible仍然是一个不错的,相当新的起点吗? 有没有更好的学习OpenGL的地方? 我是否可以将freeglut简单地存储在DevCpp include目录中(也许在GL中),或者有一些重要的过程吗? 因为我才刚刚开始,有什么我想问的意见或建议吗? @dreta为我清除了一些问题,因此现在我对要问的问题有了更好的了解: 我想我想使用包装器库从OpenGL开始,而不是直接访问OpenGL。我只是认为,对于初学者来说,对我而言,编程和获得良好结果会更容易,而我还不必了解所有肮脏的细节(如@stephelton所述)。 问题是,我找不到没有对不再支持的函数的未定义引用的任何库。Freeglut听起来可以运行,但仍使用GLU。有人知道我能做什么吗?另外,我尝试编译第一个SuperBible的源代码,但是由于没有将GLAPI定义为类型,所以出现了错误,该错误源自GLU库。 我想使用《 SuperBible》,但我不知道该如何解决。
16 c++  opengl 

2
GLSL Shader Effects:如何进行运动模糊?
我有一个完整的2D环境,周围有精灵,例如风景,角色等。 为了使它看起来更先进,我想实现运动模糊效果,类似于快速移动相机时的现代FPS游戏(即《孤岛危机》)模糊。 在侧滑车中,理想的效果是使这种轻微的模糊出现,从而使摄像机在移动时可以快速移动。如果有人可以给我一些这样做的技巧,我假设是在像素着色器中,我将不胜感激。

2
延迟着色渲染器中用于几何传递的常见渲染优化技术是什么?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 我一直在使用OpenGL 3和C ++(以及用于窗口管理的glfw)开发游戏引擎。到目前为止,我已经取得了进步,完成了除声音实体和优化之外的大部分工作。该引擎使用延迟着色,因此由于延迟着色本身是普通GPU的累赘过程,因此我想尽可能地优化渲染过程。 当前系统由一个场景组成,其中包含一个渲染器,并且当前世界和世界将实体和照明实体分开std::vectors。 因此,基本上每次场景被调用时->render(),它都会调用渲染器,将世界作为参数传递,并从世界中获取实体迭代器,将其吸引到FBO,然后通过照明实体进行第二遍。而且我认为这还不够。 即使实体不在屏幕空间中,我当前的算法也会遍历所有内容。我正在考虑一种优化当前渲染算法的方法,使其仅针对可见对象调用API函数,那么优化此类渲染器的常用技术有哪些?

1
什么是GLEW,它如何工作?
我正在寻找对初学者友好的解释。官方网站的解释太短,导致我提出的问题多于答案: 什么是GLEW? GLEW开发人员页面显示: OpenGL扩展Wrangler库(GLEW)是跨平台的开源C / C ++ 扩展加载库。GLEW提供了有效的运行时机制,用于确定目标平台上支持哪些OpenGL扩展。 但是什么是扩展加载库? OpenGL的Wiki说 OpenGL加载库是在运行时加载指向OpenGL函数,核心以及扩展的指针的库。 加载指向OpenGL函数的指针是什么意思? 什么是扩展名? “ 核心和扩展 ” 是什么意思?
15 opengl  glew 

3
如何使OpenGL纹理缩放而不会变得模糊?
我正在通过LWJGL使用OpenGL。 我有16x16的16x16纹理四边形渲染。当我更改其比例大小时,四边形会变大,然后随着变大而变得模糊。 像在《我的世界》中一样,如何使它缩放而不变得模糊。 这是我的RenderableEntity对象中的代码: public void render(){ Color.white.bind(); this.spriteSheet.bind(); GL11.glBegin(GL11.GL_QUADS); GL11.glTexCoord2f(0,0); GL11.glVertex2f(this.x, this.y); GL11.glTexCoord2f(1,0); GL11.glVertex2f(getDrawingWidth(), this.y); GL11.glTexCoord2f(1,1); GL11.glVertex2f(getDrawingWidth(), getDrawingHeight()); GL11.glTexCoord2f(0,1); GL11.glVertex2f(this.x, getDrawingHeight()); GL11.glEnd(); } 这是游戏类中initGL方法的代码 GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glClearColor(0.46f,0.46f,0.90f,1.0f); GL11.glViewport(0,0,width,height); GL11.glOrtho(0,width,height,0,1,-1); 这是执行实际绘制的代码 public void start(){ initGL(800,600); init(); while(true){ GL11.glClear(GL11.GL_COLOR_BUFFER_BIT); for(int i=0;i<entities.size();i++){ ((RenderableEntity)entities.get(i)).render(); } Display.update(); Display.sync(100); if(Display.isCloseRequested()){ Display.destroy(); System.exit(0); } } }
15 opengl  java  lwjgl  slick 

1
使用OpenGL(LWJGL)制作HUD / GUI
我处于游戏开发阶段,需要制作HUD或GUI。我从来没有涉及到这一部分,所以我不知道它是如何完成的。我尝试在屏幕上的固定位置渲染一个简单的四边形,但是有一个问题。为了使我的相机与正交摄影配合使用,我使用以下方法: public void lookThrough() { GL11.glMatrixMode(GL11.GL_PROJECTION); GL11.glLoadIdentity(); GL11.glOrtho(position.x, position.x + Display.getDisplayMode().getWidth()/zoom, position.y + Display.getDisplayMode().getHeight()/zoom, position.y, -1, 1); GL11.glMatrixMode(GL11.GL_MODELVIEW); } 我看不到如何使用这种方法将某些东西固定在屏幕上?可以解决吗?谢谢 :)
15 opengl  java  gui  lwjgl 

4
二维等距游戏中的实时阴影投射
我正在用C ++写一个小的2D等距引擎,并且试图实现实时阴影投射。我按照本页上描述的一种简单方法进行操作,结果是(光与黄色立方体位于同一位置): 结果非常好,但是在墙壁和立方体顶部缺少阴影。这是一个看起来像的示例(我用绿色绘制了预期的阴影): 所有绘制的立方体仅由位于XY位置且Z深度(z = x + y)的3个2D方形构成。我将OpenGL与正交矩阵(glOrtho)结合使用。使用模板缓冲区绘制阴影。 我正在寻找可以帮助我完成此影子投射实施的资源或解决方案。 非常感谢!

3
OpenGL ES 2.0点精灵大小
我正在尝试在OpenGL ES 2.0中绘制点精灵,但是所有点的大小最终都是1像素……即使在顶点着色器中将gl_PointSize设置为较高的值时也是如此。 如何使我的点子精灵变大?
15 opengl  3d  android  opengl-es 

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.