View in color | License | Download script | History | Other scripts by: crazyaxe |
30-Apr 5:12 UTC
[0.053] 18.5k
[0.053] 18.5k
advanced-r3d.rREBOL [
Title: "Advanced R3D demo"
Author: "Massimiliano Vessi"
Email: %maxint--tiscali--it
Date: 09-Oct-2012
version: 3.1.6
file: %advanced-r3d.r
Purpose: "R3D demo"
;following data are for www.rebol.org library
;you can find a lot of rebol script there
library: [
level: 'intermidiate
platform: 'all type: [demo tool]
domain: [animation graphics]
tested-under: [windows linux]
support: none
license: [gpl]
see-also: none
]
]
if not exists? %3D-models/ [make-dir %3D-models/ ]
change-dir %3D-models/
if not exists? %r3d2.r [ request-download/to http://www.rebol.org/download-a-script.r?script-name=r3d2.r %r3d2.r ]
do %r3d2.r
if not exists? %palms.jpg [ request-download/to http://www.rebol.com/view/demos/palms.jpg %palms.jpg ]
img: load-image %palms.jpg
list-3d: [Apple.off asu.off dragon.off goblet.off
head.off heart.off helm.off house.off
king.off klingon.off mushroom.off pear.off
r2.off seashell.off space_shuttle.off space_station.off
Sword01.off teapot.off volks.off x29_plane.off ]
foreach item list-3d [
item2: to-file item
if not exists? to-file item2 [ request-download/to (join http://www.maxvessi.net/rebsite/3D-models/ item) item2 ]
]
Transx: 300
Transy: 290
Transz: 320
projection: 256
hr: 1
model: cube-model
color2: color: red ;color2 is the backup of the color
colorb2: colorb: black ;background
backg: 0
dimx: dimy: dimz: 100
reset-3d: func [] [dimx: dimy: dimz: 100] ;to reset view
translx: transly: translz: 0
rotx: roty: rotz: 0
; Set some camera
Lookatx: Lookaty: Lookatz: 100.0 ; starting camera will look this position
no-cull: false
;model: reduce [cube-model (r3d-scale dimx dimy dimz) red ]
do update-3d: func [
] [ ; This "update" function is where
world: copy [] ; everything is defined.
properties: r3d-compose-m4 reduce [
r3d-scale dimx dimy dimz
r3d-translate translx transly translz
r3d-rotateX rotx
r3d-rotateY roty
r3d-rotateZ rotz
]
object: reduce [ model properties color]
append world reduce [ object ]
camera: r3d-position-object reduce [Transx Transy Transz] reduce [Lookatx Lookaty Lookatz] reduce [sine hr 0 cosine hr]
either no-cull [RenderTriangles: render/no-cull world camera (r3d-perspective projection) 400x360][
RenderTriangles: render world camera (r3d-perspective projection) 400x360]
switch backg [
0 [ none ]
1 [ insert RenderTriangles [image 0x0 400x360 logo.gif] ]
2 [ insert RenderTriangles [
pen none
fill-pen linear 0x0 0 90 90 1 1 blue sky brown
box 0x0 400x360
] ]
]
;probe RenderTriangles ; This line demonstrates what's going on
] ; under the hood. You can eliminate it.
view layout [
panel [
scrn: box 400x360 black effect [draw RenderTriangles] ; basic draw
return
h2 "Objects"
radio-line true "Box made of 12 triangle faces" [model: cube-model no-cull: false update-3d show scrn ]
radio-line "Cube red made of 6 square faces" [model: cube2-model no-cull: false update-3d show scrn ]
radio-line "Triangular pyramid" [model: pyramid-model no-cull: false update-3d show scrn ]
radio-line "Square pyramid transparent red" [model: square-pyramid-model no-cull: false update-3d show scrn ]
radio-line "Octagonal prysm" [model: prysm-8-model no-cull: false update-3d show scrn ]
radio-line as-is "Just a face, faces have just one side shown, ^/ move RotationZ to see it" [model: wall-model no-cull: false projection: 256 update-3d show scrn ]
panel [
across
btn "Load OFF file..." [
no-cull: true
off-file: request-file/only/filter/title "*.off" "Select a OFF file:" "Load"
model: r3d-Load-OFF off-file
; calculate default scale from model/3 if it exists
modelsize: 1.0
modelsize: model/3
if modelsize < 1.0 [ modelsize: 1.0 ]
defaultScale: 512 / modelsize
dimx: dimy: dimz: defaultScale
update-3d
show scrn
]
btn "Reset dimensions" [reset-3d update-3d show scrn]
return
text italic 250 {Since not all models have a correct normal face orientation,
I turned off back face culling for the model downloaded. I can be slow on old PC.}
]
]
panel [
h2 "Camera"
panel 142.101.117 [
label "TransX"
slider 60x16 [Transx: 300 - (value * 600 ) update-3d show scrn]
label "TransY"
slider 60x16 [Transy: 290 - (value * 600 ) update-3d show scrn]
label "TransZ"
slider 60x16 [Transz: 320 - (value * 600) update-3d show scrn]
return
label "LookatX"
slider 0.17 60x16 [Lookatx: (value * 600 ) update-3d show scrn]
label "LookatY"
slider 0.17 60x16 [Lookaty: (value * 600 ) update-3d show scrn]
label "LookatZ"
slider 0.17 60x16 [Lookatz: (value * 600 ) update-3d show scrn]
return
label "Projection"
slider 0.5 60x16 [projection: (value * 500 )
if projection = 0 [projection: 0.1]
update-3d
show scrn
]
label "UP vector"
slider 60x16 [hr: (value * 360 )
if hr = 0 [hr: 0.1]
update-3d
show scrn
]
]
return
h2 "Objects properties"
panel 0.51.64 [
label "DeformX"
slider 0.17 60x16 [dimx: value * 600 update-3d show scrn]
label "DeformY"
slider 0.17 60x16 [dimy: value * 600 update-3d show scrn]
label "DeformZ"
slider 0.17 60x16 [dimz: value * 600 update-3d show scrn]
return
label "TransX"
slider 60x16 [translx: value * 600 update-3d show scrn]
label "TransY"
slider 60x16 [transly: value * 600 update-3d show scrn]
label "TransZ"
slider 60x16 [translz: value * 600 update-3d show scrn]
return
label "RotationX"
slider 60x16 [rotx: value * 360 update-3d show scrn]
label "RotationY"
slider 60x16 [roty: value * 360 update-3d show scrn]
label "RotationZ"
slider 60x16 [rotz: value * 360 update-3d show scrn]
]
return
h2 "Color and bitmap"
panel 39.80.0 edge [size: 5x5 color: 39.80.0 ] [
across
radio true [color: color2 update-3d show scrn]
label "Object with color"
button 39.80.0 "Change color" [
color: request-color
if none? color [color: color2]
color2: color
update-3d
show scrn
]
return
radio [color2: color color: img update-3d show scrn]
label "Object with image"
return
panel [
across
radio true [
backg: 0
colorb: colorb2
scrn/color: colorb
update-3d
show scrn
]
label "Bakcground with color"
button 39.80.0 "Change color" [
colorb: request-color
if none? colorb [colorb: colorb2]
colorb2: colorb
scrn/color: colorb
show scrn
]
return
radio [backg: 1 update-3d show scrn]
label "Background with image"
return
radio [backg: 2 update-3d show scrn]
label "Background 3D"
]
]
]
] Notes
|