トップページ > 記事閲覧
2Dキャラを発光させたい
名前:スパ 日時: 2017/12/15 19:53

DrawPolygonBaseを用いて簡単な2D描画をしているのですが、 頂点毎に加算カラーを設定するにはどうすればよいでしょうか? 加算半透明の事ではなく、テクセルに色を加算してから描画する機能です (たとえば黒服の2Dキャラを真っ白に光らせたい場合などです) (スペキュラっていうんでしょうか?) シェーダーの知識はあまりありませんが、サンプルや参考サイトなどがあれば何とかなるかもしません よろしくお願いいたします
メンテ

Page: 1 | 2 |

Re: 2Dキャラを発光させたい ( No.12 )
名前:管理人 日時:2017/12/20 00:28

お試しいただきありがとうございます そして、駄目でしたか・・・ > そうですね久しぶりに触り始めた感じです よろしければこれまで使用されていたDXライブラリのバージョンを教えていただけないでしょうか? m(_ _;m > せっかくなので最新のDxLib_VC3_19をベースに変更してみようとおもい > 新しく解答したフォルダで素の状態で VisualStudio_2010用.sln をビルド&実行すると > フルスクリーンで女の子が表示されて、爆音ノイズが出ます。 >  > .3系?のライブラリと私のPCの相性が悪いのでしょうか うーん謎です・・・履歴を見てみましたが、ここ2年ほどは原因となりそうな大きな変更は加えていませんでした・・・ > もしよかったら同slnでVS2010でビルドしたサンプルゲームVisualStudio_2010.exeをいただいてこちらで起動してみるとか、、、意味あるかな? こちらに私の環境で『サンプルプログラム実行用フォルダ』にある VisualStudio_2010用.sln を何も 手を加えずにビルドした実行ファイルをアップしましたので、よろしければお試しになってみてください m(_ _;m https://dxlib.xsrv.jp/temp/SampleVC2010Test.zip > もしくはDXLibに対してVSが古いのがよくないのですかね いえ、そんなことはありません、私も未だに Windows版の開発やテストに使用しているのは VisualStudio 2010 ですし・・・ > (無料の最新VSはどれだろう) Visual Studio Community 2017 です、こちらからダウンロードできます https://www.visualstudio.com/ja/vs/community/ DXライブラリの使い方ページはこちらをご覧ください m(_ _)m <Visual Studio Community 2017 を使用した場合のDXライブラリの使い方> https://dxlib.xsrv.jp/use/dxuse_vscom2017.html
メンテ
Re: 2Dキャラを発光させたい ( No.13 )
名前:スパ 日時:2017/12/20 01:12

>よろしければこれまで使用されていたDXライブラリのバージョンを教えていただけないでしょうか? m(_ _;m // DXライブラリのバージョン #define DXLIB_VERSION 0x3130 #define DXLIB_VERSION_STR _T( "3.13 " ) このように記載されています (圧縮ファイルが見つからないのでヘッダ内の情報ですみません) >こちらに私の環境で『サンプルプログラム実行用フォルダ』にある VisualStudio_2010用.sln を何も >手を加えずにビルドした実行ファイルをアップしましたので、よろしければお試しになってみてください m(_ _;m 対応ありがとうございます。 爆音でます、、、 こちらのPCに問題があるのかも知れませんね、、、 一応Avastを切ったり、HDMIを引っこ抜いて再起動したり試したのですが >Visual Studio Community 2017 です、こちらからダウンロードできます ありがとうございます。 試そうとしているのですがCドライブがあけられず苦戦しております また、安定していた古いほうのDXLibにおいてもReleaseビルドのときかつシェーダー描画の際に問題が発生することがわかりました 症状をまとめます
メンテ
Re: 2Dキャラを発光させたい ( No.14 )
名前:スパ 日時:2017/12/20 01:45

私のPCでビルド者によらず爆音が出てしまうのでこれ以上の報告は意味が薄いかもしれませんが 一応まとめてみました。 古いDXLIBかつReleaseビルドかつシェーダー描画の際に描画がバグる おそらくUVの取得がおかしくなる(左上かどこかのテクセルの色を拾う感じ) 矩形描画の場合たまに四角形の左上半面だけうまく画像が出る (ゲーム内の時間をとめて座標を固定してもちらちらする) 基本的にトライアングルリストのみを使用し、 VERTEX2DSHADERで頂点を構成しています。 そしてDrawPrimitive2DToShaderをコールするのですが、 特定のキーが(j)押されている間のみ、VERTEX2DSHADERをVERTEXに移植して 呼び出し先をDrawPolygonBaseに切り替えています。 Releaseビルドのさい、 jを押している間うまくいっています。(もちろん加算カラーがでない) 押していないと、上記バグがでます。加算色は成功しているようです。 Debugビルドの場合はうまくいっています。(今回のカリングの問題は独自にスルーしたため) 加算カラーは以下のピクセルシェーダを入れました シェーダーは完全なる生兵法です。知らないのに使っている状態です。 // ピクセルシェーダーの入力 struct PS_INPUT { float4 DiffuseColor : COLOR0 ; float4 SpecularColor : COLOR1 ; float2 TextureCoord0 : TEXCOORD0 ; float2 TextureCoord1 : TEXCOORD1 ; } ; // ピクセルシェーダーの出力 struct PS_OUTPUT { float4 Output : COLOR0 ; } ; // 描画するテクスチャ sampler Texture : register( s0 ) ; PS_OUTPUT main( PS_INPUT PSInput ) //入力値 { PS_OUTPUT PSOutput ; float4 TextureColor; TextureColor = tex2D( Texture , PSInput.TextureCoord0 ); TextureColor *= PSInput.DiffuseColor; TextureColor += PSInput.SpecularColor; PSOutput.Output = TextureColor; return PSOutput; } 以上となります。 よろしくお願いいたします。
メンテ
Re: 2Dキャラを発光させたい ( No.15 )
名前:スパ 日時:2017/12/20 18:18

というよりも変更点最小にした状態のソースファイルをお渡ししたほうがよさそうですね 作りますのでお待ちください
メンテ
Re: 2Dキャラを発光させたい ( No.16 )
名前:管理人 日時:2017/12/21 02:01

> // DXライブラリのバージョン > #define DXLIB_VERSION 0x3130 > #define DXLIB_VERSION_STR _T( "3.13 " ) 調べていただきありがとうございます 2014年10月のバージョンですね・・・3年分だと何かありそうです 解決するかはわかりませんが、爆音ノイズの原因かもしれない箇所に手を加えてみましたので、 よろしければこちらのバージョンをお試しになってみてください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース > また、安定していた古いほうのDXLibにおいてもReleaseビルドのときかつシェーダー描画の際に問題が発生することがわかりました > 症状をまとめます こちらの現象は爆音ノイズが発生する最新版でも発生するのでしょうか? 流石に3年前のバージョンを今修正するのは少し難しいです・・・
メンテ
Re: 2Dキャラを発光させたい ( No.17 )
名前:スパ 日時:2017/12/21 03:18

爆音収まりました。 上記のノイズ対策版をあて、現在の状況をまとめます ・Debug/Releaseの差はなくなりました ・爆音は出ません ・DrawString生きています。DrawPolygonBase生きています。DrawPrimitive2DToShader真っ黒です。 ・ToShaderへのカリング:独自対応&真っ黒化のため適応されているか不明 続きます
メンテ
Re: 2Dキャラを発光させたい ( No.18 )
名前:スパ 日時:2017/12/21 03:43

>こちらの現象は爆音ノイズが発生する最新版でも発生するのでしょうか? 最初にカリングを直してもらった12/18バージョンでは ・Debug/Releaseの差はありません ・爆音はでます ・DrawString生きています。DrawPolygonBase生きています。DrawPrimitive2DToShader真っ黒です。 ・ToShaderへのカリング:独自対応&真っ黒化のため適応されているか不明 となっております。この情報で足りますか? >流石に3年前のバージョンを今修正するのは少し難しいです・・・ いえ、こちらも最新版でやりたいと思っています サンプル提供おまちください
メンテ
Re: 2Dキャラを発光させたい ( No.19 )
名前:スパ 日時:2017/12/21 05:41

Release/Debugでの差異については rhwとsu,svなどの要素の初期化漏れでした。 最適化で変わるのは大体初期化漏れですねお恥ずかしい。 rhwはとりあえず1.0を、su,svについてはuvと同じ値を入れました。 (勉強不足のため何を制御する値なのかよくわかっておりません) また、わかったこととして、 古いDXLibでは成功するLoadPixelShaderが、DXLibを新しくすると0xffffffffを返していました。 エラー確認が抜けていてこれもお恥ずかしいかぎりです。 (とりあえずこれだけわかったのでサンプル送付は見送ります) ピクセルシェーダーの中身は昨日貼り付けたものと変わりありません 何かこちらでミスをしているでしょうか?
メンテ
Re: 2Dキャラを発光させたい ( No.20 )
名前:管理人 日時:2017/12/22 01:28

お試しいただきありがとうございます 爆音収まりましたか・・・ 最近はあまりないかもしれませんが、『サウンドの出力がある場合のみスピーカーが稼動する』タイプのスピーカーでは BGMの無いゲームでアイテム取得やミスやジャンプや攻撃などの音が鳴るたびにスピーカーが稼動状態へ切り替わり、 音の再生が終わると非稼動状態に切り替わる、ということが1音毎に行われ、しかも稼動状態に移行した後の0.5秒間くらいは 音が出力されないなどの仕様であることも多いため、結果として効果音が全然スピーカーから出力されない事態になったりします なので、そのような現象を避けるためDXライブラリでは起動直後からソフトを終了するまで無音( 振幅が0の波形 )を 再生し続けています( 波形の振幅が0の音データでも、スピーカーは波形の振幅が0かどうかまでは判定していないので、 件のタイプのスピーカーでも常に稼動状態にできる ) ただ、今回この無音( 振幅が0の波形 )の再生を止めたところ爆音ノイズが無くなったとのことですので、 この無音再生が爆音ノイズの原因となってしまっていたようです ですが、この無音データは一般的なサウンドと同じデータ形式のため、普通の wavファイルなどを LoadSoundMem で読み込み、 PlaySoundMem で再生した場合も再生される音がノイズになってしまうかもしれません なので、お手数で申し訳ありませんが『サンプルプログラム実行用フォルダ』の中にある『test.wav』を LoadSoundMem で読み込み、PlaySoundMem で再生するプログラムを組んで、爆音ノイズとなってしまうかどうかを ご確認いただけないでしょうか? m(_ _;m > 古いDXLibでは成功するLoadPixelShaderが、DXLibを新しくすると0xffffffffを返していました。 DXライブラリは Ver3.13f( 2015年4月 ) から Direct3D 11 が使用できる環境では Direct3D 11 を使用するようになったので、 それに伴って LoadPixelShader や LoadVertexShader で読み込むシェーダーバイナリも Direct3D 11 用のものにする必要があります ( すみません、3年前のバージョンではデフォルトが Direct3D 9 だったのを失念していました・・・ ) ただ、Direct3D 11 と Direct3D 9 ではシェーダーの書き方もかなり異なるため、現在のバージョンでも DxLib_Init の呼び出しを行う前の箇所に SetUseDirect3DVersion( DX_DIRECT3D_9EX ); という記述を加えれば描画処理に Direc3D 9 を使用するようにすることができます Direct3D 9 を使用するようにすることでスパさんが作成されたシェーダーコードバイナリも LoadPixelShader で読み込めるように なると思いますので、よろしければお試しください m(_ _)m
メンテ
Re: 2Dキャラを発光させたい ( No.21 )
名前:スパ 日時:2017/12/23 00:04

丁寧な解説ありがとうございます。 おかげさまで 加算色、カリング、シェーダー、爆音、Release/Debugの差異 すべて解決しました ゲームかいしじにLoadSoundMem("test.wav") エンターが押されたら PlaySoundMem(id, 0); が呼ばれるようにしてみましたが、銃声のようなSEが適切に再生されます。ノイズが残り続けるといったことはないようです。 ただ、PlaySoundMemを呼ぶ際、処理がガクっと落ちます 現在音は後回しにしていますので有事の際はまたお願いします。
メンテ
Re: 2Dキャラを発光させたい ( No.22 )
名前:管理人 日時:2017/12/23 19:34

描画関連の問題は解決したようで何よりです (^ ^ > エンターが押されたら > PlaySoundMem(id, 0); > が呼ばれるようにしてみましたが、銃声のようなSEが適切に再生されます。ノイズが残り続けるといったことはないようです。 おお、そうなのですね > ただ、PlaySoundMemを呼ぶ際、処理がガクっと落ちます そうなのですか・・・ お使いのPCのサウンドデバイスはUSB接続のアンプ機能内蔵スピーカーなどでしょうか? 恐らく PlaySoundMem を呼ぶ際に処理がガクっと落ちるのは 『サウンド再生が行われていなかったのでスタンバイモードだったサウンドデバイスが、 PlaySoundMem によってサウンドの再生を行うモードに切り替わる』 という動作がサウンドデバイスに起こり、その『再生モードに切り替わる』処理が一瞬では完了しないため 処理がガクっと落ちたのだと思います 『無音( 波形の振幅が0のデータ )の再生』は正にこの現象を回避するためのもの( 無音の再生は初期化時に 行われるので、『処理がガクっと落ちる』のが初期化時の1回だけで済む )なので、できればこの機会に 『無音の再生』を行うと爆音ノイズになってしまう現象を解決したいと思います・・・ Test.wav でしたら問題なく再生された、という結果を元に『無音の再生』の処理を少し変えてみましたので、 よろしければこちらのバージョンでしたら『無音の再生』を行っても爆音ノイズが発生しないか試してみてください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース ( 中身を既存のライブラリのファイルに上書きして、VisualStudioをお使いの場合は『リビルド』を、  BCCをお使いの場合は『再構築』をして下さい )
メンテ
Re: 2Dキャラを発光させたい ( No.23 )
名前:スパ 日時:2017/12/23 22:42

スピーカーは外部電源で、普通のヘッドフォンの端子と同じやつでつなぐ普通のやつです 上記適用してリビルドしてみましたが爆音でていません。 無音の再生とのことですが、wavが見当たらないのですがバイナリデータはDXLibの中に居る感じでしょうか よろしくお願いします。
メンテ
Re: 2Dキャラを発光させたい ( No.24 )
名前:スパ 日時:2017/12/23 22:47

ついでに適応した状態でtest.wavを再生しましたがガクつきはあります
メンテ
Re: 2Dキャラを発光させたい ( No.25 )
名前:管理人 日時:2017/12/23 22:53

> スピーカーは外部電源で、普通のヘッドフォンの端子と同じやつでつなぐ普通のやつです ご返答ありがとうございます なるほど、そうですか・・・ > 上記適用してリビルドしてみましたが爆音でていません。 お試しいただきありがとうございます 爆音が出なくなりましたか! 良かったです! > 無音の再生とのことですが、wavが見当たらないのですがバイナリデータはDXLibの中に居る感じでしょうか はい、無音なので特にデータは無く、DXライブラリの中で 0 の配列を用意して それを波形データとして使用しているので wavファイルなどはありません > ついでに適応した状態でtest.wavを再生しましたがガクつきはあります あ、PlaySoundMem の第二引数を DX_PLAYTYPE_BACK にすればガクつかなくなるでしょうか?
メンテ
Re: 2Dキャラを発光させたい ( No.26 )
名前:スパ 日時:2017/12/26 02:50

>あ、PlaySoundMem の第二引数を DX_PLAYTYPE_BACK にすればガクつかなくなるでしょうか? 試してみましたが、ガクつきなくなりました。
メンテ
Re: 2Dキャラを発光させたい ( No.27 )
名前:管理人 日時:2017/12/27 01:31

> 試してみましたが、ガクつきなくなりました。 お試しいただきありがとうございます 第二引数に DX_PLAYTYPE_BACK を指定することでガクつきがなくなったとしますと、 これまでのガクつきの原因は『音の再生終了を待っていたから』ということになります No.21 のご返信では PlaySoundMem(id, 0); として音を再生されていましたが、第二引数を 0 にすると DX_PLAYTYPE_NORMAL を指定したことと同じになり、DX_PLAYTYPE_NORMAL を指定した場合は PlaySoundMem で指定したサウンドの再生が終了するまで PlaySoundMem から処理が返ってこなくなります
メンテ
Re: 2Dキャラを発光させたい ( No.28 )
名前:スパ 日時:2017/12/27 02:01

なるほど了解です。 引数の名前でヘッダ内を検索したのですが、ヒットせず横着してしまいました… 丁寧な対応ありがとうございました 今回のカリングやノイズ音の問題の修正は、正式なものがそのうちあがる感じでしょうか? 自分だけ特殊なバージョンを使っていると少しモヤモヤします
メンテ
Re: 2Dキャラを発光させたい ( No.29 )
名前:管理人 日時:2017/12/29 13:09

> 今回のカリングやノイズ音の問題の修正は、正式なものがそのうちあがる感じでしょうか? はい、本件での変更は正式版にも反映されますのでご安心ください
メンテ
Re: 2Dキャラを発光させたい ( No.30 )
名前:スパ 日時:2017/12/30 07:12

ありがとうございます。 では正式版お待ちしております。 丁寧な解説ありがとうございました よいお年を (解決済みの処理は管理人さんにお任せでいいのかな)
メンテ
Re: 2Dキャラを発光させたい ( No.31 )
名前:管理人(解決) 日時:2017/12/30 23:50

解決済みの際は名前の末尾に(解決)をつけるのですが、もともとこの掲示板にあった文化ではなくて、 恐らくこちらの掲示板からの流れです <C言語何でも質問掲示板> http://dixq.net/forum/viewforum.php?f=3 こちらの掲示板では問題が解決した際は『解決チェック』を付けて投稿すると名前の右側に『[解決!]』と表示されるようになっていて 問題が解決できたかどうかがスレッドを開かなくても分かるようになっています ただ、DXライブラリ置き場掲示板ではそのような機能が無いので、『C言語何でも質問掲示板』でのルールを知る方が この掲示板でのご質問の問題が解決した際に名前の右側に『(解決)』と書かれたことが何回か続き、いつの間にかそれが定着した感じです(汗 なので、もし『(解決)』を付けていただける際は書き込みの修正機能や、問題解決時の書き込みで名前の右側に『(解決)』を付けてください (^ ^; 良いお年を〜
メンテ

Page: 1 | 2 |

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

   クッキー保存