我的问题是我用C ++制作了一个带有openGL的圆柱体,我不知道如何添加顶部和底部。我写了这个函数:
glm::vec3 CMyApp::GetUV(float u, float v)
{
float r = 0.5; //radius
float h = 2; //heigh
u *= 2*3.1415f;
v *= h;
float cu = cosf(u), su = sinf(u), cv = cosf(v), sv = sinf(v);
return glm::vec3( r*cu, v, -r*su );
}
上面的代码构成了圆柱体。
bool CMyApp::Init()
{
Vertex vert[(N+1)*(M+1)];
for (int i=0; i<=N; ++i)
for (int j=0; j<=M; ++j)
{
float u = i/(float)N;
float v = j/(float)M;
vert[i + j*(N+1)].p = GetUV(u, v);
vert[i + j*(N+1)].c = glm::normalize( vert[i + j*(N+1)].p );
}
GLushort indices[3*2*(N)*(M)];
for (int i=0; i<N; ++i)
for (int j=0; j<M; ++j)
{
indices[6*i + j*3*2*(N) + 0] = (i) + (j)* (N+1);
indices[6*i + j*3*2*(N) + 1] = (i+1) + (j)* (N+1);
indices[6*i + j*3*2*(N) + 2] = (i) + (j+1)*(N+1);
indices[6*i + j*3*2*(N) + 3] = (i+1) + (j)* (N+1);
indices[6*i + j*3*2*(N) + 4] = (i+1) + (j+1)*(N+1);
indices[6*i + j*3*2*(N) + 5] = (i) + (j+1)*(N+1);
}
使用此代码,它只显示一个打开的柱面。如何修改此代码? 提前谢谢