球にマップしたいアースのテクスチャがあります。 それは単位球であり、モデル自体にはテクスチャ座標がないので、私が考えることができる最も簡単なのは、各頂点の球座標を計算し、それらをテクスチャ座標として使用することです。OpenGL:球面上のテクスチャを球面座標を使ってマッピングする
textureCoordinatesVarying = vec2(atan(modelPositionVarying.y, modelPositionVarying.x)/(2*M_PI)+.5, acos(modelPositionVarying.z/sqrt(length(modelPositionVarying.xyz)))/M_PI);
フラグメントシェーダでこれを行うときは、(補間された)頂点位置からテクスチャ座標を計算するので、これは問題なく動作します。
しかし、私が頂点シェーダでこれを行うと、モデル自体にテクスチャ座標がある場合でもやりますが、下の画像に示すように結果が得られます。頂点は点として表示され、0.5より小さいテクスチャ座標(u)は赤で、他のすべては青です。テクスチャ(U)は、2つの隣接する赤/青の頂点の座標が値(ほぼ)1.0と0.0を有するよう
はそうに見えます。可変的に補間されるので、0.0〜1.0の間の値が得られます。値は1.0か0.0のどちらかでなければならないが、間には何もないので、これは当然間違っている。
上記のエフェクトを表示せずに球座標をテクスチャ座標として扱う方法はありますか? (可能な場合は、モデルを変更せずに)