登录 注册
当前位置:主页 > 资源下载 > 34 > 每顶点光照计算与每片元计算的对照表 - PT100换算

每顶点光照计算与每片元计算的对照表 - PT100换算

  • 更新:2024-09-04 18:56:32
  • 大小:20.23MB
  • 推荐:★★★★★
  • 来源:网友上传分享
  • 类别:图像处理 - 音视频
  • 格式:PDF

资源介绍

6.5 光照的每顶点计算与每片元计算 22 1,0,0, 1,0,0, 1,0,0, 1,0,0, 1,0,0, 1,0,0, //右面上 6 个顶点的法向量 23 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, 0,1,0, //上面上 6 个顶点的法向量 24 0,-1,0, 0,-1,0, 0,-1,0, 0,-1,0, 0,-1,0, 0,-1,0, //下面上6个顶点的法向量 25 }; 26 ByteBuffer nbb = ByteBuffer.allocateDirect(normals.length*4); //创建绘制顶点法向量缓冲 27 nbb.order(ByteOrder.nativeOrder()); //设置字节顺序 28 mNormalBuffer = nbb.asFloatBuffer(); //转换为 float 型缓冲 29 mNormalBuffer.put(normals); //向缓冲区中放入顶点法向量数据 30 mNormalBuffer.position(0); //设置缓冲区起始位置 31 }  第 3-17 行为立方体各顶点位置数据的初始化。  第 18-30 行为立方体各顶点法向量数据的初始化,其中给每个顶点设置了其所属面的法向量。 (2)接着介绍采用点法向量策略的案例 Sample6_8 中初始化立方体顶点及法向量数据的 initVertexData 方法,其代码如下。 代码位置:见随书中源代码/第 6 章/Sample6_8/src/com/bn/Sample6_8 目录下的 Cube.java。 1 public void initVertexData() { //初始化顶点数据的方法 2 vCount = 6 * 6; //顶点数 3 float vertices[] = new float[] { 4 ……//此处省略了初始化立方体 6 个面各个顶点坐标数据的代码 5 ……//需要的读者请自行查看随书中的源代码 6 }; 7 ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4); //创建顶点坐标数据缓冲 8 vbb.order(ByteOrder.nativeOrder()); //设置字节顺序 9 mVertexBuffer = vbb.asFloatBuffer(); //转换为 float 型缓冲 10 mVertexBuffer.put(vertices); //向缓冲区中放入顶点坐标数据 11 mVertexBuffer.position(0); //设置缓冲区起始位置 12 float normals[] = vertices; //顶点法向量数据 13 ByteBuffer nbb = ByteBuffer.allocateDirect(normals.length * 4); //创建绘制顶点法向量缓冲 14 nbb.order(ByteOrder.nativeOrder()); //设置字节顺序 15 mNormalBuffer = nbb.asFloatBuffer(); //转换为 float 型缓冲 16 mNormalBuffer.put(normals); //向缓冲区中放入顶点法向量数据 17 mNormalBuffer.position(0); //设置缓冲区起始位置 18 } 提示 由于本案例中原始情况下将立方体的几何中心放在了坐标原点,因此,每个顶 点的平均法向量就没有必要真正进行求和再平均的计算了,直接采用顶点的 x、y、z 坐标代替即可。但开发中并不总是像本章的案例一样可以进行简化,后面的章节会 给出需要详细计算的案例。 6.5 光照的每顶点计算与每片元计算 细心的读者会发现,本章前面的案例都是在顶点着色器中进行光照计算的。这是由于在顶点 着色器中对每个顶点进行光照计算后得到顶点的最终光照强度,再由管线插值后传入片元着色器 以计算片元的颜色,这样一方面效率比较高,另一方面产生的光照效果也不错。 但由于这种计算方式插值的是基于顶点计算后的光照强度,因此在要求很高,希望有非常细 腻光照效果的场合下就略显粗糙了。本节将介绍另一种光照计算方式,其首先将插值后的法向量 数据传入片元着色器,然后在片元着色器中进行光照计算。这种新的方式也称为每片元光照,可 以取得为更细腻的光照效果。 进行案例开发之前,需要首先了解一下本节两个案例(Sample6_9 和 Sample6_10)的运行效 果,具体情况如图 6-21 所示。