我想创建一个" 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
}
答案 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”形状。