テクスチャ マップを含むシェーダーをゼロから作成しようとしています。他のマテリアル (シェーダー) とそのソースを見ると、すべて「uv」属性が渡されているようです。その uv 属性がどこで生成され、割り当てられているかを理解するのに苦労しています。ジオメトリ、マテリアル、またはその両方に設定されていますか?
のようなデフォルトの THREE.Geometry オブジェクトを使用していますTHREE.SphereGeometry
。これらにはすでに属性が設定されていると思いましたが、メッシュをシーンの子として検査すると、属性キー/値が設定されていません。
ShaderMaterial
これは、aまたは otherによって生成されたシェーダの例です。
頂点シェーダー
attribute vec2 uv;
varying vec2 vUv;
void main() {
vUv = uv;
フラグメントシェーダー
varying vec2 vUv;
uniform sampler2D map;
void main() {
vec4 texel = texture2D( map, vUv );
ただし、上記を試みると、シェーダー (RawShaderMaterial を使用) が空白になり、「コンパイルできませんでした」というメッセージが表示されます。
THREE には、シェーダー、オブジェクト、および属性の間の関係を設定する魔法はありますか?
THREE.js が UV 座標を生成するという質問を見つけましたが、やはり、THREE の既定のオブジェクトにはすでに UV 属性が正しく設定されていると思いますか?
この場合、特に RawShaderMaterial を使用したいと思います。オブジェクトの UV が生成される / シェーダーに渡される THREE ソースの場所を教えてもらえますか、実行時にフラグメント / 頂点で使用する UV を適切に設定する方法を教えてもらえますか?