`

《OpenGL编程基础》第二章习题1

 
阅读更多

还没看第三章,工作需要看了写纹理看了写矩阵变换,但是基本看不懂啊,,把活儿交差了先。

做了第二章的第一个习题,通过细分多边形模拟化缘,哦,是画圆大笑

代码及注释:

#include <stdlib.h>
#include <math.h>
#include <stdio.h>

static int n = 4;//多边形边数
float a = 0;      //多边形内角?不知道怎么称呼这个角。。
float x=0, y=0; //多边形顶点
float R = 1.0f; //半径。


static void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_LINE_LOOP);
        glColor3f(1.0, 0.0, 0.0);
        a = 360/n;
        int i;
        n=n<3?3:n;//不能画成一条直线
        for(i=1; a*i<=360; ++i)
        {                             //for循环确定多边型顶点
            x = R*cos(i*a*3.14/180);
            y = R*sin(i*a*3.14/180);
            glVertex2f(x, y);
        }

    glEnd();
    glLineWidth(10.0);//边线宽度10像素 
    glFlush();
}

void myReshape(GLsizei w,GLsizei h){
    glViewport(0,0,w,h);
}

static void key(unsigned char key, int x, int y)
{                                  //这个按键处理回调是CodeBox自己创建的自动化代码,刚好拿来用作多边形变化

    switch (key)
    {
        case 27 :
        case 'q':
            exit(0);
            break;

        case '+':
            ++n;            //增加多边形边的数量。
            break;

        case '-':
            --n;              //减少边 

            break;
    }

    glutPostRedisplay();
}

/* Program entry point */
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);

    glutCreateWindow("Circle");

    glClearColor(1.0, 1.0, 1.0, 1.0);       //清理颜色,放在这里可以设置背景颜色。
    glutDisplayFunc(display);                  //加班那些事儿
    glutReshapeFunc(myReshape);         //加班那些事儿,今次没在这个函数里加班。。
    glutKeyboardFunc(key);

    glutMainLoop();

    return EXIT_SUCCESS;
}



程序出来后是一个整四边行,按“+”按键,逐渐变成一个圆,逐渐的化缘,慢慢的,就特用它化缘讨饭了,大笑


还不清除如何在OpenGL里把数据输出到屏幕或者命令行,今次写这个习题的时候对顶点值的调试花了挺长时间。。郁闷,第二章里关于调试讲的很模糊,,,
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics