问题标签 [opengl-3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 我应该如何进行深度无关混合?
我正在为一个名为Gwen的 GUI 工具包开发 OpenGL 3 渲染器。我几乎让所有东西都正常工作,但我在让所有东西正确融合时遇到了一些问题。我已经按照它们使用的纹理对三角形进行了排序,并将它们打包到 VBO 中,因此通过单元测试,它基本上可以归结为 3 层:没有纹理的填充矩形、文本以及窗口、按钮等使用肌理。
填充矩形通常绘制在其他所有内容之上并混合在一起,但所有内容背后的背景也是填充矩形,所以我不能指望它。如果您最后绘制它们,则存在 Z 值冲突(例如:窗口的边缘周围有一个带纹理的阴影,由于背景未通过深度测试而变黑),如果您先绘制它们,则会出现混合/z 值冲突(例如:一些选择亮点被绘制在而不是像他们应该的那样混合)。
我不能指望能够识别除填充矩形之外的任何特定层。不同的层有混合的 z 值,所以我不能只是按照一定的顺序绘制它们来使事情正常工作。在写这篇文章时,我想到了一个简单的方法来绘制从前到后排序的三角形,但这可能意味着很多小的绘制调用,我希望避免这种情况。有没有一些涉及巫毒魔法混合的方法,可以让我保留我的大批量三角形?
interface-builder - 带有 OpenGL 3.2 核心的 NSOpenGLView
如果这个问题是微不足道的或无意义的,我提前道歉......这是我正在开发的第一个应用程序之一。(不幸的是)我不是开发人员。
我有一个 NSWindow,其中包含一个自定义视图,它是NSOpenGLView
.
由于NSWindow
和NSOpenGLView
是通过 Interface Builder 创建的,因此我init
既不需要NSOpenGLContext
也不需要NSOpenGLPixelFormat
.
我最近切换到 OS X Lion,现在我想利用新的 OpenGL 3.2。
从 Apple 文档中,我发现要启用 OpenGL 3.2,我只需要编写如下内容:
在初始化NSOpenGLContext
.
这很容易(即使对我来说也是如此),但我怎么能在我的应用程序中实现它,因为我从来没有init
NSOpenGLContext
?
由于NSOpenGLView
是从 Interface Builder 创建的,因此-initWithFormat:shareContext:
不会调用该方法。
因此,我尝试使用以下内容覆盖该-initWithCoder:
方法:
并且 OpenGL 3.2 已按照报告正确加载,glGetString(GL_VERSION)
但创建的上下文不再与应用程序交互...视图中没有绘制任何内容..
我尝试了我所知道的一切......但我无法解决这个问题。
我应该怎么做呢?
opengl - 纹理缓冲对象作为帧缓冲存储
有没有办法将纹理缓冲区对象(ARB_texture_buffer_object)附加到帧缓冲区(EXT_framebuffer_object),以便我可以直接渲染到纹理缓冲区对象中?
我需要它来制作多样本帧缓冲区(颜色缓冲区、深度缓冲区和模板缓冲区)的精确按位副本,并将此副本驻留在主内存中而不是 VRAM 中。
更新:问题是我不能直接在多采样帧缓冲区上调用 glReadPixels 来复制其内容。相反,我必须将多采样帧缓冲区传输到中间帧缓冲区,然后在其上调用 glReadPixels。在此过程中,多个样本被平均并写入中间缓冲区。如果我用 glWritePixels 恢复这个缓冲区,现在当然会损失精度。
我意识到我可以使用多样本纹理作为帧缓冲区对象的后备存储,但是此纹理将驻留在 VRAM 中,并且似乎无法将其复制到主内存而不会损失同样的精度。具体来说,我担心与多采样深度缓冲区附件相关的精度损失,而不是颜色缓冲区。
是否有另一种方法可以在 OpenGL 中制作多采样帧缓冲区的精确副本(并恢复此副本)?
TL;DR:如何将多样本帧缓冲区(特别是深度缓冲区)的确切内容复制到主内存并稍后恢复这些内容,而不会损失精度。
opengl - 具有不同版本的多个上下文
我正在尝试在多个 OpenGL 上下文之间进行列表共享。这是一个很棒的功能,因为它允许我执行并行渲染线程。
但由于我使用的是 CreateContextAttribs,我提供了请求特定 OpenGL 实现的可能性。因此,可能会发生某些上下文正在实施 3.2+ 版本,而另一个正在实施 2.1 版本。
实际上工作得很好,但我怀疑这种作案手法隐藏了一些副作用。使用具有不同版本的上下文时可能出现的问题列表是什么?
除此之外,我查询每个上下文版本的实现扩展,因为我认为不同的版本可以支持不同的扩展,对吗?那么函数指针呢?我必须为具有不同版本的每个上下文重新查询它们(实际上,指针会根据版本而变化)?
c++ - 尝试实现渲染到纹理
我无法使用 OpenGL 3 实现对纹理的渲染。
我的问题是,在渲染到帧缓冲区后,渲染的对象似乎变形了,这可能意味着某处发生了错误的转换。这没有意义,因为在不使用我的帧缓冲区时对象渲染得很好(见帖子底部)。
目前的结果是这样的:
当前结果 http://k.minus.com/jZVgUuLYRtapv.jpg
预期的结果是这样的(或类似的,这只是 GIMP'd): 预期 http://k.minus.com/jA5rLM8lmXQYL.jpg
因此,这意味着我在帧缓冲区设置代码或其他地方做错了什么。但我看不出是什么。
FBO 通过以下函数设置:
这是我的绘图框代码,它只需要一个转换矩阵并调用适当的函数。P 的当前值是投影矩阵和视图矩阵 (V) 的单位矩阵。
以及GLUT调用的显示函数。
并且...强制性的纹理着色器代码
顶点
分段
以下是不使用 FBO 逻辑时呈现的内容: 呈现给 FBO 的内容 http://k.minus.com/jiP7kTOSLLvHk.jpg
... 帮助?
关于我可能做错了什么的任何想法?可根据要求提供更多来源。
opengl - ARB 程序(着色器对)可以使用非 ARB 缓冲区对象和顶点数组吗?
ARB 程序(着色器对)可以使用非 ARB 缓冲区对象和顶点数组吗?非 ARB 表示没有扩展名,如 NV、ATI、ARB、EXT 或其他。
c++ - 使用 GL_DRAW_FRAMEBUFFER 目标时,glBindFramebuffer 会导致“无效操作”GL 错误
我在 GeForce 9800 GTX 上使用 OpenGL 3.3。3.3 的参考页面说 glBindFramebuffer 的无效操作指示不是从 glGenFramebuffers 返回的帧缓冲区 ID。然而,我输出了 glGenFramebuffer 返回的 ID 和稍后发送到 glBindFramebuffer 的 ID,它们是相同的。
但是,当我将 glBindFramebuffer 中的目标参数从 GL_DRAW_FRAMEBUFFER 更改为 GL_FRAMEBUFFER 时,GL 错误消失了。文档说我应该能够使用 GL_DRAW_FRAMEBUFFER。是否存在无法绑定到 GL_DRAW_FRAMEBUFFER 的情况?使用 GL_FRAMEBUFFER 而不是 GL_DRAW_FRAMEBUFFER 有什么危害吗?这是更大问题的征兆吗?
c++ - wglCreateContextAttribsARB 在 NVIDIA 硬件上失败
这是有问题的代码。当我尝试设置属性时,它在第 77 行失败。但是同样的代码也适用于我的 ATI。我没有任何 NVIDIA 产品,也无法复制它,但我当然需要修复它。任何人都可以帮助解决这个问题吗?我忽略了什么?
我的定义:
也许我弄错了一些#defines?
任何输入都受到高度赞赏。
ps.:关于 AttribList[3] = 0 的小故障;现在已修复,必须为 1。但这不是问题所在。
c - 如何使用OpenGL中的嵌套循环用较小的正方形列表填充平面?
我不知道我们可以通过哪种方式设置一个填充有较小正方形的平面(这样我可以做出更好的照明效果)。
我绘制单个正方形的代码是:
那么现在我如何运行一个嵌套循环来用一些较小的正方形填充表面呢?我有点不确定小方块的坐标。
c++ - OpenGL - 某些显卡上的问题
我在不同的计算机上遇到了 OpenGL 渲染的问题:
作品:Intel HD3000 / Sandy 桥接器:ATI 6950 ATI 6970m ATI 5670m Quadro FX 2000
不工作:Nvidia 移动 9600 gt Quadro FX 1800
当调用代码行“renderLines()”时,屏幕上不会出现“不起作用”的显卡。没有“renderLines()”,在我测试过的所有显卡上,一切都按预期工作。
"renderSprites()" 与 renderLines() 非常相似,唯一的区别是它将四边形渲染到屏幕而不是线条。