如何在VC++中用OpenGL绘制NURBS曲线曲面

如何在VC++中用OpenGL绘制NURBS曲线曲面,第1张

基本几何图元是OpenGL进行建模的最基本的方法,但其对较复杂真实物体的建模则比较困难。对于这些复杂物体的建模,需要用到OpenGL基本库和功能库函数(gl库和glu库)以对图元进行扩展并完成法向计算、曲线生成和曲面构造等内容。这种对基本图元的扩展实际也就是对点、线及多边形的扩展。OpenGL中定义的点可具有不同大小的尺寸,其扩展的函数形式为:

void glPointSize(GLfloat size)

其参数size以象素为单位设置了点的宽度,其值必须为正,缺省值1.0。对于线的扩展,可通过下面的函数来分别指定其宽度和绘制类型:

void glLineWidth(GLfloat width)

void glLineStipple(GLint factor,GLushort pattern)

glLineWidth()的参数width以象素为单位指定线宽,其值必须为正,缺省值为1.0。glLineStipple()的参数factor为对模式进行拉伸的比例因子,参数pattern指定了线的模式(例如11001100将绘制一条虚线,为1时绘制,为0时不绘制)。该函数只有在启用了函数glEnable(GL_LINE_STIPPLE)后才可以使用,当不再使用时调用glDisable(GL_LINE_STIPPLE)将其关闭。扩展多边形的绘制模式包括全填充式、轮廓点式、轮廓线式及图案填充式等几种。使用时,首先调用glPolygonMode()设置多边形的模式设置:

void glPolygonMode(GLenum face,GLenum mode)

 

参数face为GL_FRONT、GL_BACK或GL_FRONT_AND BACK;mode取值可以是GL_POINT、GL_LINE或GL_FILL,分别表示多边型的轮廓点、轮廓线和填充模式的绘制方式。缺省设置为填充模式。设置完成后可进行图案填充的设置:

void glPolygonStipple(const GLubyte *mask)

其参数mask必须为一指向32×32大小的位图的指针,值为1时绘制、为0不绘制。该函数的使用同样也需要进行如下启动、关闭设置:

glEnable(GL_POLYGON-STIPPLE)

glDisable(GL_POLYGON_STIPPLE)

复杂模型的建模不同与简单模型的建模,在简单模型中一个平面上各点的法向(mormal vector)是一样的,均等于此平面的法向。对于复杂模型中由众多小的平面多边形逼近而成的曲面,其每个顶点的法向量都不一样,因此曲面上每个点的法向计算结果根据采取的不同算法而有不同的结果。OpenGL只提供赋予当前顶点法向量的函数,而不提供对法向量计算的方法,法向量的计算需要由开发者来完成。下面给出一种简单的计算方法:

void getNormal(GLfloat gx[3],GLfloat gy[3],GLfloat gz[3],GLfloat *ddnv)

{

 GLfloat w0,w1,w2,v0,v1,v2,nr,nx,ny,nz

 w0=gx[0]-gx[1]

 w1=gy[0]-gy[1]

 w2=gz[0]-gz[1]

 v0=gx[2]-gx[1]

 v1=gy[2]-gy[1]

 v2=gz[2]-gz[1]

 nx=(w1*v2-w2*v1)

 ny=(w2*v0-w0*v2)

 nz=(w0*v1-w1*v0)

 nr=sqrt(nx*nx+ny*ny+nz*nz)

 ddnv[0]=nx/nr

 ddnv[1]=ny/nr

 ddnv[2]=nz/nr

}

其参数gx[3],gy[3]和gz[3]为逼近曲面的一个三角形的三个顶点P0,P1和P2。通过计算矢量P0-P1与矢量P2-P1的叉乘而得到其平面法向量,并在归一化后保存到由参数ddnv所指向的数组中。至于顶点法向的计算则多是取邻近平面法向量的均值。OpenGL提供的法向定义函数为:

void glNormal3{bsifd}(TYPE nx,TYPE ny,TYPE nz)

void glNormal3{bsifd}v(const TYPE *v)

直接输入命令meshtonurb,这样网格里每一个长方形都成了一个单独的曲面,然后整个网格变成一个多重曲面。但是它的几何特性和原先没有什么差别。如果题主想做成平滑连续的单独nurb曲面,可以把此多重曲面炸开再复制边框并以此嵌面。

Rhino3D NURBS(Non-Uniform Rational B-Spline) 非均匀有理B样条曲线。是一个功能强大的高级建模软件;也是三维专家们所说的——犀牛软件。Rhino是由美国Robert McNeel公司于1998年推出的一款基于NURBS为主三维建模软件。

行业应用

Rhino早些年一直应用在工业设计专业,擅长于产品外观造型建模,但随着程序相关插件的开发,应用范围越来越广,Rhino配合grasshopper参数化建模插件,可以快速做出各种优美曲面的建筑造型,其简单的 *** 作方法、可视化的 *** 作界面深受广大设计师的欢迎。

相关插件

1、各行业的专业插件:建筑插件EasySite、机械插件Alibre Design、珠宝首饰插件TechGems(其它有:Jewelerscad、RhinoGold 、Rhinojewel、Matrix 6 for Rhino 、Smart3d StoneSetting)。

2、网格建模插件:T-Spline。

3、渲染插件:Keyshot、Flamingo(火烈鸟)、Penguin(企鹅)、V-Ray 和Brazil(巴西)等等(更多插件待更新)。

4、动画插件:Bongo(羚羊)、RhinoAssembly等。

5、参数及限制修改插件: RhinoDirect。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7972843.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存