编程-OpenGL中,glColor()指定颜色后不起作用

问题描述

OpenGL中,glColor()指定颜色后不起作用

在使用glColor3f()函数的时候发现了一个问题,画出的图元颜色和glColor3f函数的位置有关系,有时候glColor函数不起作用。
下面有两段代码,作用是画一个红色的太阳,再画一个灰色的地球轨道。
请问为什么第二段代码中画出的太阳是灰色的?理论上说和第一段代码效果是一样的,仅仅是调换了下画图的顺序。
实在不理解。希望各位不吝赐教!谢谢!

第一段代码,这里先画一个红色球体,再画一个绕球体的灰色的圆。

glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
gluLookAt(80,80,30, 0.0,0.0,0.0, 0.0,0.0,1.0);
//----------------->第一个glColor函数,指定太阳为红色<-----------------
glColor3f(1.0,0.0,0.0);
glutWireSphere(10.0,30,30);//画太阳
 //----------------->第二个glColor函数,指定地球轨道为灰色<-----------------
int int_n = 500;
double PI = 3.141592653;
glColor3f(0.5,0.5,0.5);//指定轨道颜色为灰色
glBegin(GL_LINE_LOOP);//画轨道
for(int i=0;i<int_n;i++)
    glVertex3f(50*cos(2*PI/int_n*i),50*sin(2*PI/int_n*i),0.0);
glEnd();
glFlush();

但是,如果先画轨道,再画太阳,太阳的颜色就会变成轨道颜色。代码如下:

 glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
gluLookAt(80,80,30, 0.0,0.0,0.0, 0.0,0.0,1.0);
int int_n = 500;
double PI = 3.141592653;
//----------------->第一个glColor函数,指定轨道为灰色<-----------------
glColor3f(0.5,0.5,0.5);//指定颜色为灰色
glBegin(GL_LINE_LOOP);//画轨道
for(int i=0;i<int_n;i++)
    glVertex3f(50*cos(2*PI/int_n*i),50*sin(2*PI/int_n*i),0.0);
glEnd();
//----------------->第二个glColor函数,指定太阳为红色<-----------------
glColor3f(1.0,0.0,0.0); //指定颜色为红色
glutWireSphere(10.0,30,30);//画太阳
glFlush();

效果如下:

解决方案

http://blog.csdn.net/shuaihj/article/details/7231980

时间: 2024-08-25 16:20:44

编程-OpenGL中,glColor()指定颜色后不起作用的相关文章

ffmpeg中怎么编程实现获取视频中某指定的一帧?

问题描述 ffmpeg中怎么编程实现获取视频中某指定的一帧? ffmpeg中怎么编程实现获取视频中某指定的一帧?不是通过遍历,而是直接跳到指定帧,ffmpeg中有没有有相关的函数? 解决方案 /** Seek to the keyframe at timestamp. 'timestamp' in 'stream_index'. * @param s media file handle @param stream_index If stream_index is (-1), a default

opengl中如何进行离屏渲染?如何创建比屏幕大的帧缓冲区?

问题描述 opengl中如何进行离屏渲染?如何创建比屏幕大的帧缓冲区? 我现在需要要创建一个9倍于屏幕大小的缓冲区,一次性渲染一个九倍当前屏幕大小的场景然后使用glReadPixel读取这个场景截图的数据(如果我创建的帧缓冲区没有屏幕大,我就没法从缓冲区中使用glReadPixel函数读取到面积足够大的图片,即使我读取的宽度和高度设置为屏幕的3倍,但是读取出来的超出屏幕的范围都是glClear清除出来的颜色,实际的场景没法被渲染到超高屏幕的范围) 首先,这个问题是我在负责一个老项目时候遇到的,这

Android编程实现自定义进度条颜色的方法_Android

本文实例讲述了Android编程实现自定义进度条颜色的方法.分享给大家供大家参考,具体如下: android 自定义进度条颜色 先看图 基于产品经理各种自定义需求,经过查阅了解,下面是自己对android自定义进度条的学习过程! 这个没法了只能看源码了,还好下载了源码, sources\base\core\res\res\  下应有尽有,修改进度条颜色只能找progress ,因为是改变样式,首先找styles.xml 找到xml后,进去找到 <style name="Widget.Pro

JAVA-String 中删除指定字符(11种方法)

JAVA老师给我们留了一个课后作业,要求我们通过搜索JDK用尽可能多的方法删除String类中的指定字符,我只想到了 11 种方法,如果有不足或者遗漏希望读者能够不吝赐教. 第一种方法 – 通过循环从前往后遍历,如果不是要删除的字符则加到处理后的字符串中,代码如下: public String deleteCharString0(String sourceString, char chElemData) { String deleteString = ""; for (int i =

当sql表中增加一个字段后(没给默认值),怎么才能不让程序出错

问题描述 当sql表中增加一个字段后(没给默认值),怎么才能不让程序出错,在程序中应该怎么修改,,修改时不涉及增加的那个字段... 解决方案 解决方案二:新增字段允许为null,所有用到该表的地方都显示指定字段解决方案三:引用楼主qq_20881211的回复: 当sql表中增加一个字段后(没给默认值),怎么才能不让程序出错,在程序中应该怎么修改,,修改时不涉及增加的那个字段... 删除这个字段,就不会出错了.--更好的办法,是与时俱进.让懂编程开发的人来修改程序测试出来的bug,然后别的人就擎等

Java 编程技术中汉字问题的分析及解决(转)

编程|汉字|解决|问题 Java 编程技术中汉字问题的分析及解决 段明辉自由撰稿人2000 年 11月 8日内容: 汉字编码的常识 Java 中文问题的初步认识 Java 中文问题的表层分析及处理 Java 中文问题的根源分析及解决 Java Servlet 中文问题的根源 修改 Servlet.jar 中文乱码的处理函数 参考资料 作者简介在基于 Java 语言的编程中,我们经常碰到汉字的处理及显示的问题.一大堆看不懂的乱码肯定不是我们愿意看到的显示效果,怎样才能够让那些汉字正确显示呢?Jav

Java 编程技术中汉字问题的分析及解决,文件操作

编程|汉字|解决|问题 在基于 Java 语言的编程中,我们经常碰到汉字的处理及显示的问题.一大堆看不懂的 乱码肯定不是我们愿意看到的显示效果,怎样才能够让那些汉字正确显示呢?Java 语言 默认的编码方式是UNICODE ,而我们中国人通常使用的文件和数据库都是基于 GB2312 或者 BIG5 等方式编码的,怎样才能够恰当地选择汉字编码方式并正确地处理汉字的编 码呢?本文将从汉字编码的常识入手,结合 Java 编程实例,分析以上两个问题并提出 解决它们的方案. 现在 Java 编程语言已经广

Java 编程技术中汉字问题的分析及解决(转自IBM)

编程|汉字|解决|问题 Java 编程技术中汉字问题的分析及解决 段明辉自由撰稿人2000 年 11月 8日 在基于 Java 语言的编程中,我们经常碰到汉字的处理及显示的问题.一大堆看不懂的乱码肯定不是我们愿意看到的显示效果,怎样才能够让那些汉字正确显示呢?Java 语言默认的编码方式是UNICODE ,而我们中国人通常使用的文件和数据库都是基于 GB2312 或者 BIG5 等方式编码的,怎样才能够恰当地选择汉字编码方式并正确地处理汉字的编码呢?本文将从汉字编码的常识入手,结合 Java 编

Java 编程技术中汉字问题的分析及解决

编程|汉字|解决|问题 在基于 Java 语言的编程中,我们经常碰到汉字的处理及显示的问题.一大堆看不懂的乱码肯定不是我们愿意看到的显示效果,怎样才能够让那些汉字正确显示呢?Java 语言默认的编码方式是UNICODE ,而我们中国人通常使用的文件和数据库都是基于 GB2312 或者 BIG5 等方式编码的,怎样才能够恰当地选择汉字编码方式并正确地处理汉字的编码呢?本文将从汉字编码的常识入手,结合 Java 编程实例,分析以上两个问题并提出解决它们的方案. 现在 Java 编程语言已经广泛应用于