在openGL中创建L形状

时间:2014-04-07 09:22:27

标签: opengl graphics cube angle

我想创建一个" L"形状如此基本上2个长方体,我可以做很长的路,但希望能够用顶点方法创建它,这种方法可以实现...

有人可以帮忙吗?

float vertices[8][3] = {

    { 0, 2, 0.5 }, 
    { 0.5, 2, 0.5 },
    { 0.5, 0, 0.5 }, 
    { 0, 0, 0.5 },
    { 0, 2, -0.5 }, 
    { 0.5, 2, -0.5 },
    { 0.5, 0, -0.5 }, 
    { 0, 0, -0.5 }

};

//set up the array of colours
float colours[6][3] = {

    { 1.0, 0.0, 1.0 }, 
    { 0.5, 0.0, 0.0 },
    { 0.0, 1.0, 0.0 }, 
    { 0.0, 0.5, 0.0 },
    { 0.0, 0.0, 1.0 }, 
    { 0.0, 0.0, 0.5 }

};

void polygon(int a, int b, int c, int d, int colour) {

    glColor3fv(colours[colour]);
    glBegin(GL_POLYGON);
    glVertex3fv(vertices[a]);
    glVertex3fv(vertices[b]);
    glVertex3fv(vertices[c]);
    glVertex3fv(vertices[d]);
    glEnd();
    glColor3f(1.0, 1.0, 1.0);
    glBegin(GL_LINE_LOOP);
    glVertex3fv(vertices[a]);
    glVertex3fv(vertices[b]);
    glVertex3fv(vertices[c]);
    glVertex3fv(vertices[d]);
    glEnd();

}

void cube() {

    polygon(0, 3, 7, 4, 0); // left
    polygon(1, 5, 6, 2, 1);// right
    polygon(0, 4, 5, 1, 2);// bottom
    polygon(3, 2, 6, 7, 3);// top
    polygon(0, 1, 2, 3, 4); // near
    polygon(4, 7, 6, 5, 5);// far

}

1 个答案:

答案 0 :(得分:1)

计算面部和顶点的数量并不是很难理解。如果要制作“L”形状,则首先计算三角形面的数量。每个三角形面需要三个顶点,因此顶点的总数将是三角形面的数量* 3。 为简单起见,您可以使用两个立方体立方体包含12个三角形面,总共36个顶点。 多维数据集的数据是

float vertexData[12][3] = {
//  X     Y     Z      
// bottom
{-1.0f,-1.0f,-1.0f},
{ 1.0f,-1.0f,-1.0f},
{-1.0f,-1.0f, 1.0f},
{ 1.0f,-1.0f,-1.0f},
{ 1.0f,-1.0f, 1.0f},
{-1.0f,-1.0f, 1.0f},

// top
{-1.0f, 1.0f,-1.0f},
{-1.0f, 1.0f, 1.0f},
{ 1.0f, 1.0f,-1.0f},
{ 1.0f, 1.0f,-1.0f},
{-1.0f, 1.0f, 1.0f},
{ 1.0f, 1.0f, 1.0f},

// front
{-1.0f,-1.0f, 1.0f},
{ 1.0f,-1.0f, 1.0f},
{-1.0f, 1.0f, 1.0f},
{ 1.0f,-1.0f, 1.0f},
{ 1.0f, 1.0f, 1.0f},
{-1.0f, 1.0f, 1.0f},

// back
{-1.0f,-1.0f,-1.0f},
{-1.0f, 1.0f,-1.0f},
{ 1.0f,-1.0f,-1.0f},
{ 1.0f,-1.0f,-1.0f},
{-1.0f, 1.0f,-1.0f},
{ 1.0f, 1.0f,-1.0f},

// left
{-1.0f,-1.0f, 1.0f},
{-1.0f, 1.0f,-1.0f},
{-1.0f,-1.0f,-1.0f},
{-1.0f,-1.0f, 1.0f},
{-1.0f, 1.0f, 1.0f},
{-1.0f, 1.0f,-1.0f},

// right
 {1.0f,-1.0f, 1.0f},
 {1.0f,-1.0f,-1.0f},
 {1.0f, 1.0f,-1.0f},
 {1.0f,-1.0f, 1.0f},
 {1.0f, 1.0f,-1.0f},
 {1.0f, 1.0f, 1.0f},
 };

您可以使用此数据绘制立方体。您可以缩放和旋转立方体以形成“L”形状。