[英]GLKit blend two textures
我正在嘗試轉換OGL ES 1.1。 代碼到GLKit。 GLKit提供了一對紋理槽:
每個紋理都有一個env模式:
通常,將texture2d1留空,只需設置texture2d0即可。 我假設 - 從閱讀Apple的文檔 - 2d1用於混合/組合/修改紋理。 由於GLKit“僅僅”位於着色器之上,並且每個着色器都有一對紋理插槽是標准的 - “傳入”插槽代表材料上已有的內容,而“修改”插槽代表着色器的內容將用作參數來修改材料。
但這似乎不起作用。
我試過了:
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中沒有任何東西),工作正常。 第二個紋理是alpha-to-white陰影,第一個紋理都是不透明的,但是有一個相當豐富的pallette。
我真正想做的是開始有效地應用動態生成/更新的混合。 例如:
注意:我不打算扔掉GLKit並為此編寫自定義着色器。 我想了解GLKit是如何工作的 - 而且對於像這樣的簡單事物,它應該是很容易維護的東西,而不是我編寫一堆着色器。
如文檔中所述 , GLKTextureEnvModeModulate
將紋理的顏色值相乘,這可能就是您看到黑色的原因。 如果要在紋理頂部覆蓋帶有alpha的紋理,請使用GLKTextureEnvAttribDecal
。
我沒有看到只使用GLKit API來實現動態混合蒙版構思的方法,但您不必完全拋棄它。 嘗試這樣的事情:
texture0
,將FBO紋理用作帶有GLKBaseEffect
texture1
,並將主場景渲染到屏幕。 它可能比在一個渲染過程中完成所有操作的片段着色器效率低,但它應該有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.