|
2008/10/14(Tue) 00:19:52|NO.20129
ありさん、ヒカリさん、回答ありがとうございます。
hgimg3には、お手軽変換命令は無いとの事でしたので、私の方でも腹をくくって
座標変換にとり組み、なんとか目的の挙動を達成することが出来ました。
ヒカリさんのコードほど洗練されてはおりませんが、一応、成果として貼っておきます。
#include "hgimg3.as"
scx=800:scy=600 ;画面のサイズ
screen 0,scx,scy,0
hgini
ddim ka,3
ddim pks,2,3
x=5.0 :y=3.0 :z=-10.0 ;物体のx,y,z
cax=0.0 : cay=0.0 : caz=30.0 ;カメラの初期x,y,z
scx=scx/2 :scy=scy/2
r=double(tan(3.141592*22.5/180.0))
setcolor 255,0,0
addplate plt1,0,3.0,3.0
regobj obj1,plt1
setpos obj1,x, y, z
*main
stick k,127
if k&128 : goto *owari ; [ESC]で終了
; キー操作でカメラ回転(スペースキー押しでカメラ移動)
if k&16 {
if k&2 :cay=cay-0.1
if k&8 :cay=cay+0.1
if k&4 :cax=cax+0.1
if k&1 :cax=cax-0.1
} else {
if k&1 : addang HGOBJ_CAMERA,0.0, -0.01, 0.0
if k&4 : addang HGOBJ_CAMERA,0.0, 0.01, 0.0
if k&2 : addang HGOBJ_CAMERA,0.01, 0.0, 0.0
if k&8 : addang HGOBJ_CAMERA,-0.01, 0.0, 0.0
}
setpos HGOBJ_CAMERA,cax,cay,caz
fvset ks,x,y,z
getang HGOBJ_CAMERA,ka.0,ka.1,ka.2
fvsub ks,cax,cay,caz
pks.0.0=ks.0*cos(ka.2)-ks.1*sin(ka.2)
pks.0.1=ks.0*sin(ka.2)+ks.1*cos(ka.2)
pks.1.0=pks.0.0*cos(ka.1)-ks.2*sin(ka.1)
pks.0.2=pks.0.0*sin(ka.1)+ks.2*cos(ka.1)
pks.1.1=pks.0.1*cos(ka.0)-pks.0.2*sin(ka.0)
pks.1.2=pks.0.1*sin(ka.0)+pks.0.2*cos(ka.0)
px=double(pks.1.0/(pks.1.2*r))
py=double(pks.1.1/(pks.1.2*r))
ppx=scx-px*scy
ppy=scy-py*scy
hgdraw :hgsync 1
color 255,255,255
boxf ppx-2,ppy-2,ppx+2,ppy+2
await 10
goto *main
*owari
end
| |