// BlockyFroggy
// Copyright © 2017 John Ryland.
// All rights reserved.
#include "Cube.h"
#include "PolyVertex.h"
const int fltsPerVert = sizeof(PolyVertex) / sizeof(GLfloat);
const int trisPerCube = 12;
const int vertsPerCube = 3*trisPerCube;
Cube::Cube()
{
const float vals1[6][6] = {
{ 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f },
{ -0.5f,-0.5f,-0.5f, -0.5f,-0.5f,-0.5f },
{ 0.5f,-0.5f, 0.5f, 0.5f,-0.5f,-0.5f },
{ -0.5f, 0.5f,-0.5f, -0.5f, 0.5f, 0.5f },
{ -0.5f,-0.5f, 0.5f, 0.5f,-0.5f, 0.5f },
{ 0.5f, 0.5f,-0.5f, -0.5f, 0.5f,-0.5f }
};
const float *valsx[6] = { vals1[0], vals1[2], vals1[1], vals1[3], vals1[2], vals1[2] };
const float *valsy[6] = { vals1[3], vals1[0], vals1[2], vals1[1], vals1[5], vals1[4] };
const float *valsz[6] = { vals1[4], vals1[4], vals1[4], vals1[4], vals1[0], vals1[1] };
const int nsi[6] = { 0, 1, 0, 1, 2, 2 };
const float nsv[6] = { 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, -1.0f };
m_baseCubeData.resize(fltsPerVert * vertsPerCube);
// A cube instance
// Probably don't need to do this every reset
for (int j = 0; j < 6; j++) {
for (int i = 0; i < 6; i++) {
int p = (j*6+i)*fltsPerVert;
for (int k = 0; k < fltsPerVert; k++) {
m_baseCubeData[p+k] = 0.0f;
}
// Position
m_baseCubeData[p+0] = valsx[j][i];
m_baseCubeData[p+1] = valsy[j][i];
m_baseCubeData[p+2] = valsz[j][i];
// Normal
m_baseCubeData[p+8+nsi[j]] = nsv[j];
// Color
m_baseCubeData[p+12] = 1.0f;
m_baseCubeData[p+13] = 1.0f;
// Barycenter
m_baseCubeData[p+20+(i%3)] = 1.0f;
m_baseCubeData[p+23] = 1.0f;
}
}
}