- 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/
- 73 名前:72 mailto:sage [2011/07/28(木) 17:51:20.52 ID:G6+n8kg0]
- texture->lock()でピクセルを調べて、カラーキーでなければアルファ値を設定することで実現可能な感じがしました
でも手元の環境で想定できるフォーマットはA8R8G8B8のみ・・・他も考えなきゃならないんだろうか テクスチャ生成フラグにETCF_ALWAYS_32_BITを指定しても常にA8R8G8B8になる保障はないのかな
- 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]
- え、そんな事聞いてどうすんの?
吹き出しを書いた画像を作って、それを描画した上に文字を出せとか そういう答えが聞きたいのかい
|

|