3

テクスチャ マップを含むシェーダーをゼロから作成しようとしています。他のマテリアル (シェーダー) とそのソースを見ると、すべて「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 を適切に設定する方法を教えてもらえますか?

4

0 に答える 0