1
1
#include " SolidVisualizer.h"
2
2
3
- namespace Forth {
3
+ namespace Forth
4
+ {
4
5
5
6
SolidVisualizer::SolidVisualizer () {}
6
7
7
- void SolidVisualizer::Initialize (Buffer3 & buffer)
8
+ void SolidVisualizer::Initialize (Buffer3 &buffer)
8
9
{
9
10
buff = &buffer;
10
11
buff->Clear ();
11
12
buff->simplex = SimplexMode::SM_Triangle;
12
13
}
13
14
14
- void SolidVisualizer::Render (const Vector4 * buffer, int count)
15
+ void SolidVisualizer::Render (const Vector4 *buffer, int count)
15
16
{
16
17
Buffer3 &b = *buff;
17
- int o = ( int )b. vertices . size () ;
18
+ int o = b. vertices_count ;
18
19
b.AddVert (buffer[0 ].ToVec3 ());
19
20
b.AddVert (buffer[1 ].ToVec3 ());
20
21
for (int i = 2 ; i < count; i++)
@@ -31,17 +32,17 @@ namespace Forth {
31
32
32
33
void SolidVisualizer::RefineTriangleOrder ()
33
34
{
34
- std::vector< int > & t = buff->indices ;
35
- std::vector< Vector3> & v = buff->vertices ;
35
+ int * t = buff->indices ;
36
+ Vector3 * v = buff->vertices ;
36
37
37
- Vector3 median = GetAverage (v );
38
+ Vector3 median = GetAverage (buff-> vertices , buff-> vertices_count ) - Vector3 (.1e- 4f );
38
39
39
- for (size_t i = 0 ; i < t. size () ; i += 3 )
40
+ for (int i = 0 ; i < buff-> indices_count ; i += 3 )
40
41
{
41
42
int a = t[i], b = t[i + 1 ], c = t[i + 2 ];
42
43
Vector3 &va = v[a];
43
44
Vector3 N = Cross (v[c] - va, v[b] - va);
44
- if (Dot (N, median) < Dot (N, va))
45
+ if (Dot (N, median - va) < 0 )
45
46
{
46
47
// Flip
47
48
t[i] = c;
@@ -50,13 +51,12 @@ namespace Forth {
50
51
}
51
52
}
52
53
53
- Vector3 SolidVisualizer::GetAverage (const std::vector< Vector3>& v )
54
+ Vector3 SolidVisualizer::GetAverage (const Vector3 *v, const int size )
54
55
{
55
56
Vector3 median = Vector3 ();
56
- size_t size = v.size ();
57
57
for (size_t i = size; i-- > 0 ;)
58
58
median += v[i];
59
59
return median / (float )size;
60
60
}
61
61
62
- }
62
+ } // namespace Forth
0 commit comments