]> icculus.org git repositories - divverent/nexuiz.git/blob - misc/gtkradiant/singlepatches-radiant15/gtkradiant-modelnormals.diff
fix patches for ZeroRadiant
[divverent/nexuiz.git] / misc / gtkradiant / singlepatches-radiant15 / gtkradiant-modelnormals.diff
1 Index: plugins/model/model.cpp
2 ===================================================================
3 --- plugins/model/model.cpp     (revision 193)
4 +++ plugins/model/model.cpp     (working copy)
5 @@ -123,14 +123,27 @@
6      }
7      glVertexPointer(3, GL_FLOAT, sizeof(ArbitraryMeshVertex), &m_vertices.data()->vertex);
8      glDrawElements(GL_TRIANGLES, GLsizei(m_indices.size()), RenderIndexTypeID, m_indices.data());
9 +
10  #if defined(_DEBUG)
11 +       GLfloat modelview[16];
12 +       glGetFloatv(GL_MODELVIEW_MATRIX, modelview); // I know this is slow as hell, but hey - we're in _DEBUG
13 +       Matrix4 modelview_inv(
14 +               modelview[0], modelview[1], modelview[2], modelview[3],
15 +               modelview[4], modelview[5], modelview[6], modelview[7],
16 +               modelview[8], modelview[9], modelview[10], modelview[11],
17 +               modelview[12], modelview[13], modelview[14], modelview[15]);
18 +       matrix4_full_invert(modelview_inv);
19 +       Matrix4 modelview_inv_transposed = matrix4_transposed(modelview_inv);
20 +
21      glBegin(GL_LINES);
22  
23      for(Array<ArbitraryMeshVertex>::const_iterator i = m_vertices.begin(); i != m_vertices.end(); ++i)
24      {
25 -      Vector3 normal = vector3_added(vertex3f_to_vector3((*i).vertex), vector3_scaled(normal3f_to_vector3((*i).normal), 8));
26 +         Vector3 normal = normal3f_to_vector3((*i).normal);
27 +         normal = matrix4_transformed_direction(modelview_inv, vector3_normalised(matrix4_transformed_direction(modelview_inv_transposed, normal))); // do some magic
28 +      Vector3 normalTransformed = vector3_added(vertex3f_to_vector3((*i).vertex), vector3_scaled(normal, 8));
29        glVertex3fv(vertex3f_to_array((*i).vertex));
30 -      glVertex3fv(vector3_to_array(normal));
31 +      glVertex3fv(vector3_to_array(normalTransformed));
32      }
33      glEnd();
34  #endif