2017-03-01 6 views
1

私はシーンで定義しているクリッピングプレーンを考慮したシェーダを作成しようとしています。これらのクリッピングプレーンは、私が使用している「バニラ」のすべての素材でうまく動作します:THREE.MeshLambertMaterialTHREE.MeshPhongMaterial、およびTHREE.MeshPhysicalMaterialですが、THREE.ShaderMaterialにはこの実装がありません。 2つのキューブ、THREE.MeshStandardMaterialTHREE.ShaderMaterialによって定義された材料と1と1がある。この例ではhttps://jsfiddle.net/fraguada/27LrLsv5/THREE.ShaderMaterialにクリッピングを追加

:これは私が何を意味するかの一例です。 THREE.MeshStandardMaterialクリップ付きキューブは大丈夫です。 THREE.ShaderMaterialのキューブはクリップされません。

(私はjsfiddleに表示として、私は通常、代わりに私はこれと同様の方法でそれらを定義しています、スクリプトタグで頂点/フラグメントシェーダを定義していないよ:https://github.com/mrdoob/three.js/blob/dev/examples/js/shaders/BasicShader.js。)だから、

を、いくつかの質問:

  1. THREE.ShaderMaterialにはクリッピングプレーンが含まれていますか?そうでない場合、どのように私はクリッピングを有効にする必要のparamsとシェーダチャンクを含めるには、このシェーダを修正することができ
  2. (そこクリッピングプロパティですが、わからない、それは可能何)?

答えて

3

実際、クリッピングは、Three.jsシェーダ内部で行われます。

は、これらの4 「シェーダチャンク」追加することによって、あなたは、あなたのシェーダ内でそれを処理する必要があり、それを動作させるには:あなたのバーテックスシェーダの上部に

#include <(chunk name)>をシェーダに追加するだけで、これらのチャンクにアクセスできます。

次に、material.clipping = true;と設定してください。

これをチェックするfiddleシェーダを動作させるために


、私はまた、begin_vertex.glslproject_vertex.glslを追加しました。

私は現在のphong shader implementationをチェックして、それらのチャンクをどこに置くべきかを理解しました。


注2

このコードは、文字列の配列で実装シェーダで動作しますが、あなたもTHREE.ShaderChunk[(chunk name)]とシェーダチャンクを参照できることに注意してください。
これはあなたのケースでもっと適しているはずです。

+0

ありがとう@neeh、これは私を少しナッツ運転していた。私はbegin_vertexとproject_vertexチャンクが欠けていました!私は 'mvPosition'に関連したエラーを続けていましたが、それを定義したチャンクについてはゼロではありませんでした。再度、感謝します! –

+0

ありがとう!!この答えの最も重要な部分は、設定するプロパティが他のマテリアルには存在しないShaderMaterialの「クリッピング」であるということです。 https://threejs.org/docs/#api/materials/ShaderMaterial – taseenb

関連する問題