5

でシーン フォグを有効にするのに問題がありTHREE.ShaderMaterialます。現在、霧は他のジオメトリにのみ影響しますが、THREE.ShaderMaterial を使用して作成された Skydome は霧の影響を受けません。

fogShaderMaterial には booleanパラメータがあるようですが、シーン フォグを使用するには true に設定する必要があるようです。ただし、使用するとuniforms.fogColor is undefinedエラーが発生します。関数でエラーが発生しWebGLRendererますrefreshUniformsFog

それはバグですか、それともパラメーターの使い方が間違っていますか?

webgl_materials_lightmap.html の例に基づくテスト ケース: http://jsfiddle.net/HXhb4/ 62 行目で霧を true に設定してテストを実行すると、エラーが発生します。私が実現したいのは、通常の MeshPhongMaterial で作成されたモデルまたはスカイドームのような霧の影響を受けるスカイドームです。

4

2 に答える 2

9

カスタムShaderMaterialで fog を使用する場合は、必ず必要な fog を指定する必要がありますuniforms。例えば、

var uniforms = {
    topColor:    { type: "c", value: new THREE.Color( 0x0077ff ) },
    bottomColor: { type: "c", value: new THREE.Color( 0xffffff ) },
    offset:      { type: "f", value: 33 },
    exponent:    { type: "f", value: 0.6 },
    fogColor:    { type: "c", value: scene.fog.color },
    fogNear:     { type: "f", value: scene.fog.near },
    fogFar:      { type: "f", value: scene.fog.far }
}

var skyMat = new THREE.ShaderMaterial( {
    vertexShader: vertexShader,
    fragmentShader: fragmentShader,
    uniforms: uniforms,
    side: THREE.BackSide,
    fog: true
} );

またfogDensity、使用するかどうかも指定してください。また、フォグ ロジックをシェーダーに組み込む必要があります。

three.js r.59

于 2013-07-20T01:32:42.553 に答える