我有一個紋理,有一些透明透明的部分我想應用於其面部是一些不透明材質的對象(或顏色,如果更簡單),但最終的對象變得透明。我希望最終的對象是完全不透明的。渲染透明紋理
這裏是我的代碼:
首先,我設置的材料:
glDisable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT);
glColor4f(0.00, 0.00, 0.00, 1.00);
glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
glColor4f(0.80, 0.80, 0.80, 1.00);
glColorMaterial(GL_FRONT_AND_BACK, GL_SPECULAR);
glColor4f(0.01, 0.01, 0.01, 1.00);
glEnable(GL_COLOR_MATERIAL);
然後,我設置了維也納組織
glBindTexture(GL_TEXTURE_2D, object->texture);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glBindBuffer(GL_ARRAY_BUFFER, object->object);
glVertexPointer(3, GL_FLOAT, sizeof(Vertex), ver_offset);
glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), tex_offset);
glNormalPointer(GL_FLOAT, sizeof(Vertex), nor_offset);
最後我拉攏的對象
glEnable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
glDisable(GL_TEXTURE_2D);
glBlendFunc(GL_ONE, GL_ZERO);
glDrawArrays(GL_TRIANGLES, 0, object->num_faces);
glEnable(GL_TEXTURE_2D);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDrawArrays(GL_TRIANGLES, 0, object->num_faces);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_BLEND);
glEnable(GL_DEPTH_TEST);
我嘗試傳遞不同以glBlendFunc()的參數爲準。我已上載這裏來源:http://dpaste.com/83559/
UPDATE 我得到this,但我想this(或沒有紋理this)。
第二張和第三張照片是用glm生產的。我研究過這些資料,但由於我對OpenGL的瞭解有限,所以我不太瞭解。
你想達到什麼目的?有一些實心像素的透明物體?或者是一些帶有透明紋理的固體物體,顯示下方的純色? – 2009-08-21 13:48:33
後者:一個具有透明紋理的固體對象,顯示下方的純色? – Alexandru 2009-08-21 15:12:02
感謝您的更新......並且按照我的建議,確定了您的Z-Buffering。 – Goz 2009-08-22 06:22:21