Name: Anonymous 2012-05-29 4:49
Ruby is the language that /prog/ should prefer and here is why:
1. It is Japanese
1. It is Japanese
; d3texture 四角形面に画像を貼り付け (x-ary, y-ary, z-ary, wid, x, y, w, h, div)
;-----------------------------------------------------------
#deffunc d3texture array aryx, array aryy, array aryz, int ppi, int ppx, int ppy, int ppw, int pph, int div
; 面を分割しない場合 (default)
if div <= 1 {
; 4 隅を座標変換 (ary は double, int 両対応)
repeat 4
vx = aryx(cnt)
vy = aryy(cnt)
vz = aryz(cnt)
d3trans vx, vy, vz
if df = 0 : break ; 座標変換範囲外
pdx(cnt) = dx
pdy(cnt) = dy
loop
if df {
psx = ppx, ppx+ppw-1, ppx+ppw-1, ppx
psy = ppy, ppy, ppy+pph-1, ppy+pph-1
gsquare ppi, pdx, pdy, psx, psy
}
return
}
if div <= 1 {
; 4 隅を座標変換 (ary は double, int 両対応)
repeat 4
vx = aryx(cnt)
vy = aryy(cnt)
vz = aryz(cnt)
d3trans vx, vy, vz
if df = 0 : break ; 座標変換範囲外
pdx(cnt) = dx
pdy(cnt) = dy
loop
if df {
psx = ppx, ppx+ppw-1, ppx+ppw-1, ppx
psy = ppy, ppy, ppy+pph-1, ppy+pph-1
gsquare ppi, pdx, pdy, psx, psy
}
return
}
; 面を分割して座標変換 & 描画
; Original code by Yuki
pc = div + 1 ; 一辺の点の数(point count)
fc = div * div ; 分割した面の数(face count)
; 分割された各面の頂点を求める
repeat pc * pc
x = cnt\pc
y = cnt/pc
; 各頂点の重み( factor 0, 1, 2, 3 )
; memo
; f0 f1 f2 f3 sum
; 4 2 0 0 2 4 0 0 0 0 0 0 4 4 4
; 2 1 0 0 1 2 0 1 2 2 1 0 4 4 4
; 0 0 0 0 0 0 0 2 4 4 2 0 4 4 4
f0 = (div-x) * (div-y)
f1 = x * (div-y)
f2 = x * y
f3 = (div-x) * y
; 頂点の座標( vertex x,y,z )
vx = (aryx(0)*f0 + aryx(1)*f1 + aryx(2)*f2 + aryx(3)*f3) / fc
vy = (aryy(0)*f0 + aryy(1)*f1 + aryy(2)*f2 + aryy(3)*f3) / fc
vz = (aryz(0)*f0 + aryz(1)*f1 + aryz(2)*f2 + aryz(3)*f3) / fc
; 頂点を座標変換( tranceformed vertex x,y,flg )
d3trans vx, vy, vz, tvx(cnt), tvy(cnt), dz, tvf(cnt)
loop
; 各面を描画
pw = ppw - 1
ph = pph - 1
repeat div
y = cnt
; 描画元 y 座標( paint source y )
psy = y*ph/div + ppy, psy(0), (y+1)*ph/div + ppy, psy(2)
repeat div
x = cnt
; 面の各頂点を表す、tvx,y 上のインデックス( point 0, 1, 2, 3 )
p0 = y * pc + x
p1 = p0 + 1
p2 = p1 + pc
p3 = p0 + pc
; 全ての点が変換に成功していれば描画
if tvf(p0) & tvf(p1) & tvf(p2) & tvf(p3) {
; 描画先座標( paint destination x,y )
pdx = tvx(p0), tvx(p1), tvx(p2), tvx(p3)
pdy = tvy(p0), tvy(p1), tvy(p2), tvy(p3)
; 描画元 x 座標( paint source x )
psx = x*pw/div + ppx, (x+1)*pw/div + ppx, psx(1), psx(0)
gsquare ppi, pdx, pdy, psx, psy
}
loop
loop
return