关于glColor3f和glColor3i冲突的问题

DIE654456 2008-12-26 09:35:53

前几天写OpenGL程序的时候,用了glColor3f调用,绘制图形的颜色没问题.而且程序中大部分是glColor3f调用.但是想改用glColor3i的时候不响应.

例如 glColor3f( 1.0 , 0.0 , 0.0 ) ;
glBegin( GL_LINES ) ;
.......
能绘制出红色的线条
但是改用了glColor3i之后
glColor3i( 255 , 0 , 0 ) ;
glBegin( GL_LINES ) ;
......
就不能使用.
我想,大概是OpenGL内部的原理所致,有谁知道的可以说说吗?
...全文
2585 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
DIE654456 2008-12-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 Chiyer 的回复:]
给你个例子

C/C++ code
#include "glut.h"
#include "limits.h"

int ajust(int color)
{
return color / 255 * INT_MAX;
}

[/Quote]

Chiyer的做法是对的,我调试运行了一下,发觉 红色 的颜色在OpenGL里
浮点表示是 RGB=(1.0 , 0.0 , 0.0 )
整形表示是 RGB= (2147483647, 0 , 0 )
因为 limit.h中 有 #define INT_MAX 2147483647 /* maximum (signed) int value */
因此整形表示的 RGB=(255, 0 , 0 ) 实际上颜色少的可怜,也看不出来,呵呵。
谢谢你们的回答啊!
星羽 2008-12-26
  • 打赏
  • 举报
回复
你说的不响应是什么意思,是不画出来,还是画出来颜色不多

还有把你的代码多贴点
liaoweixiaoyu 2008-12-26
  • 打赏
  • 举报
回复
不懂 呵呵
星羽 2008-12-26
  • 打赏
  • 举报
回复
上面的ajust有点问题,改一下

#include "glut.h"
#include "limits.h"

int ajust(int color)
{
return color / 255.f * INT_MAX;
}

void display()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.f, 500.f, 500.f, 0.f, 1.f, 100.f);
glMatrixMode(GL_MODELVIEW);

glClear(GL_COLOR_BUFFER_BIT);


glColor3i(0, 0, ajust(128));
glBegin(GL_LINES);

glVertex3f(0, 200, -10);
glVertex3f(500, 200, -10);

glEnd();

glFlush();
}


int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE);
glutCreateWindow("gl test");
glutDisplayFunc(display);
glutMainLoop();

return 0;
}
星羽 2008-12-26
  • 打赏
  • 举报
回复
给你个例子


#include "glut.h"
#include "limits.h"

int ajust(int color)
{
return color / 255 * INT_MAX;
}

void display()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.f, 500.f, 500.f, 0.f, 1.f, 100.f);
glMatrixMode(GL_MODELVIEW);

glClear(GL_COLOR_BUFFER_BIT);


glColor3i(0, 0, ajust(255));
glBegin(GL_LINES);

glVertex3f(0, 200, -10);
glVertex3f(500, 200, -10);

glEnd();

glFlush();
}


int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE);
glutCreateWindow("gl test");
glutDisplayFunc(display);
glutMainLoop();

return 0;
}
星羽 2008-12-26
  • 打赏
  • 举报
回复
哦,想起来了, glColor3b, glColor4b, glColor3s, glColor4s, glColor3i, and glColor4i 是按范围影射到float的

所以你要想蓝色,应该是 glColor3i(0, 0, INT_MAX);而不是 glColor3i(0, 0, 255);

使用INT_MAX,要包含 #include "limits.h"


3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧