3d graphing
Author |
Message |
Homer_simpson
|
Posted: Mon Apr 20, 2009 12:28 pm Post subject: 3d graphing |
|
|
i was bored so i messed around with my old 3d engine
Quote: class Homer3Dengine
export loadass, moveobject, drawobject, camera, obj, movecamera
type dot :
record
x, y, z : real
end record
proc assign3d (var d : dot, x, y, z : real)
d.x := x
d.y := y
d.z := z + 10
end assign3d
type object :
record
axy, axz, ayz, cx, cy, cz : real
maxpoly : int
poly : array 1 .. 1000, 1 .. 2 of dot
col : array 1 .. 1000 of int
end record
var obj : object
type cam :
record
axy, axz, ayz, cx, cy, cz, zoom : real
end record
var camera : cam
camera.cx := 0
camera.cy := 0
camera.cz := 0
camera.axy := 0
camera.axz := 0
camera.ayz := 0
camera.zoom := 3000
proc loadass (filename : string)
var file, i : int := 0
var x1, y1, z1, x2, y2, z2, x3, y3, z3 : real
var col : int
loop
exit when i > 250
i += 1
%read : file, x1, y1, z1, x2, y2, z2, x3, y3, z3, col
x1 := (sind (i * 10) * 100) * (i / 30)
x2 := (sind ((i + 1) * 10 + 1) * 100) * ((i + 1) / 30)
y1 := (cosd (i * 10) * 100) * (i / 30)
y2 := (cosd ((i + 1) * 10 + 2) * 100) * ((i + 1) / 30)
z1 := i * 3
z2 := (i + 1) * 3
col := 2
assign3d (obj.poly (i, 1), x1, y1, z1)
assign3d (obj.poly (i, 2), x2, y2, z2)
obj.col (i) := col
end loop
obj.maxpoly := i
obj.axy := 0
obj.axz := 0
obj.ayz := 0
end loadass
proc rotate (OriginX, OriginY : real, var secondpartX, secondpartY : real, Rotaion : real)
var tempx := (((OriginX - secondpartX) * cosd (Rotaion)) + ((OriginY - secondpartY) * sind (Rotaion)))
var tempy := (((OriginY - secondpartY) * cosd (Rotaion)) - ((OriginX - secondpartX) * sind (Rotaion)))
secondpartY := OriginY - tempy
secondpartX := OriginX - tempx
end rotate
proc findcenter (var x, y, z : real)
x := 0.0
y := 0.0
z := 0.0
for i : 1 .. obj.maxpoly
for ii : 1 .. 2
x += obj.poly (i, ii).x
y += obj.poly (i, ii).y
z += obj.poly (i, ii).z
end for
end for
x /= (obj.maxpoly * 2)
y /= (obj.maxpoly * 2)
z /= (obj.maxpoly * 2)
%drawfilloval (round (obj.cx / (obj.cz / camera.zoom)) + 320, round (obj.cy / (obj.cz / camera.zoom)) + 200, 10, 10, 12)
end findcenter
proc draw3dpolygon (d1, d2, d3 : dot, c, c2 : int, filled : boolean)
if d1.z not= 0 and d2.z not= 0 and d3.z not= 0 then
% drawline (round (d1.x / (d1.z / camera.zoom)) + 320, round (d1.y / (d1.z / camera.zoom)) + 200, round (d2.x / (d2.z / camera.zoom)) + 320, round (d2.y / (d2.z / camera.zoom)) + 200, c)
% drawline (round (d1.x / (d1.z / camera.zoom)) + 320, round (d1.y / (d1.z / camera.zoom)) + 200, round (d3.x / (d3.z / camera.zoom)) + 320, round (d3.y / (d3.z / camera.zoom)) + 200, c)
% drawline (round (d2.x / (d2.z / camera.zoom)) + 320, round (d2.y / (d2.z / camera.zoom)) + 200, round (d3.x / (d3.z / camera.zoom)) + 320, round (d3.y / (d3.z / camera.zoom)) + 200, c)
%drawline (round (obj.cx / (obj.cz / camera.zoom)) + 320, round (obj.cy / (obj.cz / camera.zoom)) + 200, round (d2.x / (d2.z / camera.zoom)) + 320, round (d2.y / (d2.z / camera.zoom)) + 200, 12)
var xx : array 1 .. 3 of int
var yy : array 1 .. 3 of int
xx (1) := round ((d1.x - camera.cx) / ((d1.z - camera.cz) / camera.zoom)) + 320
xx (2) := round ((d2.x - camera.cx) / ((d2.z - camera.cz) / camera.zoom)) + 320
xx (3) := round ((d3.x - camera.cx) / ((d3.z - camera.cz) / camera.zoom)) + 320
yy (1) := round ((d1.y - camera.cy) / ((d1.z - camera.cz) / camera.zoom)) + 200
yy (2) := round ((d2.y - camera.cy) / ((d2.z - camera.cz) / camera.zoom)) + 200
yy (3) := round ((d3.y - camera.cy) / ((d3.z - camera.cz) / camera.zoom)) + 200
if filled then
%Draw.FillPolygon (xx, yy, 3, c)
%Draw.Polygon (xx, yy, 3, c)
end if
Draw.Polygon (xx, yy, 3, c2)
end if
end draw3dpolygon
proc draw3dline (d1, d2 : dot, c : int)
if d1.z not= 0 and d2.z not= 0 then
Draw.Line (round ((d1.x - camera.cx) / ((d1.z - camera.cz) / camera.zoom)) + 320, round ((d1.y - camera.cy) / ((d1.z - camera.cz) / camera.zoom)) + 200,
round ((d2.x - camera.cx) / ((d2.z - camera.cz) / camera.zoom)) + 320, round ((d2.y - camera.cy) / ((d2.z - camera.cz) / camera.zoom)) + 200, c)
end if
end draw3dline
proc drawobject (col, col2, typ : int)
var cent, tvec : dot;
if typ = 1 then
for i : 1 .. obj.maxpoly
%draw3dpolygon (obj.poly (i, 1), obj.poly (i, 2), obj.poly (i, 3), col, col2, true)
cent.x := (obj.poly (i, 1).x + obj.poly (i, 2).x) / 3
cent.y := (obj.poly (i, 1).y + obj.poly (i, 2).y) / 3
cent.z := (obj.poly (i, 1).z + obj.poly (i, 2).z) / 3
%tvec.x := cent.x + obj.normals (i).x * 2
%tvec.y := cent.y + obj.normals (i).y * 2
%tvec.z := cent.z + obj.normals (i).z * 2
%draw3dline (cent, tvec, white)
draw3dline (obj.poly (i, 1), obj.poly (i, 2), col2)
%draw3dpolygon (tvec, tvec, tvec, col, col2, true)
end for
end if
end drawobject
proc moveobject (s : string, d : real)
findcenter (obj.cx, obj.cy, obj.cz)
case s of
label "xy" :
obj.axy += d
for i : 1 .. obj.maxpoly
for ii : 1 .. 2
rotate (obj.cx, obj.cy, obj.poly (i, ii).x, obj.poly (i, ii).y, d)
end for
end for
label "xz" :
obj.axz += d
for i : 1 .. obj.maxpoly
for ii : 1 .. 2
rotate (obj.cx, obj.cz, obj.poly (i, ii).x, obj.poly (i, ii).z, d)
end for
end for
label "yz" :
obj.ayz += d
for i : 1 .. obj.maxpoly
for ii : 1 .. 2
rotate (obj.cy, obj.cz, obj.poly (i, ii).y, obj.poly (i, ii).z, d)
end for
end for
label "x" :
for i : 1 .. obj.maxpoly
for ii : 1 .. 3
obj.poly (i, ii).x += d
end for
end for
label "y" :
for i : 1 .. obj.maxpoly
for ii : 1 .. 3
obj.poly (i, ii).y += d
end for
end for
label "z" :
for i : 1 .. obj.maxpoly
for ii : 1 .. 2
obj.poly (i, ii).z += d
end for
end for
label :
end case
end moveobject
proc movecamera (s : string, d : real)
case s of
label "xy" :
camera.axy += d
for i : 1 .. obj.maxpoly
for ii : 1 .. 3
rotate (camera.cx, camera.cy, obj.poly (i, ii).x, obj.poly (i, ii).y, d)
end for
end for
label "xz" :
camera.axz += d
for i : 1 .. obj.maxpoly
for ii : 1 .. 3
rotate (camera.cx, camera.cz, obj.poly (i, ii).x, obj.poly (i, ii).z, d)
end for
end for
label "yz" :
camera.ayz += d
for i : 1 .. obj.maxpoly
for ii : 1 .. 3
rotate (camera.cy, camera.cz, obj.poly (i, ii).y, obj.poly (i, ii).z, d)
end for
end for
label "x" :
camera.cx += d
label "y" :
camera.cy += d
label "z" :
camera.cz += d
label "zoom" :
camera.zoom += d
if camera.zoom = 0 then
camera.zoom += d
end if
label :
end case
end movecamera
end Homer3Dengine
var spike : ^Homer3Dengine
new Homer3Dengine, spike
%spike -> loadarf ("spike.arf")
spike -> loadass ("spike.arf")
colorback (black)
cls
View.Set ("offscreenonly")
spike -> moveobject ("z", 17000)
color (white)
loop
locate (1, 1)
/*put "Object coords : ", spike -> obj.cx, " / ", spike -> obj.cy, " / ", spike -> obj.cz, " / "
put "Object angles : ", spike -> obj.axy mod 360, " / ", spike -> obj.axz mod 360, " / ", spike -> obj.ayz mod 360, " / "
put "Camera coords : ", spike -> camera.cx, " / ", spike -> camera.cy, " / ", spike -> camera.cz, " / "
put "Camera angles : ", spike -> camera.axy mod 360, " / ", spike -> camera.axz mod 360, " / ", spike -> camera.ayz mod 360, " / "
put "Camera zoom : ", spike -> camera.zoom, "X"%*/
spike -> moveobject ("xz", 1) %rotates the object in xz axis
spike -> moveobject ("yz", 1) %rotates the object in xz axis
%spike -> moveobject ("x", 1) %moves object in x axis
%spike -> movecamera ("z", -1) %moves camera in z axis
spike -> drawobject (1, 10, 1) %draws the object with color 1 and 10 and in method 1
View.Update
delay (5)
cls
end loop
|
|
|
|
|
|
Sponsor Sponsor
|
|
|
Homer_simpson
|
Posted: Mon Apr 20, 2009 12:50 pm Post subject: Re: 3d graphing |
|
|
here's another one : Quote: class Homer3Dengine
export loadass, moveobject, drawobject, camera, obj, movecamera
type dot :
record
x, y, z : real
end record
proc assign3d (var d : dot, x, y, z : real)
d.x := x
d.y := y
d.z := z + 10
end assign3d
type object :
record
axy, axz, ayz, cx, cy, cz : real
maxpoly : int
poly : array 1 .. 1000, 1 .. 2 of dot
col : array 1 .. 1000 of int
end record
var obj : object
type cam :
record
axy, axz, ayz, cx, cy, cz, zoom : real
end record
var camera : cam
camera.cx := 0
camera.cy := 0
camera.cz := 0
camera.axy := 0
camera.axz := 0
camera.ayz := 0
camera.zoom := 3000
proc loadass (filename : string)
var file, i : int := 0
var x1, y1, z1, x2, y2, z2, x3, y3, z3 : real
var col : int
loop
exit when i > 250
i += 1
%read : file, x1, y1, z1, x2, y2, z2, x3, y3, z3, col
x1 := (sind (i * 10) * 100) * (i / 30)
x2 := (sind ((i + 1) * 10) * 100) * ((i + 1) / 30)
y1 := (cosd (i * 10) * 100) * (i / 30)
y2 := (cosd ((i + 1) * 10) * 100) * ((i + 1) / 30)
z1 := (sind (i * 20) * 50) * (i / 30) %(i * i)/50
z2 := (sind ((i + 1) * 20) * 50) * (i / 30) %((i + 1)*(i+1)) / 50
col := 2
assign3d (obj.poly (i, 1), x1, y1, z1)
assign3d (obj.poly (i, 2), x2, y2, z2)
obj.col (i) := col
end loop
obj.maxpoly := i
obj.axy := 0
obj.axz := 0
obj.ayz := 0
end loadass
proc rotate (OriginX, OriginY : real, var secondpartX, secondpartY : real, Rotaion : real)
var tempx := (((OriginX - secondpartX) * cosd (Rotaion)) + ((OriginY - secondpartY) * sind (Rotaion)))
var tempy := (((OriginY - secondpartY) * cosd (Rotaion)) - ((OriginX - secondpartX) * sind (Rotaion)))
secondpartY := OriginY - tempy
secondpartX := OriginX - tempx
end rotate
proc findcenter (var x, y, z : real)
x := 0.0
y := 0.0
z := 0.0
for i : 1 .. obj.maxpoly
for ii : 1 .. 2
x += obj.poly (i, ii).x
y += obj.poly (i, ii).y
z += obj.poly (i, ii).z
end for
end for
x /= (obj.maxpoly * 2)
y /= (obj.maxpoly * 2)
z /= (obj.maxpoly * 2)
%drawfilloval (round (obj.cx / (obj.cz / camera.zoom)) + 320, round (obj.cy / (obj.cz / camera.zoom)) + 200, 10, 10, 12)
end findcenter
proc draw3dline (d1, d2 : dot, c : int)
if d1.z not= 0 and d2.z not= 0 then
Draw.ThickLine (round ((d1.x - camera.cx) / ((d1.z - camera.cz) / camera.zoom)) + 320, round ((d1.y - camera.cy) / ((d1.z - camera.cz) / camera.zoom)) + 200,
round ((d2.x - camera.cx) / ((d2.z - camera.cz) / camera.zoom)) + 320, round ((d2.y - camera.cy) / ((d2.z - camera.cz) / camera.zoom)) + 200, 3, c)
end if
end draw3dline
proc drawobject (col, col2, typ : int)
var cent, tvec : dot;
if typ = 1 then
for i : 1 .. obj.maxpoly
%draw3dpolygon (obj.poly (i, 1), obj.poly (i, 2), obj.poly (i, 3), col, col2, true)
cent.x := (obj.poly (i, 1).x + obj.poly (i, 2).x) / 3
cent.y := (obj.poly (i, 1).y + obj.poly (i, 2).y) / 3
cent.z := (obj.poly (i, 1).z + obj.poly (i, 2).z) / 3
%tvec.x := cent.x + obj.normals (i).x * 2
%tvec.y := cent.y + obj.normals (i).y * 2
%tvec.z := cent.z + obj.normals (i).z * 2
%draw3dline (cent, tvec, white)
draw3dline (obj.poly (i, 1), obj.poly (i, 2), col2)
%draw3dpolygon (tvec, tvec, tvec, col, col2, true)
end for
end if
end drawobject
proc moveobject (s : string, d : real)
findcenter (obj.cx, obj.cy, obj.cz)
case s of
label "xy" :
obj.axy += d
for i : 1 .. obj.maxpoly
for ii : 1 .. 2
rotate (obj.cx, obj.cy, obj.poly (i, ii).x, obj.poly (i, ii).y, d)
end for
end for
label "xz" :
obj.axz += d
for i : 1 .. obj.maxpoly
for ii : 1 .. 2
rotate (obj.cx, obj.cz, obj.poly (i, ii).x, obj.poly (i, ii).z, d)
end for
end for
label "yz" :
obj.ayz += d
for i : 1 .. obj.maxpoly
for ii : 1 .. 2
rotate (obj.cy, obj.cz, obj.poly (i, ii).y, obj.poly (i, ii).z, d)
end for
end for
label "x" :
for i : 1 .. obj.maxpoly
for ii : 1 .. 3
obj.poly (i, ii).x += d
end for
end for
label "y" :
for i : 1 .. obj.maxpoly
for ii : 1 .. 3
obj.poly (i, ii).y += d
end for
end for
label "z" :
for i : 1 .. obj.maxpoly
for ii : 1 .. 2
obj.poly (i, ii).z += d
end for
end for
label :
end case
end moveobject
proc movecamera (s : string, d : real)
case s of
label "xy" :
camera.axy += d
for i : 1 .. obj.maxpoly
for ii : 1 .. 3
rotate (camera.cx, camera.cy, obj.poly (i, ii).x, obj.poly (i, ii).y, d)
end for
end for
label "xz" :
camera.axz += d
for i : 1 .. obj.maxpoly
for ii : 1 .. 3
rotate (camera.cx, camera.cz, obj.poly (i, ii).x, obj.poly (i, ii).z, d)
end for
end for
label "yz" :
camera.ayz += d
for i : 1 .. obj.maxpoly
for ii : 1 .. 3
rotate (camera.cy, camera.cz, obj.poly (i, ii).y, obj.poly (i, ii).z, d)
end for
end for
label "x" :
camera.cx += d
label "y" :
camera.cy += d
label "z" :
camera.cz += d
label "zoom" :
camera.zoom += d
if camera.zoom = 0 then
camera.zoom += d
end if
label :
end case
end movecamera
end Homer3Dengine
var spike : ^Homer3Dengine
new Homer3Dengine, spike
%spike -> loadarf ("spike.arf")
spike -> loadass ("spike.arf")
colorback (black)
cls
View.Set ("offscreenonly")
spike -> moveobject ("z", 17000)
color (white)
loop
locate (1, 1)
/*put "Object coords : ", spike -> obj.cx, " / ", spike -> obj.cy, " / ", spike -> obj.cz, " / "
put "Object angles : ", spike -> obj.axy mod 360, " / ", spike -> obj.axz mod 360, " / ", spike -> obj.ayz mod 360, " / "
put "Camera coords : ", spike -> camera.cx, " / ", spike -> camera.cy, " / ", spike -> camera.cz, " / "
put "Camera angles : ", spike -> camera.axy mod 360, " / ", spike -> camera.axz mod 360, " / ", spike -> camera.ayz mod 360, " / "
put "Camera zoom : ", spike -> camera.zoom, "X"%*/
spike -> moveobject ("xy", .5) %rotates the object in xz axis
spike -> moveobject ("xz", 1) %rotates the object in xz axis
spike -> moveobject ("yz", 1) %rotates the object in xz axis
%spike -> moveobject ("x", 1) %moves object in x axis
%spike -> movecamera ("z", -1) %moves camera in z axis
spike -> drawobject (1, 10, 1) %draws the object with color 1 and 10 and in method 1
View.Update
delay (5)
cls
end loop
you can replace this procedure to get different effects
Quote: |
|
|
|
|
|
saltpro15
|
Posted: Mon Apr 20, 2009 2:20 pm Post subject: RE:3d graphing |
|
|
...
* starts slow clap * |
|
|
|
|
|
Homer_simpson
|
Posted: Tue Apr 21, 2009 5:45 pm Post subject: Re: 3d graphing |
|
|
here's one with controls : arrow keys
Quote: class Homer3Dengine
export loadass, moveobject, drawobject, camera, obj, movecamera
type dot :
record
x, y, z : real
end record
proc assign3d (var d : dot, x, y, z : real)
d.x := x
d.y := y
d.z := z + 10
end assign3d
type object :
record
axy, axz, ayz, cx, cy, cz : real
maxpoly : int
poly : array 1 .. 1000, 1 .. 2 of dot
col : array 1 .. 1000 of int
end record
var obj : object
type cam :
record
axy, axz, ayz, cx, cy, cz, zoom : real
end record
var camera : cam
camera.cx := 0
camera.cy := 0
camera.cz := 0
camera.axy := 0
camera.axz := 0
camera.ayz := 0
camera.zoom := 3000
proc loadass (var1, var2 : real)
var file, i : int := 0
var x1, y1, z1, x2, y2, z2 : real
var col : int
%var var1 := 30
loop
exit when i > 450
i += 1
%read : file, x1, y1, z1, x2, y2, z2, x3, y3, z3, col
x1 := (sind (i * var1) * 100) * (i / 30)
x2 := (sind ((i + 1) * var1) * 100) * ((i + 1) / 30)
y1 := (cosd (i * var1) * 100) * (i / 30)
y2 := (cosd ((i + 1) * var1) * 100) * ((i + 1) / 30)
z1 := (sind (i * var2) * 50) * (i / 50) %(i * i)/50
z2 := (sind ((i + 1) * var2) * 50) * ((i + 1) / 50) %((i + 1)*(i+1)) / 50
col := 2
assign3d (obj.poly (i, 1), x1, y1, z1)
assign3d (obj.poly (i, 2), x2, y2, z2)
obj.col (i) := col
end loop
obj.maxpoly := i
obj.axy := 0
obj.axz := 0
obj.ayz := 0
end loadass
proc rotate (OriginX, OriginY : real, var secondpartX, secondpartY : real, Rotaion : real)
var tempx := (((OriginX - secondpartX) * cosd (Rotaion)) + ((OriginY - secondpartY) * sind (Rotaion)))
var tempy := (((OriginY - secondpartY) * cosd (Rotaion)) - ((OriginX - secondpartX) * sind (Rotaion)))
secondpartY := OriginY - tempy
secondpartX := OriginX - tempx
end rotate
proc findcenter (var x, y, z : real)
x := 0.0
y := 0.0
z := 0.0
for i : 1 .. obj.maxpoly
for ii : 1 .. 2
x += obj.poly (i, ii).x
y += obj.poly (i, ii).y
z += obj.poly (i, ii).z
end for
end for
x /= (obj.maxpoly * 2)
y /= (obj.maxpoly * 2)
z /= (obj.maxpoly * 2)
%drawfilloval (round (obj.cx / (obj.cz / camera.zoom)) + 320, round (obj.cy / (obj.cz / camera.zoom)) + 200, 10, 10, 12)
end findcenter
proc draw3dline (d1, d2 : dot, c : int)
if d1.z not= 0 and d2.z not= 0 then
Draw.ThickLine (round ((d1.x - camera.cx) / ((d1.z - camera.cz) / camera.zoom)) + 320, round ((d1.y - camera.cy) / ((d1.z - camera.cz) / camera.zoom)) + 200,
round ((d2.x - camera.cx) / ((d2.z - camera.cz) / camera.zoom)) + 320, round ((d2.y - camera.cy) / ((d2.z - camera.cz) / camera.zoom)) + 200, 1, c)
end if
end draw3dline
proc drawobject (col, col2, typ : int)
var cent, tvec : dot;
if typ = 1 then
for i : 1 .. obj.maxpoly
%draw3dpolygon (obj.poly (i, 1), obj.poly (i, 2), obj.poly (i, 3), col, col2, true)
cent.x := (obj.poly (i, 1).x + obj.poly (i, 2).x) / 3
cent.y := (obj.poly (i, 1).y + obj.poly (i, 2).y) / 3
cent.z := (obj.poly (i, 1).z + obj.poly (i, 2).z) / 3
%tvec.x := cent.x + obj.normals (i).x * 2
%tvec.y := cent.y + obj.normals (i).y * 2
%tvec.z := cent.z + obj.normals (i).z * 2
%draw3dline (cent, tvec, white)
draw3dline (obj.poly (i, 1), obj.poly (i, 2), col2)
%draw3dpolygon (tvec, tvec, tvec, col, col2, true)
end for
end if
end drawobject
proc moveobject (s : string, d : real)
findcenter (obj.cx, obj.cy, obj.cz)
case s of
label "xy" :
obj.axy += d
for i : 1 .. obj.maxpoly
for ii : 1 .. 2
rotate (obj.cx, obj.cy, obj.poly (i, ii).x, obj.poly (i, ii).y, d)
end for
end for
label "xz" :
obj.axz += d
for i : 1 .. obj.maxpoly
for ii : 1 .. 2
rotate (obj.cx, obj.cz, obj.poly (i, ii).x, obj.poly (i, ii).z, d)
end for
end for
label "yz" :
obj.ayz += d
for i : 1 .. obj.maxpoly
for ii : 1 .. 2
rotate (obj.cy, obj.cz, obj.poly (i, ii).y, obj.poly (i, ii).z, d)
end for
end for
label "x" :
for i : 1 .. obj.maxpoly
for ii : 1 .. 3
obj.poly (i, ii).x += d
end for
end for
label "y" :
for i : 1 .. obj.maxpoly
for ii : 1 .. 3
obj.poly (i, ii).y += d
end for
end for
label "z" :
for i : 1 .. obj.maxpoly
for ii : 1 .. 2
obj.poly (i, ii).z += d
end for
end for
label :
end case
end moveobject
proc movecamera (s : string, d : real)
case s of
label "xy" :
camera.axy += d
for i : 1 .. obj.maxpoly
for ii : 1 .. 3
rotate (camera.cx, camera.cy, obj.poly (i, ii).x, obj.poly (i, ii).y, d)
end for
end for
label "xz" :
camera.axz += d
for i : 1 .. obj.maxpoly
for ii : 1 .. 3
rotate (camera.cx, camera.cz, obj.poly (i, ii).x, obj.poly (i, ii).z, d)
end for
end for
label "yz" :
camera.ayz += d
for i : 1 .. obj.maxpoly
for ii : 1 .. 3
rotate (camera.cy, camera.cz, obj.poly (i, ii).y, obj.poly (i, ii).z, d)
end for
end for
label "x" :
camera.cx += d
label "y" :
camera.cy += d
label "z" :
camera.cz += d
label "zoom" :
camera.zoom += d
if camera.zoom = 0 then
camera.zoom += d
end if
label :
end case
end movecamera
end Homer3Dengine
var spike : ^Homer3Dengine
new Homer3Dengine, spike
%spike -> loadarf ("spike.arf")
colorback (black)
cls
View.Set ("offscreenonly")
var ch : char := " ";
var v, v2 : real := 20.5
var xy, xz, yz : real
v2 := 20
spike -> loadass (v, v2)
spike -> moveobject ("z", 17000)
color (white)
loop
if Input.hasch then
ch := getchar
if ord (ch) = 200 then
v += .1
end if
if ord (ch) = 208 then
v -= .1
end if
if ord (ch) = 205 then
v2 += .1
end if
if ord (ch) = 203 then
v2 -= .1
end if
xz := spike -> obj.axz
yz := spike -> obj.ayz
xy := spike -> obj.axy
spike -> loadass (v, v2)
spike -> moveobject ("z", 8500)
%spike -> moveobject ("xy", xy)
%spike -> moveobject ("xz", xz)
%spike -> moveobject ("yz", yz)
spike -> moveobject ("z", 17000)
end if
locate (1, 1)
/*put "Object coords : ", spike -> obj.cx, " / ", spike -> obj.cy, " / ", spike -> obj.cz, " / "
put "Object angles : ", spike -> obj.axy mod 360, " / ", spike -> obj.axz mod 360, " / ", spike -> obj.ayz mod 360, " / "
put "Camera coords : ", spike -> camera.cx, " / ", spike -> camera.cy, " / ", spike -> camera.cz, " / "
put "Camera angles : ", spike -> camera.axy mod 360, " / ", spike -> camera.axz mod 360, " / ", spike -> camera.ayz mod 360, " / "
put "Camera zoom : ", spike -> camera.zoom, "X"%*/
spike -> moveobject ("xy", .5) %rotates the object in xz axis
spike -> moveobject ("xz", 1) %rotates the object in xz axis
spike -> moveobject ("yz", 1) %rotates the object in xz axis
%spike -> moveobject ("x", 1) %moves object in x axis
%spike -> movecamera ("z", -1) %moves camera in z axis
spike -> drawobject (1, 10, 1) %draws the object with color 1 and 10 and in method 1
View.Update
delay (5)
cls
end loop
|
|
|
|
|
|
|
|