sgl 0.4.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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>