|
|
发表于 2006-12-16 11:12:00
|
显示全部楼层
Re:怎么现在VB区越来越冷清了啊?
'读取顶点数据
Dim tMesh As D3DXMesh
Dim datas As New CDataPool
Set tMesh = g_Mesh.CloneMeshFVF(D3DXMESH_MANAGED, CUSTOM_VERTEX_FVF, g_Dev)
Dim i As Long
Dim VertexsBufs() As TCustomVertex
ReDim VertexsBufs(tMesh.GetNumVertices - 1)
Debug.Print "顶点数:"; tMesh.GetNumVertices, "三角形数:", tMesh.GetNumFaces
datas.AddLong tMesh.GetNumVertices
datas.AddLong tMesh.GetNumFaces
Dim tVertexsBuf As Direct3DVertexBuffer8
Dim tIndexBuf As Direct3DIndexBuffer8
Dim lp_buf As Long
Dim lp_index_buf As Long
Dim lp_SafeArray As Long
Set tIndexBuf = tMesh.GetIndexBuffer
Set tVertexsBuf = tMesh.GetVertexBuffer
'Lock返回lp_buf为一个指向顶点数据的指针的指针
tVertexsBuf.Lock 0, 0, lp_buf, D3DLOCK_READONLY
'首先得到安全数组的指针
CopyMemory lp_SafeArray, ByVal VarPtrArray(VertexsBufs), 4
'修改安全数组的数据指针使其指向锁定的顶点数据
CopyMemory ByVal (lp_SafeArray + 12), lp_buf, 4
For i = 0 To tMesh.GetNumVertices - 1
With VertexsBufs(i)
'Debug.Print .x; ","; .y; ","; .z, , .tu, .tv, .color
datas.AddFloat .x
datas.AddFloat .y
datas.AddFloat .z
datas.AddFloat .tu
datas.AddFloat .tv
datas.AddLong .color
End With
Next
tVertexsBuf.Unlock
'索引顶点数据
Dim IndexBufs() As Integer
ReDim IndexBufs(tMesh.GetNumFaces * 3 - 1)
tIndexBuf.Lock 0, 0, lp_index_buf, D3DLOCK_READONLY
CopyMemory lp_SafeArray, ByVal VarPtrArray(IndexBufs), 4
CopyMemory ByVal (lp_SafeArray + 12), lp_index_buf, 4
For i = 0 To tMesh.GetNumFaces - 1
'一次读取一个三角形
'Debug.Print IndexBufs(i * 3), IndexBufs(i * 3 + 1), IndexBufs(i * 3 + 2)
datas.AddLong IndexBufs(i * 3)
datas.AddLong IndexBufs(i * 3 + 1)
datas.AddLong IndexBufs(i * 3 + 2)
Next
tIndexBuf.Unlock
Dim bytes() As Byte
datas.GetBytes bytes
Open "C:\test.dat" For Binary As #1
Put #1, , bytes
Close #1 |
|