程序问答   发布时间:2022-05-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在 InstancedMesh 上传播 Threejs 纹理大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在 InstancedMesh 上传播 Threejs 纹理?

开发过程中遇到在 InstancedMesh 上传播 Threejs 纹理的问题如何解决?下面主要结合日常开发的经验,给出你关于在 InstancedMesh 上传播 Threejs 纹理的解决方法建议,希望对你解决在 InstancedMesh 上传播 Threejs 纹理有所启发或帮助;

因此,最终,我需要向顶点着色器发送额外的属性(uvOffsets、实例计数),以便在 InstancedMesh 中的任意数量的实例中传播三个 Js 纹理。

在 r97 中,我是如何做到这一点的,我创建了一个带有视频纹理的内置材质,然后使用来自 shaderchunk 的位创建了一个 ShaderMaterial,我编辑了它以包含特定的定义/属性,并将其作为 customDepthMaterial 附加到网格上。几何体是一个 InstancedBufferGegetry。我不确定为什么这种组合完全有效,但确实如此。是的,它很笨拙,复制/粘贴之类的东西。

这在 r124 中不起作用,因为 InstancedBufferGeometry 和内置材质显然不再协同工作来创建网格 (can't get a Three.js InstancedBufferGeometry to appear in a scenE)

我认为在 r124 中执行此操作的最佳方法是仅使用 ShaderMaterial(没有“内置材质”)并利用 Shaderlib,这样我就不必根据光重新编写所有底层着色器代码/reflection 等特性,例如:

const material3 = new THREE.ShaderMaterial({
        vertexShader: THREE.Shaderlib.phong.vertexShader,fragmentShader: THREE.Shaderlib.phong.fragmentShader,uniforms: THREE.Shaderlib.phong.uniforms,sIDe: THREE.DoubleSIDe
    });

我会创建一些我自己编辑过的着色器来寻找定义,然后在 InstancedMesh 中使用它。在走得太远之前,我想看看这是否可以开箱即用。也就是说,在 ShaderMaterial 中使用 Shaderlib 着色器。我找不到任何 Shaderlib 使用示例,但我在这里发布了一个小提琴:https://jsfiddle.net/rsweeten/gqo591nx/49/

内置材质似乎在 InstancedMesh 中有效,但在使用 Shaderlib 时无法在 ShaderMaterial 中使用,但我不确定 Shaderlib 是否打算像这样使用。

更新: 我知道有很多关于自定义材质/着色器的讨论。我会继续挖掘。 (https://github.com/mrdoob/three.js/issues/11475)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

大佬总结

以上是大佬教程为你收集整理的在 InstancedMesh 上传播 Threejs 纹理全部内容,希望文章能够帮你解决在 InstancedMesh 上传播 Threejs 纹理所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:纹理