圆的顶点缓冲

int theta, phi;
float radius=330.0f;
int dtheta = 15;
int dphi = 15;
NumVertices = (int) ((360/dtheta) * (90/dphi) * 4);

if(FAILED(m_pDevice->CreateVertexBuffer( NumVertices *sizeof(SkyBoxVertex),
D3DUSAGE_WRITEONLY,SkyBoxVertex::FVF,D3DPOOL_MANAGED,&m_pSphereVB,NULL )))
return false;

m_pSphereVB->Lock(0,NumVertices *sizeof(SkyBoxVertex),(void**)&SkyBox,0);

int n = 0;
float fx,fy,fz,fu,fv;
for (phi = 0; phi <= 90 - dphi; phi += (int)dphi)
{
for (theta = 0; theta <= 360 - dtheta; theta += (int)dtheta)
{
fx = radius * sinf(phi * DTOR) * cosf(theta * DTOR);
fz = radius * sinf(phi * DTOR) * sinf(theta * DTOR);
fy = radius * cosf(phi * DTOR);
fu = theta /360.0f;
fv = /*1-*/phi/90.0f;
SkyBox[n] = SkyBoxVertex(fx,fy, fz, fu, fv );
n++;

fx = radius * sinf((phi+dphi) * DTOR) * cosf(theta * DTOR);
fz = radius * sinf((phi+dphi) * DTOR) * sinf(theta * DTOR);
fy = radius * cosf((phi+dphi) * DTOR);
fu = theta /360.0f;
fv =/* 1-*/(phi+dphi)/90.0f;
SkyBox[n] = SkyBoxVertex(fx,fy, fz, fu, fv );
n++;

fx = radius * sinf(phi * DTOR) * cosf((theta + dtheta) * DTOR);
fz = radius * sinf(phi * DTOR) * sinf((theta + dtheta) * DTOR);
fy = radius * cosf(phi * DTOR);
fu = (theta + dtheta) /360.0f;
fv = /*1-*/phi/90.0f;
SkyBox[n] = SkyBoxVertex(fx,fy, fz, fu, fv );
n++;

fx = radius * sinf((phi + dphi) * DTOR) * cosf((theta + dtheta) * DTOR);
fz = radius * sinf((phi + dphi) * DTOR) * sinf((theta + dtheta) * DTOR);
fy = radius * cosf((phi + dphi) * DTOR);
fu = (theta + dtheta) /360.0f;
fv = /*1-*/(phi + dphi)/90.0f;
SkyBox[n] = SkyBoxVertex(fx,fy, fz, fu, fv );
n++;

}
}
m_pSphereVB->Unlock();

posted @ 2011-06-10 13:17  Alen_Xu  阅读(167)  评论(0编辑  收藏  举报