自定义 gltf 模型上的海洋着色器

Posted

技术标签:

【中文标题】自定义 gltf 模型上的海洋着色器【英文标题】:Ocean shader on a custom gltf model 【发布时间】:2021-11-25 05:36:38 【问题描述】:

我有一个 3D 模型,我想对其应用海洋着色器。 我想结合“着色器/海洋”和“加载器/gltf”示例场景。 我想在我的自定义 3D 模型上看到海洋着色器,由于我的知识很少,我很抱歉。

            const waterMat = new THREE.MeshStandardMaterial(color: 0xff0000);

                const loader = new GLTFLoader().setPath( 'models/gltf/DamagedHelmet/glTF/' );
                loader.load( 'DamagedHelmet.gltf', function ( gltf ) 

                    gltf.scene.traverse( function ( child ) 

                        if ( child.isMesh ) 

                        waterGeo = child;

                        

                     );

                    water = new Water(
                        waterGeo,
                        
                            textureWidth: 512,
                            textureHeight: 512,
                            waterNormals: new THREE.TextureLoader().load( 'textures/waternormals.jpg', function ( texture ) 

                                texture.wrapS = texture.wrapT = THREE.RepeatWrapping;

                             ),
                            sunDirection: new THREE.Vector3(),
                            sunColor: 0xffffff,
                            waterColor: 0x001e0f,
                            distortionScale: 3.7,
                            fog: scene.fog !== undefined
                        
                    );  

                    water.rotation.x = - Math.PI / 2;

                    scene.add( water );

【问题讨论】:

【参考方案1】:

你必须换水 = new Water(waterGeo,the some code you have) to new Water(waterGeo.geometry,the some code you have)

【讨论】:

以上是关于自定义 gltf 模型上的海洋着色器的主要内容,如果未能解决你的问题,请参考以下文章

为什么iOS 8上的SceneKit无法编译我的自定义着色器?

threejs glslshader 没有出现在 gltf 模型上

ThreeJS 预定义着色器属性/制服

Three.js 中的自定义纹理着色器

GLSL/C++:自定义着色器的默认行为

自定义着色器不接收光线