Axiom3D:数据绑定基本流程
2014-03-06 21:00
239 查看
在前面我们学习OpenGL时,不管绘制如球,立方体,平面,地面,动画模型中最常用的几个操作有创建缓冲区,写入缓冲区.在Axiom中,相关的操作被整合与组织到VertexData,IndexData中,所以在后面,我们会看到Axiom里元素如果要绘画在屏幕上的元素,几乎都会包含这二个类的实体.
在看相关介绍前,我们先看下如下关系图:
createPlane
在看相关介绍前,我们先看下如下关系图:
/// <summary> /// Creates a plane as a submesh of the given mesh /// </summary> [OgreVersion( 1, 7, 2 )] private static void _createPlane( Mesh mesh ) { var sub = mesh.CreateSubMesh(); var vertices = new float[32] { -100, -100, 0, // pos 0, 0, 1, // normal 0, 1, // texcoord 100, -100, 0, 0, 0, 1, 1, 1, 100, 100, 0, 0, 0, 1, 1, 0, -100, 100, 0, 0, 0, 1, 0, 0 }; mesh.SharedVertexData = new VertexData(); mesh.SharedVertexData.vertexCount = 4; var decl = mesh.SharedVertexData.vertexDeclaration; var binding = mesh.SharedVertexData.vertexBufferBinding; var offset = 0; decl.AddElement( 0, offset, VertexElementType.Float3, VertexElementSemantic.Position ); offset += VertexElement.GetTypeSize( VertexElementType.Float3 ); decl.AddElement( 0, offset, VertexElementType.Float3, VertexElementSemantic.Normal ); offset += VertexElement.GetTypeSize( VertexElementType.Float3 ); decl.AddElement( 0, offset, VertexElementType.Float2, VertexElementSemantic.TexCoords, 0 ); offset += VertexElement.GetTypeSize( VertexElementType.Float2 ); var vbuf = HardwareBufferManager.Instance.CreateVertexBuffer( decl, 4, BufferUsage.StaticWriteOnly ); binding.SetBinding( 0, vbuf ); vbuf.WriteData( 0, vbuf.Size, vertices, true ); sub.useSharedVertices = true; var ibuf = HardwareBufferManager.Instance.CreateIndexBuffer( IndexType.Size16, 6, BufferUsage.StaticWriteOnly ); var faces = new short[6] { 0, 1, 2, 0, 2, 3 }; sub.IndexData.indexBuffer = ibuf; sub.IndexData.indexCount = 6; sub.IndexData.indexStart = 0; ibuf.WriteData( 0, ibuf.Size, faces, true ); mesh.BoundingBox = new AxisAlignedBox( new Vector3( -100, -100, 0 ), new Vector3( 100, 100, 0 ) ); mesh.BoundingSphereRadius = Utility.Sqrt( 100*100 + 100*100 ); }
createPlane
相关文章推荐
- DBUtils框架(自定义)
- cocos2d-x 街机摇杆 实现
- UVa 10577 Bounding box (直线交点&正多边形中心)
- Delphi 判断时间是否合法 -IsValidDateTime、IsValidDate、IsValidTime、IsValidDateDay
- 基于动态库的C++插件开发模型
- 初学SSH框架所需注意的基本点
- 【原创】第一次写博客
- 推荐一个好的博客下载工具
- 【原创】第一次写博客
- gtk+-3.0- install
- HTTP返回码总结
- poj 1860 Currency Exchange (Bellman_ford 算法)
- ios UINavigationController
- 九度 1521:二叉树的镜像
- 如何修改mysql数据库中的密码
- Spring面试题
- 补充说明:关于Beaglebone black上debian无图形界面的问题及QT的窗口示例
- 数据库 元数据的 api 学习
- 黑马程序员_正则表达式
- 使用MAVEN请注意,MAVEN不支持最新版jdk1.7