Questions tagged «opengl»

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

2
如何检测本机支持哪些OpenGL纹理格式?
例如,如何检测我的视频卡是否不支持“ bgr8”并将其转换为另一种格式,例如在软件模式下为“ rgba8”。 更新:很抱歉造成混乱。当我在glTexImage2D中将internalFormat设置为“ bgra8”之类的东西,但视频驱动程序在内部将数据转换为另一种格式(例如“ rgba8”)时,此问题更多地与情况有关。


5
OpenGL vs OGRE:哪个是最适合初学者的?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 我对游戏开发感兴趣,并且具备良好的C / C ++编程技能。我之前尝试过OGRE,但很好奇我是否应该以OGRE或OpenGL为起点。 据我了解,OGRE是OpenGL和DirectX的包装。那么,假设我学习OGRE,是否还需要学习OpenGL来开发游戏? 另外,有人可以为我指出OpenGL的好教程吗?我发现OGRE有充分的文档记录(甚至随发行版一起提供!),但对于OpenGL,我上来的大多数教程都是过时的。
10 opengl  ogre 

4
WebGL和OpenGL ES缺少的功能
我已经开始使用WebGL,并且对利用我的OpenGL(以及扩展为OpenGL ES)的经验如此简单感到满意。但是,我的理解如下: OpenGL ES是OpenGL的子集 WebGL是OpenGL ES的子集 两种情况都正确吗?如果是这样,是否有资源来详细说明缺少哪些功能? 例如,一个值得注意的缺失功能是glPushMatrix和glPopMatrix。我没有在WebGL中看到它们,但是在搜索中我也找不到在OpenGL ES资料中引用的它们。

3
《我的世界》世界中的照明
《我的世界》是一款主要基于高度图的游戏,并使用该高度图信息使世界充满光明。据我了解,高度图中的最高点是受阳光影响区域的末端。上方的所有物体都被阳光照亮,下方的所有物体都受到附近8个半径范围内的光线的影响。 因此,如果您在世界之巅上有一个浮岛,那么位于其下方的所有事物都会被视为一个洞穴。当两个灯影响同一点时,较亮的灯将获胜(对此不确定)。 无论哪种方式,Minecrafts的照明模型都存在两个问题:首先,如果您的世界没有高度图,那么弄清楚究竟应该发出什么阳光以及什么不发出阳光变得很棘手。一种简单的方法是假设世界(在我的情况下)是一块漂浮的岩石,然后从两个方向遍历每个轴并找出岩石的开始和结束位置。但这并不能完全消除问题,因为岩石中的凹痕不应该处于黑暗中。 Minecraft本身会将光信息与有关块材料的信息一起缓存在其块中。因此,只有在世界被修改的情况下,照明才必须更新。不幸的是,该过程在更新上仍然相当缓慢,并且在快速更改灯光时,人们可以看到照明落后。如果很多块发生变化(TNT,日落等),并且您没有运行最快的计算机(或Mac上的Java),则尤其如此。 从我对3D图形照明的了解仍然有限,像Minecraft这样的世界应该不是最大的问题。您将如何解决这个问题? 我认为体素世界中照明的基本要求是 更新速度足够快,以至于可能在单个帧中发生。一个人可能可以在图形设备中进行照明并将更改后的照明信息下载到主RAM。 灯光信息必须能够快速用于主要游戏逻辑,因此不能完全基于图形设备:推理:灯光会影响草的生长,怪物的产卵等。 灯光更新必须是局部的,或者有其他一些限制,这样就不必重新照明可能很大的整个世界。 主要思想是使灯光更新更快,但不一定更美观。对于一般的灯光渲染性能改进,可以很容易地在其中添加SSAO,这将带来更好的效果。
10 opengl  maps  lighting 

2
2D游戏和现代OpenGL
前概念 好的,到目前为止,我收集的是: 不要使用固定的管道(已弃用或将要弃用) vbos存储“对象模型”(主要是n个顶点数据) vaos描述了如何放置数据,以便绘图调用知道每个vbo的哪一部分是关于哪种顶点信息的(一个vao可以引用多个vbo,相反则有点困难) 每个绘制调用还将顶点数据发送到着色器 我如何看待3D(可选) 有了这些信息,我可以看到使用现代OpenGL绘制3D复杂对象的效果如何。您基本上是将一堆对象模型(可能来自Blender或其他类似软件)加载到具有局部坐标的VBO中,然后只需为对象的每个实例提供不同的着色器参数(偏移量)即可绘制到世界空间。 问题/问题 但是,在2D中,问题和优先级完全不同。您不需要绘制很多复杂的对象,也不需要复杂的投影矩阵,并且着色器和着色器要简单得多。 用现代OpenGL频繁(实际上经常,基本上每帧)绘制变化的几何形状的最佳方法是什么? 在下面的段落中,您可以看到一些问题的想法(圆形和矩形问题),可以更好地识别我感兴趣的更改类型。 我的尝试(可选) 因此,我开始考虑如何处理在屏幕上绘制基本的2D几何: 正方形:[(1, 0), (1, 1), (0, 1), (0, 0)]在局部空间中为正方形的几何图形加载VBO,然后为着色器提供正方形的实际宽度以及世界坐标和颜色信息 冷却,看起来很容易。让我们转到一个圆圈: 一个圆圈:三角形风扇。精度(顶点数)多少?对于小圆圈,精度必须较低,对于错误环,精度必须较高。显然,加载1个VBO可能无法满足所有情况。如果由于圆的大小被调整为更大而需要增加精度怎么办? 不太酷。让我们移动到稍微容易一点的矩形: 矩形:嗯。没有“常规矩形几何体”。您只需要一个宽度/高度比例即可,但是,如果尺寸改变,每个矩形可能会有所不同。 如您所见,事情从那里走下坡路。特别是对于复杂的多边形等等。 无代码政策:P 我只需要一个大概的想法,不需要任何代码,尤其是C或C ++代码。就像这样说:“使用此顶点数据创建一个VBO,然后将其绑定,...”。
10 opengl  2d  vbo  vao 

1
如何反转背景像素的颜色
我正在使用Java和jMonkeyEngine编写游戏和地图编辑器。在地图编辑器中,我已通过线框球体完成了笔刷。我的问题是:我想使它在任何地方都可见,因此我想反转此笔刷“后面”的像素的颜色。我想用片段着色器(GLSL)来做,但是我不知道如何获得该像素的颜色。

1
opengl 3和opengl 4之间的区别
我刚刚开始游戏编程,我想开始学习opengl。我从头开始发现了一个非常好的入门教程,而我想知道openGL 3和openGl 4之间是否有很大的区别。或者我应该问一下,openGL 4是否会使openGL 3过时,或者我可以以openGL 3,然后可以移至openGL 4了吗?
10 opengl 

1
哪个OpenGL的c / c ++模型动画库[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 6年前关闭。 我是游戏开发的新手,以前玩过xna,现在才学习OpenGL&c,我很想知道那里有哪些基于c / c ++的模型动画库,您会推荐哪个?我还没有想到任何特定的模型格式,但是可能是像Blender这样的免费建模工具所支持的格式。
10 opengl  c++  models  c 

2
更新着色器制服的最佳方法是什么?
使着色器矩阵保持最新状态的最常用方法是什么?为什么? 例如,目前我有一个Shader类,用于存储GLSL着色器程序和统一体的句柄。每次移动摄像机时,我都必须将新的视图矩阵传递给着色器,然后我必须将每个不同的世界对象的模型矩阵传递给着色器。 这严重限制了我,因为如果不访问该着色器对象就无法执行任何操作。 我想到创建一个ShaderManager负责容纳所有活动着色器的单例类。然后,我可以从任何地方访问该对象,世界对象不必知道什么着色器处于活动状态,只需要ShaderManager知道所需的矩阵即可,但是我不确定这是最好的方法,并且可能存在一些问题将采取这种方法。
10 opengl  shaders  glsl 

5
为什么在Vector3s中不能使用运算符'> ='?
我正在尝试获得一个矩形,以便在我称为_positionA和的两个位置之间移动_positionB。两者都是类型Vector3。矩形移动得很好。但是,到达时_positionB它不会像应该的那样朝相反的方向移动。 我回到代码中看一看。我得出的结论是,随着对象的移动,if代码中的语句错过了rects位置等于的框架_positionB。如果rects的位置大于或等于, 我决定将代码修改为反向_positionB。我的代码不太长,因此我将在下面显示它: using UnityEngine; using System.Collections; public class Rectangle : MonoBehaviour { private Vector3 _positionA = new Vector3(-0.97f, -4.28f); //Start position private Vector3 _positionB = new Vector3(11.87f, -4.28f); //End position private Transform _rect_tfm; private bool _atPosA = false, _atPosB = false; public Vector2 speed = new Vector2(1f, 0f); private …
9 unity  c#  vector  mathematics  vector  matrix  unity  c#  transformation  java  3d  terrain-rendering  shading  ios  opengl-es  opengl  rendering  optimization  python  scripting  minecraft-modding  modding  pc  3d-meshes  mesh  culling  point-cloud  networking  interpolation  mathematics  game-design  ai  game-mechanics  animation  unreal-4  skeletal-animation  3dsmax  unity  c#  3d  opengl  c++  textures  unity  ide  cocos2d  cocos2d-x-js  unity  c#  mono  il2cpp  c++  game-loop  timer  linux  flash  actionscript-3  java  glsl  c++  vector  entity-component  c++  directx11  windows  visual-studio  libgdx  mouse  unity  c#  architecture  storage  unity  c#  rotation  coordinates  quaternion  vrpn  movement  vector  unreal-4  unity  shaders  unity  gui  text  bug  shooter  3d  animation  rendering  voxels  c++  mmo  multithreading  linux  textures  procedural-generation  terrain-rendering  multiplayer  mmo  game-state  java  android  libgdx  opengl  procedural-generation  unity  gui  3d  animation  tools  geometry-shader  mobile  advertisements  unity  c#  animation  scripting  unity  animation  unityscript  coroutines  unity  shaders  lighting  camera 

1
如何在OpenGL中实现基于GPU的动态几何LOD?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 去年关闭。 我正在尝试实施LOD以提高游戏性能。我发现了一个很好的教程。 我想我理解的基本概念是:获取摄像机到对象的距离,检查正确的LOD级别,然后使用“适当数量的实例”渲染对象。 我该如何实施?提供的示例代码对我来说是个谜。 一些问题: 这是实现LOD的好方法吗? 有人可以向我详细解释一下,我如何实现它,以及查询等等。 我正在使用渲染所有对象 GL11.glDrawElements(GL11.GL_TRIANGLES, model.getRawModel().getVertexCount(), GL11.GL_UNSIGNED_INT, 0); 示例代码使用GL_POINTS。我也可以实现GL_TRIANGLES吗?
9 opengl  java 

3
如何在OpenGL中播放视频文件?
有没有可以让我加载电影文件并在OpenGL应用程序中播放的库?还是仅仅是有人躺在的一个代码示例?我也使用GLUT,如果有帮助的话。我猜文件格式没有关系,尽管目前我的电影是AVI格式。
9 opengl  video 

3
使用深度分辨率的完整分辨率进行2D渲染
我正在使用正交投影为2D引擎进行从前到后的渲染器。我想使用深度缓冲区以避免过度绘制。我有一个16位的深度缓冲区,一个Z = 100的相机查看Z = 0,zNear为1,zFar为1000。每个渲染的精灵将其Z坐标设置为越来越远的值,从而允许深度测试跳过渲染下面的任何东西。 但是我知道Z位置以Z缓冲区值结束的方式是非线性的。我想利用16位深度缓冲区的完整分辨率,即允许65536个唯一值。因此,对于每个渲染的精灵,我想将Z位置增加到下一个位置,以与下一个唯一的深度缓冲区值相关联。 换句话说,我想将绘制的精灵的递增索引(0、1、2、3 ...)转到每个精灵的适当Z位置,以具有唯一的深度缓冲区值。我不确定这背后的数学原理。这样做的计算是什么? 注意我正在使用WebGL(基本上是OpenGL ES 2),并且我需要支持广泛的硬件,因此尽管gl_FragDepth之类的扩展名可能使此操作更容易,但出于兼容性原因,我无法使用它。

1
色调映射和眼睛适应-浅色和深色
我正在尝试实现色调映射以及眼睛适应和HDR。其实我已经实现了,但是对结果不满意,我认为我做错了。 我的最终图像(在后处理之前)以半浮点纹理存储。我也有2个辅助纹理。第一个将对数亮度及其平均,最小和最大颜色存储在最后一个mip映射中。第二个存储适应值,其计算公式为: prevLum + (avgLum - prevLum) * (1.0 - exp2(-adaptionRate)) 其中prevLum是先前的适应值(此纹理的大小为1x1)。对数亮度纹理是R8B8G8格式,第二个是R8。在教程中,我看到使用了一半的浮动纹理,但就我而言,我的图像太亮(几乎是白色)。 在最终的后期处理着色器中,我使用所有这些值来使用以下代码获得眼睛适应和色调映射: float autokey(in float lum) { return 1.03 - 2.0 / (2.0 + log10(lum + 1.0)); } float hejl(in float color) { float x = max(0.0, color - 0.004); return (x * (A * x + B)) / …

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.