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实现像索引透明度这样的功能?_Three.js_Transparency - Fatal编程技术网

是否可以使用three.js实现像索引透明度这样的功能?

是否可以使用three.js实现像索引透明度这样的功能?,three.js,transparency,Three.js,Transparency,我正在努力解决常见的透明度排序问题。我知道有很多方法可以解决这个问题(比如手动排序对象或排序独立透明度),但所有这些都会变得相当棘手。如果有一种方法可以让部分不透明部分100%透明的对象正确相交,我就可以了 理论上这应该是可能的。不透明像素将以标准方式渲染到颜色缓冲区和z缓冲区,而透明像素将被忽略 我要寻找的是类似于gif文件中使用的索引透明度的东西,例如,不渲染具有#FF00FF颜色的对象的所有像素 我只是不知道使用three.js是否以及如何做到这一点。此外,我希望能够将其与自定义着色器一起

我正在努力解决常见的透明度排序问题。我知道有很多方法可以解决这个问题(比如手动排序对象或排序独立透明度),但所有这些都会变得相当棘手。如果有一种方法可以让部分不透明部分100%透明的对象正确相交,我就可以了

理论上这应该是可能的。不透明像素将以标准方式渲染到颜色缓冲区和z缓冲区,而透明像素将被忽略

我要寻找的是类似于gif文件中使用的索引透明度的东西,例如,不渲染具有#FF00FF颜色的对象的所有像素

我只是不知道使用three.js是否以及如何做到这一点。此外,我希望能够将其与自定义着色器一起使用

编辑:谢谢你到目前为止的评论,很抱歉造成混乱。这与其说是我的代码的一个具体问题,不如说是一个概念问题。只是我经常遇到这样一个问题,透明对象的一部分会切掉应该在它们前面的其他透明对象的一部分。而且,透明对象不能正确相交,总是一个覆盖另一个。我理解为什么会发生这种情况,这是处理透明度的方式所固有的问题。但通常我只需要一个完全透明的物体的一部分,没有通过阿尔法透明度的部分发光。如果有一种方法可以省略对象的某些像素,并像渲染普通不透明对象一样渲染其余的像素,这是可能的

让我们假设我想要一个金属链,每个部分都是一个平面几何体,带有一个显示O形状的纹理(其余部分是透明的)。现在,应该用正确的链接来显示链

欢迎任何帮助


干杯

如果要渲染three.js场景,并且纹理贴图不包含部分透明的像素,即每个像素都是100%不透明或100%透明的,则可以通过设置

material.alphaTest = 0.5;
//material.transparent = true; // likely not needed
如果您使用的是二进制alpha映射,则同样适用

如果正在编写自定义着色器,则可以通过在片段着色器中使用类似以下的模式来实现相同的效果:

if ( texelColor.a < 0.5 ) discard;
if(texelColor.a<0.5)丢弃;

three.js r.84

请将您的问题显示出来。你应该包括一个你有问题的代码,然后我们可以尝试帮助解决具体的问题。您还应该阅读.ShaderMaterial:。要有效地使用它,请查看代码中的ShaderLib和ShaderChunk。Three.js使用这些来构建其内部着色器,该模式可用于扩展/增强这些着色器,或创建自己的着色器。如果您想要更大的灵活性,请查看RawShaderMaterial。@Mircode对于您的金属链示例,您需要做的就是设置
material.alphaTest=0.5
,并且您的链接应该正确呈现。谢谢,我将尝试。看起来正是我需要的。