基于DirectX9.0重力坝三维体型设计(一)挡水坝段2

来源:互联网 发布:mac windows 隐藏文件 编辑:程序博客网 时间:2024/05/17 08:53

前记:

自从上次写完之后已经好久没有写文章了,主要是在三维图形的开发遇到了一些棘手的问题一时总是想不通。在此期间,查阅了一些资料看了一些关于计算机图形学的书,虽然是走马观花的看了一遍,但终归对计算机图形学有了初步的了解,也算是一种进步吧!虽然自己的迷惑没有解开,但是在三维开发的路上又走了一小步,师兄说后面的路还很惨任重道远啊!这次实际上没有技术上的突破,只是有些学习中的问题,记录一下,也算跟我一样初步学习的同学一些参考吧!

 


首先,展示一下最近的成果如下图所示:

 

      这次的三维坝体的效果明显比上次有了一些进步,而且实现了参数化的控制,不过目前坝体还只是一个基本体型,距离实际还差很远(其中也是自己比较迷茫的地方)

先说效果的变化,这次主要是采用了灯光,而且体型参数也经过优化更接近实际(假如使坝体看上去更加真实,可以添加纹理映射)。现在就列举一下在开发过程中遇到的一些问题。

(1)顶点法线设置

      顶点法线的设置是为了辨别顶点和光线的夹角,实现灯光效果。每个不同的面上的顶点法线都不相同,所以在设置顶点法线时应该以面为单位(4个顶点)计算面的法线方向(原理就是根据向量的叉乘)。顶点法线的计算函数如下:

 

图中的过渡效果其实是一个错误,不过看起来效果还蛮不错,也就这样了。原因是面上的两个顶点法线设置了一个错误方向。

(2)灯光设置

        在灯光设置过程中一般都会设置两个光源,比如说本人设置了两个不同方向的平行光,此处一定要注意平行光属性中的Direction是光的照射方向,而且两个光源的照射方向最好成一个90°夹角。代码如下:

 

(3)材质设置

        材质设置的目的是为了反射光,假如不设置材质的话物体是黑色的。在材质中有两个属性 一个是Diffuse(物体的漫反射),一个是Ambient(物体反射的环境光),这两个最好设置同一种颜色,大家可以自己尝试一下。材质设置同样封装到一个函数中,代码如下:

 

 


后记:这次就到这里,文中有什么错误之处,或是大家有好的想法,可以发邮件和我交流。本人邮箱:zhiyuanhou@126.com

 

 

原创粉丝点击