sgl 0.4.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. data/ChangeLog +254 -234
  2. data/History.txt +6 -0
  3. data/Manifest.txt +10 -0
  4. data/Rakefile +27 -7
  5. data/examples/cocoa1-basic.rb +14 -14
  6. data/examples/cocoa10-transparent.rb +26 -26
  7. data/examples/cocoa11-application.rb +13 -13
  8. data/examples/cocoa2-draw.rb +23 -23
  9. data/examples/cocoa3-affine.rb +29 -29
  10. data/examples/cocoa4-font.rb +24 -24
  11. data/examples/cocoa5-image.rb +22 -22
  12. data/examples/cocoa6-sound.rb +24 -24
  13. data/examples/cocoa7-movie.rb +40 -40
  14. data/examples/cocoa8-movieoverlay.rb +42 -42
  15. data/examples/cocoa9-streaming.rb +40 -40
  16. data/examples/opengl1-basic.rb +14 -14
  17. data/examples/opengl11-application.rb +13 -13
  18. data/examples/opengl2-draw.rb +23 -23
  19. data/examples/opengl3-affine.rb +29 -29
  20. data/examples/sample1.rb +11 -11
  21. data/examples/sample10.rb +16 -16
  22. data/examples/sample11.rb +22 -22
  23. data/examples/sample11a.rb +33 -33
  24. data/examples/sample12.rb +30 -30
  25. data/examples/sample12a.rb +35 -35
  26. data/examples/sample13.rb +116 -116
  27. data/examples/sample15.rb +24 -24
  28. data/examples/sample16.rb +31 -31
  29. data/examples/sample16a.rb +35 -35
  30. data/examples/sample6.rb +18 -18
  31. data/examples/sample7.rb +16 -16
  32. data/examples/sample9.rb +20 -20
  33. data/examples/testgl.rb +169 -169
  34. data/lib/sgl/bass.rb +46 -46
  35. data/lib/sgl/cocoa-app.rb +43 -43
  36. data/lib/sgl/cocoa-color.rb +65 -65
  37. data/lib/sgl/cocoa-draw.rb +72 -72
  38. data/lib/sgl/cocoa-event.rb +229 -229
  39. data/lib/sgl/cocoa-media.rb +144 -144
  40. data/lib/sgl/cocoa-notuse.rb +493 -493
  41. data/lib/sgl/cocoa-window.rb +203 -203
  42. data/lib/sgl/cocoa.rb +8 -8
  43. data/lib/sgl/opengl-app.rb +38 -38
  44. data/lib/sgl/opengl-color.rb +44 -44
  45. data/lib/sgl/opengl-draw.rb +260 -260
  46. data/lib/sgl/opengl-event.rb +325 -325
  47. data/lib/sgl/opengl-modules.rb +22 -22
  48. data/lib/sgl/opengl-window.rb +224 -224
  49. data/lib/sgl/opengl.rb +7 -7
  50. data/lib/sgl/sgl-button.rb +135 -135
  51. data/lib/sgl/sgl-client.rb +21 -21
  52. data/lib/sgl/sgl-color.rb +68 -82
  53. data/lib/sgl/sgl-connect.rb +9 -9
  54. data/lib/sgl/sgl-server.rb +58 -58
  55. data/lib/sgl/sgl-spring.rb +216 -216
  56. data/lib/sgl/version.rb +2 -2
  57. data/scripts/lib-txt2html.rb +130 -0
  58. data/scripts/txt2html +2 -63
  59. data/spec/sgl_spec.rb +13 -0
  60. data/spec/spec.opts +1 -0
  61. data/spec/spec_helper.rb +1 -0
  62. data/test/test_cocoa_app.rb +291 -291
  63. data/test/test_module_ruby16.rb +30 -30
  64. data/test/test_opengl_app.rb +147 -147
  65. data/test/test_opengl_basic.rb +22 -22
  66. data/test/test_opengl_fullscreen.rb +23 -23
  67. data/test/test_opengl_novice.rb +35 -35
  68. data/website/challenge1.html +91 -91
  69. data/website/challenge1.txt +3 -3
  70. data/website/challenge2.html +143 -144
  71. data/website/challenge2.txt +13 -14
  72. data/website/challenge3.html +66 -63
  73. data/website/challenge3.txt +7 -7
  74. data/website/cocoa.html +85 -88
  75. data/website/cocoa.txt +2 -4
  76. data/website/description.html +138 -138
  77. data/website/description.txt +1 -1
  78. data/website/exercise1.html +262 -264
  79. data/website/exercise1.txt +58 -53
  80. data/website/exercise2.html +241 -683
  81. data/website/exercise2.txt +11 -427
  82. data/website/exercise3.html +206 -0
  83. data/website/exercise3.txt +155 -0
  84. data/website/exercise4.html +198 -0
  85. data/website/exercise4.txt +151 -0
  86. data/website/exercise5.html +162 -0
  87. data/website/exercise5.txt +113 -0
  88. data/website/exhibition.html +84 -84
  89. data/website/howto.html +146 -134
  90. data/website/howto.txt +9 -0
  91. data/website/index.html +178 -178
  92. data/website/index.txt +20 -19
  93. data/website/sound.html +141 -141
  94. metadata +16 -3
@@ -0,0 +1,206 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen" />
6
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
7
+ <title>
8
+ 練習問題3
9
+ </title>
10
+ <script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
11
+ <style>
12
+
13
+ </style>
14
+ <script type="text/javascript">
15
+ window.onload = function() {
16
+ settings = {
17
+ tl: { radius: 10 },
18
+ tr: { radius: 10 },
19
+ bl: { radius: 10 },
20
+ br: { radius: 10 },
21
+ antiAlias: true,
22
+ autoPad: true,
23
+ validTags: ["div"]
24
+ }
25
+ var versionBox = new curvyCorners(settings, document.getElementById("version"));
26
+ versionBox.applyCornersToAll();
27
+ }
28
+ </script>
29
+ </head>
30
+ <body>
31
+ <div id="main">
32
+
33
+ <h1>練習問題3</h1>
34
+ <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/sgl"; return false'>
35
+ <p>Get Version</p>
36
+ <a href="http://rubyforge.org/projects/sgl" class="numbers">1.0.0</a>
37
+ </div>
38
+ <h2>課題19: 円</h2>
39
+
40
+
41
+ <pre syntax="ruby">
42
+ # kadai19.rb
43
+ require 'sgl'
44
+
45
+ def setup
46
+ window -200, -200, 200, 200
47
+ background 100
48
+ $x = 0
49
+ $y = 0
50
+ end
51
+
52
+ def onMouseDown(x, y)
53
+ $x = x
54
+ $y = y
55
+ end
56
+
57
+ def display
58
+ color 100, 0, 0
59
+ circle($x, $y, 100)
60
+ end
61
+
62
+ mainloop
63
+ </pre>
64
+
65
+ <p>円を描く.マウスボタンを押すと,ボタンを押したところに移動する.
66
+ プログラムの構造は課題15Aで導入された構造を使っている.</p>
67
+
68
+
69
+ <pre syntax="ruby">
70
+ def display
71
+ colorHSV 66, 100, 100, 30
72
+ circle($x, $y, 100, POLYGON)
73
+ end
74
+ </pre>
75
+
76
+ <p>塗り潰された円を描く.</p>
77
+
78
+
79
+ <pre syntax="ruby">
80
+ def display
81
+ colorHSV 33, 100, 100, 30
82
+ circle($x, $y, 100, POLYGON, 5)
83
+ end
84
+ </pre>
85
+
86
+ <p>五角形を描く.いままで円といってきたものは,実は正確には正32角形である.
87
+ 上記circle文の<code>5</code>のところを<code>32</code>にすると,普通の円と同じになる.</p>
88
+
89
+
90
+ <pre syntax="ruby">
91
+ def display
92
+ x = mouseX
93
+ y = mouseY
94
+ colorHSV 8, 100, 100, 50
95
+ circle(x, y, 100, POLYGON, 7)
96
+ end
97
+ </pre>
98
+
99
+ <p>マウスを押されないでもついてくるようにする.</p>
100
+
101
+
102
+ <h2>課題20: 三次元</h2>
103
+
104
+
105
+ <pre syntax="ruby">
106
+ # kadai20.rb
107
+ require 'sgl'
108
+
109
+ window -200, -200, 200, 200
110
+
111
+ push
112
+ color 100, 0, 0
113
+ translate 30, 40, 20
114
+ rotateZ 10
115
+ rotateY 20
116
+ rotateX 30
117
+ scale 20
118
+ rect -5, -5, 5, 5
119
+ pop
120
+
121
+ wait
122
+ </pre>
123
+
124
+ <p>課題14の物体の移動の例とほとんど同じだが,<code>translate 30, 40, 20</code>として
125
+ 三つの値を指定している点,<code>rotateZ</code>だけではなく,<code>rotateY</code> <code>rotateX</code>を
126
+ 使っている点が違う.三つめの値はZ軸,奥行きである.手前が正の値,奥の
127
+ ほうが負の値となる.vertexを使った形の描画は,三つの値を指定することで
128
+ 3Dに対応できる.</p>
129
+
130
+
131
+ <pre syntax="ruby">
132
+ require 'sgl'
133
+
134
+ def setup
135
+ window -200, -200, 200, 200
136
+ background 100
137
+ end
138
+
139
+ def display
140
+ x = mouseX
141
+ y = mouseY
142
+
143
+ push
144
+ color 100, 0, 0
145
+ translate x, y, 0
146
+ rotateX x
147
+ rotateY y
148
+ scale 20
149
+ rect -5, -5, 5, 5
150
+ pop
151
+ end
152
+
153
+ mainloop
154
+ </pre>
155
+
156
+ <p>マウスの移動と組み合わせることもできる.</p>
157
+
158
+
159
+ <pre syntax="ruby">
160
+ require 'sgl'
161
+
162
+ def setup
163
+ window -200, -200, 200, 200
164
+ background 100
165
+ $pos = [] # 中身が空の配列を用意する.
166
+ end
167
+
168
+ def display
169
+ x = mouseX
170
+ y = mouseY
171
+
172
+ $pos &lt;&lt; [x, y] # 配列に現在のマウスの位置を追加する.
173
+
174
+ $pos.each {|pos| # 配列の各々の要素について,{}の中身を実行する.
175
+ # その各々の要素は,posという変数に入る.
176
+ x = pos[0]
177
+ y = pos[1]
178
+
179
+ push
180
+ colorHSV 0, 100, 100, 10
181
+ translate x, y, 0
182
+ rotateX x
183
+ rotateY y
184
+ scale 20
185
+ rect -5, -5, 5, 5
186
+ pop
187
+ }
188
+
189
+ if 10 &lt; $pos.length # 配列がたまりすぎた場合は,先頭から順に捨てていく.
190
+ $pos.shift
191
+ end
192
+ end
193
+
194
+ mainloop
195
+ </pre>
196
+
197
+ <p>配列の使用と組み合わせてみている.</p>
198
+ <p class="coda">
199
+ 30th June 2007<br>
200
+ </p>
201
+ </div>
202
+
203
+ <!-- insert site tracking codes here, like Google Urchin -->
204
+
205
+ </body>
206
+ </html>
@@ -0,0 +1,155 @@
1
+ h1. 練習問題3
2
+
3
+ h2. 課題19: 円
4
+
5
+ <pre syntax="ruby">
6
+ # kadai19.rb
7
+ require 'sgl'
8
+
9
+ def setup
10
+ window -200, -200, 200, 200
11
+ background 100
12
+ $x = 0
13
+ $y = 0
14
+ end
15
+
16
+ def onMouseDown(x, y)
17
+ $x = x
18
+ $y = y
19
+ end
20
+
21
+ def display
22
+ color 100, 0, 0
23
+ circle($x, $y, 100)
24
+ end
25
+
26
+ mainloop
27
+ </pre>
28
+
29
+ 円を描く.マウスボタンを押すと,ボタンを押したところに移動する.
30
+ プログラムの構造は課題15Aで導入された構造を使っている.
31
+
32
+ <pre syntax="ruby">
33
+ def display
34
+ colorHSV 66, 100, 100, 30
35
+ circle($x, $y, 100, POLYGON)
36
+ end
37
+ </pre>
38
+
39
+ 塗り潰された円を描く.
40
+
41
+ <pre syntax="ruby">
42
+ def display
43
+ colorHSV 33, 100, 100, 30
44
+ circle($x, $y, 100, POLYGON, 5)
45
+ end
46
+ </pre>
47
+
48
+ 五角形を描く.いままで円といってきたものは,実は正確には正32角形である.
49
+ 上記circle文の@5@のところを@32@にすると,普通の円と同じになる.
50
+
51
+ <pre syntax="ruby">
52
+ def display
53
+ x = mouseX
54
+ y = mouseY
55
+ colorHSV 8, 100, 100, 50
56
+ circle(x, y, 100, POLYGON, 7)
57
+ end
58
+ </pre>
59
+
60
+ マウスを押されないでもついてくるようにする.
61
+
62
+ h2. 課題20: 三次元
63
+
64
+ <pre syntax="ruby">
65
+ # kadai20.rb
66
+ require 'sgl'
67
+
68
+ window -200, -200, 200, 200
69
+
70
+ push
71
+ color 100, 0, 0
72
+ translate 30, 40, 20
73
+ rotateZ 10
74
+ rotateY 20
75
+ rotateX 30
76
+ scale 20
77
+ rect -5, -5, 5, 5
78
+ pop
79
+
80
+ wait
81
+ </pre>
82
+
83
+ 課題14の物体の移動の例とほとんど同じだが,@translate 30, 40, 20@として
84
+ 三つの値を指定している点,@rotateZ@だけではなく,@rotateY@ @rotateX@を
85
+ 使っている点が違う.三つめの値はZ軸,奥行きである.手前が正の値,奥の
86
+ ほうが負の値となる.vertexを使った形の描画は,三つの値を指定することで
87
+ 3Dに対応できる.
88
+
89
+ <pre syntax="ruby">
90
+ require 'sgl'
91
+
92
+ def setup
93
+ window -200, -200, 200, 200
94
+ background 100
95
+ end
96
+
97
+ def display
98
+ x = mouseX
99
+ y = mouseY
100
+
101
+ push
102
+ color 100, 0, 0
103
+ translate x, y, 0
104
+ rotateX x
105
+ rotateY y
106
+ scale 20
107
+ rect -5, -5, 5, 5
108
+ pop
109
+ end
110
+
111
+ mainloop
112
+ </pre>
113
+
114
+ マウスの移動と組み合わせることもできる.
115
+
116
+ <pre syntax="ruby">
117
+ require 'sgl'
118
+
119
+ def setup
120
+ window -200, -200, 200, 200
121
+ background 100
122
+ $pos = [] # 中身が空の配列を用意する.
123
+ end
124
+
125
+ def display
126
+ x = mouseX
127
+ y = mouseY
128
+
129
+ $pos << [x, y] # 配列に現在のマウスの位置を追加する.
130
+
131
+ $pos.each {|pos| # 配列の各々の要素について,{}の中身を実行する.
132
+ # その各々の要素は,posという変数に入る.
133
+ x = pos[0]
134
+ y = pos[1]
135
+
136
+ push
137
+ colorHSV 0, 100, 100, 10
138
+ translate x, y, 0
139
+ rotateX x
140
+ rotateY y
141
+ scale 20
142
+ rect -5, -5, 5, 5
143
+ pop
144
+ }
145
+
146
+ if 10 < $pos.length # 配列がたまりすぎた場合は,先頭から順に捨てていく.
147
+ $pos.shift
148
+ end
149
+ end
150
+
151
+ mainloop
152
+ </pre>
153
+
154
+ 配列の使用と組み合わせてみている.
155
+
@@ -0,0 +1,198 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen" />
6
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
7
+ <title>
8
+ 練習問題4
9
+ </title>
10
+ <script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
11
+ <style>
12
+
13
+ </style>
14
+ <script type="text/javascript">
15
+ window.onload = function() {
16
+ settings = {
17
+ tl: { radius: 10 },
18
+ tr: { radius: 10 },
19
+ bl: { radius: 10 },
20
+ br: { radius: 10 },
21
+ antiAlias: true,
22
+ autoPad: true,
23
+ validTags: ["div"]
24
+ }
25
+ var versionBox = new curvyCorners(settings, document.getElementById("version"));
26
+ versionBox.applyCornersToAll();
27
+ }
28
+ </script>
29
+ </head>
30
+ <body>
31
+ <div id="main">
32
+
33
+ <h1>練習問題4</h1>
34
+ <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/sgl"; return false'>
35
+ <p>Get Version</p>
36
+ <a href="http://rubyforge.org/projects/sgl" class="numbers">1.0.0</a>
37
+ </div>
38
+ <h2>課題21: 速度</h2>
39
+
40
+
41
+ <pre syntax="ruby">
42
+ # kadai21.rb
43
+ require 'sgl'
44
+
45
+ def setup
46
+ window -200, -200, 200, 200
47
+ background 100
48
+ $x = 0
49
+ $y = 0
50
+ end
51
+
52
+ def display
53
+ x = mouseX
54
+ y = mouseY
55
+ speed = 20.0
56
+ vx = (x - $x)/speed
57
+ vy = (y - $y)/speed
58
+ $x = $x + vx
59
+ $y = $y + vy
60
+ color 100, 0, 0
61
+ circle($x, $y, 50, POLYGON)
62
+ end
63
+
64
+ mainloop
65
+ </pre>
66
+
67
+ <p>物の位置に加え,速度を導入する.円がマウスのところに近付こうとする.</p>
68
+
69
+
70
+ <pre syntax="ruby">
71
+ require 'sgl'
72
+
73
+ def setup
74
+ window -200, -200, 200, 200
75
+ background 100
76
+ $pos=[]
77
+ for i in 0..9
78
+ $pos[i] = [-200 + i * 40, 0] # 最初の位置を指定する.
79
+ end
80
+ end
81
+
82
+ def display
83
+ x = mouseX
84
+ y = mouseY
85
+
86
+ speed = 10.0
87
+ for i in 0..9
88
+ pos = $pos[i]
89
+ vx = (x - pos[0]) / speed # マウスに吸い寄せられる速度
90
+ vy = (y - pos[1]) / speed
91
+ speed += 2.0 # 円によって速度が異なるようにする.
92
+ pos[0] = pos[0] + vx # マウスに吸い寄せられた位置
93
+ pos[1] = pos[1] + vy
94
+ color 100, 0, 0, 10
95
+ circle(pos[0], pos[1], 50, POLYGON)
96
+ end
97
+ end
98
+
99
+ mainloop
100
+ </pre>
101
+
102
+ <p>配列の使い方を説明する.</p>
103
+
104
+
105
+ <pre syntax="ruby">
106
+ require 'sgl'
107
+
108
+ def setup
109
+ window -200, -200, 200, 200
110
+ background 100
111
+
112
+ $pos=[]
113
+ $orgpos=[]
114
+ for i in 0..19
115
+ $pos[i] = [-200 + i * 40, 0] # 最初の位置を指定する.
116
+ $orgpos[i] = [-200 + i * 40, 0] # もう一つ別の配列にも保存する.
117
+ end
118
+ end
119
+
120
+ def display
121
+ x = mouseX
122
+ y = mouseY
123
+
124
+ for i in 0..19
125
+ pos = $pos[i] # 現在の円の位置
126
+ orgpos = $orgpos[i] # 元々の位置
127
+
128
+ if mouseDown # ボタンが押されているときだけマウスに吸いつく.
129
+ vx = x - pos[0]
130
+ vy = y - pos[1]
131
+ mag = Math.sqrt(vx * vx + vy * vy)
132
+ mag = mag / 40
133
+ mag = mag * mag + 1
134
+ vx = vx / mag
135
+ vy = vy / mag
136
+ pos[0] = pos[0] + vx
137
+ pos[1] = pos[1] + vy
138
+ end
139
+
140
+ speed = 3.0
141
+ vx2 = (orgpos[0] - pos[0]) / speed # 元々の位置に吸い寄せられる速度
142
+ vy2 = (orgpos[1] - pos[1]) / speed
143
+ pos[0] = pos[0] + vx2 # マウスに吸い寄せられた位置
144
+ pos[1] = pos[1] + vy2
145
+ color 100, 0, 0, 30
146
+ circle(pos[0], pos[1], 50, POLYGON)
147
+ end
148
+ end
149
+
150
+ mainloop
151
+ </pre>
152
+
153
+ <p>マウスにすいよせられる円.マウスボタンを押しているときだけ反応する.</p>
154
+
155
+
156
+ <pre syntax="ruby">
157
+ require 'sgl'
158
+
159
+ def setup
160
+ window -200, -200, 200, 200
161
+ background 100
162
+ $xpos = [] # 配列を準備する.
163
+ $ypos = []
164
+ for i in 0..9
165
+ $xpos[i] = -200 + i * 40
166
+ $ypos[i] = 0
167
+ end
168
+ end
169
+
170
+ def display
171
+ x = mouseX
172
+ y = mouseY
173
+
174
+ speed = 10.0
175
+ for i in 0..9
176
+ vx = (x - $xpos[i]) / speed # マウスに吸い寄せられる速度
177
+ vy = (y - $ypos[i]) / speed
178
+ speed += 2.0 # 円によって速度が異なるようにする.
179
+ $xpos[i] = $xpos[i] + vx # マウスに吸い寄せられた位置
180
+ $ypos[i] = $ypos[i] + vy
181
+ color 100, 0, 0, 10
182
+ circle($xpos[i], $ypos[i], 50, POLYGON)
183
+ end
184
+ end
185
+
186
+ mainloop
187
+ </pre>
188
+
189
+ <p>配列の使い方を変更した.</p>
190
+ <p class="coda">
191
+ 30th June 2007<br>
192
+ </p>
193
+ </div>
194
+
195
+ <!-- insert site tracking codes here, like Google Urchin -->
196
+
197
+ </body>
198
+ </html>