2014-04-07 37 views
-2

我想创建一个基本上为2个长方体的“L”形状,我可以做很长的路,但希望能够使用我试图实现的顶点方法创建它。在openGL中创建一个L形

任何人都可以帮忙吗?

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

这并不难,你必须明白计算面和顶点的数量。如果你想制作“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}, 
}; 

你这个数据绘制cube.You可以缩放和旋转立方体,使“L”形。