]> git.jsancho.org Git - guile-irrlicht.git/blob - examples/01-hello-world.scm
5269400346b7be28cd8fe239223e712adf156c6b
[guile-irrlicht.git] / examples / 01-hello-world.scm
1 ;;; guile-irrlicht --- FFI bindings for Irrlicht Engine
2 ;;; Copyright (C) 2019 Javier Sancho <jsf@jsancho.org>
3 ;;;
4 ;;; This file is part of guile-irrlicht.
5 ;;;
6 ;;; Guile-irrlicht is free software; you can redistribute it and/or modify
7 ;;; it under the terms of the GNU Lesser General Public License as
8 ;;; published by the Free Software Foundation; either version 3 of the
9 ;;; License, or (at your option) any later version.
10 ;;;
11 ;;; Guile-irrlicht is distributed in the hope that it will be useful, but
12 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 ;;; General Public License for more details.
15 ;;;
16 ;;; You should have received a copy of the GNU Lesser General Public
17 ;;; License along with guile-irrlicht.  If not, see
18 ;;; <http://www.gnu.org/licenses/>.
19
20
21 ;;; Irrlicht 01.HelloWorld example
22 ;;; http://irrlicht.sourceforge.net/docu/example001.html
23
24
25 (use-modules (irrlicht)
26              (oop goops))
27
28 (define (media-path file)
29   (let ((current-path (dirname (current-filename))))
30     (string-join (list current-path "media" file) file-name-separator-string)))
31
32 ;; start up the engine
33 (define device
34   (create-device
35    EDT-SOFTWARE
36    (make <dimension2du> #:args '(640 480))))
37
38 (set-window-caption device "Hello World! - Irrlicht Engine Demo")
39
40 (define driver (get-video-driver device))
41 (define scene-manager (get-scene-manager device))
42 (define gui-env (get-gui-environment device))
43
44 ;; static text
45 (add-static-text
46  gui-env
47  "Hello World! This is the Irrlicht Software renderer!"
48  (make <recti> #:args '(10 10 260 22))
49  #t)
50
51 ;; load a Quake2 model
52 (define mesh (get-mesh scene-manager (media-path "sydney.md2")))
53 (define node (add-animated-mesh-scene-node scene-manager mesh))
54 (set-material-flag node EMF-LIGHTING #f)
55 (set-md2-animation node EMAT-STAND)
56 (set-material-texture node 0 (get-texture driver (media-path "sydney.bmp")))
57
58 ;; place camera
59 (let ((position (make <vector3df> #:args '(0 30 -40)))
60       (lookat (make <vector3df> #:args '(0 5 0))))
61   (add-camera-scene-node scene-manager node position lookat))
62
63 ;; draw everything
64 (let ((back-buffer #t)
65       (z-buffer #t)
66       (color (make <s-color> #:args '(255 100 101 140))))
67   (while (run device)
68     (begin-scene driver back-buffer z-buffer color)
69     (draw-all scene-manager)
70     (draw-all gui-env)
71     (end-scene driver)))
72
73 ;; delete device
74 (drop device)
75 (exit #t)