* Fix object scaling update issue with interactive rendering + static BVH.
* Fix negative scaling issue with static BVH.
* Fix #29217: excessive fireflies in first sample.
This commit is contained in:
Brecht Van Lommel
2011-11-12 14:29:52 +00:00
parent 817b6cb9a8
commit fc42a6185d
6 changed files with 45 additions and 9 deletions

View File

@@ -42,6 +42,7 @@ Mesh::Mesh()
{
need_update = true;
transform_applied = false;
transform_negative_scaled = false;
displacement_method = DISPLACE_BUMP;
bvh = NULL;
@@ -75,6 +76,9 @@ void Mesh::clear()
attributes.clear();
used_shaders.clear();
transform_applied = false;
transform_negative_scaled = false;
}
void Mesh::add_triangle(int v0, int v1, int v2, int shader_, bool smooth_)
@@ -116,6 +120,7 @@ void Mesh::add_face_normals()
/* compute face normals */
size_t triangles_size = triangles.size();
bool flip = transform_negative_scaled;
if(triangles_size) {
float3 *verts_ptr = &verts[0];
@@ -128,6 +133,9 @@ void Mesh::add_face_normals()
float3 v2 = verts_ptr[t.v[2]];
fN[i] = normalize(cross(v1 - v0, v2 - v0));
if(flip)
fN[i] = -fN[i];
}
}
}
@@ -150,6 +158,7 @@ void Mesh::add_vertex_normals()
size_t verts_size = verts.size();
size_t triangles_size = triangles.size();
bool flip = transform_negative_scaled;
if(triangles_size) {
Triangle *triangles_ptr = &triangles[0];
@@ -159,8 +168,11 @@ void Mesh::add_vertex_normals()
vN[triangles_ptr[i].v[j]] += fN[i];
}
for(size_t i = 0; i < verts_size; i++)
for(size_t i = 0; i < verts_size; i++) {
vN[i] = normalize(vN[i]);
if(flip)
vN[i] = -vN[i];
}
}
void Mesh::pack_normals(Scene *scene, float4 *normal, float4 *vnormal)