トップページ > 記事閲覧
ハーフランバート及び高さフォグの機能追加要望
名前:名無三 日時: 2024/03/24 00:42

お疲れ様です、お世話になっております。 すいません、以下2点の機能について追加をお願いできればと思うのですがいかがでしょうか? ・ライト処理の陰影のつけ方を変更するSetUseLightAngleAttenuationのような形でのハーフランバート化 ・高さフォグ もしよろしければご検討いただけますと幸いです。
メンテ

Page: 1 |

Re: ハーフランバート及び高さフォグの機能追加要望 ( No.1 )
名前:管理人 日時:2024/03/24 12:03

ご要望了解しました とりあえずハーフランバートを実装してみましたので、よろしければこちらをダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 11.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) 以下の関数を追加しました // 3D描画のライティング計算でハーフランバートを使用するかどうかを設定する // UseFlag TRUE:ハーフランバートを使用する FALSE:ハーフランバートを使用しない( デフォルト ) int SetUseHalfLambertLighting( int UseFlag ) ; こちらの関数に TRUE を渡して呼び出すと、以降の描画でライティングの計算がハーフランバートになります よろしければお試しください 高さフォグは次の週末に実装しようと思います
メンテ
Re: ハーフランバート及び高さフォグの機能追加要望 ( No.2 )
名前:名無三 日時:2024/03/24 21:33

すいません、ありがとうございます。ハーフランバートの方こちらでも有効できました!
メンテ
Re: ハーフランバート及び高さフォグの機能追加要望 ( No.3 )
名前:管理人 日時:2024/03/25 01:40

お試しいただきありがとうございます ハーフランバートが正常に動作したようで何よりです (^ ^
メンテ
Re: ハーフランバート及び高さフォグの機能追加要望 ( No.4 )
名前:管理人 日時:2024/04/01 00:54

お待たせしました、高さフォグの機能を追加しましたので よろしければこちらの暫定最新バージョンをダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 11.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) 以下の関数を追加しました // 高さフォグを有効にするかどうかを設定する( TRUE:有効 FALSE:無効 ) int SetVerticalFogEnable( int Flag ) ; // 高さフォグモードを設定する // DX_FOGMODE_EXP or DX_FOGMODE_EXP2 or DX_FOGMODE_LINEAR int SetVerticalFogMode( int Mode ) ; // 高さフォグカラーを設定する int SetVerticalFogColor( int r, int g, int b ) ; // 高さフォグが始まる距離と終了する距離を設定する int SetVerticalFogStartEnd( float start, float end ) ; // 高さフォグが始まる処理と密度を設定する int SetVerticalFogDensity( float start, float density ) ; 通常のフォグの関数名の Fog の部分が VerticalFog になっただけの関数ですので、 機能も通常のフォグが Y軸方向になっただけとなっています ただ、通常のフォグはカメラからの距離でフォグの掛かり具合が決まりますが、 高さフォグの場合はワールド座標の Y座標でフォグの掛かり具合が決まりますので、 そこだけが大きな違いとなります 因みに今回追加した機能が名無三さんのご要望に沿っているのかちょっと自信が無かったため 今のところ対応しているのは Direct3D 11 を使用していて、且つ MV1DrawModel で描画される 3Dモデルだけとなっています 問題なければ DrawPolygon3D などの関数による3D描画や、Direct3D 9 を使用した場合にも 適用しようと思いますので、よろしければお試しください m(_ _)m
メンテ
Re: ハーフランバート及び高さフォグの機能追加要望 ( No.5 )
名前:名無三 日時:2024/04/02 00:53

すいません、ありがとうございます! SetFogEnableのリファレンスのサンプルコードに以下を追加して確認できました。 座標の指定についてですが、 SetVerticalFogStartEndで指定するのはstart=Fogがかかり始めるワールドY座標、end=かかりきるワールドY座標の認識でよろしいでしょうか? それともSetVerticalFogDensityのstartが基準となっておりますでしょうか?(試したところ原点から動かせませんでした…) SetVerticalFogEnable(TRUE); SetVerticalFogMode(DX_FOGMODE_EXP2); SetVerticalFogColor(255, 0, 0); SetVerticalFogStartEnd(0.8f*12.5f, 0.5f*12.5f); SetVerticalFogDensity(0.1f, 0.01f);
メンテ
Re: ハーフランバート及び高さフォグの機能追加要望 ( No.6 )
名前:管理人 日時:2024/04/03 01:53

> SetVerticalFogStartEndで指定するのはstart=Fogがかかり始めるワールドY座標、end=かかりきるワールドY座標の認識でよろしいでしょうか? はい、その通りです > それともSetVerticalFogDensityのstartが基準となっておりますでしょうか? SetVerticalFogStartEnd は DX_FOGMODE_LINEAR 専用の関数で SetVerticalFogDensity は DX_FOGMODE_EXP DX_FOGMODE_EXP2 専用の関数となっていて、 SetVerticalFogDensity の start と SetVerticalFogStartEnd の start は独立した設定となっています > (試したところ原点から動かせませんでした…) 手元で試した限りでは SetVerticalFogDensity の start を大きな値にすることでフォグが掛かり始める 座標を高く( Y軸方向に大きな位置 )できましたが、名無三さんの環境では SetVerticalFogDensity の start にどんなに大きな 値を渡してもフォグの掛かり始めが原点( Y軸方向の 0 の高さ )になってしまうということでしょうか? 尚、前述の通り SetVerticalFogStartEnd は DX_FOGMODE_LINEAR 専用の関数で SetVerticalFogDensity は DX_FOGMODE_EXP DX_FOGMODE_EXP2 専用の関数となっていますので、 SetVerticalFogMode で DX_FOGMODE_LINEAR を指定している場合は SetVerticalFogDensity の start にどんな値を渡しても フォグの結果には影響はありませんのでご注意ください m(_ _)m ( 同じく DX_FOGMODE_EXP や DX_FOGMODE_EXP2 を 指定している場合は SetVerticalFogStartEnd にどんな値を渡して呼び出してもフォグの結果には影響を与えません ) あと、SetVerticalFogDensity の density の値をマイナスにすると、フォグが掛かる方向が逆転します
メンテ
Re: ハーフランバート及び高さフォグの機能追加要望 ( No.7 )
名前:名無三 日時:2024/04/03 20:09

すいません、ご指摘の通りSetVerticalFogModeの指定に誤りがありました。当環境でも高さ等の指定を行うことができました。 挙動の方相違ありません、ありがとうございます!
メンテ
Re: ハーフランバート及び高さフォグの機能追加要望 ( No.8 )
名前:管理人 日時:2024/04/05 03:31

問題なく動作されたとのことで何よりです 挙動も名無三さんの希望通りとのことで了解しました すぐに MV1DrawModel 以外の DrawPolygon3D や Direc3D 9 を使用した場合等にも対応したいのですが、 次の週末が用事であまり時間が取れそうにないので、作業するのは次の次の週末になりそうです 申し訳ありませんが今暫くお時間をください m(_ _;m
メンテ
Re: ハーフランバート及び高さフォグの機能追加要望 ( No.9 )
名前:管理人 日時:2024/04/15 22:06

MV1DrawModel 以外の DrawPolygon3D などの3D描画も高さフォグに対応しましたので もしご必要でしたらこちらをダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 11.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) 因みに Direct3D 9 での高さフォグの対応は断念しました… 頂点シェーダーの出力レジスタに空きが無かったのが原因です 『最大3つまで対応している影を、高さフォグが有効な場合のみ最大2つまで対応とする』 などの場合分けで対応できないことも無かったのですが、内部処理が複雑になり メンテナンスも大変になるので、『そこまでして Direct3D 9 対応するべきか』を 考えた結果、止めることにしました (- -;
メンテ
Re: ハーフランバート及び高さフォグの機能追加要望 ( No.10 )
名前:名無三 日時:2024/04/16 08:48

すいません、ご対応ありがとうございます。DrawCapsule3DやMV1DrawMeshでの表示確認できました!Direct3D 9での点承知しました! あとから気づいたのですが、SetUsePixelLighting(TRUE)の状態にてピンク色で描写されてしまうよう名症状がございます。 お手数をおかけしますが確認をお願いできますと幸いです。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存