我一直工作在一個遊戲引擎爲教育目的,我碰到這個問題,我似乎無法找到一個答案:OpenGL - 如何創建與訂單無關的透明度?
Alpha通道只適用於已經擁有的對象之前繪製的對象alpha通道(例如:在一個有3個物體的場景中,我們說一隻貓,一隻狗和一個瓶子(透明的),貓和狗都在瓶子後面;狗首先被拉出,瓶子第二次被拉出,貓第三隻,只有狗會通過瓶子看到)。
我用C++發動機,Win32 API中的編輯器和GLSL的陰影:
// some code here
vec4 alpha = texture2D(diffuse, texCoord0).aaaa;
vec4 negalpha = alpha * vec4(-1,-1,-1,1) + vec4(1,1,1,0);
vec4 textureComponentAlpha = alpha*textureComponent+negalpha*vec4(1,1,1,0);//(texture2D (diffuse, texCoord0)).aaaa;
gl_FragColor = (textureComponentAlpha + vec4(additiveComponent.xyz, 0)) * vec4(lightingComponent.xyz, 1);
在C++:
glEnable(GL_ALPHA_TEST);
glDepthFunc(GL_EQUAL);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
我認爲它與alpha測試的方式或類似的東西有關。
請問誰能幫我解決這個問題?
我不確定你在問什麼。訂單獨立透明既不便宜也不易實施,當然超出了本網站的答案範圍。 – Quinchilion
我面臨同樣的問題,我的解決方案涉及遞歸多遍渲染,模板,裁剪和很多數學。書可以寫在這樣的技術上,而且確實可能是這樣。 OpenGL不只是神奇地爲你做這一切。如果你正在尋找一個簡單的解決方案,恐怕沒有一個。 – Entropy
我在這裏回答了一些簡單的透明度渲染方法的概述:http://stackoverflow.com/questions/23280692/opengl-es2-alpha-test-problems。 –