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


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
1226
アキアキノヒロロ「hgimg4_light」の簡易テストプログラム出来ました。9解決


アキアキノヒロロ

リンク

2021/12/26(Sun) 13:43:15|NO.94770

[hgimg4]のライトは、取っ付きにくくて、敬遠していました。
しかし、ゲーム等に使えそうな利用方法を思い付いたので、何とかプログラムしてみました。

#include "hgimg4.as" title "HGIMG4 Test" ; ポイントライト[1] スポットライト[2] テスト randomize gpreset gpresetlight 1,1,2 ; ポイントライトを1個、スポットライトを2個、追加する setcls CLSMODE_SOLID, $404040 ; 背景色 // setdir GPOBJ_LIGHT, 0.5,0.5,0.5 ; 標準アンビエントカラーを設定 setdir GPOBJ_LIGHT, 0.2,0.2,0.2 ; 標準アンビエントカラーを設定 setcolor GPOBJ_LIGHT, 0.02,0.02,0.02 ; 標準ライトカラーを設定 ;〓〓 汽車モデル設定用 (汽車ライト設定用)〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 loco_x=40.0 : loco_y=0.0 : loco_z=5.0 angr_y= 0 ;〓〓ポイントライト1(汽車ライト)〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 Plight1_x=loco_x Plight1_y=loco_y+8.0 Plight1_z=loco_z ;━━━━━━━━━━━━━━━━━━━━━━━━━ // gpnull id_Plight1 ; 何もないモデルをライトにする場合はgpnullで生成 ;━━━━━━━━━━━━━━━━━━━━━━━━━ gpbox id_Plight1, 1.0, $ffff00 ; 黄色箱ノードを生成する gplight id_Plight1, GPOBJ_LGTOPT_POINT, 10 ; ポイントライトとして設定する // setcolor id_Plight1, 1,1,1 ; ライトカラーを設定 setcolor id_Plight1, 2.0, 2.0, 0.0 ; ライトカラーを設定 setpos id_Plight1,Plight1_x,Plight1_y,Plight1_z gpuselight id_Plight1,0 ; ポイントライト1を使用する ;〓〓スポットライト1(汽車ライト)〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 Slight1_x=loco_x+(3.4-3.4*cos(deg2rad(360*angr_y/256))) Slight1_y=loco_y+2.9 Slight1_z=loco_z+3.4*sin(deg2rad(360*angr_y/256)) ;━━━━━━━━━━━━━━━━━━━━━━━━━ // gpnull id_Slight1 ; ノードを生成する ;━━━━━━━━━━━━━━━━━━━━━━━━━ gpbox id_Slight1, 0.5, $ff0000 ; 赤色箱ノードを生成する(0.4) gplight id_Slight1, GPOBJ_LGTOPT_SPOT,50,0.5,1.0 ; スポットライトとして設定する // setcolor id_Slight1, 1.0, 0.4, 0.0 ; ライトカラーを設定 setcolor id_Slight1, 1.0*5, 0.4*5, 0.0*5 ; ライトカラーを設定 setpos id_Slight1, Slight1_x, Slight1_y, Slight1_z gpuselight id_Slight1,0 ; スポットライト1を使用する ;〓〓スポットライト2(空ライト)〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 // gpnull id_Slight2 ; ノードを生成する ;━━━━━━━━━━━━━━━━━━━━━━━━━ gpbox id_Slight2, 1.0, $0000ff ; 青色箱ノードを生成する gplight id_Slight2, GPOBJ_LGTOPT_SPOT,50,0.5,1.0 ; スポットライトとして設定する // setcolor id_Slight2, 1,1,1 ; ライトカラーを設定 setcolor id_Slight2, 1,2,16 ; ライトカラーを設定 // setpos id_Slight2, 10, 20, 30 setpos id_Slight2, 5, 14, 20 gpuselight id_Slight2,1 ; スポットライト2を使用する a=0.0 ; スポットライト2move用 ;〓〓 床ノード 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 gptexmat id_tex, "res/land/land0.png" ; テクスチャマテリアル作成 モデル読み込み gpfloor id_texmat1, 100, 100, , id_tex ; 床ノードを追加 ;〓〓 山山 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 gpload id_Mt,"res/land/MtMt_AA" ; [山]モデル読み込み setscale id_Mt, 0.5, 0.75, 0.5 setpos id_Mt, -10.0, 0.0, -15.0 ;〓〓 樹木(板ノード)設定 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 repeat 3 gptexmat id_tex, "res/tree_plate/tree"+cnt+".png",GPOBJ_MATOPT_NOZWRITE gpplate id_tree_plate(cnt), 5, 5, , id_tex setobjmode id_tree_plate(cnt), OBJ_XFRONT|OBJ_LATE|OBJ_SORT setpos id_tree_plate(cnt), (-5-2*cnt), 2.5, 10+2*cnt loop ;〓〓 モデル配置 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 ; tamane gpload id_tamane,"res/player+/tamane+/tamaneAB" setscale id_tamane, 0.01,0.01,0.01 setpos id_tamane, 0,0,0 gpact id_tamane ; seiuti gpload id_seiuti,"res/player+/seiuti+/seiuti+" setscale id_seiuti, 0.006,0.006,0.006 setpos id_seiuti, -2,0,-6 gpact id_seiuti ; 汽車モデル // loco_x=40.0 : loco_y=0.0 : loco_z=5.0 // angr_y= 0 ;━━━━━━━━━━━━━━━━━━━━━━━━━ gpload id_loco,"res/train/loco" setscale id_loco, 0.015,0.015,0.015 setpos id_loco, loco_x,loco_y,loco_z setangr id_loco, 0, angr_y, 0 ;〓〓 カメラ配置 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 // setpos GPOBJ_CAMERA, 0.0, 100.0, 5.1 ; カメラ位置を設定 // setpos GPOBJ_CAMERA, 0.0,20.0,60.0 ; カメラ位置を設定 setpos GPOBJ_CAMERA, 0.0,15.0,40.0 ; カメラ位置を設定 gplookat GPOBJ_CAMERA, 0.0, 0.0, 5.0 ; カメラから指定した座標を見る ;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 ;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 *main main_cnt++ stick key,15 if key&128 : end ;━━ 汽車move ━━━━━━━━━━━━━━━━━━ if main_cnt\5=0 { loco_x=loco_x-0.1 angr_y++ : if angr_y=256 : angr_y=0 } setpos id_loco, loco_x,loco_y,loco_z setangr id_loco, 0, angr_y, 0 ;〓〓 汽車move → ポイントライト1move (pos) 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 Plight1_x=loco_x Plight1_y=loco_y+8.0 Plight1_z=loco_z ;━━━━━━━━━━━━━━━━━━━━━━━━━ setpos id_Plight1,Plight1_x,Plight1_y,Plight1_z ;━━━━━━━━━━━━━━━━━━━━━━━━━ ;〓〓 汽車move → スポットライト1move (pos/lookat) 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 Slight1_x=loco_x-3.4*cos(deg2rad(360*angr_y/256)) Slight1_z=loco_z+3.4*sin(deg2rad(360*angr_y/256)) ;━━━━━━━━━━━━━━━━━━━━━━━━━ setpos id_Slight1, Slight1_x, Slight1_y, Slight1_z ;━━━━━━━━━━━━━━━━━━━━━━━━━ XX=20.0*cos(deg2rad(360*angr_y/256)) Slight1_XX=Slight1_x-XX ZZ=20.0*sin(deg2rad(360*angr_y/256)) Slight1_ZZ=Slight1_z+ZZ ;━━━━━━━━━━━━━━━━━━━━━━━━━ gplookat id_Slight1, Slight1_XX, 0, Slight1_ZZ ; ライトの方向を設定する ;━━━━━━━━━━━━━━━━━━━━━━━━━ ;〓〓 スポットライト2move (lookat) 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 if a_ok=0 : setcolor id_Slight2, 1,2,16 : a=a+0.5 : if a>50 : a_ok=1 if a_ok=1 : setcolor id_Slight2, 1,1,1 : a=a-0.5 : if a<-60 : a_ok=0 ;━━━━━━━━━━━━━━━━━━━━━━━━━ gplookat id_Slight2,-15,0,a ; ライトの方向を設定する ;━━━━━━━━━━━━━━━━━━━━━━━━━ redraw 0 ; 描画開始 gpdraw ; シーンの描画 color 255,255,255 pos 8,8:mes "HGIMG4 sample" redraw 1 ; 描画終了 await 1000/60 ; 待ち時間 goto *main ;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 ;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
下記からダウンロードして試して頂けると、有難いです。
hgimg4_light.zip
https://drive.google.com/file/d/17Yhg9nCFAmTxIumq52Yzf_8j_ecVssPW/view?usp=sharing

また、ツイッターに動画を載せています。
https://twitter.com/akiakinohiroro/status/1474950829778309127



この記事に返信する


youdai

リンク

2021/12/26(Sun) 18:14:07|NO.94776

上記URLのhgimg4_light.zipのgoogle driveが一般公開モードで公開されていないため、ファイルがダウンロードできませんでした。
一般公開したい場合は、「共有」設定を「リンクを知っている全員に変更」で一般公開モードにするといいと思います。



アキアキノヒロロ

リンク

2021/12/26(Sun) 19:30:18|NO.94778

youdaiさん、有難うございます。
久しぶりに「Googleドライブ」を使ったので、不注意でした。

https://drive.google.com/file/d/17Yhg9nCFAmTxIumq52Yzf_8j_ecVssPW/view
これで大丈夫だと思います。



アキアキノヒロロ

リンク

2021/12/27(Mon) 05:11:42|NO.94785

汽車モデル(mqo/gpb)が正面を向いていなかったので、素直なスクリプトになっていませんでした。
正面に直した汽車モデルに作りかえました。
これでやっと、まともな方向キー操作のプログラムに移れます。
物理設定仕様が出来ましたら、再度プログラム、アップさせて頂こうと思います。



アキアキノヒロロ

リンク

2021/12/27(Mon) 15:39:50|NO.94789

物理設定使っていませんが、方向キーで汽車を操作出来るようになりました。
ライトもさらに一工夫しています。
[setalpha] で、ライト用の箱とか(電)球とか、電源の ON/OFF みたいになります。[gpbox] での箱なら、透明度調節も可です。
空の球 = ON/OFF。汽車上の箱 = 透明度変化。
汽車のヘッドライトがちらついているのは、わざとです。

よっ、物理設定へ! でも......、「レールがないよ〜!」

ツイッター動画
https://twitter.com/akiakinohiroro/status/1475347926302232576



アキアキノヒロロ

リンク

2021/12/28(Tue) 01:53:06|NO.94799

過去ログの私のスレッド「HGIMG4のライトの設定」(NO.91929 以下) で、あれほど悩んだり、苦情めいたことまで申し上げてしまっていたことが、うそのようです。

NO.92027 で、おにたまさんが、ライトの設定更新を予定されておられる旨、おっしゃっていたことが確かに叶っています。有難うございます。

当時ご意見頂いた youdaiさん、Dripさん、お二人にも、改めて感謝致します。



アキアキノヒロロ

リンク

2021/12/28(Tue) 06:11:40|NO.94800

プログラムを色々動かしていて、おかしなことに気づきました。
山肌には、きちんとライトが当たっていないのです。自然な感じの反映になっていません。

検証のため、『山(平面構成の3Dノード)』『tamane』の他に、『[gpbox] での箱(紫色,大)』と『[gpload] での箱(同紫色,小)』を並べて見ました。
そして、色々ライトを当てながら、後者3つを回転させ、様々な方向からも観察してみました。

その動画をツイッターに載せましたので、確認してみて下さい。
https://twitter.com/akiakinohiroro/status/1475573476530753536

『[gpload] での箱(同紫色,小)』は、明らかに変です。同じ箱形なのに、どうなっているのでしょう。
また、同じく[gpload] なのに、『tamane』は正常で、『山』は異常。

どうも、=平面構成の3Dノード= が関係していそうですが、どうやったら、自然な感じの反映になるのでしょうか。
もちろん、『山』も『[gpload] での箱(同紫色,小)』も、[material]ファイルは、『tamane』同様に書換え編集してあります。



アキアキノヒロロ

リンク

2021/12/30(Thu) 07:46:27|NO.94826

[hgimg4]のライト反映を正常に機能させるためには、
反映させようとする[3Dノード]は「UV」設定が必須であり、
>technique / pass / defines = DIRECTIONAL_LIGHT_COUNT 1
する対象は、「material UV」でなければいけないことが判明しました。
なので、フィールド全体を夜景演出しようとすると、
そこに存在するすべての[3Dノード]に対して、この作業をしないといけない訳です。
今までは、「メタセコ」で作って、ウサギさんの「mqo2gpb」を通していたけれど、
動きのない[3Dノード]もすべて、「blender」(UV設定)で作って、「GPBconverter」を通すという作業になります。

ああ、気が遠くなる。



zrs90(5さい)

リンク

2021/12/30(Thu) 20:08:48|NO.94827

先日は、Dish の mes問題で、お世話になりました。

Twitter やってないんで、こっちで。

随分前から、家庭用ゲーム機でも『影』なら、ついてます。
リアルタイムポリゴン、約60フレーム動作、複数光源、テクスチャー
光沢表現、反射、写り込み付き等で動いてます。

もちろん、キャラクター生成済の物でも
『影』は、付いてます。

(※最新のグラボ積んだハイエンドpcだと
デモ映像だけで、呆然とします。昔のゲーム機を見てるので...)

手法については、3Dゲーム 影 とかで、検索すれば
出て来ます。(多分、ご存知でしょうが。)

-追記-

例の、ムービーの『影』は、実装前で付いてないのかと思ってました。

後、ムービーの57秒〜60秒の時、上空を見上げる視点の時、UFO?みたいな
物体があるんですが、アレの正体は何ですか?
私のスマホだと、拡大しても、よく分かんないので。



アキアキノヒロロ

リンク

2021/12/30(Thu) 22:16:31|NO.94829

zrs90(5さい)さん、情報のご提供ありがとうございます。

>(多分、ご存知でしょうが。)
私は、本当に初心者同然のものです。「try and error」の専門家です。全く知りませんでした。
影は、いわゆる「丸影」しかやったことがありません。
さっそく検索して、色々読んでみましたが、何となく漠然と、そういうものかと思う程度にしか分かりません。

「GENKIさんの「d2cモジュール」の影作成を3D用にして応用すれば......、なんて夢物語みたいな......。」
と、ツイッターに書きましたが、これを実現しているように思えました。
https://twitter.com/akiakinohiroro/status/1476336504343756800
ただ、実際のところ、「HSP3」でプログラムするとなると、どうなるのか。
「2D」にもう一つ座標軸を加えて、「3D」用の計算に作り替えればいいのでしょうが、果たして......。

-追記-でおっしゃっているムービーとは、「おかしいぞ!」で始まるツイッターの動画ですね。
https://twitter.com/akiakinohiroro/status/1475573476530753536
「UFO?みたいな物体」というのは、「レールがないよ〜!」の動画を見ていただくとわかると思いますが、地面を上空から照らすスポットライトのノードです。
https://twitter.com/akiakinohiroro/status/1475347926302232576
[box] でなくとも、どんなモデルでもライトのノードにできることを誇張して、試したかったということです。(なおかつ、そのノードは、[setalpha] できることも)
このスレッドの最初に載せたスクリプトで言えば、
 〓〓スポットライト2(空ライト)〓〓
gpbox id_Slight2, 1.0, $0000ff ; 青色箱ノードを生成する
を以下に替えています。
gpload id_Slight2,"res/light/ball" ; [ball]モデル読み込み



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