Geometry.h#
Geometry helpers, such as skybox generations.
Includes#
PVRCore/math/MathUtils.h
Included By#
Namespaces#
Functions#
Source Code#
#pragma once
#include "PVRCore/math/MathUtils.h"
namespace pvr {
namespace tool {
namespace impl {
inline static void setVertex(glm::vec3& vertex, float x, float y, float z) { vertex.x = x, vertex.y = y, vertex.z = z; }
inline static void setUV(glm::vec2& uv, float u, float v) { uv.x = u, uv.y = v; }
} // namespace impl
inline void createSkyBox(float scale, bool adjustUV, uint32_t textureSize, std::vector<glm::vec3>& outVertices, std::vector<glm::vec2>& outUVs)
{
using namespace impl;
float unit = 1.f, a0 = 1.f, a1 = 1.f;
outVertices.resize(24);
outUVs.resize(24);
if (adjustUV)
{
const float oneOverTexSize = 1.f / textureSize;
a0 = 4.f * oneOverTexSize;
a1 = a0 - unit;
}
unit *= scale;
// Front
setVertex(outVertices[0], -unit, +unit, -unit);
setVertex(outVertices[1], +unit, +unit, -unit);
setVertex(outVertices[2], -unit, -unit, -unit);
setVertex(outVertices[3], +unit, -unit, -unit);
setUV(outUVs[0], a0, a1);
setUV(outUVs[1], a1, a1);
setUV(outUVs[2], a0, a0);
setUV(outUVs[3], a1, a0);
// Right
setVertex(outVertices[4], +unit, +unit, -unit);
setVertex(outVertices[5], +unit, +unit, +unit);
setVertex(outVertices[6], +unit, -unit, -unit);
setVertex(outVertices[7], +unit, -unit, +unit);
setUV(outUVs[4], a0, a1);
setUV(outUVs[5], a1, a1);
setUV(outUVs[6], a0, a0);
setUV(outUVs[7], a1, a0);
// Back
setVertex(outVertices[8], +unit, +unit, +unit);
setVertex(outVertices[9], -unit, +unit, +unit);
setVertex(outVertices[10], +unit, -unit, +unit);
setVertex(outVertices[11], -unit, -unit, +unit);
setUV(outUVs[8], a0, a1);
setUV(outUVs[9], a1, a1);
setUV(outUVs[10], a0, a0);
setUV(outUVs[11], a1, a0);
// Left
setVertex(outVertices[12], -unit, +unit, +unit);
setVertex(outVertices[13], -unit, +unit, -unit);
setVertex(outVertices[14], -unit, -unit, +unit);
setVertex(outVertices[15], -unit, -unit, -unit);
setUV(outUVs[12], a0, a1);
setUV(outUVs[13], a1, a1);
setUV(outUVs[14], a0, a0);
setUV(outUVs[15], a1, a0);
// Top
setVertex(outVertices[16], -unit, +unit, +unit);
setVertex(outVertices[17], +unit, +unit, +unit);
setVertex(outVertices[18], -unit, +unit, -unit);
setVertex(outVertices[19], +unit, +unit, -unit);
setUV(outUVs[16], a0, a1);
setUV(outUVs[17], a1, a1);
setUV(outUVs[18], a0, a0);
setUV(outUVs[19], a1, a0);
// Bottom
setVertex(outVertices[20], -unit, -unit, -unit);
setVertex(outVertices[21], +unit, -unit, -unit);
setVertex(outVertices[22], -unit, -unit, +unit);
setVertex(outVertices[23], +unit, -unit, +unit);
setUV(outUVs[20], a0, a1);
setUV(outUVs[21], a1, a1);
setUV(outUVs[22], a0, a0);
setUV(outUVs[23], a1, a0);
}
} // namespace tool
} // namespace pvr