New Engine, New Screen Shot.

April 27, 2009 – 4:13 pm

剛剛看到日子,有一年零四日沒有更新.. :)

最近看到同事和朋友的Blog中,大家也在開發自家的遊戲引擎,心想不如我也參與其中吧。
而且,發覺自己真的開始老了,寫程式的進度很慢很慢,或許是時候自我進修一下。

所以…. 好,去片:(我還不懂Cap 片..)

From

內容只是十分簡單,不過實作了三樣想寫很久的東西:

1. Lua based framework with coroutines

Lua 最最強大的地方是,實入了coroutines。由於在實際上寫script 的人,多數是game designer,
Event driven based 的script system對他們來說是比較有一點難度。
但若引入了Coroutines,Script 的編寫就會變得直線很多:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
-- Create an window
Window
{
    title = "Lua Framework",
    x = 30,
    y = 30,
    w = 800,
    h = 600,
    fullscreen = true
}
 
-- Create the camera
Camera
{
    eye = {-5.0,5.0,1.0},
    target = {0.0, 0.0, 0.0},    
}
 
--Create Objects
objects = {}
r = 5.0
n = 10
 
for i=1,n do
    local theta = ((2.0 * math.pi) / n ) * i;
 
    if i < 4 then
        objects[i] = Object
        {
            Movable(),
            Renderable(geom.cube, 2.0)
        }
    elseif i < 7 then
        objects[i] = Object
        {
            Movable(),
            Renderable(geom.sphere, 1.0, 20),
        }
    else
        objects[i] = Object
        {
            Movable(),
            Renderable("teapot.obj")
        }   
    end
 
 
    objects[i].movable.position = 
    { 
        math.sin(theta) * r, 
        1.0, 
        math.cos(theta) * r,         
    }       
    objects[i].movable.orientation = 
    {
        0,
        1,
        0,
        theta + (math.pi * 0.5),
    }
end
 
offset = 0    
 
-- start our main game loop
while true do
    -- tell the system to we are idle, to let system do its work
    idle()
 
    for k, v in pairs(teapots) do    
        local theta = ((math.pi * 2.0) / #objects) * k + offset;
 
        v.movable.position = 
        { 
            math.sin(theta) * r, 
            math.sin(theta) *  math.cos(theta) * r, 
            math.cos(theta) * r,         
        }       
 
        v.movable.orientation = 
        {
            0,
            1,
            0,
            theta + (math.pi * 0.5),
        }
    end
    offset = offset + 0.001
 
    p1 = objects[1].movable.position
    p2 = objects[2].movable.position
 
    -- Print some text on screen
    print(string.format("%f,%f,%f, %f,%f,%f", 
        p1[1], p1[2], p1[3], 
        p2[1], p2[2], p2[3],     
        #objects))    
end

以上是一個簡單的script ,只是會看到幾個Box, Sphere 和 Teapot 在移動。
但特別的地方是那個 idle() ,它是一個coroutine ,會把Lua 的運行suspened了,把運行的權利交會給system,
直至system 呼叫 lua_resume 這個 C Api 。

2. No C++, Only C

原因有很多,最簡單的原因是,compile 的時間快了十倍 :)

3. Meshless Deformations Based on Shape Matching

幾年前看到了它的demo後,便很想把它實作出來,
而由於我想開發的新遊戲,需要有一個deformable 的physic engine,所以便試它一下。
暫時只實在了Linear Deformation,和沒有 object to object collision ,
不過還是很好玩 :)

最後,原本想upload 那個demos上來,但不知道為什麼,upload 不了,
等我問問橙先生後,再放上來 :)

  1. 2 Responses to “New Engine, New Screen Shot.”

  2. 已email 了新的ftp account 給你~ please check~

    By SOrange on Apr 27, 2009

  3. Emailed up the new FTP account

    By SOrange on Apr 27, 2009

Post a Comment