OpenGL 画荷花

来源:互联网 发布:淘宝买家地域分析 编辑:程序博客网 时间:2024/04/29 14:53

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


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


demo下载


一 画荷花花瓣


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



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

球面参数方程

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

 球坐标

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

这里写图片描述

球面法向量

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

这里写图片描述

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的小的变形的方格组成.



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


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



demo下载地址

2 0
原创粉丝点击