1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
void CCube::InitArray()
{
// v7------v6
// /| /|
// v3------v2|
// | | | |
// | |v4---|-|v5
// |/ |/
// v0------v1
// N_VERTS = 24; P_SIZE = 3; T_SIZE = 2; N_FACE = 6;
GLfloat pos[N_VERTS * P_SIZE] =
{
// front face 0, 1, 2, 2, 3, 0,
-1.0f, -1.0f, 1.0f, //0_v0
1.0f, -1.0f, 1.0f, //1_v1
1.0f, 1.0f, 1.0f, //2_v2
-1.0f, 1.0f, 1.0f, //3_v3
// top face 4, 5, 6, 6, 7, 4,
-1.0f, 1.0f, 1.0f, //4_v3
1.0f, 1.0f, 1.0f, //5_v2
1.0f, 1.0f, -1.0f, //6_v6
-1.0f, 1.0f, -1.0f, //7_v7
// back face 8, 9, 10, 10, 11, 8,
1.0f, -1.0f, -1.0f, //8_v5
-1.0f, -1.0f, -1.0f, //9_v4
-1.0f, 1.0f, -1.0f, //10_v7
1.0f, 1.0f, -1.0f, //11_v6
// left face 12, 13, 14, 14, 15, 12,
-1.0f, -1.0f, -1.0f, //12_v4
-1.0f, -1.0f, 1.0f, //13_v0
-1.0f, 1.0f, 1.0f, //14_v3
-1.0f, 1.0f, -1.0f, //15_v7
// bottom face 16, 17, 18, 18, 19, 16,
-1.0f, -1.0f, -1.0f, //16_v4
1.0f, -1.0f, -1.0f, //17_v5
1.0f, -1.0f, 1.0f, //18_v1
-1.0f, -1.0f, 1.0f, //19_v0
// right face 20, 21, 22, 22, 23, 20
1.0f, -1.0f, 1.0f, //20_v1
1.0f, -1.0f, -1.0f, //21_v5
1.0f, 1.0f, -1.0f, //22_v6
1.0f, 1.0f, 1.0f //23_v2
};
GLuint coordTexture[N_VERTS * T_SIZE] = {
// front face 0, 1, 2, 2, 3, 0,
0.00f, 0.50f,
0.25f, 0.50f,
0.25f, 0.75f,
0.00f, 0.75f,
// top face 3, 2, 6, 6, 7, 3,
0.00f, 0.00f,
0.25f, 0.00f,
0.25f, 0.25f,
0.00f, 0.25f,
// back face 5, 4, 7, 7, 6, 5,
0.00f, 0.50f,
0.25f, 0.50f,
0.25f, 0.75f,
0.00f, 0.75f,
// left face 4, 0, 3, 3, 7, 4,
0.00f, 0.25f,
0.25f, 0.25f,
0.25f, 0.50f,
0.00f, 0.50f,
// bottom face 4, 5, 1, 1, 0, 4,
0.00f, 0.00f,
0.25f, 0.00f,
0.25f, 0.25f,
0.00f, 0.25f,
// right face 1, 5, 6, 6, 2, 1
0.00f, 0.25f,
0.25f, 0.25f,
0.25f, 0.50f,
0.00f, 0.50f
};
GLuint indice[N_FACE * 6] = {
0, 1, 2, 2, 3, 0, // front face
4, 5, 6, 6, 7, 4, // top face
8, 9, 10, 10, 11, 8, // back face
12, 13, 14, 14, 15, 12, // left face
16, 17, 18, 18, 19, 16, // bottom face
20, 21, 22, 22, 23, 20 // right face
};
int max;
if (N_VERTS * P_SIZE < N_FACE * 6) max = N_FACE * 6;
else max = N_VERTS * P_SIZE;
for (int i = 0; i < max; i++)
{
if (i < N_VERTS * P_SIZE)
{
CCube::VertexArray[i] = pos[i];
}
if (i < N_VERTS * T_SIZE)
{
CCube::CoordTextureArray[i] = coordTexture[i];
}
if (i < N_FACE * 6)
{
CCube::IndiceArray[i] = indice[i];
}
}
} |