最近做一个OpenGL渲染的小项目,渲染出来的效果颜色有偏差,偏蓝色,glColor没问题,光照没问题,材质没问题,怪了,冷静思考一下,只有在贴图的时候颜色有偏差,不显示贴图颜色没问题,可以把问题定位到贴图出问题了,到指定纹理的地方看了看,仔细检查参数,再想到我使用Opencv加载图像的,opencv的mat类的颜色通道是BGR,问题找到了,就出在这里,代码如下所示
glTexImage2D(GL_TEXTURE_2D, 0,
GL_RGB
, mat1.cols, mat1.rows, 0,
GL_BGR
, GL_UNSIGNED_BYTE,
mat1.data);
问题
:用Kinect Dk读出来的图像用Opencv显示没有纹理,保存为BMP也没有
问题
,但是
OpenGL
纹理加载显示出来偏蓝
解决:
OpenGL
纹理数据加载时使用的
颜色
通道错误了,原来数据的
颜色
通道是BGRA的
之前:glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, _width, _height, 0, GL_RGBA, GL_UNSIGNED...
glGenerateMipmap(GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
if ((imageType == FIT_BITMAP) && (FreeImage_GetBPP(pBitmap) == 24))
textureFormat = GL_RGBA;
像素在bmp中图像中以BGR方式进行存储的,GL_BGR_EXT方式进行纹理创建
glTexImage2D(GL_TEXTURE_2D, 0, 3, mp_width, mp_Height, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, lpcBuffer);
解决了
颜色
偏差
的
问题
。
下面这张图片是截取于
OpenGL
的纹理采取那部分的代码,注意图片的格式为jpg,然后读取图片的格式为RGB
但是下面这张截图中,我需要加载的图片数据的格式是png,是4通道的(调试时可以从nrChannels参数看出),所以正确的方法如下:
如果格式没有注意的话,就会出现读取的数据不正确的情况
RenderDoc
问题
使用renderDoc调试程序时,程序中涉及到的一些相对路径,可能读取不到,导致无法正常运行程序,因此需要改成绝对路径,如下:
这样也可以正
例如我创建了一个全屏的纹理顶点,但图片不一定是刚好符合屏幕比例的,这样纹理
贴图
一贴上去,一拉伸就不符合图片比例了,会比较难看,那么对顶点做怎样的临时变换可以维持渲染的图片保持比例呢?
我的基本环境设置如下:
glViewport(0, 0, w, h);//设置视口
float ratio = (float) h / w;
frustumM(mProjMatrix, 0, -1, 1, -ratio, ratio, 1, 50);//设置投影矩阵
投影矩阵设置方法:
voi...
初学
OpenGL
,什么都不太会,在开启双缓冲并进行实时绘图的时候发现,
颜色
和设置的
颜色
并不完全一样,不太纯正,一直找不到原因,互联网上也搜不到,后来有个偶然的机会,知道了原因,需要在
OpenGL
环境初始化的时候做一些配置,具体配置非常的简单,在启用深度测试的后面,指定所做的测试类型,代码如下:
//启用深度测试
::glEnable(GL_DEPTH_TEST);
glDepthFunc(
项目中曾遇到过多次透明图片经过
OpenGL
渲染之后或者图片
颜色
偏黑出现色差或者透明区域呈现黑色,不是透明状态。这种情况的出现多是由于glBlendFunc设置的有
问题
造成的。其默认的设置是glBlendFunc(GL_ONE, GL_ZERO);通过glBlendFunc可以设置纹理的Blend方式,其第一个参数代表源因子,第二个参数代表目标因子,这里把将要画上去的
颜色
称为源
颜色
,把原来的
颜色
称为...
在学习
opengl
纹理题图的时候,使用stb_image加载jpg文件,出现了图片显示出现颠倒的情况,如下图所示
出现这种情况的原因是,在默认的情况下。std_image是从图片的最后一行进行存储。 所以在显示图片的时候需要将图片进行翻转。
解决方案:
1. 翻转定点信息中的纹理图标
float vertices[] = {
// positions ...
JPG图像
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
PNG图像
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
注意...