|
@@ -499,15 +499,16 @@ implementation
|
|
|
procedure TGLTetrahedron.BuildList(var rci: TGLRenderContextInfo);
|
|
|
const
|
|
|
Vertices: packed array [0 .. 3] of TAffineVector =
|
|
|
- ((X: 1.0; Y: 1.0; Z: 1.0),
|
|
|
- (X: 1.0; Y: -1.0; Z: -1.0),
|
|
|
- (X: -1.0; Y: 1.0; Z: -1.0),
|
|
|
- (X: -1.0; Y: -1.0; Z: 1.0));
|
|
|
+ ((X: 0.5; Y: 0.5; Z: 0.5), // 0
|
|
|
+ (X: 0.5; Y: -0.5; Z: -0.5), // 1
|
|
|
+ (X: -0.5; Y: 0.5; Z: -0.5), // 2
|
|
|
+ (X: -0.5; Y: -0.5; Z: 0.5)); // 3
|
|
|
Triangles: packed array [0 .. 3] of packed array [0 .. 2] of Byte =
|
|
|
- ((0, 1, 3),
|
|
|
- (2, 1, 0),
|
|
|
- (3, 2, 0),
|
|
|
- (1, 2, 3));
|
|
|
+ ((0, 1, 3), // 0
|
|
|
+ (2, 1, 0), // 1
|
|
|
+ (3, 2, 0), // 2
|
|
|
+ (1, 2, 3)); // 3
|
|
|
+
|
|
|
var
|
|
|
i, j: Integer;
|
|
|
n: TAffineVector;
|
|
@@ -533,21 +534,21 @@ end;
|
|
|
procedure TGLOctahedron.BuildList(var rci: TGLRenderContextInfo);
|
|
|
const
|
|
|
Vertices: packed array [0 .. 5] of TAffineVector =
|
|
|
- ((X: 1.0; Y: 0.0; Z: 0.0),
|
|
|
- (X:-1.0; Y: 0.0; Z: 0.0),
|
|
|
- (X: 0.0; Y: 1.0; Z: 0.0),
|
|
|
- (X: 0.0; Y: -1.0; Z: 0.0),
|
|
|
- (X: 0.0; Y: 0.0; Z: 1.0),
|
|
|
- (X: 0.0; Y: 0.0; Z: -1.0));
|
|
|
+ ((X: 1.0; Y: 0.0; Z: 0.0), // 0
|
|
|
+ (X:-1.0; Y: 0.0; Z: 0.0), // 1
|
|
|
+ (X: 0.0; Y: 1.0; Z: 0.0), // 2
|
|
|
+ (X: 0.0; Y: -1.0; Z: 0.0), // 3
|
|
|
+ (X: 0.0; Y: 0.0; Z: 1.0), // 4
|
|
|
+ (X: 0.0; Y: 0.0; Z: -1.0)); // 5
|
|
|
Triangles: packed array [0 .. 7] of packed array [0 .. 2] of Byte =
|
|
|
- ((0, 4, 2),
|
|
|
- (1, 2, 4),
|
|
|
- (0, 3, 4),
|
|
|
- (1, 4, 3),
|
|
|
- (0, 2, 5),
|
|
|
- (1, 5, 2),
|
|
|
- (0, 5, 3),
|
|
|
- (1, 3, 5));
|
|
|
+ ((0, 4, 2), // 0
|
|
|
+ (1, 2, 4), // 1
|
|
|
+ (0, 3, 4), // 2
|
|
|
+ (1, 4, 3), // 3
|
|
|
+ (0, 2, 5), // 4
|
|
|
+ (1, 5, 2), // 5
|
|
|
+ (0, 5, 3), // 6
|
|
|
+ (1, 3, 5)); // 7
|
|
|
var
|
|
|
i, j: Integer;
|
|
|
n: TAffineVector;
|
|
@@ -596,7 +597,8 @@ begin
|
|
|
for i := 0 to 4 do
|
|
|
begin
|
|
|
faceIndices := @Quadrangles[i, 0];
|
|
|
- n := CalcPlaneNormal(vertices[faceIndices^[0]], vertices[faceIndices^[1]], vertices[faceIndices^[2]]);
|
|
|
+ n := CalcPlaneNormal(vertices[faceIndices^[0]],
|
|
|
+ vertices[faceIndices^[1]], vertices[faceIndices^[2]]);
|
|
|
gl.Normal3fv(@n);
|
|
|
gl.Begin_(GL_QUADS);
|
|
|
for j := 0 to 7 do
|
|
@@ -605,6 +607,70 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
+
|
|
|
+// ------------------
|
|
|
+// ------------------ TGLIcosahedron ------------------
|
|
|
+// ------------------
|
|
|
+
|
|
|
+procedure TGLIcosahedron.BuildList(var rci: TGLRenderContextInfo);
|
|
|
+const
|
|
|
+ B = 0.309017; // 1/(1+Sqrt(5))
|
|
|
+const
|
|
|
+ Vertices: packed array [0 .. 11] of TAffineVector =
|
|
|
+ ((X: 0; Y: - B; Z: - 0.5), // 0
|
|
|
+ (X: 0; Y: - B; Z: 0.5), // 1
|
|
|
+ (X: 0; Y: B; Z: - 0.5), // 2
|
|
|
+ (X: 0; Y: B; Z: 0.5), // 3
|
|
|
+ (X: - 0.5; Y: 0; Z: - B), // 4
|
|
|
+ (X: - 0.5; Y: 0; Z: B), // 5
|
|
|
+ (X: 0.5; Y: 0; Z: - B), // 6
|
|
|
+ (X: 0.5; Y: 0; Z: B), // 7
|
|
|
+ (X: - B; Y: - 0.5; Z: 0), // 8
|
|
|
+ (X: - B; Y: 0.5; Z: 0), // 9
|
|
|
+ (X: B; Y: - 0.5; Z: 0), // 10
|
|
|
+ (X: B; Y: 0.5; Z: 0)); // 11
|
|
|
+ Triangles: packed array [0 .. 19] of packed array [0 .. 2] of Byte =
|
|
|
+ ((2, 9, 11), // 0
|
|
|
+ (3, 11, 9), // 1
|
|
|
+ (3, 5, 1), // 2
|
|
|
+ (3, 1, 7), // 3
|
|
|
+ (2, 6, 0), // 4
|
|
|
+ (2, 0, 4), // 5
|
|
|
+ (1, 8, 10), // 6
|
|
|
+ (0, 10, 8), // 7
|
|
|
+ (9, 4, 5), // 8
|
|
|
+ (8, 5, 4), // 9
|
|
|
+ (11, 7, 6), // 10
|
|
|
+ (10, 6, 7), // 11
|
|
|
+ (3, 9, 5), // 12
|
|
|
+ (3, 7, 11), // 13
|
|
|
+ (2, 4, 9), // 14
|
|
|
+ (2, 11, 6), // 15
|
|
|
+ (0, 8, 4), // 16
|
|
|
+ (0, 6, 10), // 17
|
|
|
+ (1, 5, 8), // 18
|
|
|
+ (1, 10, 7)); // 19
|
|
|
+
|
|
|
+var
|
|
|
+ i, j: Integer;
|
|
|
+ n: TAffineVector;
|
|
|
+ faceIndices: PByteArray;
|
|
|
+begin
|
|
|
+ for i := 0 to 19 do
|
|
|
+ begin
|
|
|
+ faceIndices := @triangles[i, 0];
|
|
|
+
|
|
|
+ n := CalcPlaneNormal(vertices[faceIndices^[0]], vertices[faceIndices^[1]],
|
|
|
+ vertices[faceIndices^[2]]);
|
|
|
+ gl.Normal3fv(@n);
|
|
|
+ gl.Begin_(GL_TRIANGLES);
|
|
|
+ for j := 0 to 2 do
|
|
|
+ gl.Vertex3fv(@vertices[faceIndices^[j]]);
|
|
|
+ gl.End_;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+
|
|
|
// ------------------
|
|
|
// ------------------ TGLDodecahedron ------------------
|
|
|
// ------------------
|
|
@@ -654,44 +720,6 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
-// ------------------
|
|
|
-// ------------------ TGLIcosahedron ------------------
|
|
|
-// ------------------
|
|
|
-
|
|
|
-procedure TGLIcosahedron.BuildList(var rci: TGLRenderContextInfo);
|
|
|
-const
|
|
|
- A = 0.5;
|
|
|
- B = 0.30901699437; // 1/(1+Sqrt(5))
|
|
|
-const
|
|
|
- Vertices: packed array [0 .. 11] of TAffineVector =
|
|
|
- ((X: 0; Y: - B; Z: - A), (X: 0; Y: - B; Z: A), (X: 0; Y: B; Z: - A),
|
|
|
- (X: 0; Y: B; Z: A), (X: - A; Y: 0; Z: - B), (X: - A; Y: 0; Z: B),
|
|
|
- (X: A; Y: 0; Z: - B), (X: A; Y: 0; Z: B), (X: - B; Y: - A; Z: 0),
|
|
|
- (X: - B; Y: A; Z: 0), (X: B; Y: - A; Z: 0), (X: B; Y: A; Z: 0));
|
|
|
- Triangles: packed array [0 .. 19] of packed array [0 .. 2] of Byte =
|
|
|
- ((2, 9, 11), (3, 11, 9), (3, 5, 1), (3, 1, 7), (2, 6, 0),
|
|
|
- (2, 0, 4), (1, 8, 10), (0, 10, 8), (9, 4, 5), (8, 5, 4), (11, 7, 6),
|
|
|
- (10, 6, 7), (3, 9, 5), (3, 7, 11), (2, 4, 9), (2, 11, 6), (0, 8, 4),
|
|
|
- (0, 6, 10), (1, 5, 8), (1, 10, 7));
|
|
|
-
|
|
|
-var
|
|
|
- i, j: Integer;
|
|
|
- n: TAffineVector;
|
|
|
- faceIndices: PByteArray;
|
|
|
-begin
|
|
|
- for i := 0 to 19 do
|
|
|
- begin
|
|
|
- faceIndices := @triangles[i, 0];
|
|
|
-
|
|
|
- n := CalcPlaneNormal(vertices[faceIndices^[0]], vertices[faceIndices^[1]],
|
|
|
- vertices[faceIndices^[2]]);
|
|
|
- gl.Normal3fv(@n);
|
|
|
- gl.Begin_(GL_TRIANGLES);
|
|
|
- for j := 0 to 2 do
|
|
|
- gl.Vertex3fv(@vertices[faceIndices^[j]]);
|
|
|
- gl.End_;
|
|
|
- end;
|
|
|
-end;
|
|
|
|
|
|
// ------------------
|
|
|
// ------------------ TGLDisk ------------------
|