comment some planet code
This commit is contained in:
parent
f830812964
commit
834d3b0662
|
@ -4,11 +4,17 @@
|
||||||
|
|
||||||
// Correlates directly to Face enum
|
// Correlates directly to Face enum
|
||||||
const glm::vec3 FACE_NORMALS[6] = {
|
const glm::vec3 FACE_NORMALS[6] = {
|
||||||
|
// FACE_BOTTOM
|
||||||
glm::vec3(0.0f, -1.0f, 0.0f),
|
glm::vec3(0.0f, -1.0f, 0.0f),
|
||||||
|
// FACE_TOP
|
||||||
glm::vec3(0.0f, 1.0f, 0.0f),
|
glm::vec3(0.0f, 1.0f, 0.0f),
|
||||||
|
// FACE_LEFT
|
||||||
glm::vec3(-1.0f, 0.0f, 0.0f),
|
glm::vec3(-1.0f, 0.0f, 0.0f),
|
||||||
|
// FACE_RIGHT
|
||||||
glm::vec3(1.0f, 0.0f, 0.0f),
|
glm::vec3(1.0f, 0.0f, 0.0f),
|
||||||
|
// FACE_FRONT
|
||||||
glm::vec3(0.0f, 0.0f, -1.0f),
|
glm::vec3(0.0f, 0.0f, -1.0f),
|
||||||
|
// FACE_BACK
|
||||||
glm::vec3(0.0f, 0.0f, 1.0f)
|
glm::vec3(0.0f, 0.0f, 1.0f)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -16,6 +22,9 @@ PlanetFaceNode::PlanetFaceNode(Planet* planet, PlanetFace* face, glm::vec3 posit
|
||||||
m_planet(planet), m_planetFace(face), m_pos(position), m_index(index), m_level(level), m_generated(false), m_dirty(true), m_leaf(true)
|
m_planet(planet), m_planetFace(face), m_pos(position), m_index(index), m_level(level), m_generated(false), m_dirty(true), m_leaf(true)
|
||||||
{
|
{
|
||||||
glm::vec3 normal = face->getNormal();
|
glm::vec3 normal = face->getNormal();
|
||||||
|
|
||||||
|
// normal 0 1 0 left 1 0 0 forward 0 0 -1
|
||||||
|
// normal 0 0 -1 left 0 -1 0 forward -1 0 0
|
||||||
m_left = glm::vec3(normal.y, normal.z, normal.x);
|
m_left = glm::vec3(normal.y, normal.z, normal.x);
|
||||||
m_forward = glm::cross(normal, m_left);
|
m_forward = glm::cross(normal, m_left);
|
||||||
|
|
||||||
|
@ -100,17 +109,21 @@ void PlanetFaceNode::generate()
|
||||||
{
|
{
|
||||||
for (int j = 0; j < RESOLUTION; j++)
|
for (int j = 0; j < RESOLUTION; j++)
|
||||||
{
|
{
|
||||||
|
// Get the 2D index of the vertex on the plane from zero to one (1 = RESOLUTION - 1)
|
||||||
glm::vec2 index = glm::vec2(i, j) / (RESOLUTION - 1.0f);
|
glm::vec2 index = glm::vec2(i, j) / (RESOLUTION - 1.0f);
|
||||||
|
|
||||||
// From the left and forward vectors, we can calculate an oriented unit vertex
|
// Generate the vertices on the plane using left and forward vectors.
|
||||||
|
// here 2 * index - 1 is used to convert 0 - 1 to -1 - 1, that is to
|
||||||
|
// generate the vertices starting from the center point of the unit plane.
|
||||||
glm::vec3 iv = (m_forward * (2.0f * index.x - 1.0f)) / divisionLevel;
|
glm::vec3 iv = (m_forward * (2.0f * index.x - 1.0f)) / divisionLevel;
|
||||||
glm::vec3 jv = (m_left * (2.0f * index.y - 1.0f)) / divisionLevel;
|
glm::vec3 jv = (m_left * (2.0f * index.y - 1.0f)) / divisionLevel;
|
||||||
|
|
||||||
// Add the unit left and forward vectors to the origin
|
// Add the unit left and forward vectors to the origin, m_pos here
|
||||||
|
// being the center point, which in division level zero is the offset
|
||||||
|
// normal from the center of the cube.
|
||||||
glm::vec3 vertex = m_pos + jv + iv;
|
glm::vec3 vertex = m_pos + jv + iv;
|
||||||
|
|
||||||
// Normalize and multiply by radius to create a spherical mesh
|
// Normalize and multiply by radius to create a spherical mesh (unit sphere)
|
||||||
// glm::vec3 vertNormal = glm::normalize(vertex);
|
|
||||||
float x2 = vertex.x * vertex.x;
|
float x2 = vertex.x * vertex.x;
|
||||||
float y2 = vertex.y * vertex.y;
|
float y2 = vertex.y * vertex.y;
|
||||||
float z2 = vertex.z * vertex.z;
|
float z2 = vertex.z * vertex.z;
|
||||||
|
@ -120,7 +133,9 @@ void PlanetFaceNode::generate()
|
||||||
vertex.z * sqrt(1.0f - ((x2 + y2) / 2.0f) + ((x2 * y2) / 3.0f))
|
vertex.z * sqrt(1.0f - ((x2 + y2) / 2.0f) + ((x2 * y2) / 3.0f))
|
||||||
);
|
);
|
||||||
|
|
||||||
glm::vec3 pos = -(m_planet->getNoise().fractal(8, point.x, point.y, point.z) * 20.0f + radius) * point;
|
// Get noise height and multiply by radius
|
||||||
|
float height = m_planet->getNoise().fractal(8, point.x, point.y, point.z) * 20.0f;
|
||||||
|
glm::vec3 pos = -(height + radius) * point;
|
||||||
|
|
||||||
// Add vertex
|
// Add vertex
|
||||||
vertices.push_back({ pos, point, glm::vec2(j * (1.0 / RESOLUTION), i * (1.0 / RESOLUTION)) });
|
vertices.push_back({ pos, point, glm::vec2(j * (1.0 / RESOLUTION), i * (1.0 / RESOLUTION)) });
|
||||||
|
@ -150,6 +165,7 @@ bool PlanetFaceNode::subdivide()
|
||||||
|
|
||||||
int lv = m_level + 1;
|
int lv = m_level + 1;
|
||||||
|
|
||||||
|
// Calculate distance to move the vertices on the unit plane based on division level
|
||||||
glm::vec3 stepLeft = m_left * (1.0f / (float)pow(2, lv));
|
glm::vec3 stepLeft = m_left * (1.0f / (float)pow(2, lv));
|
||||||
glm::vec3 stepForward = m_forward * (1.0f / (float)pow(2, lv));
|
glm::vec3 stepForward = m_forward * (1.0f / (float)pow(2, lv));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue