3

EAGLViewレイヤーでopenglシーンをレンダリングし、UIView(EAGLViewの兄弟であり、その上に配置)で他のいくつかの要素(円など)をレンダリングしています。2つのレイヤーの間で色をブレンドすることは可能ですか?EAGLViewから色の反転効果を得るために、いくつかの違いのブレンドを行いたいと思います。

私はCGBlendModeで遊んでいますが、それは現在のビューで描画しているものにのみ影響するようです。これはCGContextと関係があると思いますが、詳細が少しぼんやりしています。UIViewとEAGLViewに同じCGContextを強制して、それらの間でブレンドが機能するようにすることはできますか?

ヘルプ、修正、説明はすべてありがたいです。よろしくお願いします、-S

4

2 に答える 2

7

簡単な答えはあなたができないということです。長い答えが続きます。

つまり、そのサブクラスがXcodeのOpenGLESテンプレートに含まれていることをEAGLView意味する必要があります。UIViewこのクラスを特別なものにしているのは、クラスメソッドがオーバーライドされ、デフォルトのようにクラスではなくクラスlayerClassを返すことです。CAEAGLLayerCALayer

UIViewCALayerペアで作業します。すべてのUIViewオブジェクトはによって支えられています。CALayerこれCALayerは、画面へのレイアウトとレンダリングを担当するオブジェクトです。はのUIView代理人でありCALayer、必要に応じてグラフィックを描画する責任があります。

CALayerデリゲート(UIView)をに描画させCGContextRefます。これは、ごとに1つのコンテキストであるため、 1つのUIViewコンテキスト内でのみ機能するため、複数のビューをブレンドUIViewするために使用することはできません。CGBlendMode

のブレンドはCALayer、フィルタープロパティを使用して実行する必要があります。これらはiPhoneOS用に定義されていますが、ドキュメントによると、使用可能なフィルターは未定義です。これは、現時点ではCoreImageがiPhoneOSで利用できないためです。

于 2009-09-12T21:34:08.793 に答える
0

そういう意味では色を混ぜることはできないと思います。最善の方法は、一方をもう一方を完全に隠すか、最上層を半透明にすることです(この場合、下の部分が表示されます)。ただし、XORタイプの描画はできません。

于 2009-09-10T21:32:45.287 に答える