Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js ThreeJS:白色PNG图像加载为纹理,用作材质,渲染为平面,具有灰色边缘_Three.js - Fatal编程技术网

Three.js ThreeJS:白色PNG图像加载为纹理,用作材质,渲染为平面,具有灰色边缘

Three.js ThreeJS:白色PNG图像加载为纹理,用作材质,渲染为平面,具有灰色边缘,three.js,Three.js,在ThreeJS版本87中渲染白色材质时出现问题 以下是复制的步骤: 加载为纹理的白色PNG图像 此纹理用于创建MeshBasicMaterial(作为参数贴图传递) MeshBasicMaterial沿平面几何图形用于创建网格 网格将添加到空场景,并在WebGLRenderer上渲染,alpha:true和clearColor为白色 问题是渲染纹理现在在应该是全白色的部分上有灰色边缘。 任何带有白色边缘的图像都会发生这种情况。我还尝试了渲染器和材质的许多不同配置,但都没有成功 我制作了一个非常

在ThreeJS版本87中渲染白色材质时出现问题

以下是复制的步骤:

  • 加载为纹理的白色PNG图像
  • 此纹理用于创建MeshBasicMaterial(作为参数贴图传递)
  • MeshBasicMaterial沿平面几何图形用于创建网格
  • 网格将添加到空场景,并在WebGLRenderer上渲染,alpha:true和clearColor为白色
  • 问题是渲染纹理现在在应该是全白色的部分上有灰色边缘。 任何带有白色边缘的图像都会发生这种情况。我还尝试了渲染器和材质的许多不同配置,但都没有成功

    我制作了一个非常简单的代码笔,尽可能简单地复制行为。有人知道如何解决这个问题吗

    代码笔:

    非常感谢您的帮助

    三JS/87

    编辑:

    我想我的帖子不够精确

    这是原始的完整alpha图像:

    这是相同的图像,在4个象限上有不同的透明度:

    我得到了一个有用的答案,我被告知要把alphaTest调高,但问题是这样做会抹去图像中的透明部分,我需要保留这些部分

    这是一份带有更新图像的代码笔副本,显示相同(但轻微)的灰色边缘:


    很抱歉第一次没有这么精确,任何进一步的帮助都将不胜感激。

    将alphaTest设置为0.9。。或更高。。观察改善情况。 你的恒星纹理在恒星外的区域有灰色或黑色,这就是你看到灰色光晕的原因。您可以通过在图像编辑工具中用白色填充图像(但不更改alpha通道)来修复此问题

    此外,您应该升级到最新的three.js(r95)

    编辑:

    我不确定你的确切期望是什么。。但是有许多不同的设置控制三种模式中的alpha混合。有renderer.premultipliedAlpha=true/false(默认为true)和material.transparent=true/false;material.alphaTest是一个阈值,用于控制完全忽略alpha的级别。还有物料混合、混合液、混合液、混合液、混合液、混合液、混合液和混合液。等等。你可能需要仔细阅读这些

    例如。。以下是您的纹理:

    renderer.premultipliedAlpha = false;
    
    请注意纹理的一个象限上的黑色边框


    非常感谢您的帮助@manthrax,但我确实需要保持图像的透明度。还有纹理周围的黑色,我还没有在我的图像上看到它,但是一位同行在ThreeJS渲染的结果上看到了它。
    renderer.premultipliedAlpha = false;