颜色索引画小球

#include <gl/glut.h>
#include <gl/glaux.h>

void Initial(void)
{
    glClearColor(1.0,1.0,1.0,1.0);
    glClear(GL_COLOR_BUFFER_BIT);
    glShadeModel(GL_SMOOTH);
}

void Palette(void)
{
    GLint i;
    static GLfloat rgb[8][3]={{1,0,0},{1,0,0.5},{1,0,1},{0,0,1},{0,1,1},{0,1,0},{1,1,0},{1,0.5,0}};
    for(i=0;i<8;i++)
        auxSetOneColor(i+1,rgb[i][0],rgb[i][1],rgb[i][2]);//auxSetOneColor()有四个参数。它使第一个参数代表的索引值和后三个参数代表的RGB颜色对相关联
}

void DrawColorFans(void)
{
    GLint i;
    glTranslatef(-15,-15,0);
    for(i=0;i<8;i++)
    {
        glIndexd(i+1);//设置当前颜色索引
        glTranslatef(i,i-1,0);//移动坐标原点。对应的3个参数对应着3个坐标轴
        glutSolidSphere(1,20,20);//第一个参数为半径;第二个参数为环绕Z轴的剖分数,即纬度方向;第三个参数为沿着Z轴的剖分数,即经度方向。
    }
}

void CALLBACK myDisplay(void)
{
    Palette();
    DrawColorFans();
    glFlush();
}

void CALLBACK myReshape(GLsizei w,GLsizei h)
{
    glViewport(0,0,w,h);//void glViewport(GLint x,GLint y,GLsizei width,GLsizei height); x,y
                        //指定视口矩形左下角,以像素为单位。默认值为(0,0);
                        //width height 分别指定宽度和高度。根据窗口的实时变化重绘窗口
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();//通常需要先调用glLoadidentity来把当前矩阵单位化,从而使各种变换效果不会叠加
    gluPerspective(100,1,1,20);/*void gluPerspective(GLdouble fovy, //角度
                                    GLdouble aspect,//视景体的宽高比
                                  GLdouble zNear,//沿z轴方向的两裁面之间的距离的近处
                                  GLdouble zFar //沿z轴方向的两裁面之间的距离的远处)*/
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef(0,0,-15);
}

void main()
{
    auxInitDisplayMode(AUX_SINGLE|AUX_INDEX);
    auxInitPosition(100,100,500,500);
    auxInitWindow("Draw the color sphere");
    Initial();
    auxReshapeFunc(myReshape);//当窗口被调整大小、移动或者打开时,函数会被调用,即新的宽的值和高的值,通常*function指向的函数
                        //会调用glViewport(),显示裁减后的新尺寸,然后重定义投影矩阵,以便投影后图像的比例与视点匹配,避免比例失调
    auxMainLoop(myDisplay);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值