OpenGL————画圆

从今天开始,准备在这个网站写笔记来记录每次的图形学学习的收获和遇到的坑,也欢迎大家的指正和批评。
2019-11-17
今天是学到了《计算机图形学》(第四版)的第五章,准备做一下后面的习题。
先准备画一个太阳。
因为是新手,所以并不懂渲染和贴图,我就想太阳的填充直接用线来填充吧。
那么,第一步,画圆。

glBegin(GL_LINE_STRIP);    
    for (int i = 0; i <500; i++) {
        GLdouble x = r * cos((-90 * 3.14f / 180) + (0.18 * i * 3.14f / 180));
        GLdouble y = Lheight + r * sin((-90 * 3.14f / 180) + (0.18 * i * 3.14f / 180));
        glVertex2d(x,y);       
        }
glEnd();

这个圆的圆心在(0,Lheight),就是ourth2D的左上角,且是一个四分之一圆。
第二步,进行填充。
考虑到是二维图形,也不分前向面和后向面,就可以用点或者线来进行填充颜色,具体思路是,在上面的for循环中每一次都画一根线,这条线的起点是(x,y),终点是(x,Lheight),Lheight表示的是ourth2D的高度。

GLdouble r = Lwidth/4;
    glColor3f(1, 0.38, 0);
    glPointSize(10.0);
    glBegin(GL_LINE_STRIP);    
    for (int i = 0; i <500; i++) {
        GLdouble x = r * cos((-90 * 3.14f / 180) + (0.18 * i * 3.14f / 180));
        GLdouble y = Lheight + r * sin((-90 * 3.14f / 180) + (0.18 * i * 3.14f / 180));
        glVertex2d(x,y);        
            glBegin(GL_LINE_STRIP);                                    glVertex2d(x, y);                            
            glVertex2d(x, Lheight);
            glEnd();        
    }
    glEnd();
    glFlush();

此时,做出来的效果是这样的:
但是也只是一个近似的形状而已,感觉不是很满意
又想到了之前学的颜色混合,可以用渐进色来让图形看起来好看一点。

glBegin(GL_LINE_STRIP);                
            glColor3f(1, 0.6f, 0.07f);            
            glVertex2d(x, y);    
            glColor3f(0.8901f, 0.0901f, 0.05f);
            glVertex2d(x, (Lheight + y) / 2);
            glColor3f(1, 0, 0);                        
            glVertex2d(x, Lheight);
            glEnd();        

这一段代码是写在for循环里面的,为了让颜色更丰富,所以选择了三层渐进:

看起来好像有一点太阳光晕内味儿了,其实我还不是很满意,毕竟用图元填充感觉还是比较初级。
后续会开始绘制云彩。希望可以赶快进阶,开始我最想学的渲染,加油!

你可能感兴趣的:(c++)