加載圖像後,我將每個通道的單個字節加載到無符號字符數組中。它傳遞給一個將它作爲紋理投影到四邊形上的函數。一切似乎正常工作,除了alpha通道,它顯示爲背景顏色。我使用OpenGL繪製圖像。我會通過添加分層機制獲益嗎?另外,我怎樣才能達到我想要的透明效果?在OpenGl中正確繪製alpha通道
注:這是我有一種感覺,需要改變的代碼:
void SetUpView()
{
// Set color and depth clear value
glClearDepth(1.f);
glClearColor(1.f, 0.f, 0.f, 0.f);
// Enable Z-buffer read and write
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glDepthMask(GL_TRUE);
glEnable (GL_BLEND);
glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
// Setup a perspective projection
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90.f, 1.f, 1.f, 500.f);
};
而且,這裏呈現四碼。
void DrawTexturedRect(RectBounds *Verts, Image *Texture)
{
glBindTexture(GL_TEXTURE_2D, GetTextureID(Texture));
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glPixelZoom(1, -1);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 1.0);
glVertex3f(Verts->corners[0].x, Verts->corners[0].y, Verts->corners[0].z);
glTexCoord2f(1.0, 1.0);
glVertex3f(Verts->corners[1].x, Verts->corners[1].y, Verts->corners[1].z);
glTexCoord2f(1.0, 0.0);
glVertex3f(Verts->corners[2].x, Verts->corners[2].y, Verts->corners[2].z);
glTexCoord2f(0.0, 0.0);
glVertex3f(Verts->corners[3].x, Verts->corners[3].y, Verts->corners[3].z);
glEnd();
};
Image類包含使用OpenIL獲取的無符號字符數組。
相關的代碼:
loaded = ilLoadImage(filename.c_str());
ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE);
unsigned char *bytes = ilGetData();
//NewImage is an instance of an Image. This is returned and passed to the above function.
NewImage->data = bytes;
Problem http://img375.imageshack.us/img375/9585/j120192.png
由於
沒有足夠的數據。您沒有顯示紋理加載例程,也沒有顯示實際的渲染例程。 – SigTerm 2010-06-23 21:45:05
好的,我試着清理渲染循環中發生的事情。 – Jeff 2010-06-23 22:07:54
另外,你如何設置OpenGL?你確定你一直在請求alpha通道嗎(例如,如果使用過剩,則使用像素格式,如果使用glut,則使用GLUT_RGBA)? – sbk 2010-06-23 22:47:46