|
|
我在空间中画了100*10*10个立方体,坐标构造如下(使用索引方式):
CUSTOMVERTEX vertices[8*num1*num2*num3];
for (int i=0; i<num1; i++)
for (int j=0; j<num2; j++)
for (int k=0; k<num3; k++)
{
CUSTOMVERTEX verticesT[] = //FVF顶点数据
{
{ 0.0f+i*2, 1.0f+j*2, 0.0f+k*2, D3DCOLOR_XRGB(0,255,0) }, //点A,绿色
{ 1.0f+i*2, 1.0f+j*2, 0.0f+k*2, D3DCOLOR_XRGB(255,0,0) }, //点B,红色
{ 1.0f+i*2, 1.0f+j*2, 1.0f+k*2, D3DCOLOR_XRGB(0,255,255) }, //点C,浅蓝
{ 0.0f+i*2, 1.0f+j*2, 1.0f+k*2, D3DCOLOR_XRGB(255,0,255) }, //点D,粉红
{ 0.0f+i*2, 0.0f+j*2, 0.0f+k*2, D3DCOLOR_XRGB(0,255,0) }, //点A,绿色
{ 1.0f+i*2, 0.0f+j*2, 0.0f+k*2, D3DCOLOR_XRGB(255,0,0) }, //点B,红色
{ 1.0f+i*2, 0.0f+j*2, 1.0f+k*2, D3DCOLOR_XRGB(0,255,255) }, //点C,浅蓝
{ 0.0f+i*2, 0.0f+j*2, 1.0f+k*2, D3DCOLOR_XRGB(255,0,255) } //点D,粉红
};
memcpy(vertices+(i*num2*num3+j*num3+k)*8, verticesT, sizeof(verticesT));
};
WORD indices[36*num1*num2*num3];
for (int i=0; i<num1*num2*num3; i++)
{
int j = i*8;
WORD indicesT[] = { 0+j, 3+j, 1+j, 1+j, 3+j, 2+j,
1+j, 2+j, 5+j, 5+j, 2+j, 6+j,
0+j, 1+j, 4+j, 4+j, 1+j, 5+j,
3+j, 0+j, 4+j, 3+j, 4+j, 7+j,
2+j, 3+j, 6+j, 6+j, 3+j, 7+j,
4+j, 5+j, 7+j, 5+j, 6+j, 7+j
}; //索引序列
memcpy(indices+i*36, indicesT, sizeof(indicesT));
}
//创建顶点缓存区,并获取接口IDirect3DVertexBuffer9的指针
m_pDevice->CreateVertexBuffer(
sizeof(vertices), //缓存区尺寸
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &m_pVB, NULL );
//把顶点数据填入顶点缓存区
void* pVertices;
m_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 );
memcpy( pVertices, vertices, sizeof(vertices) );
m_pVB->Unlock();
//创建索引缓存区,并获取接口LPDIRECT3DINDEXBUFFER9的指针
m_pDevice->CreateIndexBuffer(
sizeof(indices), //缓存区尺寸
0, D3DFMT_INDEX16, //使用16 bit的索引值
D3DPOOL_DEFAULT, &m_pIB, NULL );
//把索引值填入索引缓存区
void *pIndices;
m_pIB->Lock( 0, sizeof(indices), (void**)&pIndices, 0 );
memcpy( pIndices, indices, sizeof(indices) );
m_pIB->Unlock();
然后设置Y轴旋转,和其他的变换,代码如下:
float angle = m_nRotateY * D3DX_PI / 180; //把旋转角换算成弧度
D3DXMATRIX matWorld;
//计算世界变换矩阵
: 3DXMatrixRotationY( &matWorld, angle );
//把世界变换矩阵设置到渲染环境
m_pDevice->SetTransform( D3DTS_WORLD, &matWorld );
D3DXVECTOR3 eye( 50.0f, 50.0f, 50.0f ); //观察点
D3DXVECTOR3 lookat( 0.0f, 0.0f, 0.0f ); //视线目标点
D3DXVECTOR3 up( 0.0f, 1.0f, 0.0f ); //上方向
D3DXMATRIX matView;
//计算视角变换矩阵
::D3DXMatrixLookAtLH( &matView, &eye, &lookat, &up );
//把视角变换矩阵设置到渲染环境
m_pDevice->SetTransform( D3DTS_VIEW, &matView );
D3DXMATRIXA16 matProj;
//计算透视投影变换矩阵
::D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
//把投影变换矩阵设置到渲染环境
m_pDevice->SetTransform( D3DTS_PROJECTION, &matProj );
当前的问题,在旋转到某一角度的时候,远端的立方体会消失(如图),请问可能的原因,谢谢 |
-
|