根据平面上的顶点生成三维建筑物,并且贴图的技术方案

淺唱寂寞╮ 提交于 2020-02-26 02:45:17

    不久前在项目中碰到一个问题,实时的在XZ平面上产生一系列顶点,并且是一个闭环,用于表示建筑物。我需要渲染一个有高度的建筑物,还需要带有纹理。

     一. 首先根据顶点生成三角形,构成物体,构成物体分两步:物体的墙壁和屋顶。

     1. 墙壁的生成策略如下:根据相邻的两个顶点,深克隆它们,并且这两个克隆的顶点在Y轴上位移一段距离(这个距离就是建筑物的高度),这样就有了四点顶点,通过这四个顶点生成一个平面(注意两个三角形顶点的顺序都是逆时针)。

     2. 屋顶的生成策略如下:根据墙壁生成时的克隆顶点,查找出X最大值和最小值,以及Z的最大和最小值,然后根据这些最大最小值计算出X轴和Z轴的中心点。然后每两个相邻的克隆顶点和中心点,构成一个三角形。

     二. 到这里建筑物已经生成完毕,但是不能放松,因为还有很棘手的一步:给建筑物贴图。给建筑物贴图我用到了两个纹理,一个用于墙壁,一个用于屋顶。

     (1). 墙壁纹理坐标的生成策略如下:

       1.  将纹理uv坐标在u轴上分割为很多片段,piece = 1 /(XZ轴上顶点数量-1)

       2. 为墙壁上的每个三角形生成纹理坐标,在XZ平面上每个顶点uv坐标的u值比前一个顶点的u值加上piece(第一个顶点的u值为0), v值一直为0;克隆出的每个顶点的纹理u值也比前一个顶点的u值加上piece, v值一直为1

    (2). 屋顶纹理坐标的生成策略如下:

      1. 保存在前面得到的屋顶在X轴的最大最小值和Z轴的最大最小值,并且分别计算出最大值和最小值之间的距离,分别记为distaceX, distanceZ

      2. 每一个顶点的纹理坐标u值 = (每一个顶点的X - 最小的X值)/distanceX

      3. 每一个顶点的纹理坐标v值 = (每一个顶点的Z - 最小的Z值)/distanceZ

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!