关于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内部的原理所致,有谁知道的可以说说吗?
...全文
2578 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"


内容概要:本文针对复杂三维环境下多无人机动态避障路径规划问题,提出一种基于蚁狮优化算法(ALO)的解决方案,并通过Matlab实现算法仿真。研究重点在于解决多无人机在飞行过程中面对静态与动态障碍物时的安全避障与路径最优问题。ALO算法模拟自然界中蚁狮捕食行为的捕猎机制,通过“陷阱构建”“诱捕猎物”“淘汰劣解”等操作实现对无人机路径的全局搜索与动态优化。文中设计了一个综合考量路径长度、飞行高度、环境威胁等级及转弯角度等因素的多目标代价函数,以实现低能耗、高安全性和强适应性的飞行路径规划。在复杂三维空间中设置了多个动态障碍物场景,通过仿真实验验证了该方法在路径合理性、避障实时性以及收敛稳定性方面的优越性能,为城市搜救、灾害应急、军事侦察等多机协同任务提供了有效的路径规划技术支持。; 适合人群:具备一定编程基础和优化算法理论背景,从事无人机系统控制、智能优化算法研究、路径规划或自动化相关领域的科研人员、工程技术人员及研究生。; 使用场景及目标:①应用于城市密集建筑区、山区地形或灾害现场等复杂三维动态环境中多无人机协同执行侦察、救援或监测任务的路径规划;②用于提升无人机集群在未知或时变环境中自主导航、实时避障与协同决策能力的研究与系统开发; 阅读建议:建议结合提供的Matlab代码深入理解ALO算法的具体实现流程,重点关注目标函数的设计思路、动态障碍物建模方式以及种群迭代过程中的路径更新策略,同时可将该方法与其他智能优化算法(如PSO、GWO、WOA)在相同场景下进行对比实验,以全面评估其性能优势与适用边界。

3,881

社区成员

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

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