圆柱体顶部和底部在openGL中

时间:2018-04-15 09:41:06

标签: c++ opengl glm-math

我的问题是我用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);
    }

使用此代码,它只显示一个打开的柱面。如何修改此代码? 提前谢谢

0 个答案:

没有答案