从今天开始,准备在这个网站写笔记来记录每次的图形学学习的收获和遇到的坑,也欢迎大家的指正和批评。
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循环里面的,为了让颜色更丰富,所以选择了三层渐进:
看起来好像有一点太阳光晕内味儿了,其实我还不是很满意,毕竟用图元填充感觉还是比较初级。
后续会开始绘制云彩。希望可以赶快进阶,开始我最想学的渲染,加油!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。