glrb 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 58b9d5ba6827d0bfbfad88081808c2ef34d39bbcc910ce909e500f56ca103ed4
4
- data.tar.gz: 102f0612dd592fae0dd735a4fbee6903958c92f49dbf1c5f4b608141727cd530
3
+ metadata.gz: 32729b8faab82ca32211bf89905d9f405b95e0d5dcef88289e8429fe3f5b980b
4
+ data.tar.gz: cc9c88592e09288a1b95892e282b6d1d48c7ad12cc07e8179d438694fd26369a
5
5
  SHA512:
6
- metadata.gz: 18bd4c0f38e80385c1e7c6225ba0cceaaaafb631db895b61367e6638427ebd5e1672668d6eeddf940ac6d2ad6e5dd25dce3c0e75fe8ef94e8c3e22347cbcd403
7
- data.tar.gz: 75b72bb433066bedeabbc87bf63a0e0e662932fb1a13e24130b86fec87531a6913376616f394d1e9bc65a28e16918b6f55adfc5a904930b74f046b79adf9873c
6
+ metadata.gz: 26ff4370b860a1ec2e12c2df95795700b0d47177a35887fac23aa5e243d5777fce8be651d3bfdb60a1267287b2ec1e565eb7601eb2be6c3e9aa7a2a2ded1ef88
7
+ data.tar.gz: 9c326afa555b58e1a765f3c0a5e8d6e573ad668dddabe42421164e23b1714bf2e997290f06178336703f7b6e2c0e5c4531e7c73b8bcc256cf1114333c86dd585
data/lib/gl.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Glrb
2
2
  class GL
3
- def initialize(w = 256, h = 256, filename = "", shader = gl_defaultSahder(self))
3
+ def initialize(w = 256, h = 256, filename = "tmp.ppm", shader = gl_defaultSahder(self))
4
4
  @filename = filename
5
5
  @w = w
6
6
  @h = h
@@ -36,13 +36,13 @@ module Glrb
36
36
 
37
37
  def gl_render (gl, i)
38
38
  gl.i = i
39
- gl.FragCoord = vec (i % gl.w).to_f + 0.5, i.to_f / gl.w.to_f + 0.5, 0, 0
40
- gl.FragColor = gl.shader.call
39
+ gl.FragCoord = vec (i % gl.w).to_f + 0.5, gl.h.to_f - i.to_f / gl.w.to_f + 0.5, 0, 0
40
+ gl.FragColor = gl.shader.call || gl.FragColor
41
41
  end
42
42
 
43
43
  def gl_test (gl)
44
44
  (gl.w.to_i * gl.h.to_i).times.inject("") do |acc, i|
45
- col = gl[i]
45
+ col = gl[i].map(->v, i{v.clamp(0, 1)})
46
46
  c = (col[3] * col.xyz.sum / 3 <= 0.5) ? "_ " : "# "
47
47
  ret = acc + c + ((i % gl.w.to_i == gl.w.to_i - 1) ? "\n" : "")
48
48
  end
@@ -52,8 +52,9 @@ module Glrb
52
52
  open(@filename, "wb") do |f|
53
53
  f.puts("P6\n#{gl.w} #{gl.h}\n255")
54
54
  (gl.w.to_i * gl.h.to_i).times do |i|
55
- c = gl[i] * 255
56
- f.write([c.x.to_i % 255, c.y.to_i % 255, c.z.to_i % 255].pack("ccc"))
55
+ puts "#{i} / #{gl.w.to_i * gl.h.to_i}"
56
+ col = gl[i].map(->v, i{(v.clamp(0, 1) * 255).to_i})
57
+ f.write(col.to_a.pack("ccc"))
57
58
  end
58
59
  end
59
60
  end
data/lib/math/mat.rb CHANGED
@@ -1,26 +1,57 @@
1
1
  module Glrb
2
2
  class Mat
3
- def initialize(init = [1, 0, 0], args = 0)
4
- @v = init
3
+ def initialize(init = [Vec.new, Vec.new, Vec.new], args = 0)
4
+ @v = init.map{|v| isArr(v) ? Vec.new(v) : v}
5
5
  @n = args
6
6
  @_ = ->(v = @v, n = @n){Vec.new(v, n)}
7
7
  end
8
- def to_a() isArr(@v) ? @v : @v[@n] end
9
- def to_s() to_a.to_s end
8
+ def to_a() (isArr(@v) ? @v : @v[@n]) end
9
+ def to_s() to_a.map(&:to_a).to_s end
10
10
  def size() to_a.size end
11
- def sort() @_[->n{to_a.sort}] end
12
11
  def map(_) @_[->n{to_a.map.with_index{|v, i| _[v, i]}}] end
13
- def +(_) map(isNum(_) ? ->v, i{v + _} : ->v, i{v + _[i]}) end
14
- def -(_) map(isNum(_) ? ->v, i{v - _} : ->v, i{v - _[i]}) end
15
- def *(_) map(isNum(_) ? ->v, i{v * _} : ->v, i{v * _[i]}) end
16
- def /(_) map(isNum(_) ? ->v, i{v / _} : ->v, i{v / _[i]}) end
12
+ def tr() transpose(self) end
17
13
  def [](_) @v[_] end
14
+ def +(_) map(!isMat(_) ? ->v, i{v + _} : ->v, i{v + _[i]}) end
15
+ def -(_) map(!isMat(_) ? ->v, i{v - _} : ->v, i{v - _[i]}) end
16
+ def %(_) map(isNum(_) ? ->v, i{v % _} : mx(_, ->a, b{a % b})) end
17
+ def *(_) map(isNum(_) ? ->v, i{v * _} : mx(_, ->a, b{a * b})) end
18
+ def /(_) map(isNum(_) ? ->v, i{v / _} : mx(_, ->a, b{a / b})) end
18
19
  def <=>(_) @v = _ end
19
20
  def >>(_) _ << @n end
20
21
  def <<(n) @_[@v, n] end
21
22
  def +@() map(->v, i{+v}) end
22
23
  def -@() map(->v, i{-v}) end
24
+ def x() self[0] end
25
+ def y() self[1] end
26
+ def z() self[2] end
27
+ def xy() @_[->n{v = to_a; [v[0], v[1]]}] end
28
+ def xz() @_[->n{v = to_a; [v[0], v[2]]}] end
29
+ def yx() @_[->n{v = to_a; [v[1], v[0]]}] end
30
+ def yz() @_[->n{v = to_a; [v[1], v[2]]}] end
31
+ def zx() @_[->n{v = to_a; [v[2], v[0]]}] end
32
+ def zy() @_[->n{v = to_a; [v[2], v[1]]}] end
33
+ def xyz() @_[->n{v = to_a; [v[0], v[1], v[2]]}] end
34
+ def xzy() @_[->n{v = to_a; [v[0], v[2], v[1]]}] end
35
+ def yxz() @_[->n{v = to_a; [v[1], v[0], v[2]]}] end
36
+ def yzx() @_[->n{v = to_a; [v[1], v[2], v[0]]}] end
37
+ def zxy() @_[->n{v = to_a; [v[2], v[0], v[1]]}] end
38
+ def zyx() @_[->n{v = to_a; [v[2], v[1], v[0]]}] end
39
+ def mx(v, _) isMat(v) ? mxm(v, _) : mxv(v, _) end
40
+ def mxv(v, _) ->a, i{ _[a, v].sum } end
41
+ def mxm(m, _)
42
+ m = transpose(m)
43
+ ->v, i{
44
+ v.map(->vv, j{
45
+ _[v, m[j]].sum
46
+ })
47
+ }
48
+ end
23
49
  end
24
50
 
25
- def Mat(*init) Vec.new(init) end
51
+ def mat(*init) Mat.new(init) end
52
+
53
+ def transpose(m)
54
+ a = m.to_a
55
+ Mat.new(a.size.times.map{|i| a[i].size.times.map{|j| a[j][i]}})
56
+ end
26
57
  end
data/lib/math/vec.rb CHANGED
@@ -10,18 +10,20 @@ module Glrb
10
10
  def size() to_a.size end
11
11
  def map(_) @_[->n{to_a.map.with_index{|v, i| _[v, i]}}] end
12
12
  def sum() to_a.sum end
13
- def length() Math::sqrt(self * self) end
13
+ def length() Math::sqrt(dot(self)) end
14
14
  def !@() self / length end
15
15
  def [](_) v = to_a; v[_] end
16
16
  def +(_) map(isNum(_) ? ->v, i{v + _} : ->v, i{v + _[i]}) end
17
17
  def -(_) map(isNum(_) ? ->v, i{v - _} : ->v, i{v - _[i]}) end
18
- def *(_) isNum(_) ? map(->v, i{v * _}) : map(->v, i{v * _[i]}).sum end
19
- def /(_) isNum(_) ? map(->v, i{v / _}) : cross(_) end
18
+ def %(_) map(isNum(_) ? ->v, i{v % _} : ->v, i{v % _[i]}) end
19
+ def *(_) map(isNum(_) ? ->v, i{v * _} : ->v, i{v * _[i]}) end
20
+ def /(_) map(isNum(_) ? ->v, i{v / _} : ->v, i{v / _[i]}) end
20
21
  def <=>(_) @v = _ end
21
22
  def >>(_) _ << @n end
22
23
  def <<(n) @_[@v, n] end
23
24
  def +@() map(->v, i{+v}) end
24
25
  def -@() map(->v, i{-v}) end
26
+ def dot(_) map(->v, i{v * _[i]}).sum end
25
27
  def cross(_) @_[->n{ _vec_cross(to_a, _.to_a) }] end
26
28
  def x() self[0] end
27
29
  def y() self[1] end
@@ -47,4 +49,7 @@ module Glrb
47
49
  a[2] * b[0] - a[0] * b[2],
48
50
  a[0] * b[1] - a[1] * b[0], ]
49
51
  end
52
+ def dot(a, b) a.dot(b) end
53
+ def cross(a, b) a.cross(b) end
54
+ def length(a) a.length end
50
55
  end
data/lib/utils/helpers.rb CHANGED
@@ -2,4 +2,5 @@ module Glrb
2
2
  def isNum (target) target.is_a? Numeric end
3
3
  def isArr (target) target.instance_of?(Array) end
4
4
  def isVec (target) target.instance_of?(Vec) end
5
+ def isMat (target) target.instance_of?(Mat) end
5
6
  end
data/lib/utils/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Glrb
4
- VERSION = "0.1.0"
4
+ VERSION = "0.3.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - tseijp
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-11-05 00:00:00.000000000 Z
11
+ date: 2023-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -59,7 +59,6 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
- - ".DS_Store"
63
62
  - CHANGELOG.md
64
63
  - CODE_OF_CONDUCT.md
65
64
  - LICENSE.txt
@@ -72,7 +71,6 @@ files:
72
71
  - lib/math/vec.rb
73
72
  - lib/utils/helpers.rb
74
73
  - lib/utils/version.rb
75
- - raymarch.rb
76
74
  - sig/glrb.rbs
77
75
  homepage: https://tsei.jp
78
76
  licenses:
data/.DS_Store DELETED
Binary file
data/raymarch.rb DELETED
@@ -1,10 +0,0 @@
1
- require_relative "lib/glrb.rb"
2
- include Glrb
3
-
4
- gl = GL.new 4, 4, "test.ppm"
5
-
6
- gl <=> ->{
7
- gl.FragColor = vec gl.FragCoord.x / gl.w, gl.FragCoord.y / gl.h, 0, 0
8
- }
9
-
10
- gl.test