Questions tagged «opengl»

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

2
OpenGL中的延迟平铺阴影,平铺视锥面计算
我正在尝试使用计算着色器在OpenGL中进行延迟的平铺着色,但是在尝试为每个平铺创建平截头体时遇到了障碍。我正在使用AMD的Forward +演示(用D3D编写)作为指导,但是当不应该使用时,灯光似乎被剔除了。 更新 阅读下面的更新。 这是我的(完整)计算着色器: #version 430 core #define MAX_LIGHTS 1024 #define MAX_LIGHTS_PER_TILE 40 #define WORK_GROUP_SIZE 16 struct PointLight { vec3 position; float radius; vec3 color; float intensity; }; layout (binding = 0, rgba32f) uniform writeonly image2D outTexture; layout (binding = 1, rgba32f) uniform readonly image2D normalDepth; layout (binding = …

3
为什么可能会遇到大于1或小于0的纹理坐标
我正在研究有关文本texture mapping,在preparing to draw会议中,我读到: 定义纹理包裹参数。这将控制在遇到纹理坐标大于1.0或小于0.0时发生的情况: glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,wrap); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,wrap); 其中wrap是: GL_REPEAT:指定如果遇到转换的纹理坐标小于0.0或大于1.0的情况,此模式将重复(即环绕)。 GL_CLAMP:指定模式将“固定”为0.0或1.0的值。 但是没有任何解释遇到这种纹理坐标的原因是什么? 例如,假设我刚刚绘制了一个矩形,并且想在其上应用图像作为纹理,是否有可能遇到这样的坐标?

3
如何在基于块的2D游戏中实现遮挡照明?
我想要2D照明可以被游戏中的物体阻挡。我的游戏具有自顶向下的视图,所有游戏对象均由矩形描述。 假设我有一个10x10的世界,我在1x1处放置了一个灯光,并在该灯光周围放置了墙壁。我希望能够看到1x1的光源,但看不到其他任何地方,因为它被墙壁挡住了。 我听说过投射光线有效,但实际上如何运作?

1
如何获得中途变色的光?
我想到创建光源和一些彩色窗口。现在,窗户是半透明的。我怎样才能做到,当光线(例如纯白色)射到玻璃上并继续穿过玻璃时,却将颜色更改为与通过的玻璃相同的颜色? 我知道这里描述的效果可以通过在窗口“彩色”侧使用区域灯来伪造,但是如果我只想拥有一个白点灯怎么办?
11 opengl  lighting  color 

2
将OpenGL原点更改为屏幕左上方时,我应该担心什么?
对于自我教育,我正在使用SDL / OpenGL用C ++编写2D平台引擎。我最初使用sdltutorials.com和lazyfoo.net上的教程从纯SDL开始,但是现在我使用SDL创建OpenGL渲染上下文,然后使用OpenGL函数进行渲染(特别是即时模式,但是我正在学习VAO / VBO) )。我仅将SDL用于接口,音频等。 SDL使用坐标系,其原点位于屏幕的左上角,而y轴的正指向下。在OpenGL中设置正投影可以很容易地做到这一点。 我知道纹理坐标是一个从0到1的右手系统-在渲染之前垂直翻转纹理(好吧,在加载之前翻转文件)会产生可以正确渲染的纹理...如果我正在绘制,这很好整个纹理,但最终我将使用tileset并可以想象问题。 执行此操作时,我应该在渲染方面关注什么? 如果有人提出任何建议,或者他们自己做了建议并指出未来的陷阱,那将是不错的选择,但实际上任何想法都会受到赞赏。
11 c++  opengl  2d  sdl 

3
是纯OpenGL还是GLSL?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 6年前关闭。 我对研究图形编程很感兴趣,因此显而易见的切入点是学习OpenGL。但是,在论坛和站点周围收集分散的信息时,似乎似乎已经淘汰了纯OpenGL实现,因为3.0版之前的大多数内容已被弃用,并引用了Amazon的评论,“自3.0版以来,所有内容均与着色器有关”。在我所见过的书中,看起来只有上篇涵盖了较新的版本,而部分原因是因为书中很大一部分讲授了过时的功能,并且有专门针对GLSL的书。 这是我遇到的第一个问题,某些硬件不支持GLSL,包括我计划使用的具有英特尔集成显卡的笔记本电脑。功能 GLuint vertShader = glCreateShader(GL_VERTEX_SHADER); 导致分段错误,从它的外观看,我的驱动程序不支持着色器 所以我的问题是,仅在OpenGL中制作游戏的可行性是什么?着色器语言会缺少不可替代的良好功能吗?我期望什么样的硬件(旧的i3,i5,i7,旧的VGA)可以正确运行带有着色器的游戏?
11 opengl  glsl 

3
如何在OpenGL中弯曲对象?
有没有一种方法可以使用OpenGL弯曲物体,例如圆柱体或平面? 我是OpenGL初学者(我正在使用OpenGL ES 2.0,尽管这很重要,尽管我怀疑数学在这种情况下最重要,所以它在某种程度上与版本无关),我了解基本知识:平移,旋转,矩阵转换等我想知道是否有一种技术可以允许您实际更改对象的几何形状(在这种情况下,通过弯曲它们)? 欢迎任何链接,教程或其他参考!

3
使用3D模型的OpenGL中的动画
我在Blender中创建了一个模型。现在,我想在我的C ++程序中阅读该3D模型。我认为模型可以导出为各种文件格式,例如.obj,.3ds或COLLADA,然后可以在c ++程序中读取。我已经在网上搜索了很久了,发现了很多教程。但是我大多数都遇到了问题。例如,在Nehe教程中,他们使用glaux,而我不想在程序中使用。其余教程使用Blender不支持的md2。 因此,谁能指导我导出3D模型所使用的文件格式以及如何在OpenGL程序中加载该文件格式?另外,我该如何为该模型制作动画?在使用OpenGL将其加载到c ++程序中之后,是否可以添加诸如色调映射之类的额外效果?如果是,那怎么办? PS我正在使用Linux进行游戏开发

1
如何使用多线程OpenGL应用程序更新VBO并同时使用它们?
我有一个简单的应用程序。它有两个线程,每个线程都有自己的呈现上下文,但是它们共享一个VBO(这是有效的,我已经对其进行了测试)。 现在我想要的是:一个线程正在从VBO的上半部分渲染一些数据,第二个线程正在更新VBO的第二部分。 当我不更新VBO时,它工作正常。 但是更新时我遇到了一些奇怪的问题。当我glMapBuffer用来更新VBO(在第二个线程中)时,在大多数情况下,在第一个线程中,它什么都不呈现-整个屏幕清晰(glClear调用后)。看起来它无法触摸来自VBO的数据(这是可以理解的,因为整个缓冲区已映射,因此可以某种方式锁定)。 我尝试使用glMapBufferRange,它使用GL_MAP_UNSYNCHRONIZED_BIT。这意味着,“不要等待并根据需要使用VBO,我(程序)将自己同步它”。另外,当我映射一系列VBO并从另一部分渲染数据时,它不应该等待,但是遇到的问题与相同glMapBuffer。 谁能帮我解决这个问题或解释为什么会发生吗?

1
glVertexAttribPointer规范化
glVertexAttribPointer(索引,大小,类型,归一化,步幅,指针); 如果我使用type = GL_UNSIGNED_BYTE和normalized = GL_TRUE 如何标准化?将数据除以256进行归一化吗?要么?这将意味着无法将归一化值为“ 1.0f”。
11 opengl  3d 

2
如何在2.5D世界中同时使用深度测试和纹理透明度?
注意:我已经找到了答案(我将在这个问题之后发布)-我只是想知道我是否做对了,或者是否有更好的方法。 我正在使用OpenGL ES(JOGL)制作“ 2.5D”等距游戏。“ 2.5D”是指世界是3D,但使用2D等距图块进行渲染。 我必须解决的原始问题是必须按顺序(从后到前)渲染纹理,以便图块正确重叠以产生合适的效果。经过一番阅读,我很快意识到这是2D的“老帽子”方法。由于玩家可以修改3D世界(因此东西可以出现在3D空间中的任何地方),因此很难有效地做到这一点-因此,我利用深度缓冲区似乎是合乎逻辑的。这意味着我不必担心以正确的顺序渲染内容。 但是,我遇到了一个问题。如果将GL_DEPTH_TEST和GL_BLEND一起使用,则会创建一种效果,在将对象与背景混合之前,先按z顺序对其进行“排序”(这意味着您应该在透明度应达到的地方获得一种奇怪的重叠)。 这是一些应该说明问题的伪代码(顺便说一句,我在Android上使用libgdx)。 create() { // ... // some other code here // ... Gdx.gl.glEnable(GL10.GL_DEPTH_TEST); Gdx.gl.glEnable(GL10.GL_BLEND); } render() { Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); Gdx.gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); // ... // bind texture and create vertices // ... } 所以问题是:如何解决透明度重叠问题?

2
在OpenGL中,如何发现深度缓冲区的深度范围?
我正在为iOS开发GL多遍渲染应用程序。第一遍渲染到深度缓冲区纹理。第二遍使用深度缓冲区中的值来控制片段着色器的应用。我想将深度缓冲区中的值重新缩放为有用的值,但是在执行此操作之前,我需要知道深度缓冲区值的深度值范围。我该怎么做呢?

2
高效的骨骼动画
我正在考虑为RTS游戏采用骨骼动画格式(如此处提示)。屏幕上每种模型的单独代表将很小,但会有很多! 在骨骼动画(例如MD5文件)中,每个单独的顶点都可以附加到任意数量的关节上。 在GLSL中进行插值时,如何有效地支持这一点?还是引擎在CPU上做动画? 还是引擎对每个顶点的最大关节数设置了任意限制,并对那些不使用最大数量的关节调用nop乘法? 是否有游戏在类似RTS的设置中使用骨骼动画,从而证明在集成显卡上走骨头路线时我无需担心?

1
如何随机放置不重叠的实体?
我正在为正在开发的游戏创建随机生成的环境。我正在使用OpenGL和编码Java。 我试图将树木随机放置在我的世界中(以创建森林),但是我不希望模型重叠(当两棵树之间的距离太近时会发生这种情况)。这是我在说什么的图片: 如果需要,我可以提供更多代码,但这是必要的代码片段。我存储在我的对象ArrayList有List<Entity> entities = new ArrayList<Entity>();。然后,我使用以下方法将该列表添加到该列表中: Random random = new Random(); for (int i = 0; i < 500; i++) { entities.add(new Entity(tree, new Vector3f(random.nextFloat() * 800 - 400, 0, random.nextFloat() * -600), 0, random.nextFloat() * 360, 0, 3, 3, 3); } 其中每个都Entity遵循以下语法: new Entity(modelName, positionVector(x, y, z), rotX, …
11 opengl  java  objects 

1
以编程方式绘制球体的中间部分
我正在尝试创建一个球体的中间部分。基本上,要创建一个球体,将给出堆栈编号和切片编号,并且有两个变量phi(用于切片)和theta(用于堆栈)负责进度。并且该过程分为创建底盖,主体和顶盖(如下所示)。要达到中间一半(theta如下所示为中间50%),我们需要省略帽子,并以某种方式修改身体。我在玩堆栈号(1/4*stackNumbers to 3/4*stackNumbers),但没有给出想要的结果。 如何修改球体生成以达到中间一半(pi/4 <theta <pi*3/4)?我的总体问题是如何将球体分为上25%,中50%和下25%的3个不同部分? 以下是流行的以编程方式生成球体的代码: private void generateSphere(int stackNumber, int sliceNumber, boolean facingOut) { int capVertexNumber = 3 * sliceNumber; int bodyVertexNumber = 4 * sliceNumber * (stackNumber - 2); int vertexNumber = (2 * capVertexNumber) + bodyVertexNumber; int triangleNumber = (2 * capVertexNumber) + (6 * sliceNumber …

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.