HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
1223
ZAPカメラ画像の特定の範囲だけを切り取って描画(HGIMG3)8解決


ZAP

リンク

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 を用いる以外にどういった方法があるのでしょうか?



この記事に返信する


ZAP

リンク

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



ZAP

リンク

2012/12/23(Sun) 17:36:25|NO.51335

>暇人さま

hginiのパラメータで設定できたのですね。
描画範囲で調べていてhgviewばかりに目がいってましたので盲点でした。

わかりやすいスクリプトまで提示いただきありがとうございます(^^
勉強させていただきます!



ZAP

リンク

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等で両面化したモデルで確認を・・・



ZAP

リンク

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回数が決まってるならそれに合わせて設定するしかない



ONION software Copyright 1997-2023(c) All rights reserved.