目的の処理がフォグで実現できるかは分からないけど
hgimg3にフォグ設定を追加するモジュール
#module "mod_hgsetfog"
#usecom IDirect3DDevice8 "{7385E5DF-8FE8-41D5-86B6-D7B48547B6CF}"
#comfunc IDirect3DDevice8_AddRef 1
#comfunc IDirect3DDevice8_SetRenderState 50 int,int
#comfunc IDirect3DDevice8_SetRenderStateF 50 int,float
#define D3DRS_FOGENABLE 28
#define D3DRS_FOGCOLOR 34
#define D3DRS_FOGTABLEMODE 35
#define D3DRS_FOGSTART 36
#define D3DRS_FOGEND 37
#define D3DRS_FOGDENSITY 38
//フォグモード定数
#define global D3DFOG_NONE 0 //フォグエフェクト無し(フォグカラーで塗りつぶされる感じ)
#define global D3DFOG_EXP 1 //指数フォグ モード(フォグの密度を設定できる、距離に応じて全体にフォグがかかる、小さい程密度薄い、設定範囲0.0〜1.0)
#define global D3DFOG_EXP2 2 //指数フォグ モード
#define global D3DFOG_LINEAR 3 //線形フォグ モード(カメラからの距離で始点終点を設定できる)
//フォグ設定(必ずhginiの後に実行)
//hgsetfog fog_set ,fog_color ,fog_mode ,fog_start ,fog_end
//fog_set = フォグオンオフ 0=OFF 1=ON (省略時0)
//fog_color = フォグカラー($RRGGBB)
//fog_mode = フォグモード http://msdn.microsoft.com/ja-jp/library/cc324334.aspx を参照(省略時3=始点と終点の間で線形にフォグエフェクトが増す)
//fog_start = fog_modeがD3DFOG_LINEARの時フォグ始点カメラ距離(省略時0.5) fog_modeが1か2の時フォグの密度
//fog_end = fog_modeがD3DFOG_LINEARの時フォグ終点カメラ距離(省略時768.0)
#define global hgsetfog(%1=0,%2=0,%3=3,%4=0.5,%5=768.0) _hgsetfog %1,%2,%3,%4,%5
#deffunc _hgsetfog int fog_set,int fog_color,int fog_mode,double fog_start,double fog_end
if vartype(com_PTRD3DDEV) ! 6 {
hggetreq ret_PTRD3DDEV,SYSREQ_PTRD3DDEV
newcom com_PTRD3DDEV, , -1, ret_PTRD3DDEV
IDirect3DDevice8_AddRef com_PTRD3DDEV //HGIMG3側のRelease回数と数が合わなくなるっぽいので増やしとく
}
if fog_set=1 {
IDirect3DDevice8_SetRenderState com_PTRD3DDEV,D3DRS_FOGENABLE,fog_set
IDirect3DDevice8_SetRenderState com_PTRD3DDEV,D3DRS_FOGCOLOR,fog_color
IDirect3DDevice8_SetRenderState com_PTRD3DDEV,D3DRS_FOGTABLEMODE,fog_mode
if fog_mode=D3DFOG_LINEAR{
IDirect3DDevice8_SetRenderStateF com_PTRD3DDEV,D3DRS_FOGSTART,fog_start
IDirect3DDevice8_SetRenderStateF com_PTRD3DDEV,D3DRS_FOGEND,fog_end
}else{
IDirect3DDevice8_SetRenderStateF com_PTRD3DDEV,D3DRS_FOGDENSITY,fog_start
}
}else{
IDirect3DDevice8_SetRenderState com_PTRD3DDEV,D3DRS_FOGENABLE,0
}
return
#global
これをファイル名 mod_hgsetfog.hsp で保存したとして
使用サンプル
#include "hgimg3.as"
//必ずhgimg3.asの後にincludeする
#include "mod_hgsetfog.hsp"
screen 0,640,480,0
hgini
setcolor 255
addbox mdid,5,5 ; BOXモデルを作成
regobj Center_objid,mdid ; BOXモデルをオブジェクトとして登録
dircur=dir_cur
chdir dir_exe+"\\sample\\hgimg3"
addxfile xmdid,"font_a.x" ; モデルを読み込む
modelorder xmdid,HGMODEL_ROTORDER_ZYX //通常モデルと同じ回転順序にする
repeat 100
regobj mychr(cnt),xmdid ;,OBJ_SORT;OBJ_LATE;OBJ_HIDE
setpos mychr(cnt),50.0-0.1*rnd(1000),50.0-0.1*rnd(1000),100.0-0.1*rnd(2000)
loop
addxfile m_xmodel,"sb_bg1.x"
chdir dircur
modelshade m_xmodel,0
regobj b_obj, m_xmodel
setpos b_obj,0,20,0
setscale b_obj, 1,0.2,1
bgcolor=$80
fogmode=D3DFOG_EXP
str_fogmode="D3DFOG_NONE","D3DFOG_EXP","D3DFOG_EXP2","D3DFOG_LINEAR"
title str_fogmode(fogmode)
//フォグON ,フォグカラーに背景色と同じ設定 ,指数フォグモード ,フォグ密度0.01設定
hgsetfog 1, bgcolor, D3DFOG_EXP, 0.01
clscolor bgcolor ; 背景色の設定
*main
hgdraw ; 描画処理
hgsync 16 ; 時間待ち
stick k,127-16
if k&128 : goto *owari ; [ESC]で終了
if k&2 : cz=0.5
if k&8 : cz=-0.5
if k&1 : cx=0.5
if k&4 : cx=-0.5
//スペースでフォグモード変更 D3DFOG_EXP,D3DFOG_EXP2,D3DFOG_LINEARを順番に回す
if k&16 {
fogmode=(fogmode\D3DFOG_LINEAR)+1
if fogmode=D3DFOG_LINEAR {
//線形フォグモードでカメラ距離30〜200にフォグエフェクト
hgsetfog 1, bgcolor, D3DFOG_LINEAR, 30.0, 200.0
}else{
hgsetfog 1, bgcolor, fogmode, 0.01
}
title str_fogmode(fogmode)
}
addpos HGOJB_CAMERA,cx,0,cz
cx=0.0
cz=0.0
goto *main
*owari
end
フォグにはもっと色々設定できるらしいけど
Directxインストしてもd3dx8.dllが無いのでHSPだけじゃ無理っぽい
数時間調べただけだから詳しくは分からないが・・・