相关疑难解决方法(0)

缩小时材质闪耀(three.js r78)

缩小时材质闪耀(three.js r78)

当缩小到某个范围时,其他对象后面的对象的材质开始闪耀.它看起来非常类似于面重叠时的效果(面在同一平面内).

为了证明这一点,我做了一个小提琴.

在这个例子中,我绘制了两个薄盒子(厚度为1,盒子之间也有一个空的空间),所以盒子不会相互接触,但材料无论如何都要照射.

// geometry with thickness 1
var geometry = new THREE.BoxGeometry(20000, 20000, 1);
Run Code Online (Sandbox Code Playgroud)

此屏幕截图演示了效果: 图片

此屏幕截图显示两个几何之间存在空格. 图片

缩放时,效果有时会出现,有时会消失(这也取决于缩放距离和屏幕大小).

我尝试使用不同的材料属性,但我似乎无法找到任何阻止这种情况发生的材料设置.

这是一个错误吗?或WebGL限制?或3D图形的一般限制?或者我错过了什么,这实际上是材料或渲染器配置错误?

在我的模特中,这种效果真的很令人不安和丑陋.我可以以某种方式防止这种情况发生吗?

javascript rendering material three.js

4
推荐指数
1
解决办法
413
查看次数

对数深度缓冲线性化

如何线性化对数深度缓冲区?

片段着色器中线性深度缓冲区的可视化

  float n = 1.0; // camera z near
  float f = 27000000.0; // camera z far
  float z = texture( DepthTex, TexCoord ).x;
  float d = (2.0 * n) / (f + n - z * (f - n));
  FragColor=vec4(d,d,d,1);
Run Code Online (Sandbox Code Playgroud)

球体顶点着色器

vec4 ClipCoords(vec3 position,mat4 matrix)
{
   vec4 clip = matrix * vec4(position,1.0f);
   clip.z =((2.0f * log(1.0f * clip.z + 1.0f) / log(1.0f * 27000000.0f + 1.0f)) - 1.0f) * clip.w;
   return clip;
}
 gl_Position = ClipCoords(position,matrix);
Run Code Online (Sandbox Code Playgroud)

左侧显示了对数深度缓冲线性或者更确切地说,它的缺乏,而右边显示linarization不log …

opengl zbuffer

3
推荐指数
1
解决办法
3213
查看次数

标签 统计

javascript ×1

material ×1

opengl ×1

rendering ×1

three.js ×1

zbuffer ×1