前记:
自从上次写完之后已经好久没有写文章了,主要是在三维图形的开发遇到了一些棘手的问题一时总是想不通。在此期间,查阅了一些资料看了一些关于计算机图形学的书,虽然是走马观花的看了一遍,但终归对计算机图形学有了初步的了解,也算是一种进步吧!虽然自己的迷惑没有解开,但是在三维开发的路上又走了一小步,师兄说后面的路还很惨任重道远啊!这次实际上没有技术上的突破,只是有些学习中的问题,记录一下,也算跟我一样初步学习的同学一些参考吧!
首先,展示一下最近的成果如下图所示:
这次的三维坝体的效果明显比上次有了一些进步,而且实现了参数化的控制,不过目前坝体还只是一个基本体型,距离实际还差很远(其中也是自己比较迷茫的地方)
先说效果的变化,这次主要是采用了灯光,而且体型参数也经过优化更接近实际(假如使坝体看上去更加真实,可以添加纹理映射)。现在就列举一下在开发过程中遇到的一些问题。
(1)顶点法线设置
顶点法线的设置是为了辨别顶点和光线的夹角,实现灯光效果。每个不同的面上的顶点法线都不相同,所以在设置顶点法线时应该以面为单位(4个顶点)计算面的法线方向(原理就是根据向量的叉乘)。顶点法线的计算函数如下:
图中的过渡效果其实是一个错误,不过看起来效果还蛮不错,也就这样了。原因是面上的两个顶点法线设置了一个错误方向。
(2)灯光设置
在灯光设置过程中一般都会设置两个光源,比如说本人设置了两个不同方向的平行光,此处一定要注意平行光属性中的Direction是光的照射方向,而且两个光源的照射方向最好成一个90°夹角。代码如下:
(3)材质设置
材质设置的目的是为了反射光,假如不设置材质的话物体是黑色的。在材质中有两个属性 一个是Diffuse(物体的漫反射),一个是Ambient(物体反射的环境光),这两个最好设置同一种颜色,大家可以自己尝试一下。材质设置同样封装到一个函数中,代码如下:
后记:这次就到这里,文中有什么错误之处,或是大家有好的想法,可以发邮件和我交流。本人邮箱:zhiyuanhou@126.com