【发布时间】:2019-01-15 03:23:48
【问题描述】:
在 ThreeJS 版本 87 中渲染白色材质时遇到问题。
以下是复制的步骤:
- 作为纹理加载的白色 PNG 图像
- 此纹理用于创建 MeshBasicMaterial(作为参数贴图传递)
- MeshBasicMaterial 用于沿平面几何体创建网格
- Mesh 被添加到一个空场景并在 WebGLRenderer 上渲染,alpha: true 和 clearColor 为白色
问题是渲染的纹理现在在应该是全白的部分有灰色边缘。 任何带有白色边缘的图像都会发生这种情况。我还为渲染器和材质尝试了许多不同的配置,但无济于事。
我制作了一个非常简单的 CodePen,它可以尽可能简单地复制行为。有谁知道如何解决这个问题?
代码笔:
https://codepen.io/ivan-i1/pen/pZxwZX
var renderer, width, height, scene, camera, dataUrl, threeTexture, geometry, material, mesh;
width = window.innerWidth;
height = window.innerHeight;
dataUrl = '//data url from image';
threeTexture = new THREE.ImageUtils.loadTexture(dataUrl);
material = new THREE.MeshBasicMaterial({
map: threeTexture,
transparent: true,
alphaTest: 0.1
});
material.needsUpdate = true;
geometry = new THREE.PlaneGeometry(5, 5);
mesh = new THREE.Mesh(geometry, material);
mesh.position.z = -5;
scene = new THREE.Scene();
scene.add(mesh);
camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 1, 1000 );
renderer = new THREE.WebGLRenderer({
alpha: true
});
document.body.appendChild( renderer.domElement );
renderer.setSize(width, height);
renderer.setClearColor( 0xffffff, 1 );
//renderer.render(scene, camera);
function render() {
//Finally, draw to the screen
requestAnimationFrame(render);
renderer.render(scene, camera);
}
render();
非常感谢任何帮助。
ThreeJS/87
编辑:
我认为我的帖子不够精确。
这是原始的完整 alpha 图像: It might not show because its all white
这是在 4 个象限上具有不同透明度的同一张图像: This one too might not show because its all white
我得到了一个有用的答案,有人告诉我提高 alphaTest,但问题是这样做会消除图像中的透明部分,我需要保留这些部分。
这是带有更新图像并显示相同(但轻微)灰色边缘的 codepen 副本:
很抱歉第一次没有那么精确,任何进一步的帮助将更加感激。
【问题讨论】:
标签: three.js