OpenGLテスト中

そもそもOpenGLがさっぱりわかってないのでどうにもならん感じである。
とりあえず、DXRubyのImageにconnect_glメソッドを追加して、OpenGLの描画先をImageオブジェクトにすることはできた。DXRuby1.5.8dev-test-mswin32-ruby20.zipとして地味に置いておいた。
んで、OpenGLバインディングは何がいいのかよくわからんが適当にopengl-bindingをgemでインストールして、以下のようなコードで三角形をぐるぐる回すことはなんとなくできた。たぶんバインディングは動きさえすればどれでも使えるはず。

require 'dxruby'
require 'opengl'
OpenGL.load_dll()
include OpenGL

image = Image.new(640, 480, C_WHITE).connect_gl

ratio = 640.to_f / 480.to_f
glViewport(0, 0, 640, 480)
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glShadeModel(GL_FLAT)

count = 0
Window.loop do
  image.fill C_WHITE # なんかこれがないと画像が更新されない

  count += 1
  glMatrixMode(GL_PROJECTION)
  glLoadIdentity()
  glOrtho(-ratio, ratio, -1.0, 1.0, 1.0, -1.0)
  glMatrixMode(GL_MODELVIEW)

  glLoadIdentity()
  glRotatef(count, 0.0, 0.0, 1.0)

  glBegin(GL_TRIANGLES)
  glClearColor(1.0, 1.0, 1.0, 1.0)
  glClear(GL_COLOR_BUFFER_BIT)

  glColor4f(1.0, 0.0, 0.0, 1.0)
  glVertex3f(-0.6, -0.4, 0.0)
  glVertex3f(0.6, -0.4, 0.0)
  glVertex3f(0.0, 0.6, 0.0)
  glEnd()
  glFlush()

  Window.draw(0, 0, image)
end


問題は、OpenGLで何かしらコードを書いて、このように動くはず、という感覚が無いので、動かなかったときにどこが間違っていておかしいのかがまったくわからんところである。使ったことないから。。。
一応テクスチャ用にImage#to_sというメソッドも用意したのでテクスチャも扱えるんじゃないかとは思うのだが、テクスチャを使うコードを書いてもなんか動かないし、そのコードが動くはずなのかどうかもわからない状態で途方に暮れているのである。
なので、それっぽく動くバイナリを置いておけば誰かOpenGLわかる人が動くはずのコードを書いて動かしてくれるんじゃなかろうか、とかいう淡い期待を抱きつつ、晒してみることにした。DXRubyで3Dできるぜひゃっほおおぉぉうって人がいたらちょっと試してみてもらえないだろうか。