如何用OpenGL给一个圆填充颜色

shibushiburangzhucu 2008-12-24 11:06:50
如何用OpenGL给一个圆填充颜色啊
颜色要渐变的那种(和光盘差不多的,RGB三色向中心渐变的)
...全文
1944 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
问题我已经解决,就是要给产生的每一个顶点都赋上颜色

颜色的计算 采用HSI色空间 来计算产生的每一个顶点的颜色值

这样就能产生出我5楼发出的图片的效果
zzz822163 2008-12-24
  • 打赏
  • 举报
回复
glShadeModel(GL_SMOOTH);
glBegin(GL_TRIANGLE_FAN);//
glVertex3f(0,0,0.0f );
for(int i=0;i<=390;i+=10)
{float p=(float)(i*3.14/180);
if(i%3==0)
glColor3f(1.0f,0.0f,0.0f);
else if(i%3==1)
glColor3f(0.0f,1.0f,0.0f);
else if(i%3==2)
glColor3f(0.0f,0.0f,1.0f);
glVertex3f((float)sin(p),(float)cos(p),0.0f );
}
glEnd();

需要#include <math.h>
zhyinty 2008-12-24
  • 打赏
  • 举报
回复
我觉得你应该用着色器来写,或者给外围的顶点指定一种颜色,然后给圆心指定一种颜色,OpenGL会进行插值
运算,最后得到的颜色就是渐变的...
fandh 2008-12-24
  • 打赏
  • 举报
回复
http://www.pudn.com/downloads97/sourcecode/graph/detail396546.html
这个有例子,你看看是否对你有用!
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zzz822163 的回复:]
三种颜色相邻的地方已经出现了渐变的效果呀,opengl是会自己计算颜色插值的,
如果觉得效果不好,可以使用颜色渐变的纹理图
[/Quote]
三种颜色相邻的地方效果是出来了 但是那是很小很小的一部分出来了
跟我5搂发的图片效果完全不一样啊
zzz822163 2008-12-24
  • 打赏
  • 举报
回复
三种颜色相邻的地方已经出现了渐变的效果呀,opengl是会自己计算颜色插值的,
如果觉得效果不好,可以使用颜色渐变的纹理图
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zzz822163 的回复:]
最前面要加上glShadeModel(GL_SMOOTH);
[/Quote]
我加了 你那样做的循环
for(int i=0;i <=390;i+=10)
{float p=(float)(i*3.14/180);
if(i <130)
glColor3f(1.0f,0.0f,0.0f);
else if(i <260)
glColor3f(0.0f,1.0f,0.0f);
else
glColor3f(0.0f,0.0f,1.0f);
虽然你为这三个特定的顶点赋了新的颜色,但是在他们之后每一次产生的顶点都添加了相同的颜色的啊
例如if(i <130)
glColor3f(1.0f,0.0f,0.0f);
这样按照你的循环 他循环了13次 产生了13个颜色一样的顶点
所以他不会出现渐变的效果

我就是不会做这种渐变的效果。。
zzz822163 2008-12-24
  • 打赏
  • 举报
回复
最前面要加上glShadeModel(GL_SMOOTH);
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zzz822163 的回复:]
glBegin(GL_TRIANGLE_FAN);//
glVertex3f(0,0,0.0f );
for(int i=0;i <=390;i+=10)
{float p=(float)(i*3.14/180);
if(i <130)
glColor3f(1.0f,0.0f,0.0f);
else if(i <260)
glColor3f(0.0f,1.0f,0.0f);
else
glColor3f(0.0f,0.0f,1.0f);
glVertex3f((float)sin(p),(float)cos(p),0.0f );
}
glEnd();
这个行不行?
[/Quote]
这个不行 颜色不渐变 只是分成了三块颜色区域
zzz822163 2008-12-24
  • 打赏
  • 举报
回复
glBegin(GL_TRIANGLE_FAN);//
glVertex3f(0,0,0.0f );
for(int i=0;i<=390;i+=10)
{float p=(float)(i*3.14/180);
if(i<130)
glColor3f(1.0f,0.0f,0.0f);
else if(i<260)
glColor3f(0.0f,1.0f,0.0f);
else
glColor3f(0.0f,0.0f,1.0f);
glVertex3f((float)sin(p),(float)cos(p),0.0f );
}
glEnd();
这个行不行?
  • 打赏
  • 举报
回复

是要这种样式的
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zzz822163 的回复:]
glShadeModel(GL_SMOOTH);
glBegin(GL_TRIANGLE_FAN);//
glVertex3f(0,0,0.0f );
for(int i=0;i <=390;i+=10)
{float p=(float)(i*3.14/180);
if(i%3==0)
glColor3f(1.0f,0.0f,0.0f);
else if(i%3==1)
glColor3f(0.0f,1.0f,0.0f);
else if(i%3==2)
glColor3f(0.0f,0.0f,1.0f);
glVertex3f((float)sin(p),(float)cos(p),0.0f );
}
glEnd();

需要#include <math.h>
[/Quote]

可能是我表达没表达清楚 不是要产生这么多次的 R G B颜色

一个圆就只有R G B一次 这三种颜色平均分布在一个圆内 三种颜色相邻的地方出现渐变的效果

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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