2012-03-15 4 views
0

현재 투명한 배경을 가진 아이콘을로드하려고합니다.투명한 배경으로 아이콘을로드하고 C++/OpenGL로 올바르게 표시하는 방법은 무엇입니까?

그럼 비트 맵을 만들고 glTexImage2D()를 통해 비트를 표시하려고합니다.

그러나 아이콘의 배경은 결코 여기에

내 코드의 일부이다 :(투명 얻을 수 없습니다 :

DWORD dwBmpSize = 32*32*4; 
byte* bmBits = new byte[dwBmpSize]; 

for(unsigned int i = 0; i <dwBmpSize; i+=4) 
{ 
    bmBits[i] = 255; // R 
    bmBits[i+1] = 0; // G 
    bmBits[i+2] = 0; // B 
    bmBits[i+3] = 255;// A 
    // I always get a red square, no matter what value i fill into alpha 
} 

//create texture from bitmap 
glTexImage2D(target, 0, 
    GL_RGBA, 32, 32, 
    0, GL_RGBA, GL_UNSIGNED_BYTE, bmBits); 

delete bmBits; 

편집 : 내 비트 알파가 있는지, 확인하기 위해 코드를 변경 채널. 지금 내가 대신 아이콘을로드하는, 무슨 일이 참조하는 사용자 정의 값으로 32 × 32 PXL 영역을 작성하고 있습니다. 그것은 여전히 ​​작동하지 않습니다! 내가 실종? 아니면 그냥 수 없습니다입니다 무엇

?

,
+2

나는 API를 모르지만'DIB_RGB_COLORS'는 생기고,'RGB'는'A'를 그리워합니다. 어쩌면'bmp-> bmBits'의 원시 값을 조사하여'GetDIBIts '이후에 알파 값이 있는지 여부를 알 수 있습니다. –

+0

분명히 가능합니다. 뭔가 잘못하고있는 것 같습니다. –

+0

좋아요, 이제 코드를 변경 했으므로 알파 채널이 있다는 것을 확신합니다. 나는 GetDIBits()를 제거했다. 하지만 여전히 작동하지 않습니다 : ( – slaindevil

답변

1

블렌딩을 활성화하고 올바른 블렌드 모드를 설정해야합니다.

glEnable (GL_BLEND); 
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

또한 전체 알파 채널을 255로 채우면 여전히 불투명합니다. 대신 128 또는 무언가를 사용해보십시오.

+0

나는 0으로 시도하고 지금은 완전히 투명합니다! 당신에게 큰 thx! – slaindevil

관련 문제