| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
大量收QQ微信精准粉/交友粉,非诚勿扰千里之行 始于足下
共有 1797 人关注过本帖
标题:OpenGL绘图质量有问题,绘制出的颜色跟文件里的颜色不一样
只看楼主 加入收藏
本帖由 BlueGuy 于 2018-6-1 19:08 提升
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
结帖率:100%
  问题点数:0  回复次数:2   
OpenGL绘图质量有问题,绘制出的颜色跟文件里的颜色不一样
原来用OpenGL做程序时一直觉得颜色不对,就做了个测试程序:
我载入一个bmp文件,以贴图的方式按1:1的大小贴在屏幕上,
我把混合,光照,纹理过滤,反样全都关闭了,但是仔细看屏幕上的图片与bmp里的图片对比,发现有细微差别,就是有些颜色不对(这些细微差别不仔细看看不出来)
为什么OpenGL绘制的图片颜色会变掉?我不想让它变,我想要bmp里的图片一模一样的颜色,请问我该怎么处理???
(后来我用Win32 API来创建OpenGL,发现还是无法解决这个问题)

附效果图:

测试代码:

#include <gl\glut.h>
#include <gl\glaux.h>
#pragma comment(lib, "glaux.lib")

// 读取bmp文件
GLuint LoadTexture(LPCTSTR path)
{
GLuint texture = 0;
AUX_RGBImageRec *bmp = auxDIBImageLoad(path);
if(!bmp) return 0;

glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);

glTexImage2D(GL_TEXTURE_2D, 0, 3, bmp->sizeX, bmp->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, bmp->data);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

free(bmp->data);
free(bmp);

return texture;
}

void OnInit()
{
LoadTexture("buttons.bmp");
glDisable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
glDisable(GL_LIGHTING);
glDisable(GL_POINT_SMOOTH);
glDisable(GL_CULL_FACE);

glEnable(GL_TEXTURE_2D);
}

// 绘制
void OnDisplay()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(0, 0);
glTexCoord2f(1, 0);
glVertex2f(1024, 0);
glTexCoord2f(1, 1);
glVertex2f(1024, 128);
glTexCoord2f(0, 1);
glVertex2f(0, 128);
glEnd();

glutSwapBuffers();
}

// 当窗口大小改变时
void OnReshape(int width, int height)
{
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0f, width, 0.0f, height); // 创建2D视矩阵
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutCreateWindow("测试程序");

OnInit(); // 初始化

glutDisplayFunc(OnDisplay);
glutReshapeFunc(OnReshape);
glutIdleFunc(OnDisplay);

glutMainLoop();
return 0;
}
搜索更多相关主题的帖子: OpenGL  颜色  质量  文件  绘制  
2008-08-12 17:48
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3988
专家分:684
注 册:2006-10-13
  得分:0 
lz...你应该去ds0101问

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2008-08-12 21:37
BlueGuy
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:4454
专家分:4055
注 册:2009-4-18
  得分:0 
glBindTexture需要调用2次

我就是真命天子,顺我者生,逆我者死!
2018-06-01 18:38







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039977 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved