【学习笔记】3D图形核心基础精炼版-6:stage3D实战-顶点

来源:互联网 发布:java中怎么定义数组 编辑:程序博客网 时间:2024/05/17 23:22

顶点

  这里说的顶点实际上包括组成物体的所有点、贴图UV坐标信息、该点的法线信息、该点的颜色信息等。

var vbV:Vector.<Number> = Vector.<Number>([      // X  Y Z U V   R   G   B A-1, 1,0,0,0,0.1,0.1,0.1,1, // 左上角的点 1, 1,0,1,0,0.1,0.1,0.1,1, // 右上角的点 1,-1,0,1,1,0.1,0.1,0.1,1, // 右下角的点-1,-1,0,0,1,0.1,0.1,0.1,1  // 左下角的点]);
                vb = context3D.createVertexBuffer(vbV.length/9,9); // 这里的9表示一个顶点含有的9个Number信息
                vb.uploadFromVector(vbV,0,vbV.length/9); // 上传,不上传以后就无法使用这个vb(VertexBuffer3D)

   上面的环节不用再每次渲染都上传一下,只要vb建立好了,以后每次渲染的时候直接用即可。而这个XYZUVRGBA这个具体用于干什么以及顺序什么也可以自己定,就像你存一个数据到数组中,你取的时候按照你存的顺序来读取使用一个道理,当然操作它的时候就是在shader语言里面进行操作了。可以先稍微渲染时画家context3D的处理:


context3D.clear(); // 清除绘制context3D.setVertexBufferAt(0,Actor.vb,0,Context3DVertexBufferFormat.FLOAT_3); // xyz 代码中可使用va0context3D.setVertexBufferAt(2,Actor.vb,5,Context3DVertexBufferFormat.FLOAT_4); // rgba 代码中可使用va2context3D.setProgram(program1); // 该次绘制使用program1代码来绘制 context3D.drawTriangles(ib,0); // 绘制,物体的索引ib

  再看看AGAL里program1的代码:

// VERTEX着色语言"m44 op va0 vc0 \n" + // 输出顶点 = 该物体的原始顶点 * 该物体的最终矩阵"mov v1 va2\n"+ // 将顶点的颜色信息传输到中转站,方便FRAGMENT着色语言用// FRAGMENT着色语言"mov oc v1 \n" + // 输出颜色,每个顶点不是都有颜色么

当然到这里都不是完整的代码,都是片段,我们只是从片段中理解概念,后面才会有具体完整的代码。

0 0
原创粉丝点击