- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 OpenGL 中实现深度预传递。在 Intel HD Graphics 5500 上,此代码工作正常,但在 Nvidia GeForce GTX 980 上却没有(下图显示了产生的 z-fighting)。我正在使用以下代码生成图像。 (与问题无关的一切都被省略了。)
// ----------------------------------------------------------------------------
// Depth Prepass
// ----------------------------------------------------------------------------
glEnable(GL_DEPTH_TEST);
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
glDepthFunc(GL_LESS);
glDepthMask(GL_TRUE);
glUseProgam(program1); // The problem turned out to be here!
renderModel(...);
// ----------------------------------------------------------------------------
// Scene Rendering
// ----------------------------------------------------------------------------
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glDepthMask(GL_FALSE);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glUseProgam(program2); // The problem turned out to be here!
renderModel(...);
GL_LEQUAL
。但是,当我逐步执行 RenderDoc 中的 GL 调用时,
glDepthFunc
设置正确。
最佳答案
当对深度预 channel 使用不同的着色器程序时,必须明确确保该程序生成与主 channel 程序相同的深度值(尽管在相同的几何体上调用)。这是通过在 invariant
上使用 gl_Position
限定符来完成的。
GLSL 规范 4.4 解释的差异:
In this section, variance refers to the possibility of getting different values from the same expression in different programs. For example, say two vertex shaders, in different programs, each set gl_Position with the same expression in both shaders, and the input values into that expression are the same when both shaders run. It is possible, due to independent compilation of the two shaders, that the values assigned to gl_Position are not exactly the same when the two shaders run. In this example, this can cause problems with alignment of geometry in a multi-pass algorithm.
invariant gl_Position;
gl_Position
是由着色器中给出的精确表达式计算的,没有任何优化,因为这会改变操作,因此很可能会以某种较小的方式改变结果。
fWorldPosition = ModelMatrix*vPosition; // World position to the fragment shader
gl_Position = ProjectionMatrix*ViewMatrix*fWorldPosition;
gl_Position
:
gl_Position = ProjectionMatrix*ViewMatrix*ModelMatrix*vPosition;
vec4 worldPosition = ModelMatrix*vPosition;
gl_Position = ProjectionMatrix*ViewMatrix*worldPosition;
关于opengl - GTX 980 深度预通过后的 Z-fighting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46914862/
因此,我最近观看了一段关于 Z-fighting 的视频,并了解了一种处理它的简单方法——主要是。给出的解决方案实际上是倾斜投影,以便为更近的物体提供更多空间以进行更准确的深度测试(因为 float
在我的 OpenGL 程序中,我注意到在前向渲染算法中光线混合在一起的地方出现了黑色像素。起初我忽略了它,直到它在视觉上变得太有问题时我切换了 Window API(SDL 到 GLFW)。 当我禁用
所以我找到了this用纯 CSS 制作的动画半圆形饼图的 codepen 示例。我正试图用它来进行“政治席位分配”。正如您在下图中的图表边缘看到的那样,底层饼图的颜色从边缘透出。 我不确定这是否可以修
我正在尝试用曲棍球队的例子来练习继承 public class HockeyPlayer { private String firstName; private String last
我是 C++ 的新手,我在分配时遇到了一些问题。到目前为止,这是我的程序: #include "stdafx.h" #include #include using namespace std; v
我正在使用 Babylon.js 制作 3D 游戏。我的元素旨在在所有浏览器上运行。然而,当用户在 Firefox 中运行它时,似乎存在一些 3d 对象无法正确呈现或根本无法呈现的 Z-Fightin
就目前而言,控制台允许我编译,但不允许运行它,它说: “错误:无法找到或加载主类 MonsterFight” 代码如下: class Fight { Random rand= new Rand
我正在 OpenGL 中实现深度预传递。在 Intel HD Graphics 5500 上,此代码工作正常,但在 Nvidia GeForce GTX 980 上却没有(下图显示了产生的 z-fig
想象一个 View ,比如说,有 4 个 subview ,彼此相邻但不重叠。我们称它们为 View #1 ... View #4 所有 5 个这样的 View 都是我自己的 UIView 子类(是的
我喜欢正确显示电子邮件,意思不是 [at]。为了对抗机器人,我反转了 html 中的文本,然后使用 direction: rtl 通过 css 重新反转它。 .多年来一直很好用,直到一封电子邮件敢于打
这是一个面试问题,我想知道设计这个系统的最佳方式是什么。问题: 假设您有一款格斗游戏,其中某些按钮组合代表一个特殊 Action 。实现 2 个函数 register_move([button com
我正在编写一个飞行模拟器,并遇到了该类型的经典问题:视锥体的近平面必须足够近才能使飞机驾驶舱可见,远平面必须足够远才能实现可见距离长达 40 公里。 可见距离或近/远比确实超出了opengl的z缓冲区
我的情况 我断断续续地为这项挑战工作了大约 9 天,但我没有想法。到目前为止,我的解决方案通过了 9/10 个测试用例。我优化的解决方案运行得足够快,所以错误是实际的解决方案,而不是计算时间用完了。如
我遇到了以下问题。虽然 glPolygonOffset 非常适合网格,例如当我尝试在对象顶部绘制线框轮廓时,它不适用于简单的线条。 以下是它如何处理网格: // draw object mTextu
说明 我在 OpenGL 中遇到了 Z-Fighting 的主要问题,我花了很多时间来寻找这个问题的解决方案。我发现的一些我理解但不喜欢的: 使多边形彼此远离(如 OpenGL 中的 glPolygo
在我的 CSS 文件中,作为“重置”的一部分,我将所有链接设置为如下样式: a { color: blue; &:visited { color: violet; } &:ho
我在使用 opengl 绘制简单的 2d 纹理四边形时遇到了 z fighting 的一些问题。症状是两个物体以相同的速度移动,一个在另一个上面,但周期性地一个可以看穿另一个,反之亦然 - 有点像“闪
为我的 Java 应用程序添加 zabbix jmx 监视器时,我收到很多错误消息:gc PS Mark Sweep in fire fighting mode。 这是什么意思,会发生什么? 最佳答案
我尝试使用 DirectX 11 中光栅化器状态的 DepthBias 属性 (D3D11_RASTERIZER_DESC) 来帮助解决在线框中渲染时发生的 z-fighting模式超过实心多边形(线
我写了一个程序,让两个类(class)“打架”。无论出于何种原因,C# 总是获胜。 VB.NET 有什么问题? static void Main(string[] args) {
我是一名优秀的程序员,十分优秀!