我正在尝试使用three.js。基于几个教程,我创建了一个小脚本,从obj文件加载一个对象,在其上放置一个纹理,并提供一些交互式功能,如光标移动到屏幕上的对象时的摄像头控制和碰撞检测。
我知道如何改变整个对象的透明度,但现在我正在寻找一种方法来根据光标位置使加载的对象部分透明。如果光标的光线与对象相交,则碰撞点附近的所有三角形都应该具有更高的透明度,以便我可以看到此对象内部或后面的其他对象。有没有办法做到这一点?有人知道一个教程,它显示了使用three.js实现的解决方案吗?
对于任何帮助或方法,我将不胜感激。
答案 0 :(得分:0)
可以为其编写自定义顶点着色器,其中每个顶点都具有透明属性,并且使用鼠标移动,找到交叉面,并修改面的顶点透明值。
http://jsfiddle.net/meirm/58w9cfb0/
在这个例子中我写了非常简单的着色器,每个像素的属性不透明度,然后在交叉点测试中我改变了相交面的顶点的不透明度
attribute float opacity;
...
attributes.opacity.value[intersects[0].face.a] = 0.5;
attributes.opacity.value[intersects[0].face.a] = 0.5;
attributes.opacity.value[intersects[0].face.a] = 0.5;