问题标签 [depth-testing]
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.
opengl - 在OpenGL中反转深度测试?
如果希望正常渲染,即渲染离相机最近的对象,您可以按如下方式设置 OpenGL 标志:
所以我会假设这样做:
也可以让我渲染离相机最远的片段。但是,在设置这样的标志时,我看不到任何输出。(我的申请没有做其他修改)
如何渲染离相机最远的片段?
fbo - 如何使用 sharpgl 将深度缓冲区附加到 FBO 上下文
因此,在尝试使用 SharpGL 在 WPF 中使用 FBO 渲染上下文进行深度测试后,我明白这并不像使用老式 OpenGL 那样设置 gl.Enable(GL_DEPTH_TEST) 那么简单,而且我必须附加一个深度缓冲区到渲染上下文。我不知道如何使用我构建我的应用程序的 WPF/SharpGL 配对来实现这一点。
有关如何执行此操作的所有指南都从创建缓冲区开始,这一切都发生在后台,可以说是在将其声明为 WPF 表单中的控件时。有什么方法可以重置它的创建方式或事后附加深度缓冲区?
我能得到的任何帮助将不胜感激。
c++ - Depth test with two transparent images causes strange artifacts
I am rendering a bush composed of two same images crossed as you can see on the image underneath :
But when we turn around the bush, on of the two images has visibly big problems with it's depth test :
I tried disabling the depth test but it was even worse(background bushes overlapping the front one). I simply use this code to render a bush (with m_tex and m_vertex the coordinates of a bush loaded in a file):
How can I manage to fix this bug and have a relevant depth test working with the two images?
opengl - OpenGL - 有没有办法将深度值存储在 1 以上?
我正在尝试像这篇文章一样在 GPU 上实现碰撞检测:
https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch29.html
在第 2 步 - 网格生成中,我们使用深度测试来确保我们只编写大于前一个的粒子 ID。
我现在可以通过将 ID 号除以粒子总数来进行此操作:
gl_FragDepth = v_ID/u_totalParticleCount;
但我担心如果我到达一个有很多粒子的点,我将没有足够的准确性。
我尝试将 RGBA32F 纹理附加到我的帧缓冲区深度附件,但我猜这是不允许的。
有没有办法做到这一点?还是将我的 ID 放入 0-1 空间是唯一的方法?
非常感谢!
unity3d - Unity3d移动着色器透明度问题
在 Unity3D(Unlit 版本)中使用自定义着色器时,我的 3D 对象与 alpha 重叠:
它应该看起来像这样:
我错过了什么吗?透明度 alpha 似乎与自身重叠。
编辑 1
我删除了第一遍,然后启用了 Zbuffer 并删除了if (col.a < _Cutoff)
并根据其纹理让它成为动态的,但我仍然得到与第一张图像相同的结果。
opengl - glReadPixels() 如何获取实际深度而不是标准化值?
我正在使用 pyopengl 来获取深度图。
我可以使用glReadPixels()
. 如何将标准化值恢复为世界坐标中的实际深度?
我试过玩glDepthRange()
,但它总是执行一些规范化。我可以完全禁用标准化吗?
opengl - 在延迟渲染中使用深度缓冲区进行线框渲染
我有一个小的 OpenGL 应用程序,用于一些带有延迟渲染管道的科学可视化。我有 2 个通道:几何通道,我在其中渲染具有位置、法线、反照率、分割等的纹理;和照明通道,我只是将一些数据映射到四边形并在屏幕上渲染,甚至将一些图像保存在硬盘上。所以,经典的延迟渲染。
现在我需要将线框渲染添加到附加纹理中。我想过在几何着色器中做,但它似乎有点复杂,性能不是问题,所以我只设置了第三个通道,glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
将它渲染到纹理,然后将它与光照通道一起传递其他的东西。
它工作正常,但我想知道是否有可能以某种方式使用深度缓冲区而不是在模型后面渲染线框?我的意思是,我当然可以剔除背面多边形,但是正面多边形后面仍然会有一些线,它们也是正面的。我想要的是像填充多边形一样剔除它,但只渲染线框。
渲染模型然后在其上渲染线框也可以,但我不能这样做,因为我在几何通道中将模型渲染到纹理,glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
而在另一个通道中渲染线框,glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
所以我有点不能使用默认深度缓冲区。
那么,大家有什么想法吗?