游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1771|回复: 2

DirectX网格用DWORD锁定索引缓存后,会导致属性缓存中对面

[复制链接]

7

主题

41

帖子

61

积分

注册会员

Rank: 2

积分
61
发表于 2009-11-27 11:50:00 | 显示全部楼层 |阅读模式
以下是锁定索引:
          DWORD * i=0;
_mesh->LockIndexBuffer(0,(void**)&i);
// fill in the front face index data
i[0] = 0; i[1] = 1; i[2] = 2;
i[3] = 0; i[4] = 2; i[5] = 3;

// fill in the back face index data
i[6] = 4; i[7]  = 5; i[8]  = 6;
i[9] = 4; i[10] = 6; i[11] = 7;

// fill in the top face index data
i[12] = 8; i[13] =  9; i[14] = 10;
i[15] = 8; i[16] = 10; i[17] = 11;

// fill in the bottom face index data
i[18] = 12; i[19] = 13; i[20] = 14;
i[21] = 12; i[22] = 14; i[23] = 15;

// fill in the left face index data
i[24] = 16; i[25] = 17; i[26] = 18;
i[27] = 16; i[28] = 18; i[29] = 19;

// fill in the right face index data
i[30] = 20; i[31] = 21; i[32] = 22;
i[33] = 20; i[34] = 22; i[35] = 23;
_mesh->UnlockIndexBuffer();

然后属性:
DWORD* a=0;
_mesh->LockAttributeBuffer(0,&a);
for(int i=0,j=0;i <12;i+=2)
{
a=j;
a[i+1]=j;
j++;
}
_mesh->UnlockAttributeBuffer();

然后调试里看属性信息,居然这样,汗了:


AttribId         0
FaceStart  0
FaceCount         2
VertexStart 0
VertexCount 3

AttribId           1
FaceStart           2
FaceCount          2
VertexStart 3
VertexCount 3

AttribId           2
FaceStart          4
FaceCount          2
VertexStart 6
VertexCount 4

AttribId           3
FaceStart          6
FaceCount          2
VertexStart 10
VertexCount 4


第一二个属性有误,其顶点个数应为四,后面都正常。可我实在没想通,,,就一个DWORD型指针,一个WORD型指针,还是强制转换后的指,,,怎么会出现这种离谱的错误?高人帮忙啊~~~~~~!!!

14

主题

345

帖子

376

积分

中级会员

Rank: 3Rank: 3

积分
376
QQ
发表于 2009-11-28 13:12:00 | 显示全部楼层

Re:DirectX网格用DWORD锁定索引缓存后,会导致属性缓存中对

你用的是16位的index buffer吧

7

主题

41

帖子

61

积分

注册会员

Rank: 2

积分
61
 楼主| 发表于 2009-11-28 16:14:00 | 显示全部楼层

Re:DirectX网格用DWORD锁定索引缓存后,会导致属性缓存中对

恩,确实是16位索引,可既然DWORD是32位的,那应该对于每个属性集都该多4个顶点才是啊,怎么前两个都只有三个顶点,而后面几个又正常呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-17 21:47

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表