mieki256's diary



2019/03/20(水) [n年前の日記]

#1 [ruby][gosu] gosu + opengl-bindings で動くようにスクリプトを修正

gosu + opengl の書き方をチュートリアルっぽい流れで紹介してくれてる、gosu-opengl-tutorials というサンプルスクリプト群があるのだけど。

_tjbladez/gosu-opengl-tutorials: Fun with opengl, gosu and ruby

せっかく opengl-bindings を試したことだし、gosu + opengl-bindings でも動くように fork してみたり。

_gosu_examples_mieki256/gosu-opengl-tutorials_fork at master - mieki256/gosu_examples_mieki256

ハマった個所。 :

glGetTexImage() を opengl-bindings で呼び出す際の書き方がわからなくて、ちょっとハマった。

_gosu_examples_mieki256/lesson07.rb at master - mieki256/gosu_examples_mieki256

opengl の場合は以下のように書けばいいのだけど。

      # opengl
      texture = glGetTexImage(GL_TEXTURE_2D, 0, GL_RGB, GL_FLOAT)
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST)
      gluBuild2DMipmaps(GL_TEXTURE_2D, 3, 128, 128, GL_RGB, GL_FLOAT, texture)

結果的に、opengl-bindings の場合は、以下のように書いたら動くようになった。
      # opengl-bindings
      w, h = @minimap.width, @minimap.height
      float_size = [0.0].pack("f").size
      texture = ' ' * (float_size * 4 * w * h)
      glGetTexImage(GL_TEXTURE_2D, 0, GL_RGB, GL_FLOAT, texture)
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST)
      gluBuild2DMipmaps(GL_TEXTURE_2D, 3, w, h, GL_RGB, GL_FLOAT, texture)

少し説明すると…。

glGetTexImage() の最後の引数には、テクスチャを格納する領域のアドレスを渡してやらないといけないので、以下の式で領域のバイト数を求めて…。
float1つ分 x RGBAの4つ分 x テクスチャの横ドット数 x 縦ドット数

このサイズ分の文字列が入る変数を作って…。
      w, h = @minimap.width, @minimap.height
      float_size = [0.0].pack("f").size
      texture = ' ' * (float_size * 4 * w * h)

その変数を渡してやる。みたいな感じ。だと思う。たぶん。
      glGetTexImage(GL_TEXTURE_2D, 0, GL_RGB, GL_FLOAT, texture)

適切なサイズを確保できてないと、何も言わずにRubyが落ちるので、ちょっと気を付けないといけない。

以上、1 日分です。

過去ログ表示

Prev - 2019/03 - Next
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project