javascript - 如何在 Three.js 中获得仍能接收阴影的无渲染 Material ?

标签 javascript three.js

我正在尝试创建一种“透明” Material ,因为它不会渲染并在屏幕上留下一个空的 alpha 区域,这样您就可以看到 Canvas 后面的内容,但我也希望该 Material 能够接收阴影并且仍然渲染它们。

我有一个实验JSFiddle page为了这个确切的目的。

我只成功地实现了半透明效果,但没有正确地实现阴影。您在 Material 中看到的橙色实际上是渲染后面的橙色 div。渲染需要在对象后面放置一个黑色广告牌,以保持背景黑色并显示我真正想要的内容。使用我的自定义 Material 渲染平面允许渲染向目标添加 alpha,从而允许它显示 Canvas 后面的内容。我的目标是允许这样做,但在同一 Material 上有阴影,掩盖其后面的元素。

实现该效果的核心代码如下:

var plane = new THREE.PlaneGeometry(10, 10, 1, 1);
var material = new THREE.MeshPhongMaterial({
    color:'gray',
    blending: THREE.NoBlending,
    opacity: 0,
    side: THREE.DoubleSide
});

我也尝试过添加剂混合,但没有实质性效果。

我想知道是否必须使用一个简单的着色器来完成此操作,将高值更改为 alpha 并保留低值。

更新: 我有一个几乎可以工作的版本,我正在寻找here 。最后的修饰是向对象添加阴影贴图以获得我想要的效果。但是,我希望阴影遮挡场景后面的背景。我计划混合 CSS3D 和 WebGL,但如果我能保留我的阴影,我会更喜欢。 (遗憾的是,我计划将 CSS3D 内容转换为纹理/对象)。 Test of shadow map

最佳答案

我认为你应该能够使用opacity: 0transparent: true来实现洞效果。

关于javascript - 如何在 Three.js 中获得仍能接收阴影的无渲染 Material ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32986099/

相关文章:

javascript - Three.js 不准确的 Raycaster

three.js - 如何在 TypeScript 中使用 three.js 加载 OBJ 模型

Javascript 仅适用于 Firebug

JavaScript。 Math.sqrt 将 NaN 赋予正数?

javascript - 保留 jquery ui 选项卡的状态

javascript - 如何使用 Three.js 检测 JavaScript 中两个对象之间的碰撞?

javascript - 透明 Material 上的 Three.js/shadow 中的 Shadow Catcher

javascript - 当属性位于另一个对象中时如何将 _.groupBy js 用于组对象 - TypeScript

javascript - 在 Jasmine 测试中为 Angular Constant 提供动态值

webgl - 将 Material /纹理添加到现有的 THREE.Mesh ( Three.js )