Skip to content

Commit

Permalink
Fixes the normals of SphereMesh when the sphere/hemisphere is oblong
Browse files Browse the repository at this point in the history
  • Loading branch information
drcd1 committed Aug 22, 2021
1 parent fb176d5 commit f4ac08a
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions scene/resources/primitive_meshes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1420,6 +1420,8 @@ void SphereMesh::_create_mesh_array(Array &p_arr) const {
int i, j, prevrow, thisrow, point;
float x, y, z;

float scale = height * (is_hemisphere ? 1.0 : 0.5);

// set our bounding box

Vector<Vector3> points;
Expand All @@ -1443,7 +1445,7 @@ void SphereMesh::_create_mesh_array(Array &p_arr) const {

v /= (rings + 1);
w = sin(Math_PI * v);
y = height * (is_hemisphere ? 1.0 : 0.5) * cos(Math_PI * v);
y = scale * cos(Math_PI * v);

for (i = 0; i <= radial_segments; i++) {
float u = i;
Expand All @@ -1458,7 +1460,8 @@ void SphereMesh::_create_mesh_array(Array &p_arr) const {
} else {
Vector3 p = Vector3(x * radius * w, y, z * radius * w);
points.push_back(p);
normals.push_back(p.normalized());
Vector3 normal = Vector3(x * radius * w * scale, y / scale, z * radius * w * scale);
normals.push_back(normal.normalized());
};
ADD_TANGENT(z, 0.0, -x, 1.0)
uvs.push_back(Vector2(u, v));
Expand Down

0 comments on commit f4ac08a

Please sign in to comment.