#!ruby -Ks # -*- mode: ruby; coding: sjis -*- # Last updated: <2016/12/22 22:16:11 +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 ssz = sz / pz sx = px * ssz sy = py * ssz scale = 5.0 * ssz x = sx + cw - iw / 2 y = sy + ch - ih / 2 Window.drawEx( x, y, img, :scalex => scale, :scaley => scale, :center_x => iw / 2, :center_y => ih / 2, :z => -pz.to_i) end end end