トップページ > 記事閲覧
浮動小数点フォーマットのddsファイル
名前:gufo 日時: 2016/02/17 18:55

いつもお世話になっています。 質問なのですが、浮動小数点型(A16B16G16R16Fなど)のddsファイルをテクスチャとして読み込もうとするとエラーが出るのですが、ライブラリが対応していないのでしょうか? もし正しい方法があるなら教えていただきたいです。 また、テクスチャをddsファイルとして出力する機能を可能であれば実装して欲しいです。
メンテ

Page: 1 |

Re: 浮動小数点フォーマットのddsファイル ( No.1 )
名前:管理人 日時:2016/02/21 04:28

> 質問なのですが、浮動小数点型(A16B16G16R16Fなど)のddsファイルをテクスチャとして読み込もうとするとエラーが出るのですが、ライブラリが対応していないのでしょうか? はい、対応していませんでした 対応させたバージョンをこちらにアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) > また、テクスチャをddsファイルとして出力する機能を可能であれば実装して欲しいです。 上記バージョンで以下の関数を追加しました // 現在描画対象になっている画面をDDS形式で保存する int SaveDrawScreenToDDS( int x1, int y1, int x2, int y2, const TCHAR *FileName ) ; よろしければお使いください m(_ _)m
メンテ
Re: 浮動小数点フォーマットのddsファイル ( No.2 )
名前:gufo 日時:2016/02/21 07:55

対応ありがとうございます。 ddsファイルの読み込みは正常に行われることを確認しました。 ですが、SaveDrawScreenToDDS()関数で保存したddsファイルをDirectX Texture Toolで開こうとするとエラーが発生します。 フォーマットによっては開けますが画像が乱れています。 確認していただけると幸いです。
メンテ
Re: 浮動小数点フォーマットのddsファイル ( No.3 )
名前:管理人 日時:2016/02/22 01:38

手元で幾つかのケースを試してみたところ、DirectX Texture Tool で開くと画像が斜めに なってしまうことがあったので、その原因となっている箇所を修正しました もしかしたらこれで「開けるけど画像が乱れる」現象は直ったかもしれませんので よろしければこちらの修正バージョンをお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) ただ、DirectX Texture Tool で開こうとするとエラーが発生するという現象を再現することはできませんでした よろしければどのようなフォーマットで保存した ddsファイルでエラーが発生してしまったのか 教えて頂けないでしょうか? m(_ _;m あと、お使いの DirectX Texture Tool のバージョンを教えて頂けないでしょうか? ( 因みに私が使用しているのは DirectX SDK (June 2010) に付属しているもので、バージョンは 9.29.1962.0000 です )
メンテ
Re: 浮動小数点フォーマットのddsファイル ( No.4 )
名前:gufo 日時:2016/02/22 03:18

一部のフォーマットでの画像が乱れる現象は修正されているのを確認しました。 DirectX Texture Toolのバージョンは管理人さんのものと同じでした。 エラーの出るフォーマットですが、 SetUsePlatformTextureFormat()関数でフォーマットを指定したテクスチャでエラーが起こるようです。 少し長くなりますがエラーが発生するコードを貼らせていただきます。 #include "DxLib.h" // プログラムは WinMain から始まります int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int Graph; SetUseDirect3DVersion(DX_DIRECT3D_9EX); if (DxLib_Init() == -1) // DXライブラリ初期化処理 { return -1; // エラーが起きたら直ちに終了 } SetDrawValidGraphCreateFlag(TRUE); SetCreateGraphChannelBitDepth(16); SetUsePlatformTextureFormat(DX_TEXTUREFORMAT_DIRECT3D9_A16B16G16R16F); Graph = MakeGraph(512, 512); SetDrawValidGraphCreateFlag(FALSE); SetDrawScreen(Graph); ClearDrawScreen(); DrawPixel(256, 256, GetColor(255, 255, 255)); SaveDrawScreenToDDS(0, 0, 512, 512, "test.dds"); DxLib_End(); // DXライブラリ使用の終了処理 return 0; // ソフトの終了 } 色々と試してみて疑問に思ったのですが、SetCreateGraphChannelBitDepth(16)をコメントアウトすると 作成されるテクスチャフォーマットがX1R5G5B5などのデフォルトのバックバッファのフォーマットになってしまいます。 この辺りの挙動に不具合があるような気がしますがどうなんでしょうか。
メンテ
Re: 浮動小数点フォーマットのddsファイル ( No.5 )
名前:gufo 日時:2016/02/22 18:31

2重投稿すいません。もう一つ不具合のようなものを見つけました。 A16B16G16R16Fなどのミップマップ付きテクスチャを読み込むと、ミップマップが作成されない現象が発生します。 こちらの現象も確認していただきたいです。
メンテ
Re: 浮動小数点フォーマットのddsファイル ( No.6 )
名前:管理人 日時:2016/02/28 02:55

> SetUsePlatformTextureFormat()関数でフォーマットを指定したテクスチャでエラーが起こるようです。 SetUsePlatformTextureFormat を使用してテクスチャのフォーマットを指定した場合は DXライブラリ内の扱いとしては特殊になるので、この機能を使用して作成したテクスチャは SaveDrawScreen での保存や GetDrawScreen などによる画像データの取得はできません ( 保存することができてしまうのは偶々なので、今回の修正でエラーになるようにしました ) 申し訳ありませんが SaveDrawScreen や GetDrawScreen を使用する予定のある描画対象にできる グラフィックハンドルの作成には SetUsePlatformTextureFormat によるフォーマット指定を しないようにしてください m(_ _;m ( DX_TEXTUREFORMAT_DIRECT3D9_A16B16G16R16F に相当する画像を作成する場合は MakeScreen の前に SetDrawValidFloatTypeGraphCreateFlag( TRUE ) ; SetCreateDrawValidGraphChannelNum( 4 ) ; SetCreateGraphChannelBitDepth( 16 ) ; を実行してください ) > A16B16G16R16Fなどのミップマップ付きテクスチャを読み込むと、ミップマップが作成されない現象が発生します。 すみません、今まで浮動小数点タイプのテクスチャは描画対象にできるものだけだったので ミップマップに対応していませんでした 修正したバージョンをアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: 浮動小数点フォーマットのddsファイル ( No.7 )
名前:gufo 日時:2016/02/28 08:00

SetUsePlatformTextureFormat()の詳しい説明ありがとうございます。 SetCreateGraphChannelBitDepth()などを使う方法でやってみたいと思います。 ところで修正バージョンを使ってもう一度確認したのですが、やはりA16B16G16R16Fなどのフォーマットではミップマップが読み込まれないようです。 (GetGraphMipmapCount()を使っても1が返ってきて、見た目にもミップマップが効いているように見えません。) 試しに読み込ませたデータはDXライブラリのSaveDrawScreenToDDS()で保存したA16B16G16R16F,512x512pixelのデータに DirectX Texture Toolでミップマップを生成したものです。 何度もお願いして申し訳ありませんが、もう一度確認していただけると幸いです。
メンテ
Re: 浮動小数点フォーマットのddsファイル ( No.8 )
名前:管理人 日時:2016/02/28 18:23

うーん手元の環境では A16B16G16R16F の DDSファイルのミップマップを読み込めています… ( GetGraphMipmapCount() の戻り値も 10 などになっています ) お使いのPCに搭載されているグラフィックスデバイスは何でしょうか? 可能性は低いと思いますが、もしかしたら A16B16G16R16F のテクスチャの ミップマップに対応していないのかもしれません… あと、こちらは関係ないと思いますが、昨日のバージョンをアップした後 2のn乗サイズ以外でミップマップがある DDSファイルの読み込みが正常に 行えないバグを修正しましたので、よろしければお試しください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) ただ、gufoさんが試されたのが 512x512 というかなり読み込み処理が正常に動作しそうな 解像度なので今回の修正は関係ないと思いますが… もし上記のバージョンでも読み込めませんでしたら、お手数で申し訳ありませんが 読み込めない DDSファイルをこちら BQE00322(あっとまーく)nifty.com ( (あっとまーく) を @ に置き換えてください ) に送って頂けないでしょうか? もし私の環境でも読み込めなければその原因を調べることができますので…
メンテ
Re: 浮動小数点フォーマットのddsファイル ( No.9 )
名前:gufo 日時:2016/03/01 04:17

すいません、ミップマップの件ですが完全に私の設定ミスでした。 ミップマップ付きA16B16G16R16Fフォーマットも正常に読み込めていました。 お手数おかけして本当に申し訳ないです。 ところで、今回の件とは関係あるのかわかりませんが、 ミップマップ付きキューブマップを描画する際にSetDrawMode(DX_DRAWMODE_BILINEAR)などのフィルタリング設定が適用できていないような気がします。 何度も申し訳ありませんがこちらの現象も確認していただきたいです。
メンテ
Re: 浮動小数点フォーマットのddsファイル ( No.10 )
名前:管理人 日時:2016/03/02 01:41

すみません、時間が無く現象の確認ができませんでした SetDrawMode( DX_DRAWMODE_ANISOTROPIC ) ; というのもあるのですが、 DX_DRAWMODE_ANISOTROPIC でも同じような結果になってしまいますでしょうか?
メンテ
Re: 浮動小数点フォーマットのddsファイル ( No.11 )
名前:gufo 日時:2016/03/02 11:10

すいません、ミップマップ付きキューブマップと言いましたが他のテクスチャでも同じ現象を確認しました。 この現象が再現する条件ですが、 シェーダーに渡すテクスチャのステージインデックスが4以上の時(register(s4以上))にフィルタリングが効かなくなるようです。 情報が後出しになってしまって申し訳ないです。
メンテ
Re: 浮動小数点フォーマットのddsファイル ( No.12 )
名前:管理人 日時:2016/03/07 01:47

ご情報ありがとうございます プログラムを確認したところ、DXライブラリは Direct3D 9 版ではテクスチャステージ0〜3でしか テクスチャを使用していないので SetDrawMode で変更するフィルタリングモードを テクスチャステージ0〜3に対してのみ行っていました これを Direct3D 11 版と同じテクスチャステージ0〜15 に対してフィルタリングモードの 変更を行うようにしてみましたので、よろしければお試し下さい m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: 浮動小数点フォーマットのddsファイル ( No.13 )
名前:gufo(解決) 日時:2016/03/07 21:57

対応ありがとうございます。 やりたかった表現がついにできるようになりました。 長いことお付き合いいただき本当にありがとうございました。
メンテ

Page: 1 |

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

   クッキー保存