initial commit
This commit is contained in:
commit
60db522e87
107 changed files with 36924 additions and 0 deletions
81
examples/3dcube.pas
Normal file
81
examples/3dcube.pas
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
program cube;
|
||||
const Cw = 640;
|
||||
Ch = 400;
|
||||
Vw = 4;
|
||||
Vh = 3;
|
||||
D = 3.5;
|
||||
|
||||
RED = 2;
|
||||
GREEN = 3;
|
||||
BLUE = 4;
|
||||
|
||||
type point2d = record x,y:real; end;
|
||||
point3d = record x,y,z:real; end;
|
||||
|
||||
var vAf,vBf,vCf,vDf:point3d;
|
||||
vAb,vBb,vCb,vDb:point3d;
|
||||
|
||||
function viewportToCanvas(x,y:real):point2d;
|
||||
begin
|
||||
viewportToCanvas.x := x * Cw/Vw;
|
||||
viewportToCanvas.y := y * Ch/Vh;
|
||||
end;
|
||||
|
||||
function projectVertex(v:point3d):point2d;
|
||||
begin
|
||||
projectVertex := viewportToCanvas(v.x * D / v.z, v.y * D / v.z);
|
||||
end;
|
||||
|
||||
procedure initPoint3d(var p:point3d;x,y,z:real);
|
||||
begin
|
||||
p.x := x;
|
||||
p.y := y;
|
||||
p.z := z;
|
||||
end;
|
||||
|
||||
procedure DrawLine2d(p1,p2:point2d; color:integer);
|
||||
begin
|
||||
drawline(Cw div 2 + trunc(p1.x),Ch div 2 + trunc(p1.y),
|
||||
Cw div 2 + trunc(p2.x), Ch div 2 + trunc(p2.y),
|
||||
color);
|
||||
end;
|
||||
|
||||
begin
|
||||
initGraphics;
|
||||
|
||||
(* The four "front" vertices *)
|
||||
initPoint3d(vAf,-2.0, -0.5, 5.0);
|
||||
initPoint3d(vBf,-2.0, 0.5, 5.0);
|
||||
initPoint3d(vCf,-1.0, 0.5, 5.0);
|
||||
initPoint3d(vDf,-1.0, -0.5, 5.0);
|
||||
|
||||
(* The four "back" vertices *)
|
||||
(*
|
||||
vAb = [-2, -0.5, 6]
|
||||
vBb = [-2, 0.5, 6]
|
||||
vCb = [-1, 0.5, 6]
|
||||
vDb = [-1, -0.5, 6] *)
|
||||
|
||||
initPoint3d(vAb,-2.0, -0.5, 6.0);
|
||||
initPoint3d(vBb,-2.0, 0.5, 6.0);
|
||||
initPoint3d(vCb,-1.0, 0.5, 6.0);
|
||||
initPoint3d(vDb,-1.0, -0.5, 6.0);
|
||||
|
||||
(* The front face *)
|
||||
DrawLine2d(ProjectVertex(vAf), ProjectVertex(vBf), BLUE);
|
||||
DrawLine2d(ProjectVertex(vBf), ProjectVertex(vCf), BLUE);
|
||||
DrawLine2d(ProjectVertex(vCf), ProjectVertex(vDf), BLUE);
|
||||
DrawLine2d(ProjectVertex(vDf), ProjectVertex(vAf), BLUE);
|
||||
|
||||
(* The back face *)
|
||||
DrawLine2d(ProjectVertex(vAb), ProjectVertex(vBb), RED);
|
||||
DrawLine2d(ProjectVertex(vBb), ProjectVertex(vCb), RED);
|
||||
DrawLine2d(ProjectVertex(vCb), ProjectVertex(vDb), RED);
|
||||
DrawLine2d(ProjectVertex(vDb), ProjectVertex(vAb), RED);
|
||||
|
||||
(* The front-to-back edges *)
|
||||
DrawLine2d(ProjectVertex(vAf), ProjectVertex(vAb), GREEN);
|
||||
DrawLine2d(ProjectVertex(vBf), ProjectVertex(vBb), GREEN);
|
||||
DrawLine2d(ProjectVertex(vCf), ProjectVertex(vCb), GREEN);
|
||||
DrawLine2d(ProjectVertex(vDf), ProjectVertex(vDb), GREEN);
|
||||
end.
|
||||
Loading…
Add table
Add a link
Reference in a new issue