glrb 0.1.0 → 0.3.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.
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