【3Dエンジン】Irrlicht初心者質問スレその4at GAMEDEV
【3Dエンジン】Irrlicht初心者質問スレその4 - 暇つぶし2ch62:名前は開発中のものです。
11/04/28 14:03:19.58 rrHYWfWd
これから制作するソフト用のエンジンを探しているのですが、
Irrlichtは、マウスカーソルがある所のポリゴンを取得できますか?

CGツールみたいに、オブジェクト中の特定のポリゴンを選択とか
やりたいので

63:名前は開発中のものです。
11/04/28 20:42:22.34 3aWJvzTR
>>62
もちろんできるよ。
公式のチュートリアル7で解説してるから見るといいよ

64:名前は開発中のものです。
11/04/29 12:42:56.61 9o3Js+am
ありがとう!

65:名前は開発中のものです。
11/05/03 00:52:49.82 aB2xnOqT
フォーラムに書けないチキンなのでここに書く。
フォーラムの方々に泣くほど感謝。
ハードウェアスキニングのコード
Hardware Skinning for Irrlicht 1.7
を改変してウェイトに対応させた。三晩悶絶した。
ウェイトに対応する代わりにNormalが使えなくなるけど
irrlicht側は一切変更不要。
ポイントは
mesh->setHardwareSkinning(true);
mesh->updateNormalsWhenAnimating(false);
の実行順序。

ドワーフ6*6(6*7?)
HD5850 windows 7 x64(exeはx86)
OpenGL [Light:off][HWS:off] 125fps
OpenGL [Light:off][HWS(Weight):on] 688fps

66:名前は開発中のものです。
11/05/05 06:31:55.44 yjMgcbur
65続き
更にフォーラムのfmxさんの投稿を参考に
convertToTangentsして
Binormalをウェイト*3(4番目は1.0-(合計))に転用しNormalを生き残らせてみた。
まだやってないけどTangentに頂点カラーかマトリクスindexを持たせれば
頂点カラーも生き残らせることができるかも。
本当に本当にフォーラムは必見。
連投ごめん。終わり。

67:名前は開発中のものです。
11/07/07 23:25:50.67 eWsfc5od
Irrlichtのフォーラムの色変わってた!!

68:名前は開発中のものです。
11/07/08 00:27:34.67 pPCDjE0q
標準テンプレを差し替えただけかよ!

69:名前は開発中のものです。
11/07/24 20:51:21.02 c5QyUL19
2Dゲー作る勉強を始めたんだけど、今までSDLをちょろっと触った程度の知識しかなかったから
画像を思った場所にポリゴンで表示するだけで一苦労だった
チュートリアルサイト見ててもその処理が何をしてて何故必要なのかが説明されてないことが多くて(常識だから?)
理解を得るのにかなり苦戦するぜ。という俺の日記

70:名前は開発中のものです。
11/07/25 09:02:37.87 MgUklQO7
日記は他でやれ・・・と言いたいが久しぶりのポジティブなレス
応援してる がんばれ

71:名前は開発中のものです。
11/07/26 10:21:30.82 ycUXwhyt
irrExtが全然使われていないのって公式からたどり着きにくいからなのか?
そもそもどんな物なのか、よく分からないと言っている人もいる
URLリンク(irrlicht.sourceforge.net)

72:名前は開発中のものです。
11/07/27 23:36:11.28 bNPHEdBs
テクスチャの透過色(完全に透明)を設定した上で
実際に表示するときに全体的な透過率を設定できるようにしたいんですが全く手立てがつかめません
MaterialTypeの設定だけでは無理そうな感じだとは思うのですが、何か良い方法はありませんか

具体的には、黒を透過色とした画像ファイルをテクスチャに読み込んで
表示させるときに黒以外の部分の透過率を0~100%で設定したいんです

73:72
11/07/28 17:51:20.52 G6+n8kg0
texture->lock()でピクセルを調べて、カラーキーでなければアルファ値を設定することで実現可能な感じがしました
でも手元の環境で想定できるフォーマットはA8R8G8B8のみ・・・他も考えなきゃならないんだろうか
テクスチャ生成フラグにETCF_ALWAYS_32_BITを指定しても常にA8R8G8B8になる保障はないのかな

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

IVideoDriver::makeColorKeyTexture
URLリンク(irrlicht.sourceforge.net)

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

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

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

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

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

76:名前は開発中のものです。
11/07/28 23:38:49.94 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:名前は開発中のものです。
11/07/28 23:50:11.73 xiHpfsST
あ、 SMaterial.DiffuseColorのaいじるだけでいいかも っていうのは、
その前段に書いた ONETEXTURE_BLEND の対応をした上で、
頂点カラーをいじるんじゃなくて、マテリアルのDiffuseColorの設定だけで
いけるかも、っつーことね。

78:72
11/07/29 12:52:00.50 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:名前は開発中のものです。
11/07/29 14:32:35.72 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:名前は開発中のものです。
11/07/29 19:04:17.17 aD6FRI41
ONETEXTURE_BLENDがそんなに万能だったとは・・・

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

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


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch