opengl图象质量问题,能解决将高分相送!!!! 100
原来用OpenGL做程序时一直觉得颜色不对,就做了个测试程序:我载入一个bmp文件,以贴图的方式按1:1的大小贴在屏幕上,我把混合,光照,纹理过滤,反样全都关闭了,但是仔...
原来用OpenGL做程序时一直觉得颜色不对,就做了个测试程序:
我载入一个bmp文件,以贴图的方式按1:1的大小贴在屏幕上,
我把混合,光照,纹理过滤,反样全都关闭了,但是仔细看屏幕上的图片与bmp里的图片对比,发现有细微差别,就是有些颜色不对(这些细微差别不仔细看看不出来)
为什么OpenGL绘制的图片颜色会变掉?我不想让它变,我想要bmp里的图片一模一样的颜色,请问我该怎么处理???
(后来我用Win32 API来创建OpenGL,发现还是无法解决这个问题)
附效果图:[img]http://image5.poco.cn/mypoco/myphoto/20080812/17/45067461200808121739051231777328374_000.jpg[/img]
测试代码:
#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;
} 展开
我载入一个bmp文件,以贴图的方式按1:1的大小贴在屏幕上,
我把混合,光照,纹理过滤,反样全都关闭了,但是仔细看屏幕上的图片与bmp里的图片对比,发现有细微差别,就是有些颜色不对(这些细微差别不仔细看看不出来)
为什么OpenGL绘制的图片颜色会变掉?我不想让它变,我想要bmp里的图片一模一样的颜色,请问我该怎么处理???
(后来我用Win32 API来创建OpenGL,发现还是无法解决这个问题)
附效果图:[img]http://image5.poco.cn/mypoco/myphoto/20080812/17/45067461200808121739051231777328374_000.jpg[/img]
测试代码:
#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;
} 展开
2个回答
展开全部
虽然我不会OPENGL ,但是你说象素颜色不对,我想应该是BMP格肢粗式问题扰郑.BMP有 单色 ,16色,256色,24位等;
在你创建相关设备时,是否设置过颜色格式?比如你的BMP是24位色的,但是你的历李镇读入格式却是256色或16位 ?
建议你考虑一下这个问题,99%是因为这个.
在你创建相关设备时,是否设置过颜色格式?比如你的BMP是24位色的,但是你的历李镇读入格式却是256色或16位 ?
建议你考虑一下这个问题,99%是因为这个.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
VSH艾羽
2024-10-27 广告
2024-10-27 广告
Abaqus是一款功能强大的有限元分析软件,广泛应用于航空航天、汽车、建筑等多个工程领域。它能够模拟复杂结构在静力、动力、热传导、非线性等条件下的行为,提供详尽的分析结果。Abaqus支持多种材料模型和单元类型,能够处理高度非线性问题,确保...
点击进入详情页
本回答由VSH艾羽提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询