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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
1119
黒猫hgimg3でポイントライトを使用する2未解決


黒猫

リンク

2017/11/19(Sun) 18:34:51|NO.81877

こんにちは。mod_hgsetfogを参考にして、directXのポイントライトを追加してみました。
hgimg3が生成したメッシュに対してはポイントライトが反映されているのですが、
Xモデルには変化がありません。
ライトを反映させることは出来るのでしょうか?


#include "hgimg3.as" ;sampleのhgimg3のフォルダにコピーして実行してください ;=========================================== #module "mod_hgsetlight" #usecom IDirect3DDevice8 "{7385E5DF-8FE8-41D5-86B6-D7B48547B6CF}" #comfunc IDirect3DDevice8_AddRef 1 #comfunc IDirect3DDevice8_SetLight 44 int,int #comfunc IDirect3DDevice8_GetLight 45 int,int #comfunc IDirect3DDevice8_LightEnable 46 int,int #deffunc hgmodini hggetreq ret_PTRD3DDEV,SYSREQ_PTRD3DDEV newcom com_PTRD3DDEV, , -1, ret_PTRD3DDEV IDirect3DDevice8_AddRef com_PTRD3DDEV //HGIMG3側のRelease回数と数が合わなくなるっぽいので増やしとく return #deffunc hggetlight int lightID ,array light IDirect3DDevice8_GetLight com_PTRD3DDEV,lightID,varptr(light) return #deffunc hgsetlight int lightID ,array light ,int flag if flag=0 { IDirect3DDevice8_LightEnable com_PTRD3DDEV,lightID,0 } else { IDirect3DDevice8_SetLight com_PTRD3DDEV,lightID,varptr(light) IDirect3DDevice8_LightEnable com_PTRD3DDEV,lightID,1 } return #global ;======================================= ;以下のサイトを参考にしました ;http://sprocket.babyblue.jp/html/hsp_koneta3.htm #module #defcfunc d2f double p1 temp = p1 if (peek(temp,7)&0x7F) < 0x38 {temp=0.0} return ((lpeek(temp)>>29)&7)|((temp<0)<<31)|((lpeek(temp,4)-((temp!0)*0x38000000))<<3) #global #module #defcfunc f2d int p1 temp = 0.0 lpoke temp, 4, (p1 & 0x80000000) | (((p1 & 0x7fffffff) >> 3) + ((p1 & 0x7fffffff) ! 0) * 0x38000000) lpoke temp, 0, p1 << 29 return temp #global ;======================================= screen 0,800,480,0 cls 4 hgini hgmodini ;バッファサイズ sx=64:sy=64 dim vmap,sx+1,sy+1 wave_init sx,sy ;モデル登録(地面) setuv 0,0,128,128 addmesh m_mesh,sx,sy,0,320,320 texload "mapbg4.bmp" regobj obj, m_mesh ;高さ、UVマップの設定 gsel 3 picload "g_road1.bmp" getvarmap vmap,sx,sy,1 picload "g_river.bmp" getvarmap vmap,sx,sy,2 meshmap vmap,m_mesh,$100 picload "g_height1.bmp" getvarmap vmap,sx,sy meshmap vmap,m_mesh,0,0.1 ;Xモデル登録 addxfile m_girl,"tamane2_s.x" modelshade m_girl,1 setxinfo m_girl,0,$1000,255,25,25 regobj mychr, m_girl setscale mychr,0.02,0.02,0.02 ;表示の準備 gsel 0 clscolor $60e0 ;背景色の設定 ;カメラの設定 setpos HGOBJ_CAMERA,0,-5,20 ;ライト setdir HGOBJ_LIGHT,0,0,0 setang HGOBJ_LIGHT, 9.8, 4, 0 setscale HGOBJ_LIGHT,0,0,0 frame=0 dim light,26 light(0)=2 ;type light(1)=d2f(1.0),d2f(1.0),d2f(1.0),0 ;diffuse light(5)=0,0,0,0 ;specular light(9)=0,0,0,0 ;ambient light(13)=0,d2f(-10.0),0 ;position light(16)=0,d2f(0.707107),d2f(0.707107) ;direction light(19)=d2f(20.0) ;range light(20)=0 ;falloff light(21)=d2f(0.0) ;attenuation0 light(22)=d2f(0.01) ;attenuation1 light(23)=d2f(0.01) ;attenuation2 light(24)=0 ;theta light(25)=0 ;phi hgsetlight 1,light,1 ;ライトを有効にする light(1)=d2f(0.5),d2f(0.5),d2f(2.0),0 ;diffuse light(5)=0,0,d2f(2.0),0 ;specular light(9)=0,0,d2f(2.0),0 ;ambient *main hgdraw ;描画 hgsync 15 ;時間待ち if (frame\1001)>500 { temp=frame\500 if temp>250 {temp=250} setscale HGOBJ_LIGHT,temp,0,0 temp=frame\500 if temp>250 {temp=500-temp} setdir HGOBJ_LIGHT,temp,temp,temp } temp=double(frame)/40.0 x=d2f(20.0*cos(temp)) z=d2f(20.0*sin(temp)-10.0) light(13)=x,d2f(-10.0),z ;position hgsetlight 2,light,1 frame++ goto *main



この記事に返信する


暇人

リンク

2017/11/22(Wed) 20:50:33|NO.81889

hgimg3側に変更を加えないと無理っぽい

hgimg3.txtに
>グループefxは、ポイントライト、スポットライトのための拡張設定で、
>現バージョンでは無視されます。
と、書いてあるけど長い間そのまま・・・



黒猫

リンク

2017/11/25(Sat) 23:43:15|NO.81909

>hgimg3側に変更を加えないと無理っぽい
やはりそうですか。
ただ、メッシュマップ限定のポイントライトでもそれなりに使えそうです。

以下は妄想です。
hgimg3のライティングは独自の処理をしているような気がするので、
modelshadeに独自の処理をスキップするモードを追加すれば出来そうな気がする。



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