【问题标题】:Opacity of material in THREE.jsTHREE.js 中材料的不透明度
【发布时间】:2017-07-05 09:59:32
【问题描述】:

我正在使用 Lambert 着色器,在示例中它设置材质如下:

  this.material.uniforms.emissive.value = new THREE.Color(
  Math.random(),
  Math.random(),
  Math.random());

在我有一个简单的着色器之前,我可以像这样设置材质来控制 alpha:

this.material.uniforms.color.value = new THREE.Vector4(
  Math.random(),
  Math.random(),
  Math.random(),
  0.3)

但看起来朗伯着色器没有颜色向量4。

关于如何控制 alpha 的任何想法?

我对 Lambert 着色器使用相同的示例:https://forge.autodesk.com/blog/forge-viewer-custom-shaders-part-2

简单的着色器来自:http://adndevblog.typepad.com/cloud_and_mobile/2017/01/forge-viewer-custom-shaders-part-1.html

【问题讨论】:

    标签: javascript three.js shader autodesk-forge


    【解决方案1】:

    您必须使用material 不透明度。 请务必先将其标记为透明:

    this.material.uniforms.transparent = true;
    

    然后设置不透明度:

    this.material.uniforms.opacity.value = 0.3;
    

    如果您已经渲染了场景,您可能需要将其标记为更新:

    this.material.uniforms.needsUpdate = true;
    

    纹理使用 .alphaMap

    【讨论】:

    • 有什么想法吗? ``
    • 我认为您之前提到的 2 个博客的作者 Philippe 可能有更好的答案。但请告诉您,Forge Viewer 存在一个已知问题。打开 SVF 文件时会考虑不同片段的透明度,这是为了确保在不透明对象之后渲染半透明对象。但是,当动态更改片段的材质时,顺序不会更新,因为查看器无法按需重建 BVH,最终可能会出现意想不到的结果(透明对象隐藏的不透明对象)对象)
    • 应该是“this.material.uniforms.opacity.value = 0.3;”
    猜你喜欢
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 2013-11-12
    • 2012-12-03
    相关资源
    最近更新 更多