圆的顶点缓冲

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();

转载于:https://www.cnblogs.com/alenxu/archive/2011/06/10/3345051.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值