Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用SDL、OpenGL和C+加载具有透明度的.png图像+;?_Opengl_Png_Transparency_Sdl_Textures - Fatal编程技术网

如何使用SDL、OpenGL和C+加载具有透明度的.png图像+;?

如何使用SDL、OpenGL和C+加载具有透明度的.png图像+;?,opengl,png,transparency,sdl,textures,Opengl,Png,Transparency,Sdl,Textures,我正在尝试加载和显示一个.png图像,其中有透明度。整个图像不是透明的,它只是我在Photoshop中裁剪的一个包的图片,周围是透明的。我需要把它加载到我的程序上,使用C++上的SDL和OpenGL,但是当我尝试它时,代替它正确地显示,图像中的袋子周围的空间是“模糊的”(我只能这样说)。我想说的是,透明度不起作用 这是我目前的代码: init()方法: drawScene()方法: 您需要启用混合以使透明度正常工作: glEnable(GL_BLEND); glBlendFunc(GL_SRC_

我正在尝试加载和显示一个.png图像,其中有透明度。整个图像不是透明的,它只是我在Photoshop中裁剪的一个包的图片,周围是透明的。我需要把它加载到我的程序上,使用C++上的SDL和OpenGL,但是当我尝试它时,代替它正确地显示,图像中的袋子周围的空间是“模糊的”(我只能这样说)。我想说的是,透明度不起作用

这是我目前的代码:

init()方法:

drawScene()方法:


您需要启用混合以使透明度正常工作:

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

此外,您应该检查加载的PNG文件是否包含alpha通道。

干杯,这就解决了问题!在发布问题之前,我在网上查看了一下,但没有找到答案,只是为了让你不要认为我是那种一发现问题就发布问题的人。好奇我怎么找不到它,谢谢!
float xMin, xMax, yMin, yMax;

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glTranslatef(0.0f, 0.0f, -6.0f);

glEnable(GL_TEXTURE_2D);

glBindTexture(GL_TEXTURE_2D, texture); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // Use nice (linear) scaling 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // Use nice (linear) scaling

glBegin (GL_QUADS);
glNormal3f(0.0f, 0.0f, 1.0f);
if (texturesOn) glTexCoord2f(0.0f, 1.0f);
glVertex3f(4.3f, -3.5f, 0.0f); //bottom left

if (texturesOn) glTexCoord2f(1.0f, 1.0f);
glVertex3f(5.3f, -3.5f, 0.0f); //bottom right

if (texturesOn) glTexCoord2f(1.0f, 0.0f);
glVertex3f(5.3f, -4.5f, 0.0f); //top right

if (texturesOn) glTexCoord2f(0.0f, 0.0f);
glVertex3f(4.3f, -4.5f, 0.0f); //top left
glEnd();

glDisable(GL_TEXTURE_2D);

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