#!ruby -Ks # -*- mode: ruby; coding: sjis -*- # Last updated: <2016/12/22 22:15:28 +0900> # # 疑似3Dのテスト # 点の座標は透視投影してるがスプライトサイズは変更してない版 require "dxruby" img = Image.load("tmp_dot.png") # 点の座標群を作成 py = 600.0 scale = 200.0 pos = [] 10.times do |z| 10.times do |x| pos.push([x * scale, py, z * scale]) pos.push([x * -scale, py, z * scale]) end end # 画面までの距離 sz = 75 Window.loop do break if Input.keyPush?(K_ESCAPE) # ウインドウの中心位置を取得 cw = Window.width / 2 ch = Window.height / 2 # 画像横幅、縦幅を取得 iw = img.width ih = img.height # マウス座標を点群の移動量にする mx = (Input.mousePosX - cw) * 5 my = (Input.mousePosY - ch) * 5 # 点の座標を透視投影で求めて描画 pos.each do |px, py, pz| px += mx pz += my if pz > 0 sx = sz * px / pz sy = sz * py / pz x = sx - iw / 2 + cw y = sy - ih / 2 + ch Window.draw(x, y, img, -pz.to_i) end end end