您的位置:首页 > 其它

Axiom3D:数据绑定基本流程

2014-03-06 21:00 239 查看
在前面我们学习OpenGL时,不管绘制如球,立方体,平面,地面,动画模型中最常用的几个操作有创建缓冲区,写入缓冲区.在Axiom中,相关的操作被整合与组织到VertexData,IndexData中,所以在后面,我们会看到Axiom里元素如果要绘画在屏幕上的元素,几乎都会包含这二个类的实体.

在看相关介绍前,我们先看下如下关系图:

/// <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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: