OpenGL 画荷花

本文参考 基于OpenGL的荷花开放过程模拟_刘金定 (这是百度文库的链接,读者可自己搜索)


我们在这里会实现简单的OpenGL画莲花过程,并实现简单的莲花绽放过程,对学习OpenGL和3D数学有着极大的帮助.


demo下载


一 画荷花花瓣


荷花是由一片一片的花瓣组成的,我们这里首先绘制一片花瓣,这里类似于3ds max 做出来的模型.

OpenGL 画荷花_第1张图片


我们先来补习一下数学方面的知识,引自OpenGL绘制球体

球面参数方程

球面的参数曲线可以用球坐标表示,引入参数u,v,其中v是球面点与原点的连线与z轴正向的夹角,u表示连线在xy平面的投影与x轴正向的夹角,如下图所示:

 OpenGL 画荷花_第2张图片

则球面参数方程可以表示为:

这里写图片描述

球面法向量

已知球面的参数方程以后,很容易求得给定点的法向量,分别对u和v方向求偏导数,然后对两个所得向量进行叉积即可: 

OpenGL 画荷花_第3张图片

	for(float i=0;i<8;i++){
		glBegin(GL_QUAD_STRIP);
		for(float j=0;j<16;j++){
			glColor3f(sinf(3.1416f/2.0f-3.1416f/36.0f*j)+(sinf(3.1416f/144.0f*i)),
				0.0f,
				cosf(3.1416f/2.0f-3.1416f/12.0f*j));//颜色
			glVertex3f(sinf(PI*j)*cosf(PI*i),
						cosf(PI*j),
						sinf(PI*j)*sinf(PI*i));//顶点
						

			glColor3f(sinf(3.1416f/2.0f-3.1416f/36.0f*j)+(sinf(3.1416f/144.0f*i)),
				0.0f,
				cosf(3.1416f/2.0f-3.1416f/12.0f*j));//颜色

			glVertex3f(sinf(PI*j)*cosf(PI*(i+1)),
						cosf(PI*j),
						sinf(PI*j)*sinf(PI*(i+1))
						
						);//顶点


			
		}glEnd();
		}



这是表示花瓣是由8*16的小的变形的方格组成.

OpenGL 画荷花_第4张图片


我们再对这个花瓣进行环绕循环.形成八瓣的花朵.接着再在里面画上一朵小花,用glScalef(0.6,0.7,0.6)来对里面花瓣进行缩小.

OpenGL 画荷花_第5张图片

这里还没有开放的花朵,定义了一个OnTimer函数,点击 菜单开始 实现花朵的自动开放.

OpenGL 画荷花_第6张图片


demo下载地址

你可能感兴趣的:(OpenGL 画荷花)