OGLES1.1を変換しようとしています。GLKitへのコード。GLKitは、テクスチャスロットのペアを提供します。
- texture2d0
- texture2d1
各テクスチャにはenvモードがあります。
- GLKTextureEnvModeReplace、
- GLKTextureEnvModeModulate、
- GLKTextureEnvModeDecal
通常、texture2d1は空白のままにして、texture2d0を設定するだけです。私は、Appleのドキュメントを読んだことから、2d1はテクスチャのブレンド/結合/変更用であると想定しました。GLKitは「単に」シェーダーの上に配置されているため、各シェーダーには1対のテクスチャスロットが標準です。「着信」スロットは既にマテリアル上にあるものを表し、「変更」スロットはシェーダーが持つものを表します。マテリアルを変更するためのパラメータとして使用します。
しかし、それはうまくいかないようです。
私は試した:
self.baseEffect.texture2d0.envMode = GLKTextureEnvModeReplace;
self.baseEffect.texture2d0.target = GLKTextureTarget2D;
self.baseEffect.texture2d0.name = [earthTextureDefault name];
self.baseEffect.texture2d1.envMode = GLKTextureEnvModeModulate;
self.baseEffect.texture2d1.target = GLKTextureTarget2D;
self.baseEffect.texture2d1.enabled = TRUE;
self.baseEffect.texture2d1.name = [textureClouds name];
...そして私が得たのは黒い非テクスチャーだけでした。0に配置された(1には何もない)どちらのテクスチャも正常に機能します。2番目のテクスチャはアルファから白にシェーディングされ、最初のテクスチャはすべて不透明ですが、かなりリッチなパレットがあります。
私が本当にやりたいのは、動的に生成/更新されたブレンドを効率的に適用し始めることです。例えば:
- ベーステクスチャをロードする
- 2番目のテクスチャをロードします
- それらの間でブレンドするブレンドマスクをロードします
- ...ブレンドマスクをフレームごとに更新します。最初の2つのテクスチャを再アップロードする必要はありません
注意:GLKitを捨てて、代わりにカスタムシェーダーを作成するつもりはありません。GLKitがどのように機能するかを理解したいのですが、見た目からすると、シェーダーをたくさん書いている場合よりも、このような単純なものの方がはるかに簡単に保守できるはずです。