Questions tagged «opengl»

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

3
延迟阴影-如何合并多个灯光?
我从GLSL开始,已经实现了简单的延迟着色,该着色输出带有位置,法线和反照率的G缓冲区。 我还编写了一个简单的点光源着色器。 现在,我为点光源绘制一个球体,输出进入照明缓冲区。 问题是,绘制多个灯光时如何合并灯光缓冲区的结果? 例如,当我使用点光源着色器将第二个光源绘制到光缓冲区时,如何将第一个光源添加到照明缓冲区中的第二个光源。我的意思是,您不能读取和写入相同的输出缓冲区吗?

1
如何从样条曲线生成3D赛道?
我想围绕描述其形状的样条线生成3维赛道。 这是一个说明性视频。 轨道应该是一条沿着3D样条线扫过的无尽隧道,并抛出一些障碍。到目前为止,我最好的想法是沿样条线放一个圆形。 我还希望获得一些指向如何管理几何的指针,即如何从放样操作创建几何,如何在内存,碰撞和纹理化中管理其“生命周期”。


4
无法理解这些UV纹理坐标(范围不是0.0到1.0)
我正在尝试将由Google SketchUp 8 Pro生成的简单3D对象绘制到我的WebGL应用程序上,该模型是一个简单的圆柱体。 我打开了导出的文件,并将顶点的位置,索引,法线和纹理坐标复制到一个.json文件中,以便能够在javascript上使用它。除了具有一些非常大的值(例如46.331676和负值)的纹理坐标外,其他所有内容似乎都可以正常工作。现在我不知道我是否错了,但是2D纹理坐标不应该仅在0.0到1.0的范围内吗? 好吧,使用这些纹理坐标绘制模型会给我一种完全怪异的外观,并且只有当我非常接近模型(不是我自己,凸轮)时,我才能正确看到纹理,就像纹理疯狂一样减小尺寸,并在模型的各个面上无限重复。(是的,我在那个纹理包裹物上使用了GL_REPEAT) 我注意到的是,如果获得所有这些坐标并将它们除以10或100,我将获得“正常”外观,但仍不在0.0到1.0范围内。 这是我的json文件:http://pastebin.com/Aa4wvGvv 这是我的GLSL着色器:http : //pastebin.com/DR4K37T9 这是SketchUp导出的.X文件:http : //pastebin.com/hmYAJZWE 我也尝试使用XNA绘制此模型,但仍然无法正常工作。使用此HLSL着色器: http //pastebin.com/RBgVFq08 我尝试将同一模型导出为不同的格式collada,fbx和x。所有这些产生相同的结果。

2
如何在OS X上处理OpenGL和全屏
我在OS X上进行大部分开发,对于我当前的游戏项目,这是我的目标环境。但是,当我玩游戏时,我会在Windows上玩。作为Windows游戏玩家,我习惯于Alt + Tab从游戏内切换到最后打开的应用程序。 在OS XI上,目前找不到支持该功能的游戏,也找不到能使之成为现实的方法。我当前的项目基于SDL 1.3,我可以看到cmd + tab是直接发送到我的应用程序且未被操作系统拦截的序列。 现在,我的第一个尝试是在cmd + tab上隐藏渲染窗口,该渲染窗口当然可以工作,但是其缺点是,当用户跳回到应用程序时,无法恢复SDL中的隐藏OpenGL窗口。首先,没有为此触发的事件,或者我找不到它,其次,核心问题是当该应用程序窗口隐藏时,我的游戏仍然是活动的应用程序,只是该窗口消失了。 那真是令人讨厌。 任何想法如何近似alt + tab的Windows / Linux行为?
9 opengl  sdl  macos 

3
粒子系统中顺序独立的透明度
我正在编写一个粒子系统,并且想找到一种技巧来实现正确的alpha混合而不对粒子进行排序,因为: 每个粒子都是单个网格中的点精灵,我无法使用场景图功能对透明节点进行排序。但是,系统节点应正确排序。 根据初始速度,加速度和时间在着色器上计算粒子位置。为了对系统进行排序,我必须在CPU上执行所有这些计算,这是我要避免的事情。 根据相机位置对数百个粒子进行排序,并将每个帧的接缝上传到GPU上,以减轻操作负担。 Alpha测试似乎在GLES 2.0上足够快,并且对于非透明但“蒙版”的纹理效果很好。但是,对于半透明的粒子来说还不够。 您将如何处理?

4
如何提高配料性能
我正在为移动平台开发基于Sprite的2D游戏,并且正在使用OpenGL(实际上是Irrlicht)来渲染图形。首先,我以一种简单的方式实现了精灵渲染:将每个游戏对象渲染为具有自己的GPU绘制调用的四边形,这意味着如果我有200个游戏对象,则每帧进行200个绘制调用。当然,这是一个错误的选择,我的游戏完全受CPU限制,因为每个GPU绘制调用中都有少许CPU开销。GPU大多数时候都保持空闲状态。 现在,我认为我可以通过将对象分成大批并仅用几次绘制调用就可以渲染这些批处理来提高性能。我实施了批处理(以便共享相同纹理的每个游戏对象都以同一批进行渲染),并认为我的问题已经消失了……只是发现我的帧频比以前更低。 为什么?好吧,我有200个(或更多)游戏对象,并且每秒更新60次。我必须在每一帧中重新计算CPU中顶点的新位置(平移和旋转)(移动平台上的GPU不支持实例化,因此我无法在其中进行实例化),并每秒进行48000次计算(200 * 60 * 4,因为每个子图都有4个顶点)似乎太慢了。 我可以做些什么来提高性能?所有游戏对象都(几乎)每帧都在移动/旋转,所以我真的不得不重新计算顶点位置。我能想到的唯一优化是旋转的查找表,这样我就不必计算旋转。点精灵会有所帮助吗?有讨厌的骇客吗?还要别的吗? 谢谢。

6
用于将图像加载到纹理,Linux,C和OpenGl中的库
我正在寻找用于Linux的简单,自包含的C库,以将文件中的图像加载到OpenGL纹理中。许可证应该相当自由:zlib,bsd,mit或其他。我已经找到SOIL,但是很长一段时间都没有更新。还有其他事情,还是我必须自己写? PS我使用glfw。仅不推荐使用用于加载图像的功能。
9 opengl  textures  c  loading  linux 

1
带有缓冲对象和着色器的精灵表
用着色器和缓冲区处理子画面的“最佳”方法是什么?在即时模式下,绘制精灵时修改其texcoords很容易,但是我不知道如何使用现代的opengl来实现。我应该将所有texcoords存储在缓冲区中并为每个sprite更改指针,还是有更好的方法?

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.