我正在制作这个包含按钮,按钮容器,聊天框等的C ++程序,我想用纹理包裹它。
我想为我制作的所有矩形生成一个平滑的边缘,我不希望顶点绘图方法为它做的工作,因为它消耗更多的CPU使用而且看起来不是很好,我不喜欢知道它是否可以使用纹理坐标(即 glTexCoord(u,v)与 glVertex2f(x,y) w / c应该只有4,因为它是一个四边形)
我用 SDL_LoadBMP()来加载纹理w / c只能加载 .bmp 的格式。(我不确定因为它只说LoadBMP有)。
.bmp 格式可以处理透明度吗?如果是的话,该怎么做?
您可以使用SOIL向我展示一些代码示例,以加载格式为 .gif 的图片或任何其他可以处理图片透明度的格式吗?
四边形可以处理不规则/多边形的形状,如六角形或星形,而不会绘制背景吗?
*如何导入通过c ++ opengl渲染的原始文本框,以便将文本复制到剪贴板中?至于我的节目中的聊天会话。
我创建了自己的库,使用GL_POINTS绘制文本,并且在调整窗口大小时看起来不太好,因为这些点是分散的。文本需要const char*
才能避免#include <*string*>
,因为我希望我的程序不依赖于C ++的核心功能。
所以更好的解决方案是使用位图绘制它。
有人建议使用图像绘制它,所以我真的需要透明度的东西,因为我希望它只使用四边形绘制。
答案 0 :(得分:5)
是的,位图格式 支持透明度。
这取决于压缩方法,默认RGB
方法支持24位颜色,但BITFIELDS
压缩支持32位颜色(24位+ alpha通道)。
您可以在http://en.wikipedia.org/wiki/BMP_file_format
了解更多信息我在Lime项目中成功使用它,这是一个用Haxe编写的实现:https://github.com/openfl/lime/blob/4adb7d638d15612e2542ae3a0ef581a786d21183/src/lime/_internal/format/BMP.hx
答案 1 :(得分:0)
这个答案只讨论bmp文件是否可以处理透明度,以及如何使用SOIL加载png文件,我认为如果你通过推理进一步看,它会向你展示如何加载gif文件。根据{{3}},bmp是一种通过this wikipedia article支持透明度的文件类型。但根据alpha channel SO文章,它没有。根据我自己的经验,我还没有找到让bmp透明度工作的方法。所以理论上32位bmp文件应该支持透明度,但我对此表示怀疑。 (也许我会吃掉我的话?)
好的,从this开始,此代码说明如何加载处理透明度的png文件:
/* load an image file directly as a new OpenGL texture */
GLuint tex_2d = SOIL_load_OGL_texture
(
"img.png"
SOIL_LOAD_AUTO,
SOIL_CREATE_NEW_ID,
SOIL_FLAG_MIPMAPS | SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB |
SOIL_FLAG_COMPRESS_TO_DXT
);
答案 2 :(得分:0)
在Photoshop中可以实现BMP透明度,至少24位深度。 它不会作为&#34; imwrite&#34;的选项出现。在Matlab。