|
|
2012/12/23(Sun) 12:07:14|NO.51323
HGIMG3で、
#include "hgimg3.as"
screen 0,640,480
hgini
とした場合、カメラが映し出す映像は横640,縦480に設定されますが、
このカメラが映した画像のうち、中央部分の480x480の部分を
切り出してスクリーンの(0,0)-(479,479)に描画するということは可能でしょうか?
#include "hgimg3.as"
screen 0,640,480
hgini
hgview 0,0,480,480
としたところ、640x480サイズのカメラ画像が480x480の範囲に描画されるようで、
画像が全体的に縦長になってしまいます。
自分としては、640x480スクリーンの左側480x480をゲーム画面の表示範囲にして、
残りの右側の部分はステータス描画エリアとしてカメラとは関係のない2D画像を
表示したいのですが、hgview を用いる以外にどういった方法があるのでしょうか?
|
|
2012/12/23(Sun) 13:18:39|NO.51327
(補足)
・作ろうとしているのは2Dシューティング
(自機や敵機にモデルを使いたいのと自分の勉強のため、hgimg3を使用)
・インプレー中はカメラは固定で、オブジェクトのみが移動する。
・カメラの視点は手前から奥に向かってまっすぐ(斜めのパースは付けない)
|
|
2012/12/23(Sun) 15:01:15|NO.51329
有効スクリーンの縦横合わせて1:1にすれば良い
#include "hgimg3.as"
screen 0,640,480,0
cls 4
hgini 0,ginfo_sx //有効スクリーンがscreenに合わせられるので縦を横に合わせる(カメラ比率を1:1にする)
setfont 16,16,12,1 ; font Tex select(cx,cy,px,mode)
texload dir_exe+"\\sample\\hgimg3\\fontchr.bmp" ; フォントテクスチャの登録
addxfile m_xmodel,dir_exe+"\\sample\\hgimg3\\font_a.x" ; モデルを読み込む
regobj obj, m_xmodel ; オブジェクトの登録
clscolor $80 ; 背景色の設定
texload dir_exe+"\\sample\\hgimg3\\q.bmp"
mest = stat
rot = 0.0
*main
stick key,$3ff
if key&128 : goto *owari
hgview 0,0,480,480 //左側描画処理
hgdraw 1 ; 描画
fprt "HGIMG3 Plugin test",8,8
hgview 480,0,160,480//右側描画処理
hgdraw 1+2 ; 描画( Objectの描画を行なわない)
gmode 0,128,128 ; 元画像のサイズ指定
pos 480+80,240 ; 中心座標
hgrotate mest,0,0,rot,256,256 ; 2倍に拡大して表示
rot+=0.01
hgsync 10 ; 時間待ち
; カメラをカーソルキーで動かす
;
if key&4 : addpos obj, 0.2, 0.0
if key&1 : addpos obj, -0.2, 0.0
if key&2 : addpos obj, 0.0, -0.2
if key&8 : addpos obj, 0.0, 0.2
; モデルを回転させる
addang obj,0,0.02,0
goto *main
*owari
end
|
|
2012/12/23(Sun) 17:36:25|NO.51335
>暇人さま
hginiのパラメータで設定できたのですね。
描画範囲で調べていてhgviewばかりに目がいってましたので盲点でした。
わかりやすいスクリプトまで提示いただきありがとうございます(^^
勉強させていただきます!
|
|
2012/12/24(Mon) 09:47:13|NO.51360
当面やりたいことはできるので解決チェックしたんですが、
今回の場合、hginiで「描画範囲=カメラの映像」とすることで目的を達成できるのですが、
たとえば、ドライブゲームでバックミラーを実装したいときなど、
バックミラー用に後ろ向きに設置したカメラ画像の一部を切り取って、
さらに左右反転して別途用意したミラーの枠内に貼り付ける、
というような処理はhgviewを用いることで可能なのでしょうか?
|
|
2012/12/25(Tue) 20:07:30|NO.51404
後ろ向きのカメラ画像を指定範囲に表示するのは可能だけど
鏡像を映す命令はhgimg3には無い
(近い映像を出す事は出来るがポリゴン面の裏表が反転してしまう・・・両面ポリゴンを使えば可能かも?)
DirectX8側の命令を組み合わせれば可能かもしれないが・・・
|
|
2012/12/26(Wed) 20:46:50|NO.51447
面を両面化したモデルで試したら出来てるっぽいので貼ってみる
#include "hgimg3.as"
screen 0,640,480,0
cls 4
hgini 0,ginfo_sx //有効スクリーンがscreenに合わせられるので縦を横に合わせる(カメラ比率を1:1にする)
addxfile m_xmodel,dir_exe+"\\sample\\hgimg3\\font_a.x" ; モデルを読み込む
regobj obj, m_xmodel ; オブジェクトの登録
addxfile m_xmodel_b,dir_exe+"\\sample\\hgimg3\\font_b.x" ; モデルを読み込む
regobj obj_b, m_xmodel_b ,OBJ_SORT ; オブジェクトの登録
setpos obj_b,0,0,100
addxfile m_xmodel_c,dir_exe+"\\sample\\hgimg3\\font_c.x" ; モデルを読み込む
regobj obj_c, m_xmodel_c ,OBJ_SORT ; オブジェクトの登録
setpos obj_c,10,0,100
addbox m_boxid,2,2
regobj obj_boxid, m_boxid ,OBJ_SORT ; オブジェクトの登録
setpos obj_boxid,0,0,50 //このボックスの上にカメラを配置
getang HGOBJ_LIGHT,lax,lay,laz //ライトの初期角度取得
getefx HGOBJ_CAMERA,cFOV,cNearZ,cFarZ //カメラ[FOV][NearZ値][FarZ値] 初期値取得
Main_size=480.0 //メインの表示サイズ
Mirror_sizex=380.0 //バックミtラーの表示サイズ
Mirror_sizey=120.0
Mirror_scale=Main_size/Mirror_sizex //ミラー表示時にメインと同じ大きさでミラー内に表示させる倍率
*main
stick key,$3ff
if key&128 : goto *owari
getpos obj_boxid,cx,cy,cz //カメラ基準位置
clscolor $80 ; 背景色の設定
setang HGOBJ_LIGHT,lax,lay,laz
setefx HGOBJ_CAMERA ,cFOV,cNearZ,cFarZ
setpos HGOBJ_CAMERA,cx,cy-2,cz
setang HGOBJ_CAMERA,0,0,0
setscale HGOBJ_CAMERA,1,1,1
hgview 0,0,Main_size,Main_size//メイン
hgdraw 1
clscolor $8080 ; 背景色の設定
setpos HGOBJ_CAMERA,0,-50,50//上から全体を映す
setang HGOBJ_CAMERA,-M_PI/2,0,0
setscale HGOBJ_CAMERA,1,160.0/480,1
hgview 480,0,160,480//右側
hgdraw 1
clscolor $800080 ; 背景色の設定
setang HGOBJ_LIGHT,-lax,M_PI+lay,laz //バックミラー用のライト角度
setefx HGOBJ_CAMERA,-cFOV ,cNearZ,cFarZ //バックミラー用のカメラ画角を設定(座標反転)
setang HGOBJ_CAMERA,0,M_PI,0 //後ろを向かせる
setpos HGOBJ_CAMERA,cx,cy-2,cz
cscale=Mirror_scale*0.8 //ミラー内のカメラ表示倍率(Mirror_scaleのままならメインと同じ大きさで表示)
setscale HGOBJ_CAMERA,cscale ,-cscale*(Mirror_sizex/Mirror_sizey) ,1.0 //ミラー内で1:1に表示されるように調整(yを-にしてるのはオブジェクトを反転)
hgview 50,20,Mirror_sizex,Mirror_sizey//上側
hgdraw 1
hgsync 10 ; 時間待ち
//Bを移動
if key&4 : addpos obj_b, 0.2, 0.0
if key&1 : addpos obj_b, -0.2, 0.0
if key&2 : addpos obj_b,, 0.0, -0.2
if key&8 : addpos obj_b,, 0.0, 0.2
goto *main
*owari
end
注意:このまま実行しても面が反転したオブジェクトがミラーに表示されます
本当に問題ないかはMetaseq等で両面化したモデルで確認を・・・

| |
|
2012/12/29(Sat) 17:48:02|NO.51545
>暇人さま
これはなかなか面白いプログラムですね!
たちまち使うことはないかもしれませんが、参考にさせていただきます。
|
|
2012/12/29(Sat) 21:54:47|NO.51548
言い忘れてたけど
一回のhgsyncに対して複数回hgdraw(モード2以外)を使う時の問題点として
自動的に動作させる部分で不具合が出る
XYZ移動量を有効にしてdir値を設定してるとhgdrawの回数分移動してしまう
更にeventを設定してるとこれもhgdraw使用回数分だけ実行されてしまう
全イベント停止や個別停止がないためeventに対しては回避不能
hgdraw回数が決まってるならそれに合わせて設定するしかない
|
|