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
@@ -1,20 +1,9 @@
1
- h1. 練習問題 11〜21
1
+ h1. 練習問題2
2
2
 
3
- h2. 課題15 マウスのボタンが押された時に
4
-
5
- h2. 課題16 円の描き方
6
-
7
- h2. 課題18 三次元
8
-
9
- h2. 課題19 速度
10
-
11
- h2. 課題20 キーボードからの入力
12
-
13
- h2. 課題21 配列の使い方
14
-
15
- h2. 課題11A マウスの位置に反応する形
3
+ h2. 課題14: マウスの位置に反応する形
16
4
 
17
5
  <pre syntax="ruby">
6
+ # kadai14.rb
18
7
  require 'sgl'
19
8
 
20
9
  window 200,200
@@ -39,9 +28,10 @@ line 0, 200, x, y
39
28
  line 200, 200, x, y
40
29
  </pre>
41
30
 
42
- h2. 課題12A 複雑な形の描画
31
+ h2. 課題15: 複雑な形の描画
43
32
 
44
33
  <pre syntax="ruby">
34
+ # kadai15.rb
45
35
  require 'sgl'
46
36
 
47
37
  window -200, -200, 200, 200
@@ -89,9 +79,10 @@ endObj
89
79
 
90
80
  頂点ごとに透明度も変えられる.
91
81
 
92
- h2. 課題13A スムースな線の描画
82
+ h2. 課題16: スムースな線の描画
93
83
 
94
84
  <pre syntax="ruby">
85
+ # kadai16.rb
95
86
  require 'sgl'
96
87
 
97
88
  useSmooth
@@ -121,9 +112,10 @@ beginObjの括弧の中は,@POLYGON@または@LINE_LOOP@を指定する.
121
112
  LINES, POINTS, LINE_STRIP, LINE_LOOP, TRIANGLES, TRIANGLE_STRIP,
122
113
  TRIANGLE_FAN, QUADS, QUAD_STRIP, POLYGON,
123
114
 
124
- h2. 課題14A 物体の移動
115
+ h2. 課題17: 物体の移動
125
116
 
126
117
  <pre syntax="ruby">
118
+ # kadai17.rb
127
119
  require 'sgl'
128
120
 
129
121
  useSmooth
@@ -146,9 +138,10 @@ push, pop, translate, rotateZ, scaleを使って回転移動拡大縮小など
146
138
  として,translate, rotateZ, scaleの順番に指定することが重要.形を描く
147
139
  コマンドと,位置,回転角度などの指定を分離できる.
148
140
 
149
- h2. 課題15A ボタンが押されたその時に
141
+ h2. 課題18: ボタンが押された時に
150
142
 
151
143
  <pre syntax="ruby">
144
+ # kadai18.rb
152
145
  require 'sgl'
153
146
 
154
147
  def setup
@@ -186,412 +179,3 @@ onMouseDownというコマンドが呼ばれる.
186
179
  ムが動いている間ずっと残る.プログラムの最初の部分で,@$x = 0@のように
187
180
  して,あらかじめなんらかの値を代入することで,変数を使うということを示
188
181
  す必要がある.
189
-
190
- h2. 課題16A 円
191
-
192
- <pre syntax="ruby">
193
- require 'sgl'
194
-
195
- def setup
196
- window -200, -200, 200, 200
197
- background 100
198
- $x = 0
199
- $y = 0
200
- end
201
-
202
- def onMouseDown(x, y)
203
- $x = x
204
- $y = y
205
- end
206
-
207
- def display
208
- color 100, 0, 0
209
- circle($x, $y, 100)
210
- end
211
-
212
- mainloop
213
- </pre>
214
-
215
- 円を描く.マウスボタンを押すと,ボタンを押したところに移動する.
216
- プログラムの構造は課題15Aで導入された構造を使っている.
217
-
218
- <pre syntax="ruby">
219
- def display
220
- colorHSV 66, 100, 100, 30
221
- circle($x, $y, 100, POLYGON)
222
- end
223
- </pre>
224
-
225
- 塗り潰された円を描く.
226
-
227
- <pre syntax="ruby">
228
- def display
229
- colorHSV 33, 100, 100, 30
230
- circle($x, $y, 100, POLYGON, 5)
231
- end
232
- </pre>
233
-
234
- 五角形を描く.いままで円といってきたものは,実は正確には正32角形である.
235
- 上記circle文の@5@のところを@32@にすると,普通の円と同じになる.
236
-
237
- <pre syntax="ruby">
238
- def display
239
- x = mouseX
240
- y = mouseY
241
- colorHSV 8, 100, 100, 50
242
- circle(x, y, 100, POLYGON, 7)
243
- end
244
- </pre>
245
-
246
- マウスを押されないでもついてくるようにする.
247
-
248
- h2. 課題18A 3D
249
-
250
- <pre syntax="ruby">
251
- require 'sgl'
252
-
253
- window -200, -200, 200, 200
254
-
255
- push
256
- color 100, 0, 0
257
- translate 30, 40, 20
258
- rotateZ 10
259
- rotateY 20
260
- rotateX 30
261
- scale 20
262
- rect -5, -5, 5, 5
263
- pop
264
-
265
- wait
266
- </pre>
267
-
268
- 課題14の物体の移動の例とほとんど同じだが,@translate 30, 40, 20@として
269
- 三つの値を指定している点,@rotateZ@だけではなく,@rotateY@ @rotateX@を
270
- 使っている点が違う.三つめの値はZ軸,奥行きである.手前が正の値,奥の
271
- ほうが負の値となる.vertexを使った形の描画は,三つの値を指定することで
272
- 3Dに対応できる.
273
-
274
- <pre syntax="ruby">
275
- require 'sgl'
276
-
277
- def setup
278
- window -200, -200, 200, 200
279
- background 100
280
- end
281
-
282
- def display
283
- x = mouseX
284
- y = mouseY
285
-
286
- push
287
- color 100, 0, 0
288
- translate x, y, 0
289
- rotateX x
290
- rotateY y
291
- scale 20
292
- rect -5, -5, 5, 5
293
- pop
294
- end
295
-
296
- mainloop
297
- </pre>
298
-
299
- マウスの移動と組み合わせることもできる.
300
-
301
- <pre syntax="ruby">
302
- require 'sgl'
303
-
304
- def setup
305
- window -200, -200, 200, 200
306
- background 100
307
- $pos = [] # 中身が空の配列を用意する.
308
- end
309
-
310
- def display
311
- x = mouseX
312
- y = mouseY
313
-
314
- $pos << [x, y] # 配列に現在のマウスの位置を追加する.
315
-
316
- $pos.each {|pos| # 配列の各々の要素について,{}の中身を実行する.
317
- # その各々の要素は,posという変数に入る.
318
- x = pos[0]
319
- y = pos[1]
320
-
321
- push
322
- colorHSV 0, 100, 100, 10
323
- translate x, y, 0
324
- rotateX x
325
- rotateY y
326
- scale 20
327
- rect -5, -5, 5, 5
328
- pop
329
- }
330
-
331
- if 10 < $pos.length # 配列がたまりすぎた場合は,先頭から順に捨てていく.
332
- $pos.shift
333
- end
334
- end
335
-
336
- mainloop
337
- </pre>
338
-
339
- 配列の使用と組み合わせてみている.
340
-
341
- h2. 課題19A 速度
342
-
343
- <pre syntax="ruby">
344
- require 'sgl'
345
-
346
- def setup
347
- window -200, -200, 200, 200
348
- background 100
349
- $x = 0
350
- $y = 0
351
- end
352
-
353
- def display
354
- x = mouseX
355
- y = mouseY
356
- speed = 20.0
357
- vx = (x - $x)/speed
358
- vy = (y - $y)/speed
359
- $x = $x + vx
360
- $y = $y + vy
361
- color 100, 0, 0
362
- circle($x, $y, 50, POLYGON)
363
- end
364
-
365
- mainloop
366
- </pre>
367
-
368
- 物の位置に加え,速度を導入する.円がマウスのところに近付こうとする.
369
-
370
- <pre syntax="ruby">
371
- require 'sgl'
372
-
373
- def setup
374
- window -200, -200, 200, 200
375
- background 100
376
- $pos=[]
377
- for i in 0..9
378
- $pos[i] = [-200 + i * 40, 0] # 最初の位置を指定する.
379
- end
380
- end
381
-
382
- def display
383
- x = mouseX
384
- y = mouseY
385
-
386
- speed = 10.0
387
- for i in 0..9
388
- pos = $pos[i]
389
- vx = (x - pos[0]) / speed # マウスに吸い寄せられる速度
390
- vy = (y - pos[1]) / speed
391
- speed += 2.0 # 円によって速度が異なるようにする.
392
- pos[0] = pos[0] + vx # マウスに吸い寄せられた位置
393
- pos[1] = pos[1] + vy
394
- color 100, 0, 0, 10
395
- circle(pos[0], pos[1], 50, POLYGON)
396
- end
397
- end
398
-
399
- mainloop
400
- </pre>
401
-
402
- 配列の使い方を説明する.
403
-
404
- <pre syntax="ruby">
405
- require 'sgl'
406
-
407
- def setup
408
- window -200, -200, 200, 200
409
- background 100
410
-
411
- $pos=[]
412
- $orgpos=[]
413
- for i in 0..19
414
- $pos[i] = [-200 + i * 40, 0] # 最初の位置を指定する.
415
- $orgpos[i] = [-200 + i * 40, 0] # もう一つ別の配列にも保存する.
416
- end
417
- end
418
-
419
- def display
420
- x = mouseX
421
- y = mouseY
422
-
423
- for i in 0..19
424
- pos = $pos[i] # 現在の円の位置
425
- orgpos = $orgpos[i] # 元々の位置
426
-
427
- if mouseDown # ボタンが押されているときだけマウスに吸いつく.
428
- vx = x - pos[0]
429
- vy = y - pos[1]
430
- mag = Math.sqrt(vx * vx + vy * vy)
431
- mag = mag / 40
432
- mag = mag * mag + 1
433
- vx = vx / mag
434
- vy = vy / mag
435
- pos[0] = pos[0] + vx
436
- pos[1] = pos[1] + vy
437
- end
438
-
439
- speed = 3.0
440
- vx2 = (orgpos[0] - pos[0]) / speed # 元々の位置に吸い寄せられる速度
441
- vy2 = (orgpos[1] - pos[1]) / speed
442
- pos[0] = pos[0] + vx2 # マウスに吸い寄せられた位置
443
- pos[1] = pos[1] + vy2
444
- color 100, 0, 0, 30
445
- circle(pos[0], pos[1], 50, POLYGON)
446
- end
447
- end
448
-
449
- mainloop
450
- </pre>
451
-
452
- マウスにすいよせられる円.マウスボタンを押しているときだけ反応する.
453
-
454
- <pre syntax="ruby">
455
- require 'sgl'
456
-
457
- def setup
458
- window -200, -200, 200, 200
459
- background 100
460
- $xpos = [] # 配列を準備する.
461
- $ypos = []
462
- for i in 0..9
463
- $xpos[i] = -200 + i * 40
464
- $ypos[i] = 0
465
- end
466
- end
467
-
468
- def display
469
- x = mouseX
470
- y = mouseY
471
-
472
- speed = 10.0
473
- for i in 0..9
474
- vx = (x - $xpos[i]) / speed # マウスに吸い寄せられる速度
475
- vy = (y - $ypos[i]) / speed
476
- speed += 2.0 # 円によって速度が異なるようにする.
477
- $xpos[i] = $xpos[i] + vx # マウスに吸い寄せられた位置
478
- $ypos[i] = $ypos[i] + vy
479
- color 100, 0, 0, 10
480
- circle($xpos[i], $ypos[i], 50, POLYGON)
481
- end
482
- end
483
-
484
- mainloop
485
- </pre>
486
-
487
- 配列の使い方を変更した.
488
-
489
- h2. 課題20A キーボードからの入力の仕方
490
-
491
- <pre syntax="ruby">
492
- require 'sgl'
493
-
494
- def setup
495
- window 200, 200
496
- background 100
497
- $key = 0
498
- end
499
-
500
- def onKeyDown(key)
501
- p key
502
- $key = key
503
- end
504
-
505
- def display
506
- colorHSV $key, 100, 100
507
- line $key, 0, $key, 200
508
- end
509
-
510
- mainloop
511
- </pre>
512
-
513
- アルファベットのキーを押すと,keyに1〜26の値が入る.Aが1,Zが26という
514
- 関係になる.
515
-
516
- それら以外のキーを押したときにどのようなキーコードになるかは,
517
- @c:\ruby\doc\rubysdl\rubysdl_const_list.txt@ に記述されている.
518
- 数字の0が押されたときは,@SDL::Key::K0@という値となる.
519
-
520
- h2. 課題21A 配列の使い方return
521
-
522
- <pre syntax="ruby">
523
- require 'sgl'
524
-
525
- def setup
526
- window -200, -200, 200, 200
527
- background 100
528
- $pos = [] # 中身が空の配列を用意する.
529
- for a in 0..10 # 配列の要素それぞれについて繰り返す.
530
- $pos[a] = 0 # 中身に全部0を入れておく.
531
- end
532
- $index = 0 # 現在配列のどこの部分を指しているかを示す変数である.
533
- end
534
-
535
- def display
536
- $pos[$index] = mouseX # 配列の$indexの示す個所に現在のマウスのx座標を入れる.
537
-
538
- for a in 0..10 # 配列の要素それぞれについて繰り返します.
539
- x = $pos[a]
540
- color 0
541
- line x, -100, x, 100 # 縦線を描く.
542
- end
543
-
544
- $index = $index + 1 # 現在を示す$indexを次の値のところにセットする.
545
- if 10 < $index # $indexが配列の大きさを越えたら0にセットしなおす.
546
- $index = 0
547
- end
548
-
549
- p $pos # $posという配列の中身を表示する.
550
- end
551
-
552
- mainloop
553
- </pre>
554
-
555
- 配列の使い方の基本形である.縦線が,マウスの動きを追って動く.つまりマ
556
- ウスのx座標だけを保存している.x座標,y座標を保存するとどうなるか,実
557
- 験する.
558
-
559
- <pre syntax="ruby">
560
- require 'sgl'
561
-
562
- def setup
563
- window -200, -200, 200, 200
564
- background 100
565
- $xpos = [] # 中身が空の配列を,x座標,y座標について用意する.
566
- $ypos = []
567
- for a in 0..10 # 配列の要素それぞれについて繰り返す.
568
- $xpos[a] = 0
569
- $ypos[a] = 0
570
- end
571
- $index = 0 # 現在配列のどこの部分を指しているかを示す変数.
572
- end
573
-
574
- def display
575
- $xpos[$index] = mouseX
576
- $ypos[$index] = mouseY
577
-
578
- for a in 0..10 # 配列の要素それぞれについて繰り返す.
579
- x = $xpos[a]
580
- y = $ypos[a]
581
- color 0
582
- circle x, y, 50
583
- end
584
-
585
- $index = $index + 1 # 現在を示す$indexを,次の値のところにセットする.
586
- if 10 < $index # $indexが配列の最大を越えたら,0にセットしなおす.
587
- $index = 0
588
- end
589
-
590
- p $xpos
591
- p $ypos
592
- end
593
-
594
- mainloop
595
- </pre>
596
-
597
- このように値を保存する配列を増やしていくようにする.