我一直工作在一个游戏引擎为教育目的,我碰到这个问题,我似乎无法找到一个答案: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。 –