[表示 : 全て 最新50 1-99 2chのread.cgiへ]
Update time : 07/31 20:20 / Filesize : 24 KB / Number-of Response : 83
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【3Dエンジン】Irrlicht初心者質問スレその4



1 名前:名前は開発中のものです。 [2010/09/21(火) 17:32:25 ID:pmlmAOqn]
zlibライセンスでクロスプラットホームなゲームライブラリ、Irrlichtのスレです。

※回答する人も、質問する人も必ず読んでください

これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近Irrlichtを始めたばかり
3.SDKを見ても、Googleで検索しても、エキサイト翻訳でもいまいち理解できない人

【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
 「ググれ」「英語読め」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。

【 質問する人 】
・ どんな事で躓いているのか明確にする。
・ 長くならないなら躓いている部分のコードを晒してみてください。
・ 解決した場合、お礼を言うのは当然ですが、何をどうしたら解決したかを明確に書くこと。

過去スレ
3 hibari.2ch.net/test/read.cgi/gamedev/1281085813
2 hibari.2ch.net/test/read.cgi/gamedev/1159998619/
1 pc8.2ch.net/test/read.cgi/tech/1104179696/

74 名前:名前は開発中のものです。 [2011/07/28(木) 22:34:43.64 ID:PCcpUSxP]
>>72-73
透過色を設定するというか、指定した色を投下したテクスチャを新たに作るメソッドなのだが

IVideoDriver::makeColorKeyTexture
irrlicht.sourceforge.net/docu/classirr_1_1video_1_1_i_video_driver.html#aed772902f4fe1185b44ce81b9b0b9add

・アルファテストを有効にしたままマテリアルカラー(または頂点カラー)のアルファを使う
・テクスチャのアルファとマテリアルカラー(または頂点カラー)のアルファを乗算する
マテリアルタイプがあれば良かったんだが、どうやら無さそうだな・・・

>>73で言うようにテクスチャを書き換えるか、シェーダーを使うしか無いかも
固定機能でテクスチャ書き換えずにやるにはIrrlicht本体のソースをいじるしかない

CD3D9Texture.cppを見てみた
テクスチャ生成フラグにvideo::ETCF_NO_ALPHA_CHANNELが指定されていると、
ETCF_ALWAYS_32BITでもR8G8B8になるよ
あと、生成に失敗すると16bitでリトライしているようだ。
テクスチャのカラーフォーマットが指定されたものになっているかは確認したほうがいいと思う。

75 名前:72 mailto:sage [2011/07/28(木) 23:31:32.54 ID:G6+n8kg0]
>>74
調べてくださってありがとうございます
その通りのマテリアルタイプがあれば万々歳でしたね
テクスチャ書き換えでは毎フレーム行うと相当な負荷がかかるようで工夫が要りそうでした

試しに同じ結果になる処理をDXライブラリにやらせたらCPU使用率3%以下で毎フレーム余裕orz
ソースいじる自信もないので保留か

76 名前:名前は開発中のものです。 mailto:sage [2011/07/28(木) 23:38:49.94 ID:xiHpfsST]
テクスチャいじるより、頂点カラーいじったら?
マテリアルタイプは EMT_ONETEXTURE_BLEND にして。
ブレンド/アルファソース情報をMaterialTypeParamに適切にpackする必要あるけど、
まあそこはCD3D9MaterialRender.hのTRANSPARENT_ALPHA_CHANNELを参考に、
SMaterial.h の enum なんかとにらめっこする感じで、あとはアルファソースを EAS_VERTEX_COLOR | EAS_DIFFUSE にすれば modulate してくれる。はず。

あ、最近のバージョンって、マテリアルで D3DRS_DIFFUSEMATERIALSOURCE 選択できんだっけ?
SMaterial.ColorMaterial かな。頂点カラーがダイナミックライトに反応しなくていいなら
これを NONE にして、SMaterial.DiffuseColorのaいじるだけでいいかも。

適当に説明端折ってるんで、ヘッダとかソースとか見つつで。

77 名前:名前は開発中のものです。 mailto:sage [2011/07/28(木) 23:50:11.73 ID:xiHpfsST]
あ、 SMaterial.DiffuseColorのaいじるだけでいいかも っていうのは、
その前段に書いた ONETEXTURE_BLEND の対応をした上で、
頂点カラーをいじるんじゃなくて、マテリアルのDiffuseColorの設定だけで
いけるかも、っつーことね。

78 名前:72 mailto:sage [2011/07/29(金) 12:52:00.50 ID:YxVVrSXe]
>>76
仰るとおりにやってみたら上手くいきました
結果的には以下のようなコードで確認できました(テストではスプライトを意識したものです)

material.MaterialType = EMT_ONETEXTURE_BLEND;
material.MaterialTypeParam = pack_texureBlendFunc( // texureってなんぞ
EBF_SRC_ALPHA,
EBF_ONE_MINUS_SRC_ALPHA,
EMFN_MODULATE_1X,
EAS_TEXTURE | EAS_VERTEX_COLOR);
verts[0].Color.setAlpha(alpha);
verts[1].Color.setAlpha(alpha);
verts[2].Color.setAlpha(alpha);
verts[3].Color.setAlpha(alpha);

速度も損なわずに動作するようなので目的は達成できそうです、本当にありがとうございました
Diffuseを使う方法については思うようにいきませんでした。EAS_DIFFUSEも存在しないようです

79 名前:名前は開発中のものです。 mailto:sage [2011/07/29(金) 14:32:35.72 ID:CB0S1CvF]
>>78
あ、EAS_DIFFUSE は記憶で書いた後直そうとして間違ったみたいw
EAS_TEXTURE | EAS_DIFFUSE って最初書いてて、ヘッダ確認したら
_DIFFUSE じゃなくて _VERTEX_COLOR だったので直そうとしたら、
間違って _TEXTURE のほう書き換えちゃったみたいw

マテリアルのDiffuseはダメだったかー。そのコードで、
material.ColorMaterial = ECM_NONE;
material.DiffuseColor.setAlpha(alpha);
みたいにすると、ドライバ見る限りはディフューズソースを
マテリアルディフューズにしてくれそうな感じだったんだけど(1.7.2)。

まあ、目的はこなせたようなので良かった。

80 名前:名前は開発中のものです。 [2011/07/29(金) 19:04:17.17 ID:aD6FRI41]
ONETEXTURE_BLENDがそんなに万能だったとは・・・

81 名前:名前は開発中のものです。 [2011/07/30(土) 14:40:03.45 ID:gdot1QHZ]
ドット絵のキャラに吹き出しでしゃべらしたいんだけど、吹き出しってどうやったらだせるでしょうか?

82 名前:名前は開発中のものです。 [2011/07/31(日) 19:03:44.47 ID:ysj+R9C4]
え、そんな事聞いてどうすんの?
吹き出しを書いた画像を作って、それを描画した上に文字を出せとか
そういう答えが聞きたいのかい








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<24KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef