2017-05-16 10:53

 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明,否则将追究法律责任。https://blog.kokojia.com/game/b-54.html

3D游戏世界中的所有物体都是由顶点组成的,三个顶点就可以组成一个面,也就是一个三角形,程序通过绘制这些由顶点组成的三角形面,就有了我们见到的模型,如下图:

从上图中可以看出组成模型的最大单位是三角形,通过把顶点连线就可以组成三角形,最后再根据UV坐标就可以给物体贴上图,这节我们就要介绍如何来绘制物体上的三角形。

首先我们需要顶点数组,也叫做顶点缓冲,这个数组里面放的都是物体身上的顶点。每个顶点都有它的数组,比如坐标,UV坐标,颜色,法线等等。所以每个顶点都是一个复杂的数据结构。学过C++的同学可以直接理解为结构体。

比如一个只带有坐标的顶点结构体

struct vectex

{

  float x, y;//顶点的坐标

}


我们来看下图中的这个方块,他由两个三角形,拥有四个点,通过上面的结构体我们可以给这四个点坐标赋值,这四个点的坐标都是-1到1之间。

vectex arr[4] = {{-1,-1}, {-1,1},{1,1},{,1,-1} };1494901382545396.png

赋值后,这些点在数组中就有了下标,比如,右下角的点在数组中下标是3

然而,绘图系统不直接拿这些顶点绘制,而是通过一个叫做索引缓冲的东西来绘制,索引其实就是顶点的下标,我们通过顶点的下标来指定将哪三个点组成三角形进行绘制,只是组合的时候要按照顺时针的方向排列。

然后把这些索引保存到一个数组中,这个数组就叫组索引数组,也就是索引缓冲。现在我们来建立一个索引缓冲绘制上图的方块,因为有两个三角形需要有六个索引。

int index[6] = {0,1,2,3,0,2};

上面这个就是索引缓冲,数组里面每个数字都是上面顶点数组中顶点的下标,0代表顶点数组中下标为0的那个顶点。所以0,1,2这三个下标代表的顶点将会被绘制成一个三角形,3,0,2这三个下标代表的顶点将会被绘制成一个三角形,只要这些顶点的顺序是顺时针就可以。其实这样写也很绘制出方块int index[6] = {0,1,3,3,1,2};大家想想是不是?

索引缓冲的作用就是告诉绘图系统,将哪三个顶点组合起来进行绘制三角形。



欢迎关注游戏开发者微信公众号1496659065165724.png





 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明,否则将追究法律责任。https://blog.kokojia.com/game/b-54.html

评论