- attrib[0].position = glm::vec3(-1.0f, -1.0f, -1.0f);
- attrib[1].position = glm::vec3(-1.0f, -1.0f, 1.0f);
- attrib[2].position = glm::vec3(-1.0f, 1.0f, -1.0f);
- attrib[3].position = glm::vec3(-1.0f, 1.0f, 1.0f);
- attrib[4].position = glm::vec3( 1.0f, -1.0f, -1.0f);
- attrib[5].position = glm::vec3( 1.0f, -1.0f, 1.0f);
- attrib[6].position = glm::vec3( 1.0f, 1.0f, -1.0f);
- attrib[7].position = glm::vec3( 1.0f, 1.0f, 1.0f);
+
+ constexpr float radius = float(size) * 0.5f;
+ int index = 0;
+ for (int surface = 0; surface < 3; ++surface) {
+ for (int y = 0; y < size; ++y) {
+ for (int x = 0; x < size; ++x, ++index) {
+ glm::vec3 pos[4];
+ pos[0][(surface + 0) % 3] = float(x + 0) - radius;
+ pos[0][(surface + 1) % 3] = float(y + 0) - radius;
+ pos[0][(surface + 2) % 3] = radius;
+ pos[1][(surface + 0) % 3] = float(x + 0) - radius;
+ pos[1][(surface + 1) % 3] = float(y + 1) - radius;
+ pos[1][(surface + 2) % 3] = radius;
+ pos[2][(surface + 0) % 3] = float(x + 1) - radius;
+ pos[2][(surface + 1) % 3] = float(y + 0) - radius;
+ pos[2][(surface + 2) % 3] = radius;
+ pos[3][(surface + 0) % 3] = float(x + 1) - radius;
+ pos[3][(surface + 1) % 3] = float(y + 1) - radius;
+ pos[3][(surface + 2) % 3] = radius;
+ attrib[4 * index + 0].position = glm::normalize(pos[0]);
+ attrib[4 * index + 1].position = glm::normalize(pos[1]);
+ attrib[4 * index + 2].position = glm::normalize(pos[2]);
+ attrib[4 * index + 3].position = glm::normalize(pos[3]);
+ }
+ }
+ }
+ for (int surface = 3; surface < 6; ++surface) {
+ for (int y = 0; y < size; ++y) {
+ for (int x = 0; x < size; ++x, ++index) {
+ glm::vec3 pos[4];
+ pos[0][(surface + 0) % 3] = float(x + 0) - radius;
+ pos[0][(surface + 1) % 3] = float(y + 0) - radius;
+ pos[0][(surface + 2) % 3] = radius;
+ pos[1][(surface + 0) % 3] = float(x + 0) - radius;
+ pos[1][(surface + 1) % 3] = float(y + 1) - radius;
+ pos[1][(surface + 2) % 3] = radius;
+ pos[2][(surface + 0) % 3] = float(x + 1) - radius;
+ pos[2][(surface + 1) % 3] = float(y + 0) - radius;
+ pos[2][(surface + 2) % 3] = radius;
+ pos[3][(surface + 0) % 3] = float(x + 1) - radius;
+ pos[3][(surface + 1) % 3] = float(y + 1) - radius;
+ pos[3][(surface + 2) % 3] = radius;
+ attrib[4 * index + 0].position = glm::normalize(pos[0]) * -1.0f;
+ attrib[4 * index + 1].position = glm::normalize(pos[1]) * -1.0f;
+ attrib[4 * index + 2].position = glm::normalize(pos[2]) * -1.0f;
+ attrib[4 * index + 3].position = glm::normalize(pos[3]) * -1.0f;
+ }
+ }
+ }