[MAC]OpenGL中SOIL库与stbi_load库加载图片,透明黑色问题,遇到的坑及解决办法
来源:互联网 发布:集成吊顶软件免费版 编辑:程序博客网 时间:2024/06/08 19:50
介于网上和SOIL相关的问题并不多,记录下自己遇到的问题
坑1: SOIL库的下载及链接,加-m64与加x86的方法都试过,无法解决load_image函数的问题
解决办法:删除官方下载的SOIL库。然后在终端下,git clone https://github.com/DeVaukz/SOIL,(具体mac下如何克隆下载github文件自行google)
然后用cmake(cmake的用法在配置GLFW和GLEW的时候应该已经会用cmake了)按照同样方法配置SOIL库,则在usr/local/include以及usr/local/lib中会
出现相应SOIL文件,然后在xcode中#include<SOIL/SOIL.h>即可
坑2:SOIL库函数没问题,文件路径参数可以直接将图片拖进xcode,运行没问题,但是没图像
解决办法:使用SOIL_last_result()函数,可详细报错
unsigned char *image = SOIL_load_image("/Users/momo/Desktop/1.png", &texwidth, &texheight, 0, SOIL_LOAD_RGB); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texwidth, texheight, 0, GL_RGB, GL_UNSIGNED_BYTE, image); if(image){ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texwidth, texheight, 0, GL_RGB, GL_UNSIGNED_BYTE, image); glGenerateMipmap(GL_TEXTURE_2D); } else std::cout<<SOIL_last_result()<<std::endl; SOIL_free_image_data(image); glBindTexture(GL_TEXTURE_2D,0);坑3:SOIL_load_image函数只可以加载PNG图片不可以加载JPG图片,报错:JPEG format not supported (progressive)
解决办法:请google:standard jpeg for image,该函数对于JPG图像只支持标准JPEG格式,就算你加载成功了,图像显示灰色且右边被扭曲,所以采用stbi_load库,
这是learnopengl采用stbi_load库写的另一个教程版本:stbi_load库版opengl教程
坑4:SOIL_load_image函数加载PNG函数的时候,透明部分被显示成黑色
解决办法;高级OPENGL-混合参考opengl教程中高级OPENGL之混合部分片段着色器代码,
因为最后用的stbi_load库,所以文章后面会贴上stbi_load解决透明问题的代码版本
坑5:在上述stbi_load库的opengl教程中,下载stb_image.h头文件时可能又需要各种Google,这个不再赘述,但是教程中的代码是存在问题的,贴上我的代码:
int texwidth,texheight,nrChannels;//nrChannels表示通道数,R/G/B/A,一共4个通道,有些图片只有3个,A即为alpha stbi_set_flip_vertically_on_load(true); //解决图像翻转问题,不需要像SOIL库中片段着色器的position设置为-y unsigned char *image = stbi_load("/Users/momo/Desktop/图片/jpeg-home.jpg", &texwidth, &texheight, &nrChannels,STBI_rgb_alpha);//注意这里不是0 if(image){ if(nrChannels==3)//rgb 适用于jpg图像 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texwidth, texheight, 0,GL_RGBA, GL_UNSIGNED_BYTE, image);//后面一个是RGBA else if(nrChannels==4)//rgba 适用于png图像 glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA, texwidth, texheight, 0,GL_RGBA, GL_UNSIGNED_BYTE, image);//注意,两个都是RGBA //std::cout<<nrChannels<<std::endl; glGenerateMipmap(GL_TEXTURE_2D); } else std::cout<<"Failed to load texture"<<std::endl; stbi_image_free(image); glBindTexture(GL_TEXTURE_2D,0);
片段着色器代码:主要参考混合那一章的讲述
const GLchar *FragmentShaderSource="#version 330 core\n""in vec3 ourColor;\n""in vec2 TexCoord;\n""out vec4 color;\n""uniform sampler2D ourTexture;\n""void main()\n""{\n"" vec4 texColor=texture(ourTexture,TexCoord);\n"" if(texColor.a<0.5)\n"" discard;\n"" color=texColor;\n""}\n";
glTexture2D函数中,前一个GL_RGB指的是你希望存储为的格式,后一个GL_RGB是源图像自带的格式,有些JPG图像带有alpha信息,有些不带
至此,PNG图像和JPG图像应该是都能很好的显示出来
- [MAC]OpenGL中SOIL库与stbi_load库加载图片,透明黑色问题,遇到的坑及解决办法
- opengl利用SOIL加载图片dds纹理
- SOIL库加载纹理
- SOIL库加载纹理
- SOIL库加载纹理
- opengl 遇到的问题及解决办法 总结
- mac 下安装 SOIL库
- MAC 安装遇到的问题及解决办法
- OpenGL基本操作与SOIL库和assimp库的使用
- OpenGL简易图像库SOIL在VS2013下的配置
- Simple OpenGL Image Library(soil纹理库)
- android 图片透明色变成黑色解决办法
- android 图片透明色变成黑色解决办法
- 【C#/OpenGL】CSGL中2D纹理加载PNG等透明图片显示的黑边问题
- 解决java压缩图片透明背景变黑色的问题
- 配置SOIL库,实现纹理加载
- 从本地加载纹理【基于SOIL库】
- Linux中遇到的问题及解决办法
- VS2015+Qt 如何设置窗口左上角图标
- javascript const Array Object 的注意点
- 无名管道
- codeforces 877 problem D Olya and Energy Drinks 【bfs剪枝】
- jQuery操作节点元素方法总结
- [MAC]OpenGL中SOIL库与stbi_load库加载图片,透明黑色问题,遇到的坑及解决办法
- MBProgressHUD中0.7版本在ios11上面的小坑
- 共享打印机复印机方案开发
- Adb interface驱动无法安装解决方法!
- cuda 9.0 + vs2015 环境搭建
- 1003. 我要通过!(20)
- linux scp用法
- isset 判断变量是否存在的时候对于0是生效的
- linux cd与ls命令用法