1 | #include "FROG_Primitives.h"
|
---|
2 |
|
---|
3 | void SetNormal(float C1X, float C1Y, float C1Z,
|
---|
4 | float C2X, float C2Y, float C2Z,
|
---|
5 | float C3X, float C3Y, float C3Z){
|
---|
6 |
|
---|
7 | #ifdef FROG_LIGHTING
|
---|
8 | float X = (C1Y-C2Y)*(C2Z-C3Z) - (C1Z-C2Z)*(C2Y-C3Y);
|
---|
9 | float Y = (C1Z-C2Z)*(C2X-C3X) - (C1X-C2X)*(C2Z-C3Z);
|
---|
10 | float Z = (C1X-C2X)*(C2Y-C3Y) - (C1Y-C2Y)*(C2X-C3X);
|
---|
11 | float N = sqrt(X*X+Y*Y+Z*Z);
|
---|
12 | X /= N;Y /= N;Z /= N;
|
---|
13 |
|
---|
14 | glNormal3f(X,Y,Z);
|
---|
15 | #endif
|
---|
16 | }
|
---|
17 |
|
---|
18 | void DrawNormal(float C1X, float C1Y, float C1Z,
|
---|
19 | float C2X, float C2Y, float C2Z,
|
---|
20 | float C3X, float C3Y, float C3Z){
|
---|
21 | /*
|
---|
22 | glBegin (GL_TRIANGLES);
|
---|
23 | glVertex3f (C1X,C1Y,C1Z);
|
---|
24 | glVertex3f (C2X,C2Y,C2Z);
|
---|
25 | glVertex3f (C3X,C3Y,C3Z);
|
---|
26 | glEnd();
|
---|
27 | */
|
---|
28 | float X = (C1Y-C2Y)*(C2Z-C3Z) - (C1Z-C2Z)*(C2Y-C3Y);
|
---|
29 | float Y = (C1Z-C2Z)*(C2X-C3X) - (C1X-C2X)*(C2Z-C3Z);
|
---|
30 | float Z = (C1X-C2X)*(C2Y-C3Y) - (C1Y-C2Y)*(C2X-C3X);
|
---|
31 | float N = sqrt(X*X+Y*Y+Z*Z);
|
---|
32 | N /= 25;
|
---|
33 | X /= N;Y /= N;Z /= N;
|
---|
34 |
|
---|
35 | glColor3f(0,1,0);
|
---|
36 | glBegin (GL_LINES);
|
---|
37 | glVertex3f ((C1X+C2X+C3X)/3 ,(C1Y+C2Y+C3Y)/3 ,(C1Z+C2Z+C3Z)/3 ); //+++
|
---|
38 | glVertex3f ((C1X+C2X+C3X)/3+X,(C1Y+C2Y+C3Y)/3+Y,(C1Z+C2Z+C3Z)/3+Z); //+-+
|
---|
39 | glEnd();
|
---|
40 | }
|
---|
41 |
|
---|
42 | void DrawCube(float C1X, float C1Y, float C1Z,
|
---|
43 | float C2X, float C2Y, float C2Z,
|
---|
44 | float C3X, float C3Y, float C3Z,
|
---|
45 | float C4X, float C4Y, float C4Z,
|
---|
46 | float C5X, float C5Y, float C5Z,
|
---|
47 | float C6X, float C6Y, float C6Z,
|
---|
48 | float C7X, float C7Y, float C7Z,
|
---|
49 | float C8X, float C8Y, float C8Z){
|
---|
50 |
|
---|
51 | glBegin (GL_QUADS);
|
---|
52 | SetNormal(C1X,C1Y,C1Z,C4X,C4Y,C4Z,C3X,C3Y,C3Z);
|
---|
53 | glVertex3f (C1X,C1Y,C1Z); //+++
|
---|
54 | glVertex3f (C4X,C4Y,C4Z); //+-+
|
---|
55 | glVertex3f (C3X,C3Y,C3Z); //--+
|
---|
56 | glVertex3f (C2X,C2Y,C2Z); //-++
|
---|
57 |
|
---|
58 | SetNormal(C5X,C5Y,C5Z,C6X,C6Y,C6Z,C7X,C7Y,C7Z);
|
---|
59 | glVertex3f (C5X,C5Y,C5Z); //++-
|
---|
60 | glVertex3f (C6X,C6Y,C6Z); //-+-
|
---|
61 | glVertex3f (C7X,C7Y,C7Z); //---
|
---|
62 | glVertex3f (C8X,C8Y,C8Z); //+--
|
---|
63 |
|
---|
64 | SetNormal(C1X,C1Y,C1Z,C2X,C2Y,C2Z,C6X,C6Y,C6Z);
|
---|
65 | glVertex3f (C1X,C1Y,C1Z); //+++
|
---|
66 | glVertex3f (C2X,C2Y,C2Z); //-++
|
---|
67 | glVertex3f (C6X,C6Y,C6Z); //-+-
|
---|
68 | glVertex3f (C5X,C5Y,C5Z); //++-
|
---|
69 |
|
---|
70 | SetNormal(C4X,C4Y,C4Z,C8X,C8Y,C8Z,C7X,C7Y,C7Z);
|
---|
71 | glVertex3f (C4X,C4Y,C4Z); //+-+
|
---|
72 | glVertex3f (C8X,C8Y,C8Z); //+--
|
---|
73 | glVertex3f (C7X,C7Y,C7Z); //---
|
---|
74 | glVertex3f (C3X,C3Y,C3Z); //--+
|
---|
75 |
|
---|
76 | SetNormal(C1X,C1Y,C1Z,C5X,C5Y,C5Z,C8X,C8Y,C8Z);
|
---|
77 | glVertex3f (C1X,C1Y,C1Z); //+++
|
---|
78 | glVertex3f (C5X,C5Y,C5Z); //++-
|
---|
79 | glVertex3f (C8X,C8Y,C8Z); //+--
|
---|
80 | glVertex3f (C4X,C4Y,C4Z); //+-+
|
---|
81 |
|
---|
82 | SetNormal(C2X,C2Y,C2Z,C3X,C3Y,C3Z,C7X,C7Y,C7Z);
|
---|
83 | glVertex3f (C2X,C2Y,C2Z); //-++
|
---|
84 | glVertex3f (C3X,C3Y,C3Z); //--+
|
---|
85 | glVertex3f (C7X,C7Y,C7Z); //---
|
---|
86 | glVertex3f (C6X,C6Y,C6Z); //-+-
|
---|
87 | glEnd();
|
---|
88 |
|
---|
89 | /*
|
---|
90 | glEnable(GL_POLYGON_OFFSET_LINE);
|
---|
91 | glPolygonOffset(0,100);
|
---|
92 | glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
---|
93 | glBegin (GL_QUADS);
|
---|
94 | SetNormal(C1X,C1Y,C1Z,C4X,C4Y,C4Z,C3X,C3Y,C3Z);
|
---|
95 | glVertex3f (C1X,C1Y,C1Z); //+++
|
---|
96 | glVertex3f (C4X,C4Y,C4Z); //+-+
|
---|
97 | glVertex3f (C3X,C3Y,C3Z); //--+
|
---|
98 | glVertex3f (C2X,C2Y,C2Z); //-++
|
---|
99 |
|
---|
100 | SetNormal(C5X,C5Y,C5Z,C6X,C6Y,C6Z,C7X,C7Y,C7Z);
|
---|
101 | glVertex3f (C5X,C5Y,C5Z); //++-
|
---|
102 | glVertex3f (C6X,C6Y,C6Z); //-+-
|
---|
103 | glVertex3f (C7X,C7Y,C7Z); //---
|
---|
104 | glVertex3f (C8X,C8Y,C8Z); //+--
|
---|
105 |
|
---|
106 | SetNormal(C1X,C1Y,C1Z,C2X,C2Y,C2Z,C6X,C6Y,C6Z);
|
---|
107 | glVertex3f (C1X,C1Y,C1Z); //+++
|
---|
108 | glVertex3f (C2X,C2Y,C2Z); //-++
|
---|
109 | glVertex3f (C6X,C6Y,C6Z); //-+-
|
---|
110 | glVertex3f (C5X,C5Y,C5Z); //++-
|
---|
111 |
|
---|
112 | SetNormal(C4X,C4Y,C4Z,C8X,C8Y,C8Z,C7X,C7Y,C7Z);
|
---|
113 | glVertex3f (C4X,C4Y,C4Z); //+-+
|
---|
114 | glVertex3f (C8X,C8Y,C8Z); //+--
|
---|
115 | glVertex3f (C7X,C7Y,C7Z); //---
|
---|
116 | glVertex3f (C3X,C3Y,C3Z); //--+
|
---|
117 |
|
---|
118 | SetNormal(C1X,C1Y,C1Z,C5X,C5Y,C5Z,C8X,C8Y,C8Z);
|
---|
119 | glVertex3f (C1X,C1Y,C1Z); //+++
|
---|
120 | glVertex3f (C5X,C5Y,C5Z); //++-
|
---|
121 | glVertex3f (C8X,C8Y,C8Z); //+--
|
---|
122 | glVertex3f (C4X,C4Y,C4Z); //+-+
|
---|
123 |
|
---|
124 | SetNormal(C2X,C2Y,C2Z,C3X,C3Y,C3Z,C7X,C7Y,C7Z);
|
---|
125 | glVertex3f (C2X,C2Y,C2Z); //-++
|
---|
126 | glVertex3f (C3X,C3Y,C3Z); //--+
|
---|
127 | glVertex3f (C7X,C7Y,C7Z); //---
|
---|
128 | glVertex3f (C6X,C6Y,C6Z); //-+-
|
---|
129 | glEnd();
|
---|
130 | glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
---|
131 | */
|
---|
132 | }
|
---|
133 |
|
---|