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
@@ -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
- このように値を保存する配列を増やしていくようにする.