【C++】 DirectX初心者質問スレ Part23 【C】
1 :
デフォルトの名無しさん:
※回答する人も、質問する人も必ず読んでください
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
【C++】 DirectX初心者質問スレ Part22 【C】
http://pc12.2ch.net/test/read.cgi/tech/1235736212/
2 :
デフォルトの名無しさん:2009/05/22(金) 18:17:45
DirectSoundなんですが、ストリーミングでバッファを再生したあとロック長周期で音が繰り返し再生されてしまいます。
バッファに新しいデータを入れても古い音もしばらく鳴っています。
アーッと入力すると、アーッ、アーッ、アーッ、アーッ、アーッ・・・といった感じです。
どんな原因が考えられますか?
データの差し替えが間に合っていない
【 もうこなくていい方 】
・「DirectXにスプライトなどない」と何度もわめく馬鹿
ところでDirect3Dではラスタスクロールが
出来ないらしいですが、本当ですか?
ピクセルシェーダーで余裕じゃない?
Direct3Dにラスタスクロールなどない
>>8 テクスチャサンプルする時に
±オフセットするのか
確かに出来そう
どうも
ベクトルVと
単位長ベクトルNがあります。
VをNを境界に反転させたいのですが
公式がわかりません。
教えてください。
VとNの内積 < 0 -> Vを反転させたい。
スレ違いだ
>>11 D3DXVECTOR3 NormalV ;
D3DXVec3Normalize ( &NormalV, &V ) ;
if ( D3DXVec3Dot ( &NormalV, &N ) < 0 ){
V = -V ;
}
cos=a・b/|a||b|
を使うんじゃね?
そもそも軸方向だけじゃ回転させれないだろ
原点はどこだ
違うのは解ってる
最後の1行をそのまま式にしただけ
このままだとVとNの角度が90度を超えたときに逆方向を指すだけ
境界と反転をもうちょっと具体的に言ってくれたら直すけど
>>16 原点は(0,0,0)です。
>>16-17 Nを法線とした原点を通る平面を
境界として反転させたいのです。
わかりました!ご迷惑おかけ致しました。
平面に射影したベクトル + 平面の法線 * -平面とベクトルの先との距離
多分これだと思います。
シェーダー使って2D描画する場合は自前でビルボード処理作ってやるの?
それとも、何か便利関数でもある?
directXの関数って一々覚えてるんですか?
それとも必要なときに調べて、プログラムを作り上げていくんですか?
22 :
19:2009/05/22(金) 21:39:51
といいますか、もっと簡単な方法でOKでした。
vertical = dot( N, V ) * N;
horizontal = V - vertical;
reverse = -vertical + horizontal;
関係ない話題ですまないけど、じゃあさ
FM-TOWNSのスプライトはどっちにはいるの? ニセの方?
DirectXと関係ない話を自分勝手に始めるな。
>>22 マジでそんなんなる?
求めるベクトルをQとおくと
Q=2|V|cosθ-V
だよね?で
cosθ=dot(N,V)/|V||N|
をぶち込むとなんかちがくね?
ってなるんだけどちがうんかなぁ?
こんな計算久しぶりで死んだw
間違ってるかも(間違ってたらスマンコ)
DirectX2D関連の質問もここでいいのでしょうか?
DirectX2DをVista環境で使用しています。ウィンドウ上に四角形を表示させて
マウスでその四角形をドラッグできるようにするプログラムを書いたのですが、
四角形をドラッグさせたときに、四角形ががたついてしまって困っています。
そうか
ディレクショナルライトの方向はどこですか?
自分で決めて良し
30 :
26:2009/05/23(土) 00:51:20
>DirectX2DをVista環境で使用しています。ウィンドウ上に四角形を表示させて
>マウスでその四角形をドラッグできるようにするプログラムを書いたのですが、
>四角形をドラッグさせたときに、四角形ががたついてしまって困っています。
単にメッセージループからマウスの座標情報を取り出すのに失敗している
だけでした。GetCursorPos関数を使うとすんなりとうまくいきました。
自己解決しましたので、一応報告しました
VC++のMFCにて以下の内容のプログラムを作ってます。
○SDIのViewに格子模様平面をD3DPT_LINELISTで描画し、マウスのドラッグによってカメラを回転させる。
格子模様自体は描画されているのですが、どうしてもカメラの回転が行われません。
描画の流れは以下のようになっています。
@マウスの移動を検知してD3DXMatrixRotationYawPitchRoll関数でメンバ変数のカメラ用マトリクスを回転させる
Aバックバッファクリアm_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
Bシーン開始m_pd3dDevice->BeginScene()
Cカメラ設定m_pd3dDevice->SetTransform( D3DTS_VIEW, &m_matView );
Dプロジェクション設定m_pd3dDevice->SetTransform( D3DTS_PROJECTION, &m_matProj ); ※このマトリクスは最初一回のみ生成して変化なし
E頂点バッファのセットm_pd3dDevice->SetStreamSource( 0, m_pVB, 0, sizeof(D3DTLVERTEX) );
Fインデックスバッファのセットm_pd3dDevice->SetIndices(m_pIB);
G頂点フォーマットのセットm_pd3dDevice->SetFVF( D3DFVF_TLVERTEX );
Hインデックスバッファ描画m_pd3dDevice->DrawIndexedPrimitive(m_DrawType, 0, 0, m_max_vertex, 0, m_max_primitive);
Iシーン終了m_pd3dDevice->EndScene();
Jバックバッファからプライマリバッファへ転送m_pd3dDevice->Present( NULL, NULL, NULL, NULL )
今見るとEFGは最初の一回以降要らないかなとも思いましたが今は毎回やるようになってます。
回転が上手くいってないのかとカメラビュー用のマトリクスを作る際の初期値で見える角度を変えてみても
変化が無く、まったくCDが機能していない状態です。
やり方が間違ってるか、こういうミスの可能性があるという事があればご教授頂けないでしょうか?
よろしくお願いします。
ワールド行列はどこ?
てか、ソースをうpってもらったほうが速そう
>>31 D3DFVF_TLVERTEXは座標変換済みの頂点フォーマットだよ。
そのフォーマットを使った場合は、座標変換は飛ばされる。
35 :
デフォルトの名無しさん:2009/05/23(土) 18:33:17
D3DXMATRIXA16を今使うメリットってあるんですか?
Pentium4だけしかパフォーマンスの向上は見込めないのでしょうか。
Core2DuoやPhenomにSSEが載ってないとでも?
37 :
31:2009/05/23(土) 19:31:49
>>33 ありがとうございます。
#define D3DFVF_MYVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1)
と定義してD3DFVF_MYVERTEXを使用することでカメラが動くようになりました。
D3DFVF_XYZのところをD3DFVF_XYZRHWにしてRHWの要素を入れてしまうと2D用に変換済みとして扱われてしまうという事ですね。
ここが怪しいとはまったく想像すら付いていませんでした。
いや普通にヘルプにそう書いてあるだろう・・・
39 :
デフォルトの名無しさん:2009/05/23(土) 19:59:58
>>36 命令セットが関係してたんですか。すっきりしました どうもです
D3DXのやかんはスペキュラー光でテカテカする設定になってないですか?
てかてかするかどうかはライティング(のスペキュラ光)の設定次第。
Teapod(やかんじゃないよ!)に直接は関係ない。
やかんwwww
D3DXCreateTeapotで作成したメッシュにとりあえず
for (unsigned int i = 0; i < mesh->GetNumVertices(); i++) {
data[i].tu = asinf(data[i].nx) / D3DX_PI + 0.5f;
data[i].tv = 0.5f - asinf(data[i].ny) / D3DX_PI;
}
の様にテクスチャを貼り付けたんですが、他にいい方法はありますか?
テクスチャで包み込むようにして貼り付けたいです。
directxについて勉強できるサイトはありますか?
今ゲームを作ってるんですが、たとえばキャラを動かすときには1ピクセルずつ移動、画面を更新するという市よりをしてます
こういう処理を楽にするのがderectx・・ですよね?
違う
日本語でおk
違うのですか、残念です
directxとはなんでしょうか?
公式サイトでは
>Windows のマルチメディア パワー、DirectX はグラフィックス・サウンド・3D アニメーションの最高のエクスペリエンスを皆さんにお届けします。
と書いてあるのですがさっぱりわかりません
>>47 端的に言えば、ハードウェアを抽象化して一意な手法でそこにアクセスできる
手段を提供してくれるソフトウェアレイヤー。
>>48 ありがとうございます全然分かりませんのでぐぐって出直してきます。
やっぱだめでした。rockem3Dのサンプルソースを解析してるのですが、手に負えない所感です。
ぐぐっても解説サイトや入門サイトがヒットしません。
rockem3Dって何?
ググってもまともに出て来ないぞw
俺には、アンタの言ってる事の方が手に負えない所感
rockman3Dにみえた
環境マップ
ティーポットの各頂点の作りと言うか並びが分らないんだから、
UVを指定して1枚のテクスチャで包むのは無理
法線からキューブマップかスフィアマップをルックアップする方法しかないんじゃね
急須のマテリアルはどこに用意されてますか?
もうダメかもしれん・・・
ここ1ヶ月朝から晩までPCの前に張り付いてるのに打開できない・・・
仕様が確定してないのが問題なのにソースコード睨んで悩む馬鹿に
この仕事は向かない
問題の切り分けができるようになる能力は必須だ
球を作ったのですが横が長く見えます。
どうすればまん丸に見えますか?
アスペクト比がおかしい
あー石綿ね。
>>57 1ヶ月も悩むくらいならソースうpれよ、みてやるから
>>59 射影行列を生成している部分
たぶんD3DXMatrixPerspectiveFovLHかそれに準ずる関数の
アスペクト比を指定する引数に1.0fが適当な値になってるんじゃない?
そこにレンダリングターゲットの「横/縦」の値をつっこむ
D3DX_PI / 4.0f, 1.0f, 1.0f, 100.0f となってました。
変更したら出来ました。
>>64 ソース見てないが、バッファという一旦溜める処理なのに
入力を遅延無しで出力出来ると思った根拠は?
あーそれで差し替えが間に合ってないのね
mmioにバッファード入力?みたいなプールしておいて一定で出すみたいなのあった気がします
結局mmioやんなきゃならないのか・・・
遅延を気にするのならASIOを使え
よってスレ違い
D3DRS_AMBIENTとライトのAmbientは何が違うですか?
D3DRS_AMBIENT→すべての物体に影響
ライトのAmbient→ライトの当たってる範囲のみ影響
質問です。DirectX 9.0 (SDK October 2004) を使っています。
また、エフェクトでは HLSL を使い、ピクセルシェーダ 2.0 でコンパイルしています。
http://souko2.sakura.ne.jp/temp/mono.jpg こんな感じに、ある 3D のシーンの一部の矩形を、モノクロ化しようとしていますが、
これの実現方法が分かりません…。
ちょっと説明しにくいのですが、球体などを描いた後、
矩形を 2D 物体として描画し、その際に矩形をモノクロ化しようと思います。
式としては、描画先の色を d、また、rgb 成分を [r][g][b] と表記するとして、
finalColor[r] = 0.1145f * d[r] + 0.5886f * d[g] + 0.2989f * d[b];
finalColor[g] = 0.1145f * d[r] + 0.5886f * d[g] + 0.2989f * d[b];
finalColor[b] = 0.1145f * d[r] + 0.5886f * d[g] + 0.2989f * d[b];
となります。
つまり、例えば最終色の [r] 成分を求めるために、描画先の [r][g][b] 成分が必要になりますが、
ピクセルシェーダでは描画先の色を使えないし、ブレンディング処理で D3DRS_BLENDOP を調べても、このような式を扱うオペランドは見つかりませんでした。
ここでつまってしまいました。
●制限
1.矩形の大きさや数は、毎フレーム変化する可能性があるので、その都度ステンシルバッファを作って…というのはできるだけ避けたい
(ステンシルバッファでどうにかなる問題かどうか分からないですが)
2.処理速度の都合上、シーンを一度テクスチャに描画し、ロックしてピクセルの色を取得し…というのも避けたい
(シーンの描画は直接バックバッファに行いたい)
制限2を破るしかないでしょうか?
何かいい方法があればお教えいただけないでしょうか。よろしくお願いします。
ん?
普通にピクセルシェーダーでその矩形だけ描けばいいだろ。
普通に描く…とは?
各物体をモノクロで描くのと、合成した後にモノクロ化するのでは結果は変わるので、
「各物体をそれぞれモノクロで描く」 のではなく、「合成後の結果をモノクロにしたい」 のです。
一旦テクスチャに描くしかないと思う
>>70 確かにアルファブレンディングでは内積出来ないね
考え付く方法としては2つ
@
1パス目に3Dシーンをテクスチャに描画
2パス目にテクスチャをバックバッファにコピー
3パス目にモノクロ矩形をバックバッファに描画
A
1パス目に3Dシーンをバックバッファに描画
2パス目にViewport(又はシザーなんたら)を変更して、
モノクロ部をバックバッファに描画
>>70 テクスチャAにシーンをレンダリングする
テクスチャBに矩形情報をレンダリングする
テクスチャAをBの情報をつかって加工しつつバックバッファにレンダリング
じゃ、だめ?
IDirect3DDevice9::StretchRectでバックバッファからデータ引っ張ってこれば?
だが普通はテクスチャに描画だろうな
うちの環境だと上の関数のが高速だったけど
うーん、やはりテクスチャに描画するしかなさそうですね…。
IDirect3DDevice9::StretchRect も試してみます。
割とよく使いそうな処理だと思うのに、単純なシェーダとブレンディングのみで出来ないというのが意外でした。
ありがとうございました。
テクスチャレンダリングをしたく無いとか自分勝手に制限つけといて
自分勝手なやり方を指して意外とか…もうねw
ただのめんどくさがりさんにしかみえない
テクスチャにレンダリングするのが普通なのにな。
バックバッファじゃ実質ARGB8888にしかかけないだろ。
〜ラノベっぽく書いてみよう!〜
/ ̄\ 例文.
| ^o^ | 「私はお腹がすいています。」
\_/
_| |_
| |
( 二⊃.| |
1、例文を話し手に合ったくだけた文に、漢字→かな(カナ)またはかな(カナ)→漢字に直す。
2、テキトーに修飾や無駄な句読点や間を付加する。
3、(重要)過去の事実、または現在の状況をこれでもかと差し込む。
4、倒置、反復、擬人、擬態を用いる。
/ ̄\ 完成例.
| ^o^ | 「昼に食べたカツサンドはとっくの昔に別れを告げていて、俺の胃は今や開店休業状態だ。
\_/ たった今でも次のお客さんを催促してしきりに呼び鈴を鳴らしてやがる。
_| |_ つまり、俺のハラの虫はお怒りでグーグーグーグー唸ってるってことで、
| | 簡単に言えば俺は腹が減っているのだ。」
( 二⊃.| |
いや、シェーダで出来るだろ?
>>82 どうやってやるの?
一応D3D9前提だけど、D3D10なら
それでもいいから教えて。
皆さんは右手系と左手系どっち使ってます?
私は左手系で組んでるんですけど、参考書が
全部右手系なんで、どっか間違ったらしく
今原因不明の逆回転病にかかって治せません。;;
俺は基本的に右手派だけど、たまに気分転換で左手も使う。
IDirect3DDevice9::CreateRenderTargetで作ったサーフェスに対してレンダリングするのと、
IDirect3DDevice9::CreateTextureにD3DUSAGE_RENDERTARGETを指定してつくったテクスチャに対してレンダリングするので、
なにか差があるのでしょうか?
左手にマウス 右手でシコシコ
金属みたいに見せるには
素材とライトはどうすれば良いですか?
>>88 diffuseとspecularが同じ色だと金属っぽく、diffuseに関わらず
specularが光源の色と同じだとプラスチックっぽい感じになる。
ほー
じゃあspecularが全然関係ない色のときは何っぽくなるの?
クックトランス鏡面反射で金属っぽいスペキュラが出来るらしいぜ
光る部分の形が変わるだけっぽいけど
まぢれすするとだな
テクスチャ張ったほうが早い
苦労する割りには視覚的効果薄いのばっかりなんだよね
効果あるのってバンプ、環境ぐれーじゃねぇのw
妙なシェーダに凝るよりはこれをうまく使えるようになったほうがいいと思うな
質感に関しては・・・
HDR、被写界震度、モーションブラー、シャドウマップあたりはかなり見た目に豪華になるぞ。
>>95 それ質感違うじゃん
そういう後で載せればいいのはとりあえずいいんだ
気分でON・OFFすればw
シャドウマップは影のジャギーが酷い
実用レベルの影を出そうとしたら、テクスチャのサイズが大きくなりすぎる
分散シャドウマップを使えば良い感じになりそうだけど
俺の頭じゃ理解できん!
モデリングツール上ではなくて実行時にはモデルのスケールは
センチメートル単位にするのが一般的だったりしますか?
古い話で申し訳ないが、DirectDrawはネット上の記事を見ると、
アルファブレンドは対応してないと読める。
しかし、DirectDrawで描画しているようにバイナリ上からは見えるYU-RISは、
あれだけ多彩な描画エフェクトを整備している。
あれはCPUで実現しているんだろうか?
それとも他の方法だろうか。Direct3Dを呼び出しているようには見えなかったんだが……。
初めまして
ゲーム中にSleep()以外でループ止めたいのですがどんなやり方がありますか?
効果音が鳴り終わるまで描画を止めたりしたいです
アドバイスお願いします
厚かましいかもしれませんがスレ違いだったら誘導お願いします
何がしたいのか分からんが再生状態を取得して描画をスキップとかか?
ループを作ったのが自分なら、どんな方法でも止められるだろ。
一般論ならそうなる。
効果音が鳴り終わるまで待つというなら、それは何で鳴らしているのかによってくるな。
効果音の再生を別のスレッドで行い、再生の終了が検出可能ならば
CreateEvent()/WaitForSingleObject()等で同期をかけるのが一般的か。
えっと、コードにするとこんな感じです
例
音を鳴らす
if(m_count = 120) { // 2秒待つ
次のシークエンスへ
}
m_count++;
こんな感じでできればと思ってます
2秒待ってから次のシークエンスに移行したりです
>>86 それはそのまま、サーフェイスとテクスチャの差になる。
テクスチャはサーフェイスのスーパーセット(コンテナ)なので
サーフェイス+αの機能を持つ。
具体的には、シェーダの入力パラメータとして再利用できるなど。
>>99 DirectDraw時代は、MMXでピクセルエフェクトが
定石だったような。QuakeとかDiabloとか。
まあD3Dを使ってるかどうかは、DependencyWalkerや
PIXとか使えばわかるんじゃない?
>>103 if(m_count > 120)
{
描画
}
m_count++;
>>104 そうか!
今までむしろサーフェイスがテクスチャを持っているんだと思ってた。
そう考えるとしっくりいくところもあるかなぁ。
で、やっぱりCPUでガリガリやるのか。
いまさら車の再発明するにはしんどそうな世界だな……。
やはりシェーダーいじりで作っていった方が無難か。
頂点カラーをつけたXFileを表示させたいのですが上手くいきません
D3DXで読み込んでもデフォルトだと頂点カラーは読み込んでくれないみたいなのでCloneFVF
でD3DFVF_DIFFUSEを加えてもダメでした。
テクスチャステージの設定
SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
頂点カラーは
m_pd3ddevice->SetRenderState(D3DRS_COLORVERTEX, TRUE);
m_pd3ddevice->SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_COLOR1);
m_pd3ddevice->SetRenderState(D3DRS_SPECULARMATERIALSOURCE, D3DMCS_COLOR2);
デバッグのウォッチ1という欄にもしかしたら関係するかも知れない表記があったのですが良く分かりません
http://appleloader.bbsnow.net/pic_loader/nomal/html/1_7.html 正方形に頂点カラーを付けただけですが書きだしたXFileをアップしたので頂点カラーが表示されるか見てもらえると幸いです
XFileに頂点カラーは定義されてました
http://down11.ddo.jp/uploader/download/1243314815.x/attatch PASS : 0000
お願いします
長文失礼しました
>>107 とりあえず、D3DXMeshの頂点バッファに
頂点カラー情報は乗ってるの?
>>107で行っている各種設定は、
頂点バッファに頂点カラーが含まれていることを前提とした
表示の為の設定です。
これらをいかに変えようが
元々無いなら、反映のしようがない。
D3DXLoadMeshFromX()系でXfileを読み込んで
頂点カラーが反映されないようなら、元々サポートしてないと
いうことなのかもね。
XFileもみたけど、、まともなviewer持ってないんで
これもよくわからん。
残念ながら
ID3DXMeshインターフェースでは頂点カラーのデータは保持しません
別の手段を考える必要があるでしょう
D3DXはDirectXではない
レスありがとうございます
>>108 ブレークポイントを置いて調べたのですがD3DFVF_DIFFUSEはありましたが頂点カラーは渡されてませんでした
>>109 オリジナルのフォーマットで書きだして読み込むってことでしょうか?
別に独自フォーマットにしなくても
Xファイルから頂点バッファに読み込んでいけばいいだけだと思うけど
そもそも頂点カラー付きXファイルで何がやりたいの?
それは本当に必要なの?
オレは逆に頂点カラーの無いメッシュが存在することに驚いた。
全部の頂点が0xFFFFFFFFという扱いになるんだろうか?
頂点カラーじゃなくて
マテリアルカラー*テクスチャカラーで描画することが多いからじゃ?
レスありがとうございます
>> 112
趣味でゲームを作ろうと思っていて
頂点カラー付きのフィールドモデルを表示したいからです
確認したいのですが
>Xファイルから頂点バッファに読み込んでいけばいいだけだと思う
D3DXLoadMeshFromX()で読み込んでD3DXCreateMeshFVF()でメッシュを作ればいいのでしょうか?
それともD3DXLoadMeshFromX()で読み込んだ後ID3DXMESHから頂点バッファを取得して
なんらかの方法でXFileからの頂点カラー情報を直接頂点バッファに渡せばいいのでしょうか?
>>115 多分だけど、今までの流れから
D3DXLoadMeshFromX()は頂点カラーを読み出さない。
だから、一旦普通にD3DXMeshを作ったら、
D3DXCreateMeshFVF()で、FVFにD3DFVF_DIFFUSEを
マージしたD3DXMeshを作り直す。
んで、頂点バッファをロックして頂点カラー成分を上書きする。
って形になるんじゃないかなぁ。
書き込むべき頂点カラーだけど、これはなんらかの形で
xfileから持ってくる必要があるだろうね。
これは一苦労だし、頂点カラーとD3DXMeshの組み合わせはお勧め出来ない?
間違った、
D3DXCreateMeshFVF()じゃなくて
ID3DXBaseMesh::CloneMeshFVF()ね。
118 :
115:2009/05/26(火) 19:31:10
>>116 レスありがとうございます
独自フォーマットも視野に入れつつアドバイス頂いた方法で試してみます
太陽はライトの設定的にはどんな感じになるの?
無限遠方の白色平行光源(デフォルト値)
>>118 D3DXMeshの頂点バッファのデータみてみたけど
頂点カラーもデータ自体はロードしてるっぽいぞ
DrawSubset内で何かいらん処理をしてるんじゃなかろうか
ロードはいままで通りD3DXMeshで読み込んで
取得した頂点バッファとインデックスバッファを使って
DrawIndexedPrimitiveで描画すればいけるんちゃう?
半加算合成で
アルファ値が0の時はうっすら表示
アルファ値が255の時は普通に表示
であってますか?
半加算って意味わからんが、
アルファが0なら完全に見えないだろ。
ですよねー
どこで間違ったorz
>>123 どう表示するかはレンダーステートの設定次第。
device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
device->SetRenderState(D3DRS_TEXTUREFACTOR, color);
device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_DIFFUSE);
device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_TFACTOR);
device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_TFACTOR);
こんな設定です。
>>107 データを見てみました。
D3DXLoadMeshFromXで読み込んだところ、
メッシュのFVFは( D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_DIFFUSE )になり、
メッシュ内の頂点バッファのデータにも頂点色(Diffuse)が存在しました。
(Xファイル内の頂点色と同じ値でした)
また、DrawSubsetによる描画でも頂点色が反映されました。
ただし、Ambientは頂点データに存在しないのでマテリアルのものが使われました。
(陰の部分に頂点色が反映されない)
あと、2個目のサブセットのマテリアルのEmissiveに、黒以外の値が入っているので
描画時にそれが使われて自己発光していました。(白っぽく表示された)
ということで…、
pDevice->SetRenderState( D3DRS_AMBIENTMATERIALSOURCE, D3DMCS_COLOR1 );
で、頂点色(Diffuse)をAmbientとして使う設定にし、
マテリアルのEmissiveを黒(0.0f, 0.0f, 0.0f, 1.0f)にすれば、
たぶん>107さんが意図している表示になると思います。
いやもうシェーダー使おうぜ・・・
>>127 加重平均の式書いてみろよ
srccolor x α + destcolor x (1-α)
だろ?
ちゃんとなってるか自分で確認しろ
Aキーを連打した回数をカウントしたいと思っているのですが、
int count=0;
if(DXUTIsKeyDown('A'))
{
count++;
}
のように記述しても、一回しかカウント変数にプラスされずに困っています。押すたびにカウントされるようにするにはどうすればいいのでしょうか?
>>131 プログラム書いたことあんの?w
int count=0;
これで毎回初期化されてるから0なんだろ?
staticで逃げられるけど
どうも状況を想像するにそれで逃げられるとは思えないなw
134 :
107:2009/05/27(水) 08:17:29
>>128さんのやり方でやったら黒以外の頂点カラーは表示されました
黒を表示したいのですがどうやればいいのでしょうか・・・?
赤や青はちゃんと頂点カラーとして思い通りに表示されました
アドバイスよろしくお願いします
もう厭だあああああああ
>>134 黒って何?
11;0.070588;0.000000;0.015686;1.000000;,
これの事? ちゃんと表示されるよ
ためしにXファイル最後のほうのマテリアルのエミッシブの
0.784314;0.784314;0.784314;;
をすべて0.0に修正して表示するとどうなる?
137 :
134:2009/05/27(水) 19:12:36
レスありがとうございます
m_pd3ddevice->SetRenderState(D3DRS_EMISSIVEMATERIALSOURCE, D3DMCS_COLOR1);
にしたら思い通りに描画されました
しかし黒線の中だけ頂点カラーが反映されていませんでした
オブジェクト回転させてみたら正面向くときだけ壁の部分が頂点カラー反映されなくなるので
ライトに問題があるのかもしれませんので調べてみます
XFileのマテリアルは一律
Material {
1.000000;1.000000;1.000000;1.000000;;
51.200001;
0.000000;0.000000;0.000000;;
1.000000;1.000000;1.000000;;
TextureFilename {
"テクスチャ名";
}
}
となっています
ここが問題かもしれないというのがあればアドバイスください
よろしくお願いします
メタセコとかで表面を丸くする機能ってよく使われてるけどDirectXでもそういう機能があるんですか?
ありません
自分で実装する必要があります
>>139 リアルタイムでそんな機能いらないだろw
やっぱりポリゴン数を増やして丸くするわけですよね?
だから重くなるし必要ないのかな?
なんでそんな機能があるんだろう
>>142 モデリングソフトには必要な機能だろ
なにもリアルタイム3Dばっか作ってる人だけじゃねぇし
どんだけ想像力ないんだよw
誰も彼もがリアルタイム3Dをやってるわけじゃない
それに、増えたポリゴンを摘んで造詣するなど、モデラならではの利点もある
そっかそっか
まあ一瞬で軽い処理だけでできないってことがわかったのでサンクス
>>145 いや別にやってやれないこともないんじゃない?
なにか条件を絞り込むとかさ
ポリゴン数増やすとかメンドイから
ライティングを頂点シェーじゃなくて
法線の線形補完とかでピクセルシェーダでやれば
実際のポリゴン数よりなめらかに表示されるんじゃない?
実装も簡単だし
ただし、激重になる可能性はあるが
同じことをDXUTを使ってするのと使わずにするのではどちらが重くなりますか?
馬鹿が書いたらどっちも重い
CPUをコア1個分まるまる占拠するようなゲームループしか作れないようならDXUTつかっとけ
一応DirectX11にはポリゴン分割して曲面作る機能がつく
Nパッチなら、DX9で
ちょっとした変更で簡単に出来た気がする
メーカー依存のやつだろ?
>>151 そんな状況あるのか?
流石に一個まるまる使う事はないだろw
フレームレートを一定にするために
while( oldClock+1000/60 > clock() );
してCPU100%使ってたのは俺だけでいい
よく入門書とかにあるような
while ( TRUE ) {
if ( PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) ) {
if ( !GetMessage(&msg, NULL, 0, 0) ) break;
TranslateMessage(&msg);
DispatchMessage(&msg);
} else {
if ( フレームレート制御 )
{
GameLoop() ;
}
}
とかやると100%いくんでない?
Sleep(0);じゃだめ?
それでも良かった気もするが
ちゃんとやるならあとどれだけ待つか計算してそのうち何%くらいかでSleepかけるかな
初めてから3日目になります。
ディレクショナルライトを設置したのですが、どうもうまくいきません。
表示しているのは、板ポリゴン1枚、メッシュ球(sphereで作った)、メッシュ人体(Xファイル読み込み)です。
ライトをオフにすると全部表示されますが、オンにすると球だけ光が当たり他は真黒になってしまいます。
原因として何が考えられるでしょうか?
そもそもDirect3DならPresent呼ぶたびにフレーム分待つんじゃないの?
指定できるけどな
Present後すぐに次のフレーム向けの処理に移行したい等で待たない事もある
>>162 基本的にいまどきのビデオカードなら、VSYNC同期を指定してもPresentで待たない。
ドライバの設定で指定できる(隠し設定の場合もある)フレーム数までキューが
溜まるまでは、バッファに溜め込むようになっている。
(そのために暗黙的にバックバッファを余分に作っている)
キューが上限に達したら、どこでブロックするのかは確認してないが、多分Presentか
あるいはBeginSceneで画面が更新されるまで待たされる。
そういう意味では、Presentで待つとも言える。
しかし、GPUが描画した結果に対してLockしてCPUからアクセスするようなことをすると
描画が終わるまで待たないといけないので、そこで処理がブロックされてしまう。
そのような意図がなくてもLockのフラグ指定等を間違えて使っていると、無駄な
描画待ちでパフォーマンスが落ちる。
また、SetTextureやSetRenderTargetをしたままにせずに、Presentの前に明示的に
解除して、GPUにもう必要ないというヒントを与えることも重要らしい。
ただし、このような描画命令のバッファリングは、その分画面が更新されるまでに
遅延が発生するので、アクション性の高いゲームでは嫌われる。
その場合に昔からよく使われる対策が、Presentの直前でバックバッファをLockして
強制的に描画待ちを発生させる方法。(MSはLockではなくQuery使えと言ってるが)
で?
>>165 オレは164の情報が素直に参考になった口なんだが。
いつもPresent()なんで何も考えずにNULLしか渡してないもんな。
ていうかちゃんと一定間隔待つだろ
垂直同期かどうかはしんねーけど
昔作ったアプリの挙動が変わるとかいうバグはいまのところないし
待つか待たないかはPPのPIで変えられるって話
>>161 ありがとうございます。
D3DFVF_NORMALを追加したら表示されました。
今まで普通に見えてたオブジェクトがプロジェクトのファイルの場所とかソースのファイルの場所とかいじってたら黒くなって見えなくなったんだけどなんで?
実リソースへのパスが変わったからにしか思えんが…
デスクトップのフォルダ→ヴィジュアルスタジオのファイル、デバッグのフォルダ、DXUTソースのフォルダ、DXUTのヘッダのフォルダ、ソースやリソースのフォルダ
に分けて、パスも名前\\ってつけたしプロパティでユニコードとかいくつか設定をしてデバッグしたら
今までエラーが出なかったクリック時の変数の初期化でエラーが出て、これはヌルで初期化したら解決した
でアニメーションはちゃんとしてるのに物体が真っ黒
元と大体同じはずなのになんで?DXUTの問題とかエフェクトファイルの場所とか?
>でアニメーションはちゃんとしてるのに物体が真っ黒
初めの質問で、これを出さない時点で、
残念ならがお前はプログラムするのには性格やら能力やら諸々向いてない
明らかに、テクスチャかライティングの問題
大方、Xファイルが指す画像ファイルのパスが変わったんだろ
そういえば動かない板メッシュやxファイルは普通にテクスチャも貼られてるのにアニメーション付きのだけ黒い
経験が浅いからどこが重要かわからないのは誰でもあることなんじゃないか?
プログラミングの経験が浅いのと
質問する内容をちゃんと伝えられない、のはまったく別の問題
そんな奴は、プログラミングのスキルが上がった所で
自分しか知らない事を伝えもしないで、それを前提で質問とか平気でする
だからプログラマ(その他もろもろの仕事に)向かない
ソース自体は変わってないし元々ちゃんと写ってたわけだからねえ
だからライティングではないと思うしソース中のXファイルのパスはちゃんと変えたし
プログラミングの経験が浅いのと
質問する内容をちゃんと伝えられない、のはまったく別の問題
そんな奴は、プログラミングのスキルが上がった所で
自分しか知らない事を伝えも/ ̄ ̄ ̄ ̄ ̄ ̄ ̄\ 質問とか平気でする
\ だからプログラマ(その他も | うるさい黙れ | /
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\_______/ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∨ (゚д゚ ) ぐおおお
<⌒/ヽ-、__ノヽノ |
/<_/____/ < <
ああ位置だな多分サンクス
>ソース中のXファイルのパスはちゃんと変えたし
だから、質問するくらいのレベルなのに知ったかすんな
Xファイル”内”、にパス付きで画像ファイルが指定してあるだろ
それと整合取れてるのか?って話
>ソース自体は変わってないし元々ちゃんと写ってたわけだからねえ
>だからライティングではないと思うしソース中のXファイルのパスはちゃんと変えたし
自分でやったのはフォルダの位置変えだけなのに、
パスの問題だと思えない時点 & 自分に落ち度が無いかの如くの発言
してる時点でプログラマを通り越して、まともな社会人になれないと思うww
完全独学プログラム暦1年で3Dゲーム作ってる超絶センスなのにセンス無いとか言われてもグサッとこないんだよね
いままでの流れのレスを見て”超絶センス”とか行ってる時点で
凡人以下が勘違いしちゃってるとしか思えんw
それにDXUTやD3DXを使ってるくせに、3Dゲーム作ってるセンスってww
プログラマに向かないとか
社会人になれないとか
それはDirectXに関わる話か
論的に考えればDirectXなんて全然関係ない質問を
まとに聞く事も出来ず、しかも自分の落ち度も省みず、質問者の姿勢としてもなってない
これのプログラマや社会人としての適正意外、なにを指摘しろとw
あ?DXUTとかD3DX使ってゲーム作ったらセンス無いんか?
別にデバイスがどうのとか知らなくてもPC上の高速な3Dゲー作れるだろうし問題なくね?知らないけど
187 :
デフォルトの名無しさん:2009/05/30(土) 10:02:21
directshowのサンプルってどのバージョンのSDKに入ってます?
ライブラリ使おうが、使いこなせればセンスあると言える
使いこなせないで、
”3Dゲーム作ってる超絶センス”
とか、もうライブラリ機能を自分の能力と勘違いしてるだろ
としか言い様がない
俺も最初は下から言ってたんだけどさ、結局役に立たないってことに気づいちゃったのね
覚える事の方が多いし、時間が経てば自力で気づくし
だから甘やかさないことにしたんだよね、まあ今回はちょっと解決が早まったから感謝してるけど
>>186 DXUTを選んでる時点で"センス"はないね。
1年で3Dゲームを作ったという点は確かに立派だけど。
DXUTを使ってる時点で"高速"なゲームでもない。
たんに最近のハードウェア任せのごり押しに過ぎない。
超絶センスがあるくせに
DirectX初心者質問スレで頓珍漢な質問&レスをした挙句
それで解決して言う事が、ピリッと違いますね
さすが、超絶センスの持ち主
別に、DXUTで間に合ってる人はそれでいいじゃないか。
物足りなくなったときに、より低レベルのものに取り組めばいい。
>>187 9のExtrasかDX8、mediasdk辺り。
>>192 普通の人はね
でも、自称3Dゲーム作る超絶センスがある持ち主は別なんじゃないかね?
例えば
物理演算ラリブラリを使って1日で物体の挙動が物理制御できたら
物理演算の超絶センスがあると言えるのか?
高速つっても目指してるところはプレステ1とか64レベルだしDXUTでいけるだろ今までの感触的に
別に描画システム自体どんどん開発されていくのにお前らの思ってる描画の仕組みをどれだけ知ってるかみたいなことをセンスとか言っても何の意味も無いと思ってるけどね
別にDirectXとかゲーム機作りたいわけじゃないし
でたw
得意の後だし情報の追加ww
プレステ1とか64レベルを指して光速なんて、お前意外に知るかって話だwww
自分でやったのがフォルダの位置変えだけなのに、パスの問題を疑う事すら出来ない時点で
プログラマのセンスが無いと思うが…
出来合いのシステムを使おうが、センスある奴は理解して
頓珍漢なはまりなんてしないんだよ、はまってる時点で何を言おうがセンスは無いだろ
お前らの言う高速って最近の妙にリアルな切り合いとかっぽいしな
まあDXUT外すとか俺のセンスから言えば1ヶ月もあれば余裕でできるだろとは思ってる
でもどっちかっていえば
>>196の方がプロよりの考えだよね。
つまり、その1ヶ月はこのスレで楽しませてくれるとw
>>200 プロは基本を理解してるからこそ、人様の物を利用して早く終らせようとする
基本がなって無い奴が、御託を並べて人様の物を使っても
使いこなせなくて、このスレとかで頓珍漢な質問をする羽目になる
例えば、
プロドライバーなどが、アクセル踏んだままクラッチ操作して車の挙動を制御したとしよう
それは、アクセル、クラッチ、エンジン等の車の挙動を理解して、自分の行動の結果をわかってるからこそ
教習所に通ってるレベルの奴が、アクセル踏んだままクラッチ操作だけをまねしても
クラッチ壊すのがオチ
でも専門学校のやつが1年でDirectX直接叩きで3Dゲーム作ってんの見てたから
「DXUT使える俺超センス」とか言われても微笑ましさしか感じないって言う。
神降臨の悪寒
自分でシステムを作れるが、時間がかかるので利益を出すために他の出来合いのシステムを利用するのがプロのプログラマ
自分でシステム作れないが、他の出来合いのシステムを利用だけすることが出来るのがコーダー作業員w
DXUTに文句つけてるのって
どうせNIH症候群のライブラリ厨だろ?
良くある簡易ライブラリと違ってDXUT使ったからって
低レベル操作ができなくなるわけじゃないし
時間掛けてもしょうがない所は何でもつかってでも短縮して
本当に時間を掛けるべき所に力をいれた方がいい
ほら、事の発端なのにDXUTが何やってるとかあんまり理解して無い俺と大体同じこと思ってる人が現れたじゃん
俺をセンス無いと言うならこの人を論破しろよな
そうやってDXUTやD3DX使うのはまったく問題ない
しかし使いこなせないで、DXUTやD3DXの使い方を質問する位なら
DXUTやD3DXが何をやってるか理解出来るレベルになって使わないと
時間をかけたいところすら出来ないレベルの連中が多いだけ
DXUTやD3DXが何をやってるか理解出来てるなら
自分で使う事のトレードオフを考えたり、なにより使いこなせない訳ないし
>ほら、事の発端
歪曲するなよ
3Dゲーム作ってる超絶センスの持ち主が
実は、DXUTやD3DX使ってます、って話だろ
DXUTがそうとは言わないけど
ある程度安定して動くと分かってるシステムがあったら迷わず使っちまうなぁ
システムから作り始めたらそこのデバックやらバグ取りやらで
結構な時間使っちまうし、納期は待ってくれないし
システムから作りたいってことは
もしシステムに致命的なバグがあって、それで損害とか出しても
責任を取るって覚悟があるってことでしょ?
そこは素直にすげーって思える
>DXUTがそうとは言わないけど
確かに実際にそうではないね
DXUTを使ってPCゲーを商業ベースで出してるなんて聞かないし
そもそもDXUTに不具合があってもMSが責任あるわけじゃないし
ところでDXUTってそんな便利でお手軽なもの?
ある程度DirectXを理解してる人にとっては
手間を省く手段になり得るものだとは思うけど
初心者が関数をぽんぽんっと呼べば何でも出来るようなものだっけ?
自分のソース中でロードしてないくせに
BMPとして完全に別ファイルにあるテクスチャ画像を
XファイルとD3DX使って、あまつさえテクスチャ画像を移動させといて、
黒くなって描画されませんと言う奴が、自称
”3Dゲーム作ってる超絶センスの持ち主”
世も末だね
D3DXの市販ソフトでの採用例は、枚挙に暇がないがな。
センスある奴は、その時点で
Xファイル内に画像ファイルの情報が入ってる、と気が付くと思うけどねぇw
>>212 DirectXを使ってるのはPCゲームだけじゃないぞ
DXUTベースで動いてるソフトは意外とある
DirectXAppWizardベースで動いてたゲームも結構あるしな
マイクロソフトが責任を取ってくれるわけじゃないけど
自分でデバックしなくてもある程度のバグが既知になるだけで結構違うと思う
ちなみにDirectX始めてからは半年くらいなんだぜ?すげえだろ
だからなんでDXUTとD3DX使ったらセンスが無い事になるんだよ
本をマッハで読めてメモリやらポインタやら一瞬で理解してコードとか暗記して手打ちできる奴以外センス無いとか言う電波論なわけ?
DXUTと上げて市販のゲームと話してるのに、D3DXが何で出てくるんだ?
こんな会話と同義だろ
2千円札なんて流通してないよね?
回答)千円札の流通なんて枚挙に暇がないがな
???
ちなみに枚挙に無いのはいとまだろと言ってみるテスト
と言おうとしていとまを変換したら暇になったってのは秘密だぜ
>>218 お前は自分に都合の良い解釈を辞めろw
パスの問題で頓珍漢な質問して、プログラムのセンスが無いという話と
”3Dゲーム作ってる超絶センス”を自称して
DXUTやD3DX使ってるって話だろ
プログラム歴やDX歴で個々の問題を片付けようとするな
>>218 普通にDirectX環境が無い業界(PS3とか)を目指してる奴は
DirectX初めて数ヶ月後には、D3DX相当の自作(解析)を始めたりするぞw
だからパスは気づかなかっただけだろあと2時間もあれば自力で気づいてたよ
そんなこといっていちいち他人に言われることでグラついてるのは
正直、どっちがいいのが自分の中で結論出てないからでしょ?
煽るほうからすればそんなのでどっちでもいいんだよ
DXUT使ってることでもってる自分でも気づかない負い目に蹴りいれられてるだけなこと気づけ
なんか論点があっちこっちに飛びすぎw
とりあえずDXUTとセンスの間には何の関連性もないな
Xファイルにファイルパスミスなんて誰もが通る道じゃん?
多少調子に乗ってるくらい生暖かく見守ってやれよw
ほめて伸ばすって言葉もあるくらいだし
俺個人的には「DirectXを使える」ようになるには半年もいらないけど
「DirectXを理解した」といえるようになるには3〜5年はいると思ってる
センスがあっても経験がないと上みたいはアホなミスで引っかかって時間潰すんだよね
>>223 それを世の中では、”出来ていない”と言うのですよwwww
だからお前らの言ってるセンスってのは行列がどうとかカメラがどうとかメッセージがどうとか理解してるかの話だろ?
そんなのセンスじゃねえよ、誰でも勉強したようにしか成長しない
経験がなくとも、アホなミスで引っかからないのが”センス”と言うのでは?
>>222 そういう奴は何年も言語とかの勉強してきた奴だろ
もしくはオープンGLとか
>>187 DirectShow はWindows SDK
>>228 センスとは最初からあるものではなく磨くものなのだよ
もうやめて!自称3DPGの超絶センスはもう0よ!
>>229 そんなことはない、プログラム歴半年でDX初めてとかでも結構居るぞ
…OpenGLには、算術関数等は無いが?
…あんたさ、全角使うから書き込みバレバレだよw
でも
>>222は無駄だろ
これなんのつもりでやってんの?w
だいたい会社にそろってるし
他社のエンジン使ってる会社だったら意味ないよw
まあ毎日会社で無理矢理教えられて行列の変換がどうとか何時間もやらされたらそりゃ作れるだろうな
俺は実際片手間でやっててこの成長度なわけだし
だから有意義にできるからセンスがあるんだよ、あれもこれも短時間に手に入れるにはセンスがいるだろ
たまたまパスに気づかなかったのはセンスの有無とは関係ない、その内気づいた
>>234 別に隠す気とかねえよ
そんな駆け引きやってるとか考えてんならお前の言ってる事がこっちをびびらせるための嘘だともとれるがな
会社がそんな手取り足取り基本から教えてくれる所だと
考えてるならそれは夢を見すぎだぞ
普通はピーンとくるもんだがな。
気がつかなかった自分の間抜けさを反省するどころか
そのうち気づいたと負け惜しみを言うセンスw
>>235 は?
当然、ベクトルや行列やスキニングの基本処理を覚える為だろ
会社で作業員やるなら確かにいらんが、それしか頭に無いのかw
会社にあるエンジンや、売ってるミドルウェアは誰かが作ってるに決ってるだろ
んで、それは必ず古くなる、この業界だと凄い速さで
作業員くんは、誰かが作ってくれないと仕事が出来ないわけですよw
しかし久々に盛り上がった
内容は全く無かったがな
また来週末あたりに爆弾投下を頼む
>>236 たまたまならね
しかし、今回は
自分でフォルダ移動しかしてない、
>>214の事実
これをもってして、たまたまとは言わないと思うね
その内気づいた
と後だしで言ってる奴がした行動
DirectX初心者質問スレへの頓珍漢な質問
プライスレスw
いや、実際はプロジェクト新しく作ってDXUTや元ソースのコピーを作ってきてフォルダ分けしたからDXUTとかヴィジュアルスタジオの知らないとこでバグってんのかと思って焦ってたから気づかなかったんだよ
実際プロパティいじらないとできないところとかあったし
>いや、”実際は”
超お得意の、後だし情報
今回は追加じゃなくて、過去の全否定ですか!?
いやはや…
ともかくさ、センスあるんだろ
>>214の事を何とも思わなかったのかい?
唯一つ俺には会社に入らなくてもゲームが作れるという強みがあるからな
お前らとは違う
就職して人生かけなくても十分片手間でできる
お前らはまたDirextXの仕様が変わったwwwとか言ってあくせくしとけよ、それでたくさん知ってるからセンス有るとか思っとけ、俺は必要なものだけすばやく使うから
>>245 経験上いらんことを言ったら違うとこで煽られるからな
これも1年で覚えたスレで質問するセンスだぜw
>>246 だから、それを強みと思うのは”お前の都合”なんだよ
お前と逆の立場で、仕事としてゲーム作って金が貰える強み、とかに反転できるだろ
そう言うのをさ、レスの初期のころに向いてないって指摘されてただろw
>>247 は?
>>214は、お前自身の問題だろ
D3DXとXファイル使ってる&フォルダの中身を見てるなら
Xファイルと画像BMPファイルは別に存在して
且つ画像BMPの名前を記述してないが、Xファイル名は記述している
センスあるなら、その事実から直ぐに分るだろ?
って話だ、その内容を質問しろって話じゃねーよw
電子軌道のプログラムは難しいなあ・・・
おめーらそんな言い合いじゃなくてプログラムでも作って勝負しろよ
>>248 こういうスレの態度をリアルで出すかのごとく言う奴ってなんなの?
リアルで出すわけねえじゃん
>>250 そういえば、どういう式を使えば表現できるんだろうね。
気が向いたら調べてみようかな。
>>252 リアルで出さないと思った所でボロが出るのが大半
お前、会社か学校かで嫌われ者だろ
特定の少数の友達しかいない、若しくは居ないw
>>249 だからDXUTとヴィジュアルスタジオのファイルのつながりとかプロパティとかのミスかと思ったんだって
そっちはいずれやってたって、センスあるし、確かに真っ先に確認すべきだったけどな、今となっては
作業がヴィジュアルスタジオとかの処理よりだったからそっちに頭がいっぱいになったんだよ
>>255 センスある人間の言い訳とは思えないw
言ってる内容もプログラムセンスがあるとも思えないww
>>255 お前、
>>170で言ってる事とまったく違ってるだろ
>今まで普通に見えてたオブジェクトがプロジェクトのファイルの場所とかソースのファイルの場所とかいじってたら黒くなって見えなくなったんだけどなんで?
>>254 お前って底辺っぽいよな
自分を殺したり人に気使ったり人に嫌われないようにしないと生きていけない環境なんだよな、友達とか嫌われるとかに最大の興味がある奴はそう
別に俺は勝ち組予定だからそんな環境に入らなければならないつもりはないし、顔も良いからリーダータイプだったし
>>258 …すまん、図星だったか…
言い過ぎたよ
>>257 今見ると焦ってた割にはもう正解付近に近い質問できてるじゃん、やっぱりあと数分で気づいてたな
>>253 単純なs,p,d・・・軌道は簡単なんだけど
sp2,sp3とかの混成軌道が難しい
そして反応に重要なのは後者だったりする・・・
じゃあ、その超絶センスで作ったって言うゲームをみせてもらえばいいんじゃない?
まだ製作途中でゲームの形をしてないとかなら良いとこ取りな動画でもいいし
「俺はゲームが作れる」って言い張ってるんだから
パスの問題が解決したなら多少は動く絵があるんでしょ?
うp
>>259 むしろお前の図星だろ、突くように言ったんだけどな
ゲーム会社にどれほどの学歴がいるかとか年収とか人間環境とか知らないけど、思考自体底辺っぽいし
人間関係が思考の中で優先されるような仕事環境は底辺がやるものと思ってるから
ここは初心者質問スレだ。
質問や回答でないものを延々と語りたいやつは他でやれ。
>>263 >人間関係が思考の中で優先されるような仕事環境
全ての会社の基本ですw
お前程度の奴は、上司が気に入らなかったら徹底的にイビられるぞ
会社のイジメは性質が悪いぞ?w
ちなみにゲームは作れるレベルにいると思ってるけど作ったことはないよ
モデリングのセンスがまだ無いからそこの成長混みで3年くらいかけて大作作るつもりだし
それを作り出すためにコピーして新プロジェクト作ったんだよ
>>265 だからそれはお前の常識だろ
お前の低学歴ゆえの底辺環境を人にあてはめんな
底辺とか関係なしに
現場責任者レベルの人が「職人」みたいな人だと
周りもみんな出社してから退社するまでただ黙々と作業するなんてことは結構あるな
人間関係に気を使う人だと
たまに冗談とかも出たり和やかな空気で仕事できるけど
あるある
いまの自分の仕事に不満はないけど
隣のチームがすげー楽しそうなんだよ
あのディレクターの下で働きたいって普通に思える
やっぱ職業グラマーは底辺だな
2ちゃんでもなるなって言われてるし
便利ツール貰える以外に価値ないだろ
もういいからvipとかいけよ
掲示板での評価なんてどうでもいいじゃないか。
こんな流れじゃ初心者が来ても質問できないよ?
意地張ってないでさっさと仲直りしろよ。
あばばばばばばば
私初心者ですけど、DirectXを使ったゲームのうち、DXUT使ったゲームって少ないのですか?
ちなみに理由も教えてください
DX8以前のゲームの方が多いから、DXUT使ったのは相対的に少ないよ
DirectX11でも同じようなサンプルフレームワークが用意されていたら
もうちょっと使われるようになるかもね
まぁでも実際には面倒くせぇからオープンソースのライブラリ使ったりするよな。
ゲームが作りたいんであってシステムが作りたいわけじゃないし。
個人的にはオープンソースライブラリ使う⇒完成させたらライブラリの中を気にしてみる
⇒気づけばDirectXウマーくらいでいいと思うけどね。
いずれプロになりてーっつーなら別だけど。
>>240 は?
それがD3DXみたいなもんを作ることなの?
D3DXなんて数学の本みながらテキトーに作ればいいじゃん
これがなんの勉強になるの?
どうせなら使い方を知っておいてくれよ
あまりのズレっぷりに悶絶したw
とりあえずスキニングは当然として
バンプ、環境、グレアぐらいは入ってないとマジでとらない
年々ライブラリチームは難易度が上がってる気がする
ゲーム作っていったほうが最近は楽だよ
アイヤー!
憲法改正で軍靴の足音が
聞こえてくるアルヨー!!!
 ̄ ̄ ̄V ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧∧ ウリナラにも聞こえるニダ! ノ ゚.ノヽ , /}
/ 支\  ̄ ̄ ̄ ̄ ̄ ̄ ̄V ̄,,イ`" 、-' `;_' ' ヒィー、スミマセンスミマセン!!!
( `ハ´) ,-、 ∧_∧ (,(~ヽ'~∧朝∧
( ~__))__~) )'~ レ 、<丶`∀´>. i`'} (@Д@-),, ノ ))
| | | ~つ /核∧_∧ | i' (( l|lll|lll| (⌒,)
(__)_) / "ゝ<丶`∀´> 。/ ! と( とノレ
/ { } /},-'' ,,ノ ∨ ∨ Σ ガンガンガン…
./.| ./.| ./.| ./_;=-" ,i' _,,...,-‐-、/ i
/核/ /核/ /核/ <,,-==、 ,,-,/ / ̄ ̄``\l|l|l|l|l|l|l/
_ / /_ / / _ / / {~''~>`v-''`ー゙`'~_-_ニ三ミ:/ /"^`\、二 の .言 ギ ひ そ 二
\/ ./ヘ\/ ./ヘ\/ ./ヘ . .レ_ノ ./´ ヾ|テ〉 'テテヽ二 か .っ ャ ょ れ 二
.◎丶i ◎.丶i .◎丶i '' |テ〉 'テテ` |.〈ッ u 二. !?. て グ .っ は 二
./.| ./.| ./.| . |.〈ッ u | `ニ'' 二. る で と 二
/核/ /核/ /核/. | ゙ニ''′ ノ `r--‐''_, 二 し 二
_ / /_ / / _ / / `r--‐''__, ┘ ̄´ 二 て 二
\/ ./ヘ\/ ./ヘ\/ ./ヘ .,.-┘ ̄´ / 0 /l|l|l|l|l|l\
◎丶i ◎.丶i ◎.丶i
初心者なんですけど、ローポリは三角ポリゴンが多いと聞いたのですが、四角ポリゴンのほうが処理が軽いのではないのですか?
なんで軽いと思うの?
1枚でいいし角度がつかないから?
そんなに違わないの?
SetRenderTargetをテクスチャに変更して
スプライトを描いてもバックバッファにかかれるんですけど?
そらそうだ
じゃあ三角ポリゴンで全部作っても四角ポリゴンで作っても同じなの?
ていうか、そもそも四角ポリゴンってOpenGLにしかない。
あと、曲面を表現する際には三角形の方が四角形よりも表現性が高い。
そっか、重くならないのならむしろ全部三角にした方がいいんだな
D3DXにスプライトなど無いが正解
へりくつ
ID3DXMeshをメッシュとは呼ばない
ID3DXLineをラインとは呼ばない
ID3DXFontをフォントとは呼ばない
ID3DXSpriteをスプライトとは呼ばない
何故ならそれらは個別のインタフェイスを表す言葉ではなく、一般用語だから。
>一連のメソッドトを提供する
どうしたらこんな変な翻訳になるんだろう?
呼びキス
つまり一般用語と区別を付けるため、D3DXでメッシュを使う場合という言い方をしなければ意味が通らないというのが結論。
305 :
デフォルトの名無しさん:2009/06/01(月) 21:32:24
D3DXCreateSprite関数とD3DCreateTextureFromFileInMemory関数を使ってスプライトを表示したいのですが、
両者の関数に渡す引数って、よく見ると関連してませんよね?
(例えば、CreateTexture〜で作ったテクスチャをCreateSpriteに渡すとか)
ということは、
この2つの関数を連続して呼び出すと勝手にDirectXの側でテクスチャとスプライトを関連づけてくれる、
ということになっているのでしょうか。何だか釈然としません。
いま、CreateTexture〜で作ったテクスチャはテクスチャとして保持しておいて、
Spriteだけをとっかえひっかえして表示したいと思っているので困っています。
空のスプライトオブジェクトに、後から、あらかじめ読み込んでおいたテクスチャを流すような方法はないでしょうか?
ちなみになぜこんな事をしたいかというと、フォントだけをひたすら並べた画像の一部を切り出して
スプライトに乗せて文字列として表示するクラスを作っているからです。画像&テクスチャを使い回したいのはそういう理由からです
>>304 しかしめんどくさいので単にメッシュを使うという
>>305 CreateTexture〜で作ったテクスチャはID3DXSprite::Drawに渡すんじゃないかな
DirectXにテクスチャなどない。
>>306 その通りでした。
見落としてました。
ありがとう
/)
///)
/,.=゙''"/
/ i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!!
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\
/ ノ il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!| |r┬-| |
/ iトヾヽ_/ィ"\ `ー'´ /
>>304 話の流れを見ても一般用語の方かD3DXの方か分からないんです><
って言いたいの?
こまけぇこたぁいいんだよ!!(AA略
見た目で新ジャガイモと新メークインの違いがわかりません。
IDirect3DTexture9をテクスチャとは呼ばない
で?
衝突判定で悩んでいるのですが
プレイヤーとフィールドの衝突判定を主人公(OBB)を作りフィールドの法線の逆にOBBが出たら戻すという感じで考えています
プレイヤーとフィールドの衝突判定は普通どんな感じでやるのですか?
プレイヤーとフィールなどDirectXにない
秋田
答えられないなら黙っててください
DirectXと無関係なのでスレ違い
答えられないなら黙っててください
最近のSDKだとコリジョンぽいことやろうとしてるのが入ってるけど
.‐'' ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ヽ
| ________ |
| | ∧__∧ | |
| | <`∀´ > | |
| |_/ 二\ | |
| |_/\ \\) | |
| | \ \ | |
| | / /\ ̄ ̄ ) |
| | / /  ̄| ̄ 非 常 識 |
| \ \ \ \ |
ゝ、 \ \ \ \ ノ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
それはこりあん
324 :
デフォルトの名無しさん:2009/06/01(月) 23:58:15
アーキテクチャーを一新したdx10の下位互換のdx9とxpdx9とは違う物なの?
それともosの互換性?dx10用のビデオドライバーの仕様の違いとか。
このエミュー使う為にはdx10環境は必項ですね。使ってないvistaが有るので入れてみます。
また下位互換と上位互換を混同している馬鹿が。
>>324 下位互換のAPIは延々と収録されていく仕様。
でもAPIは変更したいからそのためにバージョンを分けている。
バージョンごとには基本的には普遍。
そうしないと昔のゲームが動かないだろ?
DirectXに下位互換があったらDirectX10用のゲームがDirectX9以前で動くことになるぞ。
なんでこういう誤用を平気でかますんだろう?
>>327 そうはならない。
DirectXが下位互換・上位互換をサポートしていることと、
それに依拠したアプリ(ゲーム)が上位互換・下位互換をサポートしていることは全然別だから。
ただし、>326 はやはり、『APIは上位互換として延々と〜』いう言い方をするべき。
ここで下位互換を使うと意味が通じにくくなる。
右手座標系の正規直交基底行列UVWって
以下でいいんでしょうか?
[Ux,Uy,Uz]
[Vx,Vy,Vz]
[Wx,Wy,Wz]
それともそれの転置?
>>329 転置かどうかは、行ベクトルか列ベクトルかって話で
右手か左手かは関係ないでしょ。
正規直交基底とは通常行列ではなくベクトルの組に対して使う用語なんだから、
そのUVWというのも単なる列ベクトルじゃないのか?
詳しくないので間違ってるかもしれないが。
>>330-331 わかりづらくてすみません。
オブジェクトの姿勢を表す為に、
オブジェクトに基底行列を持たせる場合、
Direct3DやOpenGLの右手座標系だと、
行ベクトルの組で持つのと、列ベクトルの組で持つのは
どっちが一般的なのかと思いまして。
RH系でレンダリングする以外に意識する所ってあったっけ?右手座標
>>333 右手が、というよりは
Direct3DやOpenGLで右手の場合、
ベクトルは列ベクトルで扱うってのが一般的らしいです。
それにあわせると、基底行列はどっちが
いいのかな?と考えたらよくわからなくなりまして。
基底行列がU,V,Wのベクトル3つ並べたものだと考えると
3 x 列ベクトルが正しそうな気がしますが、
今既に、行ベクトルx3にしちゃってるんですよね。
クライム カタリスト オラトリオ
「まさか、後罪の触媒を<讃来歌>無しで?」
教師たちの狼狽した声が次々と上がる。
……なんでだろう。何を驚いているんだろう。
カタリスト チャネル
ただ普通に、この触媒を使って名詠門を開かせただけなのに。
よ
そう言えば、何を詠ぼう。
自分の一番好きな花でいいかな。
どんな宝石より素敵な、わたしの大好きな緋色の花。
赤
――『Keinez』――
そして、少女の口ずさんだその後に――
メッシュってxファイルが存在しないと使用できないんですか?
球体を描画するのに使おうと思ったのですが・・・
xファイルを使わないなら、頂点バッファで良いじゃん?
>>337 俺もそう思って、D3DXMeshを使うのをやめてしまった。
ポリゴンの初期化は手でやっちゃうからな。
>>336 聞く前にリファレンス見れば一目瞭然だろう。
Create系関数が大量にあるだろ。
しかも、球なら専用の関数も用意されてるし。
>>337-339ありがとうございます
どうやら可能みたいですね。このまま頑張ってみます。
ID3DXMeshをメッシュとは呼ばない
/)
///)
/,.=゙''"/
/ i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!!
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\
/ ノ il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!| |r┬-| |
/ iトヾヽ_/ィ"\ `ー'´ /
343 :
デフォルトの名無しさん:2009/06/03(水) 12:16:12
モデルの色をテクスチャにディフューズ色を乗算したものにしようと思い
以下のようにしたのですが、
pD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
pD3DDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
pD3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
pD3DDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
テクスチャは表示されるのにディフューズ色が乗算されません
ライトを有効にすると乗算されますが無効にするとテクスチャしか表示されません
何か設定がまずいのでしょうか?
あのねチミ、ディフューズというのは拡散反射光という事なんだよ
ライト無しにディフューズできる訳無いんだよ
わかったかね?
シェーダーでやれば一発解決
レンダーターゲットにいろいろ描画したあとに
特定の色のアルファだけ0にするにはどうすればいいですか?
__ \お嬢様とまた一緒に/ ,. ‐- 、
/ ./| \まんまる焼きを/ ___(_,ィ,=o=)
| ̄ ̄| | \ ∧∧∧∧/ 〔〔 | ん( *‘ヮ‘) アイハブコントロール!
| | |<イモ < 映 > _/ ||Ξ/ つ¶つ¶
| | | ちゃん!< 予 画 >__\|/ ̄ ̄ ̄ ̄ ̄\
|__|/ < 化 >
─────────< 感 決 >──────────
ねぇ…イモちゃんは?< 定 > ,. ‐- 、
さっきまで一緒に < !!!! の > ___(_,ィ,=o=)
. _, '´!p`´qj、 いたのに/∨∨∨∨\ 〔〔 | ん( *^ヮ^) お嬢様…大好きです!
ゝ. ノ从从リゝ /突っ込んでくぜ\ _/ ||Ξ/ つ¶つ¶
`'メ(リ ゚ . ゚ノ)゙´ / クレイジー! \__\|/ ̄ ̄ ̄ ̄ ̄\
>>346 要するに、抜き色のことだろ?
D3DXCreateTextureFromFileEx()あたりを使ってみたらどうだ。
>>348 最初からテクスチャがあるならそれでもいいんだが
あるテクスチャをもとに派生テクスチャをリアルタイムで描けないとまずくて、
しかも透明色もつかえないとまずく、
D3DXCreateTextureだとカラーキーが設定できないし
D3DXCreateTextureFromFileExはファイルからテクスチャ作るときだし
なにかいい手はないかと思ってたけど
pD3DDevice->Clearするときに
ARGBを0x00000000で透明色でぬりつぶすことで事足りまつた
テクスチャをロックして好きな場所のα値を書き換えればいいだけ。
PSでなんとかしてみたい
固定機能でやりたいんですと初心者なら言うはず
ピクセルシェーダ使うなら
ifで色判定してアルファを0にするだけじゃん
カメラのデータとして、
a:カメラ位置
b:カメラの注目点
c:カメラの頭上
の3点をデータとして持ち、直角三角形になるように配置します。
そしてカメラの移動する際に
@z軸を回転軸としてカメラの横方向回転
A直角三角形の法線を求めて、それを回転軸として縦方向回転
という処理をしているのですが、何度もグルグル回していると、何故かカメラがどんどん傾いていきます。
aとbとcを通る平面が絶対に地面から垂直になるようにしたつもりなのに、グルグル回すし続けるとどんどん斜めに傾きます。
これは法線を求める段階やそこから縦回転させる計算での、コンピューターの丸め誤差が影響してるのでしょうか?
それとも何か根本的な間違いをしているのでしょうか?
計算方法も書いてないないのに何を指摘しろと
abcの値を直接いじってる?
abcは初期姿勢として残しておいて
それぞれを回転トランスフォームした値をつかってビュー行列を作ればいいかと
356 :
354:2009/06/04(木) 11:47:45
>>355 abcの値を直接いじってました。
今ご指摘の方法で動かすために大幅改造中です。
実行時のビデオカードのピクセルフォーマットでサーフェイスを作って、
LockRect後にサーフェイスの中身を直接いじりたい場合、
環境によって24ビットカラーだったり32ビットカラーだったりするけど、
ここはどう差を吸収したら良いんだろう?
例えば、サーフェイス上の左上隅から X:10 Y:10 の場所のピクセルを
青 RGB(0, 0, 255)に設定したい場合とか…
想定されるメジャーなフォーマットに対応させて処理を分ける。
また想定外なフォーマットしか対応していないビデオカードなら、
起動時に弾けば良いだけ。
また24bitなんてフォーマットがそれこそ想定外。
てか、何のフォーマットで作ってるかどうかは分かってるんだから
取得ポインタを3Byteずつずらすか4Byteずつずらすか変えればいいだけじゃん
360 :
357:2009/06/04(木) 17:21:16
>358
スマソ、古いPC使っていてVRAM容量が小さいから
24ビットは普通なんだと思ってた。
確かに、ビデオカード(MilleniumG450)を24ビットカラーに設定すると、
DirectXの初期化ですでに上手く動かない…
>359
これはじゃあ、GetAdapterDisplayMode関数でカラーモード取得した
値に応じてポインタの移動量を3Byteか4Byteにすれば良さそうですね。
ありがとうございます。
DX9なら、全てのフォーマットを網羅しても大したことないし
俺は、フォーマットごとに型を作ったよ。
struct R8G8B8
{
enum
{
format = FMT_R8G8B8,
b_bits = 8,
g_bits = 8,
r_bits = 8,
};
union
{
struct
{
uint8_t b;
uint8_t g;
uint8_t r;
};
uint24_t value;
};
operator const uint24_t&() const { return value;}
operator uint24_t&() { return value; }
R8G8B8( const uint24_t& value_ ) : value(value_){}
R8G8B8(){}
};
これと、__if_exists()を組み合わせれば何でも出来る。
>>357 24bitのサーフェスに3D描画できるGPUってほぼ存在しないと思うよ。
だから、DirectX8以降で24bitを使うことはまずないかと。
質問です。
ピクミンやメタルギアのような3Dゲームでは、建物などの静的オブジェクトの落とす影は事前に焼きこみしてあると聞きました。
焼きこみの方法としては
・頂点に焼きこむ
・テクスチャーに焼きこむ
とのことですが、
前者の場合、地面などがかなり細かく分割されていないと意味がないですよね?
(たとえば三角ポリゴン2枚で作られたひろーいグラウンドなどには落とせない)
後者の場合は、かなり大量の焼きこみ影テクスチャを用意しておかなければならない気がします。
両方かなり力技な気がするのですが、こういうものなのでしょうか?
後者の場合、マップをマップチップのようにいくつもに区切って、自分の近くのマップチップだけ読み込み。
遠景の影は小さい影テクスチャを用意しておいて、そっちを読むようにして負荷を減らして…。
とかそういう工夫ができるような気もしますが
D3DFVF_XYZ | D3DFVF_TEX1
デツクッタタイラナシ角形にテクスチャを張るのですが
一時的に表示される色を変えることは出来ますか?
ポリゴン自体の色は白で固定のままで。
>>364 D3DRS_TEXTUREFACTOR で色を設定して
pDev->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TFACTOR);
とかをうまく設定すればできるんじゃないかね
できました。
シェーダー使えば一発
D3DRS_TEXTUREFACTORはひとつしかないですか?
数字を変えると最後のが使われてるみたいなんですけど。
>>370 とりあえず、キューブ面4頂点の座標がわかれば
射影空間からWorld空間に変換でいけるんじゃないの
Webカメラと組み合わせるのは最近のはやりだわねぇ。
Gemsでも読んで勉強すべし。
たんじぶるとかいうやつか
なんかニコニコあたりで流行ってたと思うよ?
DirectShowとDirect3Dでいけるんじゃないの?
板ポリゴンにテクスチャを張るときに
フォームのBackColorみたいに
背景色を着けるにはどうすればいい
なんでみんな固定機能大好きなんだろう?
今はシェーダーの方が資料が多いし楽なのに
ここが初心者スレだからだ。
>>380 そういや、固定シェーダーとプログラマブルシェーダーって
速度差はどんなものなんだろう?
ビデオカードの型番によっても変わってくるだろうけど。
GeFo5〜6世代くらいだと固定機能のほうが速い
7世代くらいでもまだちょっとだけ固定機能のほうが速い
普通にやるくらいなら8世代以降でシェーダーのほうが速くなる
頂点シェーダーはともかく
ピクセルシェーダーに負荷かけるとさすがに重いけどね
初心者こと固定機能のことなんか忘れて
シェーダーから入るべきだと思うが
イメージコントロールみたいな背景色と前景色の指定できる板なのですが
もっと縮まないでしょうか?
// 板ポリゴンのカラーと透明度の係数
g_pdevice->SetTextureStageState(0, D3DTSS_CONSTANT, 0xffff0000);
//板ポリゴンのカラーを変更
g_pdevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
g_pdevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_CONSTANT);
// 板ポリゴンの透明度を変更
g_pdevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
g_pdevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_CONSTANT);
// 板ポリゴンを描画 (下地)
g_pdevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
// テクスチャのカラーと透明度の係数
g_pdevice->SetTextureStageState(0, D3DTSS_CONSTANT, 0x7f00ff00);
// テクスチャのカラーを変更
g_pdevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
g_pdevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
g_pdevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_CONSTANT);
// テクスチャの透明度を変更
g_pdevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
g_pdevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
g_pdevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_CONSTANT);
// 板ポリゴンを描画 (絵)
g_pdevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
何故二回描
D3DTA_TEMP
シェーダー使え
Direct3D9 の Present で640×480のバックバッファを60FPSで
表示していますが、GDIのDDBのBitBltよりも随分遅い気がします。
こんなもんですか?
VSYNCかかってるだけでしょ。
つD3DPRESENT_PARAMETERS.PresentationInterval
>>285 こうか?
// 前景色と背景色
g_pdevice->SetTextureStageState(0, D3DTSS_CONSTANT, 0xffffffff);
g_pdevice->SetTextureStageState(1, D3DTSS_CONSTANT, 0xffffffff);
// C0 ← Cテクスチャ * C前景色
g_pdevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
g_pdevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
g_pdevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_CONSTANT);
// A0 ← Aテクスチャ * A前景色
g_pdevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
g_pdevice->SetTextureStageState(0, D3DTSS_ALPHAARG1 , D3DTA_TEXTURE);
g_pdevice->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_CONSTANT);
// C1 ← C0 * A0 + C背景色 * !A0
g_pdevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_BLENDCURRENTALPHA);
g_pdevice->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_CURRENT);
g_pdevice->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CONSTANT);
// A1 ← A背景色
g_pdevice->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
g_pdevice->SetTextureStageState(1, D3DTSS_ALPHAARG1, D3DTA_CONSTANT);
// 板ポリゴンを描画
g_pdevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
よくFPSとかで凸凹の地面にあわせて表示するオブジェクトを上下させてるけど
あれって凸凹のデータだけ別に用意してんの?
それとも地面のXデータから逐一取ってんの?
大抵はナビゲーションメッシュを用意してる
・・・それとも歩いているときにカメラが上下するって話?
395 :
393:2009/06/05(金) 20:33:48
いやあたり判定でD3DXComputeBoundingBoxを使うと直方体の形に判定を取るから
凸凹の物体へのあたり判定はどうしてるのかなーと思いまして
convexhullでググれ
そんなの好きにすればいいやん
逐一とっても良いし
毎フレーム計算するのがいやなら
最初に一度だけ計算して高さマップを作るなり
あらかじめファイルにして保存しておくなり
高さデータから地形を生成する場合もあるし
楽なのは、平行投影で真上から撮影して、色の代わりに深度を書きだす方式だな。
ttp://monsho.hp.infoseek.co.jp/dx/dx95.html ここでも紹介されている、平行分割シャドウマップについて質問です。
リンク先では4分割したシャドウマップを、すべて保持し続けていますよね。
(近い方から順に、分割1、分割2・・・と呼ぶとします)
・分割1のための深度を、シャドウマップ全体に書き出し
・分割1の範囲を描画
・分割2のための深度を、シャドウマップ全体に書き出し
・分割2の範囲を描画
という順番に行っていけば、4分割したり、(他のサイトのように)複数のシャドウマップを作成したりする必要がない気がします。
なぜ、使いまわしを行っていないのでしょうか?
サンプル見てないけど、
シャドウマップの切り替わる部分で2枚を補間するんじゃないの。
もしくはそうする予定でいてたけどサンプルは未実装のままで放置とか。
Directx9 Dec2004のサンプルブラウザから生成したSkinMeshサンプルで質問があります
HLSLを使用する場合、FOGENABLEをTRUE、フォグ色を設定し
skinmesh.fxの内部でフォグの計算を行うようにしてフォグが使えるようになったのですが、
HLSLを使用しない場合のフォグはどうやって実装すればよいのでしょうか?
FOGENABLEをオンにすると、フォグ色に関わらずモデルが真っ黒でしか表示されません
FOGSTART、FOGENDなどのパラを変更しても特に変わらず真っ黒のままです
>>401 スキンメッシュ以前に、ちゃんとフォグできてる?
2つのことをいっきにやろうとするのはNGだぜ
>>401 とりあえず、ヘルプのフォグのところを読んでくれ。
フォグにはVertex FogとPixel Fogがあるわけだが、その設定はしたの?
>>402-403 ありがとうございます
スキンメッシュ置いといて、フォグだけの実装からやり直してみます
物凄く初心者な質問ですが、Directxで3D空間上の物体を動かす場合、
ローカル座標を移動させてるのではなく、カメラを移動させるのでしょうか?
例えばキャラクタが3人居た場合、それぞれのキャラクターが3D空間上で色んな方向に歩いた場合、
3人分のレンダリング時にカメラを3回移動させて描画しているのでしょうか?
(つまり3人の位置データは実はカメラの位置データとなる)
もしそうである場合、一人のキャラクタがもう一人のキャラクタに銃を撃った時の当たり判定を厳密に
する場合(直線とポリゴンの交点を判定する)は判定されるポリゴン群の実際の位置を計算してから行うという、
面倒な処理になるのでしょうか?
(光源などもカメラ移動に合わせて動かさないとつじつまが合わなくなる?)
ワールド座標を動かすにきまってるんだろタコが
うるせえ最初からすんなりわかるわけないだろイカ野郎
おまえ2chに向いてないな
まーた煽り合いか
お前らって人の目とか気にしすぎなだんだよ底辺
>>406っていつもの奴だろ
まともな会話が出来ない奴は出てくるなよ
いつものやつってスプライト云々D3DX云々言い出すやつか?
ところでさあボーンってどうやって読み込むの?
412 :
405:2009/06/06(土) 15:10:31
ようやく理解しました。
ありがとうございました。
>>406 誰でもわかるような質問にだけ
調子に乗って出てきて、中傷9割の
一言レスだけ残してく奴だよ。
そんなのどこにだっているがな
と、いうことにしたいのですね
よくFPSとかで人のオブジェクト動かしてるけどあれってやっぱりボーンっての使ってるんだよなあ?
ボーンってどうやってつかうねん・・・?
>>416 SDKサンプルのSkinnedMesh参照
Direct3DにMeshなどない
これはすごい馬鹿を見た
ま た お ま え か
421 :
390:2009/06/06(土) 18:45:43
>391
PresentationInterval変えてもダメでした。
描画が遅いというか画面には意図した通りに表示されるけれど、CPU使用率がバックバッファをウィンドウに描画するだけで60%くらいいっちゃうんです。
GDIのDDBのBitBltならVRAM上でコピーできて超高速だったはず…
それはDirectXのせいじゃなくて設計の問題
CPUの空き時間すべて使ってループまわしてるだろ
423 :
390:2009/06/06(土) 18:53:57
いや、試しにFPSを30に落とすとCPU使用率も30%くらいに落ちるから、空き時間全て使ってることはないはず。ていうか、それなら使用率100%になるような…
424 :
390:2009/06/06(土) 18:59:13
すみません、自己解決です。
新しいPCで実行したら無事にCPU使用率2%になりました。
多分ビデオカードの都合でソフトウェアエミュレーションになってるようです。
アセンブリ言語とデバッガを使える程度の能力が必要です
>>399 分割したバウンディングボックスで、解像度が最大になるように行列作るのに
同じテクスチャに追加でレンダリングしてどうする
キミの理屈だと、1回のレンダリング(同じ行列)で済む描画を
距離で複数回に分けてるだけで意味がない
>>429 >>399のリンク先は、4回描画してると書いてある。
視錐台を4つ輪切りにして、4回描画するなら
1つのボリュームにつき、SMは1枚でいいから
全部取っとく必要はないだろうってことで、
この点は正しいと思う。
リンク先はちょっと端折ったのか。
思ったんだけど、SMはミッブマップにして
各レベルに描くといいよねぇ。
>>430 だから、シャドウマップ用のライトからのカメラ視錐台を、バウンディングボックス毎に
書き込み内容が最大になるように作るって意味分る?
単位が違う4回の書き込みを1枚のシャドウマップに追加でレンダリングして一緒にしてどうする
>>431 SM作成 -> 輪切りのレシーバ描画 -> SM作成 -> 輪切りのレシーバ描画 -> ...
ってことだと、思ってたけど。リンクのソースは見てないけどさ。
これならSMは1枚でいいでしょ。
あー、ソースくらい見てね
>>432 あのさ、本当にそれでいけるなら
リンク先の作者や他のWEBやら技術本で、複数テクスチャを使うのは勿体無い
となるだろ…
もともと、カスケードシャドウって
シャドウマップのサイズで影の解像度が影響を受けるって問題を解決する方法なんだぞ?
>>434 >あのさ、本当にそれでいけるなら
別にこれでいける。いけない理由がない。
>シャドウマップのサイズで影の解像度が影響を受けるって問題を解決する方法なんだぞ?
SMのサイズなんて、バウンディングボックスの作り方でどうにでもなる。
近いエリアのSMのサイズを相対的に大きくしたければ、
バウンディングボックスを小さくすればいいだけ。
ただ、複数回描画自体どうかと思うので、この方法を推奨してる訳じゃない。
さっきも言ったけど、複数枚保持するならミッブマップがいいよね。
>>435 >別にこれでいける。いけない理由がない。
じゃ、カスケードシャドウマップを、1枚のシャドウマップで複数描画で行なう例を
アンタの改造ソースか、他のWEBサイトか技術本でも良いけど
教えてくれよw
…本当にカスケードシャドウマップのやり方理解してる?w
>近いエリアのSMのサイズを相対的に大きくしたければ、
>バウンディングボックスを小さくすればいいだけ。
あの…バウンディングボックスは、視錐台内のZ毎のOBJに応じて作る物なんですけど…
>>436 カスケードシャドウマップがなんたるか
残念ながらわからないけど、1枚のSMで
OKな理由なら、
>>432で十分じゃない。
視錘台をブツ切りにして、複数に分けて描画するから
SMのサイズを、そのエリアにフルに使うことが出来る。
-> エイリアスを改善
ブツ切りを複数回に分ける。
-> 各エリアはシリアルに描画されるので、その時々で
必要なSMは1枚のみ。
-> SMを複数枚同時に保持する必要はない。
別に、作らなくても自明でしょ。
逆に、SMを複数枚同時に保持しなきゃならない理由って何?
参照先があるなら教えれ。
>>438 >参照先があるなら教えれ
だからさ、
カスケードシャドウマップも知らない
リンク先にサンプルソースコードもあるのに見もしないで
そう言い張る神経が理解できんw
だから、カスケードシャドウマップだと何度言わせる気だ…
真性のゆとり君?
まぁDirectX10以降なら配列テクスチャあるから1枚で出来るっちゃ出来る。
どうしても1枚でやるならビューポートで4分割とかして描画するくらいか。
個人的に試してみたいのはARGB32Fのそれぞれのチャンネルにそれぞれの
分割シャドウを格納させてみたいがDirectX9だと結局4回描画なんだよなぁ。
DX10にもDX3DXある?
2D描画は固定機能3D描画はシェーダーって使い分けてる?
それとも全部シェーダー?
なんでヘルプぐらい確認しないんだ?
>>443 DirectX10以降は固定機能なんていう負の遺産はない。
2Dも全部シェーダーで自由に書け。
板状の四角形と空間の行列なのですが
0,0を右上にするにはどうすれば良いですか
カメラとかスクリーンとか
完全な2D目的でいいなら
D3DXMatrixOrthoOffCenterLH (&matProj, 0, 画面幅, 画面高さ, 0, 1, 100 ) ;
その他のパラメーターは自分用に適宜変更
それだけだと真ん中が0,0,0になるのですが。
ずらせよ
A8R8G8B8のテクスチャ画像ってどうやって作ってますか?
DxTex使わないで、PhotoShop単体で作ること可能でしょうか?
NVIDIAのサイトにフォトショ用のDDS読み書き用のプラグインがある
プラグインの入れ方がわかりませんとかって質問はここでは無しな
32bitbmpやtga使え
DirectXSDKにもPhotoshopプラグイン入ってるはずだが
トランスフォームでずらしてもオブジェクトの真ん中ナナって切れるのです。
左上の
>>454 視点と注視点のx,yは0,0でいいんだぞ
clt+alt+delからの復帰の時ってどうしてる?
DirectX関連描画全部クリアされちゃうんだけど・・・
アプリクラッシュでおk
若しくは全画面でもウインドウモードで動かす
いやいやいや・・・普通にデバイスロスト対策しろよ。
ヘルプに書いてあるだろ。
なるほどデバイスロストというのか
特殊なことしてないし全部消して一から再描画にするかな
解決の糸口は見つかった、ありがとう
デバイスロストじゃなくただの再描画問題の質問に見えるけどまあいいか
もしそうならWM_PAINTを受け取ったら再描画するようにすればいい
>clt+alt+delからの復帰
って書いてるからなあ
処理を書き込むと逆にFPSが早くなることってあるのでしょうか。
FRAPSっていうFPSを測れるフリーソフトでDirectXのサンプルの
Tutorial 1: CreateDevice てのを少しいじって
(デフォは無効領域が発生した時のみ更新するからFPSが0で、
ループを作ってPeekMessageとDevice->Presentを足した)
FPSを測ったら40〜50程度しか出ていません。
DeviceのPresentationIntervalはD3DPRESENT_INTERVAL_DEFAULT
であり、中身は基本的なフレームしかなく描画処理は書かれていません。
家のパソコン環境がおかしいのかと思って他のDirectXを使っているソフトで測ったら
他のソフトは問題なくFPSが60になるので環境が悪いわけではないと思います。
モニターのリフレッシュレートが50くらいとか?
コード晒してみそ
二次添削になるかもしれないので、後長いので、変えた部分を載せます。
サンプルはDirectX SDKを入れるとApril2007には入っていました。
最新のにも入っています。
タイトルはTutorial 1: CreateDeviceです
メッセージループを
if(PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
{
if (!TranslateAccelerator(hWnd, hAccel, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
InvalidateRect(hWnd, NULL, TRUE);
と置き換えました。
WM_PAINTの所でDevice->Presentをやっています
というか、ディスプレイの周波数に同期して描画させるなら、
WM_PAINTなんて標準機構はまどろっこしくて使ってられないと思うんだが?
PeekMessage()かけながら永久ループをまわすのが常道じゃないかと。
ゲーム進行をウィンドウドラッグ中や非アクティブ時に停止させたいけど
被ったら消えて戻らないのがいやだって時につかえるだろ
進行停止してるのにガンガンリソース使っていいならループで回せばいい
InvalidateRectはWM_PAINTを発生させるだけ
WM_PAINTは優先順位低い
したがって他のメッセージがあると後回しにされる。
この優先度を上げるにはUpdateWindowを呼ぶ
470 :
466:2009/06/08(月) 17:17:18
このように書いたのは単純に楽で便利そうだからです。
元のサンプルコードがWM_PAINTでDevice->Presentを呼び出す関数、
そのほかにもこの関数を呼び出すために必要な処理を
まとめた関数が描かれていたので、それを利用しました。
FPSを知るために一時的に変えただけです。
471 :
466:2009/06/08(月) 17:24:07
>>469 無効領域を発生させるため
InvalidateRectの後にUpdateWindow追加して
試したけど、FPSは低いままでした
ちょっとやってみたけど60行くなあ
WM_PAINTはそのままで、InvalidateRectの場所にRender();置いてみるとどうなる?
vsyncオフも試してみてほしいが、ビデオカードはRadeonだったりする?
無効領域
474 :
466:2009/06/08(月) 19:49:14
少しわかった事がありました。
結論から言うとパソコンのスペックのせいか
遅くなる時と速くなる時があります。
もちろんコードはいじっていません。
不思議なのは
1.なぜこのような波が生じるのか
→遅い時は重い作業をしていなく、CPU使用量も5%前後
→何かのプログラムを実行するとデバイスの内部で設定が変わるものがある?
2.遅い時、早い時ともにFPSが60をキープしているプログラムがある事
→そのプログラムはDeviceのPresentationIntervalはD3DPRESENT_INTERVAL_DEFAULT
なのでタガを外しているわけではない、FPSも60に設定
→他にリミットを解除する方法があるかも
実際にサンプルを実行していただいた方ありがとうございました。
>>462 PresentationIntervalをD3DPRESENT_INTERVAL_ONEにしても駄目?
最小タイマ分解能ので、似たような話あったね。
他プログラムでデバイスの設定かわると、それ以外にも影響するとか。
FPSを一定に保つことと、Windowsのメッセージパイプラインの維持は
ものすごい相性が悪いので、WM_PAINTを使って行儀よくやろうなんて考えないほうがいいよ。
別の人が言ってるように、WM_PAINTはWindows側が勝手にタイミングを決めて送ってくるので、
無効領域を設定しても必ず呼び出してくれるわけではない。
それから、無限ループによる描画を行っていて、
最小化時に描画をスキップさせるようなのは、別に実装は難しくないよ。
Direct3Dのことをうまいとこまとめあげている書籍って何がありますか?
色々ありすぎて迷ってます。
ハードウェアよりの視点で書いてるのがよりよいです。
よろしくお願いします。
ハードウェアよりの意味がわからんが・・・
とりあえず高額社の本でもよんどけばいんじゃないだろうか。
MFCとDirectxを使って3Dモデリングツールを自作しています。
モデリングする対象の頂点バッファやインデックスバッファ(ビデオカード上?)
の領域確保ですが、ユーザーがエディットして頂点数などが増えていく度に容量増やしてそのつど
確保しなおすべきでしょうか?それともある程度の大きさの容量をまとめて確保しておくべきでしょうか?
(多分drawprimitive時にどこからどこまでを描画とか出来たし)
ビデオカードの挙動をよく知らないのですが、細かくバッファ開放と確保を繰り返しまくってると
領域が分断されまくって動作に影響したりするのでしょうか?
サイズが動的に変化と言えば大体2,4,8,16って二乗に増やすかな
482 :
480:2009/06/10(水) 15:07:42
システムメモリ側に元となるデータを確保しておき、
ビデオカード側に編集後のデータを転送しようと思ってます。
システムメモリ側でのバッファ管理はどうしようかとググって調べてみると、
リングバッファやギャップバッファなど面白そうな概念が出てきたので、
そういう管理にしようと思ってます。
つまり
100byteの領域が欲しい
128byteの領域を確保
120byteの領域が欲しい
現状維持 (足りているため)
200byteの領域が欲しい
256byteの領域を再確保
100byteの領域が欲しい
現状維持 (128byteの境目で確保が頻繁に発生しないため)
40byteの領域が欲しい
128byteの領域を再確保 (64byteの境目で確保が頻繁に発生しないため64にはしない)
こんな感じか?異論は認める
484 :
480:2009/06/10(水) 15:12:45
>>481 頂点数が3以上になったら4の領域を再確保、
頂点数が5以上になったら8の領域を再確保、
頂点数が9以上になったら16の領域を再確保ということでしょうか?
なぜでしょうか?
AddVector( vec(0,0,0) )
とか1頂点追加するごとに何MBもするメモリを再取得してたら大変だから
リングバッファでもいいと思うけど
486 :
480:2009/06/10(水) 15:26:31
バウンダリ調整みたいなのがビデオカードのバッファ確保でも入って
100バイト確保しても実際は128バイト確保されるのでしょうか?
違います
数バイトの変化でいちいち再取得しなくていいようにあらかじめ自分で多めに取得すると言うだけの話
それってジオメトリシェーダーで出来ないのかな?
使った事ないからわからんが。
動的にサイズ変更が出来ない頂点バッファを
使う理由はなんだ?
どうしてD3DRECTにコンストラクタ付けておくくらいの頭が廻らないかな
491 :
480:2009/06/10(水) 16:50:01
>>489 すいません。まだよく分からないのですが何を使うのがお勧めでしょうか?
>>490 480へのレスでしょうか?
>>489 どうしても何も、メモリの再割り当てのロジックを考えれば分かるだろう。
いったい何を言っているんだ?
UP系の話だったとしても、結局は必要ならメモリの再割り当てをするのは同じだろ。
そりゃC言語に対応するためだろ
>>492 >メモリの再割り当てのロジックを考えれば分かるだろう。
ごめん、わからない。もうちょっと具体的に言って。
>UP系の話だったとしても、
そのとおり、
頂点バッファのサイズが動的に増減する用途に
std::vector + UP系ではなく、頂点バッファを使うメリットが
浮かばなかったので。
495 :
480:2009/06/10(水) 17:29:35
自分の考えてる事
○システムメモリ
リングバッファ+ギャップバッファで頂点情報を持つ。
途中の削除や挿入などにも対処。
○グファフィックカードのメモリ
予め確保された領域(システムメモリの頂点数を元に、段階的に再確保)
に対して、システムメモリの頂点情報を必要あらば編集やソートを行いつつ、
隙間無く詰める。
Drawprimitiveの開始位置やら頂点数やらの設定にてデータのある部分のみ描画。
496 :
480:2009/06/10(水) 17:40:51
○グラフィックカードの確保するメモリ容量
このツールで作成する予定のものの頂点数の平均値を考慮(まだ色々作った事無くて凄い適当。定数にでもして後で変更可にする)
ミサイル、弾丸や板ポリなど:30か40?
描画数の多い登場キャラ:300か400?
そこそこ精密なオブジェクトやキャラ:5000くらい?
CG並のクオリティ:2万か3万?
初期の確保領域数を5000程度に設定。
そこから足りなくなる毎に倍倍にしていく(全体コピーペーストで一気に倍になるし、
頂点数多いほど瞬間的に増加する量も増えていくと予想されるため)
VRAMに取れるように設計しておいて、とりあえずUPで実装すれば良い。
>>494 up系じゃない理由はレンダリングの高速化だろjk
モデリングツールならup系でもいいかもな
499 :
480:2009/06/10(水) 18:17:09
色々教えて頂いた方々ありがとうございました。
>>494 std:vectorだってサイズが変わって、予約サイズをオーバーしたら、
内部で再割り当てするだろう。
見えるところでやっているか否かの違いでしかないし、
頂点バッファでも同様の処理を一度書けばいいだけの話。
,==============、
| .__ /:::::::::| ロH ヨ メッコール
|(一和) /:::__:::::|  ̄」 己
| . ̄ ̄ /:::::| |:::::|
| /:::::::L二l| メッコールは大麦エキスと世界三大名水のひとつチョヂュン鉱泉水から
| /::/二丶:::| 生まれ、ビタミンが豊富に含まれたまったく新しいタイプの健康飲料水です。
| /::::| l___l |:::| ┌────────────────────┐
| /::::::ヽ─:::::::| |・品 名 :炭酸飲料 |
| /:::/.二l:::::::./| |・原 材 料 :糖類(砂糖,果糖ぶどう糖液糖).. . |
| /:::::l l_:::::::/ | | .大麦エキス,酸味料,香料,ビタミンC |
| ./_:::::_ヽ─': / /| | ナイアシン,ビタミンB2,ビタミンB1 |
| /| ヽ/ .|,__::::/ コ | |・内 容 量 :250ml |
| /:|_lヽ/l_(二/ .ッ | |・製造年月日:缶底に記載 |
|/:::::::::::::::: ̄/ .メ | |・原 産 国 名:大韓民国 |
|::::::::::::::::::::::/ | |・輸 入 者 :株式会社ハッピーワールド . |
|::::::::::::::::::::/ | └────────────────────┘
ヽ============〃 ※なお、日本版の缶には、「あき岳はりサイクルへ(空き缶はリサイクルへ)」という誤植がある。
突然なんだ?
初心者が無駄な最適化を気にして詰まる典型。
キーを押している間は移動して、キーをはなしている間は
元の位置に戻るようなことをさせたいんだけど…
DirectInputでキーボード入力を読み取るのは押したかどうかしかわからないの?
押してるかどうかだけ分かってれば
押した瞬間も離した瞬間も検出できるだろ
なんだっけ四聖なんとかのサイトにDXライブラリで押してる時間の検出方法があったから
それでも参考にしたら?
IDirectInputDevice8::GetDeviceDataで
入力履歴の配列が得られる。
これで何時押されて、何時離されたか
判断出来る。
あとは、毎フレームごとに前フレームでもキーが押されていたら
数字を足していくとかすれば、自前でも処理可能。
押されていない状態が検出されたらカウントを0にリセット。
60FPSだったら、60カウントで1秒間押されていたとかね。
>DirectInputでキーボード入力
禁止
>>509 まー確かに禁止されて入るんだが、
DirectInputによるキーボード処理は実装しやすいから
このままで全然困ってないんだよな。
サポートされなくなったら考えようかな、といったところ。
あるベクトルを90度回転したベクトルってどうやって
求めればいいですか?
90度って2次元?
行列なりなんなり・・・
いえ、3次元です
行列を使ってどのようにすればよいのでしょうか?
3次元だともう1本軸がないとグルグル回ってしまって求めることができない
なかなか面白い質問だと思わない?
ベクトルを回転させる為には、直交する軸ベクトルが
必要になるが、直交している時点で既に要件を満たしているという。
全く点を動かさないクォータニオンを教えてください!
もう1本軸がないと無理ですか…馬鹿な質問ですみませんでした
ありがとうございます
>>519 そこで、あきらめるんかw
いまの条件では求めることはできないけど
あなたの求める値は求められるかもしれないのに
単に90度回したいじゃなくて
なぜ90度回したものがほしかったのかを書くんだ
LPD3DXFONT g_pxfonts[];
int x=3;
g_pxfonts[hgofont]->DrawText(g_ptextsprite,文字列,-1,&rect,DT_CENTER|DT_VCENTER,D3DCOLOR_COLORVALUE(1.0f,0,0,1.0f));
とやって文字列の部分に変数を表示しようと思い_T("%d",x)と書いたんですが
%dとは表示されるが変数xの中身は表示されません
何ででしょう?
なんかメッシュの裏っ側にテクスチャが貼られるんだけどなんで?
>>522 _T() ってどういう意味か知っているのか?
知らないなら調べておけよ。
ちなみに、文字列の合成はsprintfでやるんだぞ。
>>524 すいません_Tはいりませんでしたね
言われたとおりsprintf使ったらできますた
ありがとうございますた
DirectXで画像読み込みってどうするの?
画像読み込んでスプライトに表示したいんだけど・・・
もしかして画像読みこみに関してはLPD3DXFONTみたいにカプセル化されてない?
カプセル化も何もLPD3DXFONTはただのポインタ
DirectXには
メッシュもフォントもスプライトもない。
またおめえか
>>526 D3DXCreateTextureFromFileを使うんだ!
詳しいことはヘルプをダウンロードして読むんだ!
ヘルプは難しくない!だいたい同じようなことが書いてあるだけだ!
D3DXはDirect3Dではない。
>>529 おかげでうまくいったわ
ただ背景(RGB(0,0,0))を透過するのはどうすればいいんだろ?
α値を適切に設定するだけ
>>523 ポリゴンは、それを構成する3頂点の並び順で
表裏を決定する。
それが貴方とDirect3Dで逆になってるんだろう。
CullModeでぐぐれ。
>>531 最初からアルファの入ってるフォーマットで画像を作成すれば解決
pngとかddsとかtgaとか
538 :
デフォルトの名無しさん:2009/06/12(金) 03:48:53
今MSDNバグってるページない?
>>538 お前はMSDNが何ページあるのか数えたことがあるのか。
540 :
デフォルトの名無しさん:2009/06/12(金) 03:57:48
あるけど?
1ページだけ数えた:b
MSDNってリンク切れしてるような古いページも残ってたりするから
TOP以外の例えば検索エンジンとかからたどったページがおかしいなんて良くあることじゃ
ブログとかいうやつは大半がおかしいな
ヘ(^o^)ヘ
|∧ 私のコード
/ /
(^o^)/
/( ) 夢と恋と不安で出来てる
(^o^) 三 / / >
\ (\\ 三
(/o^) < \ 三 でも想像もしないもの
( /
/ く 隠れてるはず!
スプライトを自分で作ろうと思うんだけど
FVF_CUSTOMとかCUSTOMVERTEXは
クラスの静的と外におくのどっちがいい?
クラスの外で使わないなら
private static constで
好きにしろよ
ポリゴン数ってメッシュ数のことですか?
ゲーム用のローポリってどれくらいのことを言うんですか?
人体キャラクタで2000ポリくらい
PS1時代なら500〜800ポリ
PS2で1500〜2000ってところか
もちろんメインキャラ級の話で雑魚Mobなんかはもっと少ないし
主人公キャラだけ3000〜4000使ってるゲームもある
慣れてる人なら1000ポリあればたいていのものは作れる
マジか…
今見たらMesh5700くらいだった…
ロストプラネットの主人公モデルが30000ポリゴンくらいだっけ?
DirectXにメッシュなどない。
>>552 発想の転換
モデルを回転、前後させカメラは固定
すみません、directinputでドラッグ&ドロップする方法が分かりません。
一応ググったりmsdn見たりしたんですが分かりません。
DirectInputはあくまでマウスやキーボードなどの状態を取得するためのものです
その情報をつかってどう動かすかは自分で実装してください
例えばマウス位置と物体との当たり判定をとってマウス位置に追従させるなど
560 :
558:2009/06/13(土) 12:16:25
いえwindowsapiだとWM_BUTTONDOWNとWM_BUTTONUPがありますが
directinputだと押したときと離したときのメッセージがあるかどうか分からなかったのですが
よく読むとキーを押したときと離したとき両方で同じ値が返るんですね。
これで合ってますかね?
普通ゲームないでD&Dさせるならクリックからドラッグ、描画まで全部自前で実装するもの
IDirectInputDevice8::SetEventNotificationによって、
入力に変更があったとき、イベントオブジェクトで
通知を受けることが出来るようになる。
これを使えば、Windowsメッセージに近い感覚で
作ることが可能だろう。
っていうか、キーボードとマウスに関しては、
普通にWin32APIでいいよ。
てか、押してるか押してないかさえ分かってれば
押した瞬間、離した瞬間なんて簡単に求められるじゃん
なにからなにまで用意されてないと何もできないゆとりさんですか?
初心者スレなんだからそのくらい大目にみるしかねえよ
>>563 それだと、フレーム間ですばやく押して離したら検知できないじゃん
GetDeviceStateよりもGetDeviceDataの方が、取りこぼしが少ない。
instantaneousよりもbufferedの方が直接に近いってのが罠だなー。
60fpsで60連射か・・・ごくり
内部120fpsにするしか
>>567 60fpsとは限らないんだぜ
処理落ちで止まることもあるんだぜ
処理落ちがおきてて
一桁FPSくらいまで落ちたらそういうこともおきるかもね
でも、フレーム処理とキー入力を分けておけば言いだけの話
てゆうか、そういうつくりにしとかないと
コマンド入力のあるゲームとか作れないぞ
いくらなんでも30FPS着るような状況ならそもそもまともに動いてないだろ
572 :
558:2009/06/13(土) 13:52:24
色々とthx。もっと勉強してくるわ。
>>553 よっぽど古いPC。たとえばPixelShaderすらない頃のオンボを対象にするのでない限り、5700なら十分軽い
>>573 作るゲームによるだろう
キャラが1体しかでないようなゲームならそれでもいいだろうけど
視界内に何体もでるようなゲームなら辛くなる
MMOのFF11なんかだろキャラによって変わるけど1700〜2000くらいに抑えてる
それでも人の多いところでは処理落ちを起こす場合もあるわけで
576 :
552:2009/06/13(土) 21:35:15
>>554 >>557 レスありがとうございます。
DirectX以前に、数学の知識が不足しているので、
もう一度数学を勉強して出直してきます。
今の半透明の主流ってどんなもの?
意味不
Zソートにするかどうかとかそういう話?
半透明を使わないのが主流じゃね?
ブラーとかかけづらくなるし。
炎とかの表現に「加算合成」を使うことはあっても、物体を半透明で表現することはほぼ無し。
加算合成なら前後関係気にならないし。
半透明のポリゴンは、あらかじめZソートして順に描画しないといけない
けど、半透明ポリゴン同士が立体的に交差する場合は、一意にソートできない
この場合って、根性でごまかすか、根性でポリゴン分割以外に方法ない?
自前でシェーダ書けばできなくはない。
いくつもバッファを持って、深度と色を保存しておき、最後に合成する。
実際、そういう方法を今後のスタンダードにしようとする動きはあるが、まだ仕様が決まらず迷走してる。
IDirect3DTexture9PtrへのポインタにIDirect3DTexture9Ptrそのもののアドレスを入れるにはどうするですか?
ポリゴン分割なんて根性いらないだろ
デザイナにサクっとやってもらえ
>>582 意味が分からん
LPDIRECT3DTEXTURE9 *a ;
LPDIRECT3DTEXTURE9 b ;
a = &b ;
ってことか?
>>577 >>582 書き込む前に深呼吸してその文章で他人に伝わるか考えような
誰もお前の頭の中をのぞけないんだから
途中をさっぴいて結論だけ聞かれてもだれも答えられん
>>582 IDirect3DTexture9Ptr pTexture;
IDirect3DTexture9Ptr* p =
(IDirect3DTexture9Ptr*)(
(size_t)&( pTexture->GetInterfacePtr() ) -
(size_t)&( ((IDirect3DTexture9Ptr *)0)->GetInterfacePtr() );
コンパイルしてないんで動くかは知らん。
つーか本当に使うなよ。
>>585 IDirect3DTexture9Ptrは
IDirect3DTexture9のスマートポインタ
>>582 &演算子のオーバーロードに阻まれて無理じゃね?
半透明で色々に凝ったけど意味無かったよw
だって一緒に派手な魔法エフェクトを必ず出したりするから
細かい部分見えない
2Dゲームだと結構多用するけど
3Dだとあんまり半透明使わないようにしてる
加算合成だとZソート関係ないって
当たり前なのに言われてはじめて気づいた
やべぇ目からウロコ
そうはいってもエフェクト関連は流石に半透明使うけどなー。
使うけど前後関係があやふやな場所では使わないようにすれば良いだけ
ていうか、速度のために演出まであきらめちゃうのはやっぱ違うよね
っていうかこんなソートなんてそこまで時間食わないんだからテキトーに表示してみて
デザイナが自分で考えりゃいい
ぶっちゃけ多少、落ちたってあんまり気にならない
>>591 どんなものに半透明使う?
マジで知りたい。
例えばゲームではレーザーも、爆発も、魔方陣も加算合成だろ?
水面とか?
いまどきそんな水面ねーよ。
普通水面は一旦他のレンダーターゲットに描いた絵を加工する。波は加算だし。
>>594 2D描画部の淵とか全部半透明
フェードアウトインも半透明のポリを前においてる
ビルボード物の淵とか半透明
半透明ばっかりだわw
淵汚いからα画像ばっかりだし
この話の流れで2D描画をあげるなんて、どういう理解力なんだろうな
唯一の3Dものであるビルボードも、お前そんなところの半透明見えるのかよってレベルだし・・・
>>598 いや、結構でかいし
草とか昆虫の羽根っぽいのとか使いまくってるし
ポリゴンレベルのソートはそんなにいらないかもね
でもノード単位のソートだったら別にコストねーも同然だし
やったらいいんじゃね?
>>599 ん、そうだね。わかったよ
じゃあ君はもう黙っててくれるかな
>>他ALL
他に、まともな意見ある?
半透明はまず使わないな・・・。
エフェクト関連は流石に使うとか言いながら、2D描画の淵とか言いだしちゃう591以外に意見あるやつなんているのかね?
虫の羽とか、どんだけ虫を拡大して見つめるゲームなんだよと。
>>598 >唯一の3Dものであるビルボードも、
>お前そんなところの半透明見えるのかよってレベルだし・・・
これは反論にはならないお
例えば、樹木の枝葉は今でも
半透明ビルボードの集合を使ってると思うお
>>603 ホントだよな
なんで半透明を使わない方向にもっていこうとしてるのか疑問
普通にできるわけねーじゃん
うっすら透けるもんから枝葉までほとんど半透明が必要なのに
なんで使わないなんて結論になるのか
羽が舞う系のエフェクトだって絶対に必要になるし
加算ばっかで全部できるわけねーだろ
頭おかしいだろこいつ(
>>602)
消滅する敵キャラをフェードアウトさせる時は、普通半透明じゃね?
そもそも、半透明で加算合成していいのは
自ら発光してて、かつ透過率100%のものだけだと思う。
現実にそんなものはないので、現実の半透明物質を
半透明ポリゴンでシミュレートしたければ、
透過率に沿って補間合成して、発光分を足す形か?
無理に半透明を使わなくても、穴あき模様のテクスチャを使えば簡単に解決するぞ。
>>603-604 擁護レスまで入れちゃって・・・
自演だとバレバレだってわからないのか?
そんな短時間に、アルファテストすら知らないくせに妙に勝ち誇ってるアホが2連続レスなんてありえねーだろw
まとめてレスりゃ良かった
>>605 初めてまともな意見だぜ
なるほどね。
リアル系を考えてたので、頭に浮かばなかったわ
>>606 半透明物質ってのが、あんまり世の中にないんだよな
ゲームに出てきそうなのは、窓ガラスとかか・・?
ただ、ガラスとかは「半透明ポリゴン同士が立体的に交差する」ことがまずないしなぁ
オブジェクト単位でのソートが高コストになりがちか
もしくはお互い交差してしまう
なんていう条件はせいぜいパーティクルくらいだよね
半透明を使ったパーティクルなんて使う人いないだろうし
その条件にあてはめなかったとしても、やっぱり私もガラス窓くらいしか思いつかない
半透明のペンケースとか思いついたけど、そんなもの不透明に仕様変更したほうが現実的
金網や飾り枠なんかも全部モデリングするんだ?w
もう苦しすぎるから発言やめたほうがいいんじゃない?w
金網なんてアルファテストだけでいいんじゃないの?
近未来ウィンドウの類もダメだな
空間にオブジェクトに隠れる文字列を表示するのもダメだな
プログラミング暦20年以上だけど
今だにDirectXに手を出せていません。
やはりDirectXをやれるかどうかは才能も必要ですね。
建物の影もダメだな
色つきビニール傘やカッパの類もダメ
サングラスも無理
プログラマーつったって得意分野は別別なわけだし。。。
______
\| (___
♪ |\ `ヽ、
| \ \
∧ ∧ | \ MEKURA 〉
(*`q´) | ♪ \ /
‖( つ| ̄ ̄ ̄ ̄ ̄ ̄! ̄ ̄ ̄ ̄ ̄ ̄ノ
‖( 匚______ζ--ー―ーrー´
〓〓JJ .‖ || .||
‖ ‖ ||
>>613 え、ジャギの部分は半透明でいいじゃん
問題は、そのジャギの部分が「正しく後ろを透過しているか」をプレイヤーが認識できるほどの大きさで表示されるのかってことだろ
俺はされないと思うが
>>620 アンタ、アナログな人だね。
普通プログラマはそんな考え方しないもんだ。
プレイヤーが認識できるほどの大きさって
定義されてるん?
え?レイトレースですらない今のなんちゃって3Dで、そんな完璧を求める考え方するんだw
それっぽく見えりゃいいんだよ
空間に文字列だの、サングラスだの、そいつら他の半透明物体と本当に交差するのか?
設計自体に問題あるだろそんなゲームw
>>623 ネトゲで
建物の向こうの人間の頭についてる名前までみたくないときあるだろ
そういうのは本体を遮蔽カリングしなさいよ
>>625 しかたねーだろ
そうしてほしいっていうんだから
まるで「俺はプロなんだぜ」みたいなアピールしなくていいから。痛々しい
第一半透明物体と交差しねーじゃねーかそれ
ネトゲのキャラ頭上の名前を、ワールド座標系に置いて描画する利点ってなんだ?
遠いキャラほど小さく表示されるとか?読めないよな
あり得ない前提条件を提示して、無理にでも交差する状況を設定しないと、
そもそも議論が成り立たなくなるだろう。
目的のための手段が必要なんじゃない、手段のために目的を作り出すことこそ重要なんだ。
結局、今どきポリゴン交差する可能性があるような半透明なんて使われないってことですな
金網のジャギに半透明を使うのはいいとして、結局
>>611はどうやって完全な前後関係性を保っているのか方法を聞きたいもんだ
>>628 建物に隠れたり正面向いてないやつには角度つけてほしいんだとよ
っていうかさっきっからなんで自分の都合に合わせて仕様を強引に変えようとしてるの?
客がこうしたいって要望があったらそうしなきゃダメだろ
自分の妄想を客からの要望ということにして、議論を進めようぜ。
主人公とカメラの間に来た障害物が半透明ってので多用したな
>客がこうしたいって要望があったらそうしなきゃダメだろ
えーと、一般的に学生が思ってる勘違い社会人像ですね。
1年でもまともに社会人やってれば、客に逆提案もできない人間はお荷物だと自覚できます。
オブジェクト選択画面でピックアップしたもの以外は半透明+緑着色・・・ってのもやったな
必要無いってことないだろ
>>636 君の案もやってもいいけど
まずは言われたとおりやってみてくれないかな?
>>635 やっと語り合うにふさわしい題材が来たな!
特に障害物がでかいと、オブジェクトの重心でソートすりゃいいって問題じゃなくなるし。
それに引き換え「正面向いてない名前プレートは角度付けてほしいんだとよ」とか(呆
読めねーじゃねーか。
客の要望を全部聞いてたら終わるものも終わらんわな
半透明の交差を処理しないとゲーム性にかかわるような状況ならなんとかするし
見た目が多少かわる程度なら代替案でごまかして時間を節約する
「こことここの交差がすごいんですよ!」なんて説明しても
客はもちろんプログラマ以外の人からは「ふーん?」で終わるなんてよくあること
角度つき名前プレート君をいじめるのはそろそろ自重しろ
彼は今日初めてアルファテストを知り、半透明前後問題はレイトレースでもなきゃ完全は不可能と知ったんだ
それを思えば初心者スレに相応しい人間だと思えるだろ?
謙虚さがまったくないのが問題だが
>>635 ・半透明で、障害物の裏面描画(CWカリング
・半透明で、障害物の表面描画(CCWカリング
の順でやるのは確定として・・・
他の物体との前後関係はどうしような
障害物が大きくて長いとなったら、これこそポリゴン単位での前後関係問題が出るな
しかも目立つ
>>642 業務系なら最初の仕様書にない変更は別料金別期間を請求できるけど
ゲーム系は仕様をひっくり返されるような変更があっても
納期も制作費も変わらないことが多いんだぜ?
>>644 べつに球判定で主人公とカメラの間にあったらでいいんじゃない?
ソートもオブジェクト単位で
なにか問題あったっけ?
まったく覚えないんだけど?
>>645 かかったらかかった分だけもらえる開発しかやったことないな
申請すればもらえるよ
お客さんもしょっちゅう電話でやりとりしてるからこっちの工程知ってるし
逆にこれを実装すると
これだけの人月かかかりますって話すると
じゃあいいです、って言われる場合もあるけどなw
クライアントなんて思いつきでものを言ってる場合がほとんどだし
意見の取捨選択は大事だな
第三者の客観的かつ無責任な意見も良いものを作るにはには時には必要だけど
とりあえず「角度つき名前プレート」という画期的仕様が実装されたMMOが出てから揉めろ
プロ騙りのガキ相手にしてんじゃねーよ
>障害物半透明
不透明物体をとりあえず描画
障害物の深度値を深度バッファに描きこむ
半透明物体(障害物除く)を全て描画し、その際障害物深度値より遠いピクセルのみ描画
障害物を半透明描画
半透明物体(障害物除く)を全て描画し、その際障害物深度値より近いピクセルのみ描画
>>646 斜めの物体が障害物だとして、○と●が両方とも障害物の奥にあるべきなのに、
例えば重心とかでソートした場合○→障害物→●の順番に描画されちまう
__
○/ /
/ /
●/ /
 ̄ ̄
↑
カメラ
>>650 壁は壁で判断したらいいじゃんw
なんでそう一括で処理しようとするの?
壁の判定わからないの?w
GetKeyState()ってGetKeyState(VK_UP||VK_DOWN)ってできないんですか?
または的に使いたい時ってどうすれば良いのですか?
GetKeyStateなんか普通使わない。
GetAsyncKeyStateを何度も呼ぶか、GetKeyboardStateでまとめてキーを取るか、
DirectInputかXInputを使う
ありがとうございました
ジョイスティックを使いたいのでDirectInputでやることにします
DiectInputでキーボード使うとかアホだろ
゛真ん中に居てキャラクター化背マップが移動するの場合
移動の命令はキャラクターとマップのどちらにか?
にほんごでおk
つーかマルチ
別の方で答えてしまった、、、損した
どこのお国の方かとおもった。
確実に日本人じゃない
つか、ジョイスティックってジョイスティック用の移動処理をさせないといけないの?
十字キーの上下左右を設定してたら勝手に割り当ててくれないの?
意味分からん
意味はわかるけど、その辺は自分で組めよ。
にか?
だってわからんし
XYの移動に変換するサンプルとかSDKに入ってないの?
セガ本に書いてるかな?明日立ち読みしてこよう
つかキーボード上下で設定しといてプレイヤー側にフリーソフトインストールさせればいいだけか
その辺やりたくないのなら、
代わりにやってくれる、もっと上位のライブラリを
使うべきだ
>>662 >>666 >>667 なぜジョイスティックの上下左右くらいでそんなに困るんだ?
入力情報を変換テーブル介して抽象化するのは
ごく当たり前の実装方法だろ?
そしたらキーボードと区別する必要もないじゃないか。
>>669 ジョイスティックのしくみを知らないからだけど
>>670 知らないなら、自分で調べたらいいじゃないか。
オレは初期化/列挙の方法だけネットのサンプルを引用したが、
入力の検知はデバッガで止めて挙動を調べながら実装したぞ。
それでも1日かからないよ。
DirectXのチュートリアルやればこんなところで
くだらないやりとりするよりよっぽど速いよ
>>671 まあ理解する必要ないしね、別に趣味グラマーだし
フリーソフトで代用できるかは知らないけど
まず、入門書かって一通りできるようになったほうが速いんじゃないか?
3Dいくらか表示できて、音鳴らして、入力できりゃいいんでしょ?
悩んでる時間がばかみたいじゃん
こういうのは金で解決がいいよ
サンクス
もう全部できるし別に悩んでない、急いでないだけ
にしたって面倒だし
ゲーム以外の部分で躓くのが俺的に無駄な時間に思える
全部誰かのサイトって昔はできたけどいま無理だよ
予想以上に馬鹿で自分の力わかってないようなのが技術サイト作ってたり
なにより情報が古いのが多い
>ゲーム以外の部分で躓くのが俺的に無駄な時間に思える
じゃツクールでもやれ
ゲームとはプログラミング技術、アルゴリズム、ハードの知識等の複合する技術のもとになりたってるんだよ
それらを一足飛びにしてゲーム挙動だけ組むのがゲームプログラムだと思ってる時点で
決定的に技術不足は目に見えてるだろ
しかも調べてコピーですらも出来ない、検索先のサイトの悪口言うようじゃねw
>>677 いや、俺はDirectX暦10年以上のおっさんです
いいぞやれやれ
だが、実際にゲームを完成させるのは
その上辺を舐めてる人の方が多いらしい
>>676 既存のライブラリとか使えばいいじゃないか。
あえて全部自分で作る理由がないなら問題ない選択肢だぞ。
あーだめか
傾きによってスピードとか変えたいからな
勉強するわ
やるなら
アクションマップでいいだろ
まったくもってDirectXプログラマはすごいぜ
俺もいつかなりたい
やっとスティックの0〜1000で表示できたw
死ぬかと思った
3D上に線を引きたいのですがどの関数を使えば良いでしょうか?
atlはEEには無いからな。
評価版でもダウンロードすれば入ってるんじゃない?
Windows Driver Kit をインストールすれば入ってる
インクルードパスとライブラリパスを正しく設定する必要があるが
atlbase.hだけあっても中で呼ばれてるのATL関連のヘッダーがないって言われるだけ
てか、CComPtr使わないでatlbase.hはずしたほうが速そうな気もするが
ありがとうございます
評価版のプロフェッショナルをダウンロードしてみます
ダウンロード1時間・・・だと・・・
>>689 外し方を教えてください
めんどくさいやつだな
以下の4か所を変更
CComPtr<ID3DXLine> m_pd3dLine;
CComPtr<IDirect3D9> m_pD3D;
CComPtr<IDirect3DDevice9> m_pd3dDevice;
CComPtr<IDirect3DTexture9> m_pTexture;
↓
ID3DXLine *m_pd3dLine;
IDirect3D9 *m_pD3D;
IDirect3DDevice9 *m_pd3dDevice;
IDirect3DTexture9 *m_pTexture;
この時点でエラーが一個でる
m_pD3D.Attach(Direct3DCreate9( D3D_SDK_VERSION ));
↓
m_pD3D=Direct3DCreate9( D3D_SDK_VERSION );
これで実行はできる
ただしCComPtrの自動解放の恩恵が受けれないので
各クラスの解放処理の部分で作ったインタフェースのReleaseをする必要がある
CD3DSetup9::Cleanupで
m_pTexture->Release() ;
m_pd3dDevice->Release() ;
m_pD3D->Release() ;
CDrawLineのデストラクタあたりで
m_pd3dLine->Release() ;
DirectXはおろかC++も怪しそうだから
「ググれ、カス」でいいんじゃね?
C++の範囲かと言われればそうでもない
板状のポリゴンがあって頂点の情報は固定なのです。
サイズとか移動はSetTransformでできるのですが
vとuをその時々で変更するにはどうすればいいの?
そのつどロックして値を書き換えるか
アニメーションパターンのように最初から分かっているなら
あらかじめ頂点バッファに全部登録しておいて読み出し位置をずらす
ピクセルシェーダーでずらしてしまうという手もあるが
SetTransformでUV位置変えられるぞ
CCD法のIKを実装してみたんですが
最近のゲームでよく見る、斜面にめり込まない処理ってどうやってやるんでしょうか?
ただ立たせる場合は大丈夫だとして、走りなどのモーションを適応したときの方法がわかりません
>>698 CCD法は知らんが、
アームの先端から、アームの各角度を得る問題だとして、
アームの先端の位置だけから、求めようとしているのか?
正しくはそれでは足りず、アームの先端の位置と角度(姿勢)が必要になるぞ。
>>698だと、
斜面と足の交点と斜面の法線から、足の角度を求める。
SetTransformでテクスチャの座標を変更するにはどうしますか?
大きな画像から0,0,32,32を抜き出すみたいな。
UV座標をトランスフォームするだけ
D3DXCreateTextureFromFileで作ったテクスチャの画像サイズを得るには
どうすれば良いですか?
マルチ視ね
x、yの値からθを求めるにはどうすれば良いですか?
atan2(y,x)
三角関数でぐぐれ
マトリックスさてどうしい16こもあるの?
アリガトウゴザイマシタ
まだ初めたばかりでちょう常識的な事をきいているかもしれないんですが
ウィンドウ内でのマウスポインタの位置座標を表示させるにはどうすればいいのでしょうか?
>>713 ググレよ
POINT point;
GetCursorPos(&point);
ScreenToClient(hWnd, &point);
すみません
一応調べていたんですが
HWND hWnd;
POINT point;
GetCursorPos(&point);
ScreenToClient(hWnd, &point);
sprintf(str,"マウスのX座標:%03d", point.x);
D3DrawText(0, 0, str);
sprintf(str,"マウスのY座標:%03d", point.y);
D3DrawText(200, 0, str);
ってやったんですが、値がウィンドウのところからの座標が返ってきません。
どこがいけないのでしょうか?
>>715 >HWND hWnd;
これをちゃんとした奴とってこないとダメ
プログラムのどっかにウィンドウを作成するところがある
そこでウィンドウハンドルを取得してるはずなのでそれをそこにぶち込む必要がある
自分で宣言した奴なんて無効な値しか入ってないから
>>715のプログラムだとScreenToClient関数はどこのウィンドウだかわからないって状態
ウィンドウ作成って此処の部分でいいのですか?
// ウィンドウの設定
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC,
D3MsgProc, // コールバック関数の指定
0L, 0L,
GetModuleHandle(NULL), NULL,
LoadCursor(NULL, IDC_ARROW), // カーソルの指定
NULL, NULL,
APP_NAME, NULL };
RegisterClassEx( &wc );
// ウィンドウの作成
HWND hWnd = CreateWindow( APP_NAME, "Checker",
WS_POPUP | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX,
//WS_OVERLAPPEDWINDOW,
100, 100, 640, 480, // ウィンドウの位置と大きさの指定
GetDesktopWindow(), NULL, wc.hInstance, NULL );
>>718 それくらいまず自分で試して確認してみたら?
スプライトを回転して描画するにはどうするのですか?
D3DXSpriteでON SPRITE GOSUBが来てくれません。どうしたらいいですか
>>720 DirectXにスプライトなど存在しない
>>721 D3DXSpriteなどDirectXにもD3DXにも存在しない
シェーダーを使わず、テクスチャーのカラー値をアルファ値として描画することはできますか?
どのような設定すればよいでしょうか?
>>723 SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
を
SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR);
SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCCOLOR);
にすればいいんじゃね?
ってお前ちっとも頭使ってないだろ
素質ないから諦めるってのもまた1つの方法ではあると思うけど
まわりにいたらぶっとばしたくなるなw
>>724 それ言ってるの多分何人もいるぞ
もちろん俺も言ってたw
>>726 そういう姿のプログラマが女の子にもてると思うのか?
>>722 いい加減しつこい。
自分じゃ気づいてないだけで相当嫌われ者だろ。
>>726 他の人もやってるからっていいわけがPGとしての素質の無さを匂わせるな
>>725 それじゃ駄目だ。
多分出来ないと思う。
逆ならいけるんだけどな。
>>730 なるほど
0〜1.0
255〜0
に変換しないとダメってことか
いや、内積(D3DTOP_DOTPRODUCT3)を使えば出来そうかな?
ま、後は自分で考えてくれ。
>>734 HLSLでいうところの、以下の処理が出来ればいい。
float4 srcColor, dstColor;
float4 mask = { 0, 1, 0, 0 };
dstColor.a = dot( srcColor, mask );
maskはtexfactorあたりを使えば、固定シェーダでも出来そうと思った。
しかし、マニュアルをみると、
D3DTOP_DOTPRODUCT3はいろいろ制限があって
普通に内積はしてくれないみたいだな。やっぱ駄目かな?
>>733 じゃぁ黙ってアク禁の申請すればいい、と。
>>732,734
D3DTOP_DOTPRODUCT3でカラーからαの変換はできるよ。
ただ、これはALPHAOPだけに設定しても使えなくて、同時に同じステージの
COLOROPにも設定しないと使えないので、ちょっと使いにくい。
内積を取る相手には、TFACTORを利用する。
>>737 ありがとうございました、確かに使い方は限定されるようですが何とかできそうです
>>725さんもありがとうございました
>>735 はじめに言ってることと全然違いすぎて意味がわからない
そもそも内積なんてとってもなにもおきないだろ
法線マップが使いたかっただけなの?
α関係ねーしマジで何が言いたいのか不明
float4 mask = { 0, 1, 0, 0 };
dstColor.a = dot( srcColor, mask );
これ普通にgがほしいだけちゃうの?
もうわらうしかないww
俺も意味不明
SetTextureStageState
使ったらいいと思うけど
そもそもそこまできたらα値にわざわざ値いれてもしょうがないと思うんだ
rだろうがgだろうがbだろうがどっかに値さえあれば計算使えるんだから
今更a要素にいれたって誰も計算してくれないぞ
固定シェーダを使ってる奴はやっぱり糞
簡単なゲームをサクッと作る時はまだ固定機能使う時もあるだろうけど
固定機能で無茶しようとするからこういうことになるんでね
シェーダー使えば楽なのがわかってるのに
なぜ固定機能にこだわるんだろう
基本機能だけなら初心者には取っ付きにくいってほど難しくないだろう
一部の最新VGAでなければ動かなかった時代ならまだ解るけどさ
シェーダーが使えないVGAの対応を未だにやってるからだろう
>>748 VS1.1サポートしてないボードってなくね?
いまどきミニノートのオンボードチップでもシェーダーは動く
Geforce2とかRadeon7000番台?
float4 srcColor, dstColor;
float4 mask = { 0, 1, 0, 0 };
dstColor.a = dot( srcColor, mask );
これ、カラーキーやりたいならはじめ(ロード時)にα画像を作っちゃったほうがよくね?
>>751 動いちゃうよたしか
HARDWAREなんとかダメでもSOFTWAREなんとかなら動いちゃう
とするとi815とかその辺り?
10年近く前のPCに対応するために苦労する初心者っているんですか?
まず、シェーダ=難しいっていう意識をなくさないとダメだな
固定シェーダ理解できる脳みそあればシェーダなんて余裕でしょ
屁みたいなもんだよ
いやシェーダー難しいって言う人はいないんじゃないか?
最初からシェーダーあったのでむしろ無いのは拷問だが
固定シェーダなど存在しない
>>758 ○○など存在しない系のレスは見るとムカムカするが
これはなごんだわw
>>761 しょっぱなヒットするサイトの用語と計算式まちがってねぇ?
α値を使ってやる計算はすべてαブレンドだろ?
普通の奴は加重平均っていうんだぞ
>>740-743 固定シェーダでは、RGBをAに入れる直接的な方法が
用意されていない為。
765 :
698:2009/06/17(水) 16:00:44
>>700 返信ありがとう
多分、そこらへんはクリアしているんだけど
階段とかを上るときに、めり込まない様にする方法がわからないんですよね
静止時には下半身のアニメーションはつけていないので
足と階段の接点からめり込まない様に膝を曲げるってな所まではできたんですが
それをもともとある階段を上るアニメーションに適用していいのかがわからないんです
めり込まないようにひざを曲げる所まで出来てるなら
アニメーション後の2つの脚の位置から下方向に調べて
それぞれめり込まないようにひざを曲げれば出来そうな気もするけど
767 :
デフォルトの名無しさん:2009/06/17(水) 16:41:47
というかなんで試してからこないんだ?
どうせプログラムなんだからいろいろ弄って見ればいいのに
アニメーション適用 -> 衝突判定 -> IK適用
で何か問題あるか?
IK適用とはめりこまないようにやるんだろ。
元がアニメーション適用前でも後でも、関係ない話じゃん。
D3DXMatrixScaling
D3DXMatrixRotationX Y Z
D3DXMatrixTranslation
この中身は何をしてるの?
行列の変換で上から大きさの変換、回転の変換、位置の変換をしてる
行列ってのはグラフなんかの傾きをコントロール出来たりと凄い便利な物
まあ詳しくは数Cの本で
ホントだ
ヘルプからいつのまにかに式が消えてんぞw
消すなよなw
おい、仕事しろよ>MS
773 :
デフォルトの名無しさん:2009/06/17(水) 18:54:10
スプライトの回転はsetmatrixで回転行列を適用するの?
D3DXSPRITE_OBJECTSPACEでワールド座標?になるっぽい
けどスクリーン座標上でまわしたいの?
スプライト?
つまり画面に表示されてる画像や文字を回転させて表示したいと?
そうです
スプライトというのがポリゴンを利用したテクスチャ描画のことを言っているのなら、
各頂点を中心点から等距離に移動させれば回転できる。
DirectXにスプライトなど無い。
DirectXにスプライトなどない
DirectX doesn't own sprite.
781 :
デフォルトの名無しさん:2009/06/17(水) 19:56:43
char n[10] ="うんこ";
pFont->DrawText
で文字化けします。半角英数字だと文字化けしません。どうしてですか?
>>773 LPD3DXSPRITEのSetTransformにD3DXMatrixRotationYawPitchRollで回した
D3DXMATRIXのポインタを入れたりして回転させられるけど
この方法は間違ってる気がする
そもそもx,y軸で回せないし・・・
>>782 3D座標上でやってるの?
スクリーン座標上でやってるの?
答え変わると思うんだけど?
>>774はおk?
言わばスーパーで売ってる惣菜みたいなものだからな。
誰でも利用できるけど価格は高めだし、ほぼそのまま利用するしかない。
やっぱ材料があれば売っているような惣菜だけでなく自分で思い通りの物が作れるようにならないとな。
まぁ、スプライトはせいぜいゆで卵か。
>>774はゆで卵を使って卵かけ悟飯を作ろうとしている状態。
DirectXにゆで卵などない
rotationzで回転させれた
けどなぜか0,0,0の位置を中心に回ってる
位置はtranslationで指定しないとだめなのか?
>>786 3D座標で回してるのかスクリーン座標で回してるのかはっきりしろよw
線形代数を勉強しよう。
指定した位置で回そうにも、
rotationzはその位置を知らないでしょ。
知ろうが知るまいがスプライトの中で保持してる行列とかけるだけだろ
その点ってそういえばどうやって示すんだろ?
Xファイルを表示したときはSetTransformで位置変えて回せるけど
そんな事しなくても回す点は指定できるの?
おしえてエロいひと
自演乙
792 :
773:2009/06/17(水) 20:46:16
やったー
できた!
思いのままクルクル回ってる!
g_pdevice->SetTextureStageState(0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT3 | D3DTTFF_PROJECTED);
D3DXMATRIX tmscl;
::D3DXMatrixIdentity(&tmscl);
::D3DXMatrixScaling(&tmscl, 0.5f, 0.5f, 1.0f);
g_pdevice->SetTransform(D3DTS_TEXTURE0, &tmscl);
こで画像の左上1/4を切り取って表示されるのですが
D3DXMATRIX tmmov;
::D3DXMatrixIdentity(&tmmov);
::D3DXMatrixTranslation(&tmmov, 0.5f, 0.0f, 0.0f);
g_pdevice->SetTransform(D3DTS_TEXTURE0, &tmmovl);
これは何の変化がありません
どうすれば位置をずらせますか?
794 :
781:2009/06/17(水) 21:00:42
お願いします
全角フォントの文字化けの問題で詰まってます
>>790 回転行列ってのは、原点(0)を中心に
ベクトルを回すもの。
位置を変えて回すには、
3つのプロセスが必要。
@その位置まで移動する
A回転する
B元の位置まで戻る
行列は乗算で連結できるので、
位置を指定して回す行列 = @の行列 x Aの行列 x Bの行列
んでこれをSetTransformに渡したりして使う。
>>793 D3DTTFF_COUNT3 | D3DTTFF_PROJECTED
は、テクスチャ座標をトランスフォームした後、
[x,y,z]の三次元だけ取り出し、[x/z,y/z]として
二次元で取り扱うという意味。
トランスフォーム用の行列も3x3で
作らないと駄目。
tmmov =
[1,0,0,0]
[0,1,0,0]
[x,y,1,0]
[0,0,0,0]
>>781 char文字列とは、ASCII用
日本語には使えません。
tcharかwcharを使え。
798 :
797:2009/06/17(水) 21:36:34
これ間違いだわ。
ノーカンで。
sprintfでデータを入れてpFont->DrawTextではどうよ?
やっぱりそれはおかしい?
文字列描画してるサンプルぐらい落ちてるだろ
自分で動くサンプルみつけて該当箇所コピーして考えろと言いたい
それでもできなかったら聞きにこいよ
ロケーションだろjk
それ位jkだろ
>>781 GetGlyphOutlineでフォントイメージを取得して、それをテクスチャに転送するだけ。
スケールの数字も入れたら掛け算とかいらないのねー
805 :
デフォルトの名無しさん:2009/06/17(水) 22:55:17
>>802 使う文字が決まってるならいいけど
やってみたら1文字60fpsでcpu15%行った
>>805 まさかとは思うが1FPSごとにテクスチャを書き直すなんて、
頭の悪いを通り越したような愚行は犯してないよな?
1FPSじゃなくて1フレームごとだ
4頂点がいっぱいでDrawPrimitiveUpと
SetTransformはどっちが速いの?
試せばわかることを何できくの?馬鹿なの?死ぬの?
それぞれ1万回くらい描画して処理時間計ってこい
だってどうせ環境によって違うし
インターネットって暇で親切で自己顕示欲の塊みたいな人が実験結果をアピールしてるじゃん
俺はゲームが作りたいんだ。自分でつまんない実験で時間つぶしたくない。
そういうのはゲームエンジンを作るのだけが目的の人がやってるだろうから
結果だけ教えてくれ
まずだなあ
自分で試す事が出来ない人間にエンジンなんて無理に決まってるだろ
あれだ、韓国だかが背伸びしていろいろやろうとして失敗するのと同じだ
よーし翻訳しちゃうよ
「わからない。」
fpsを一定にするには一周にかかった時間を求めて
一周が一定になるようにSleep使って止めればいいんだよな?
void Wait(){
static float time=0;
float term,FPS=0.0f;
term = timeGetTime()-time;
if(16.6f-term>0)Sleep(16.6f-term);
time=timeGetTime();
}
ってやるのは間違いか?
>>815 一般的に約1秒間の間に何フレーム描画したかを数えて1秒間隔で表示したほうが見やすい。
ということは1秒で60フレーム
一フレーム当たり0.166666になるようにすればいいのか?
fpsの変動を許す設計にした方が良い。
「fpsを一定にするには」って聞いているのに
お前らって、、
そんなんVSyncに依存して素直に描画する以外に方法ないよ。
∴ゲーム内部の更新が秒間60回固定なら、前回フレームと今回フレームを
VSyncの端数の比率で補間した位置に描画する、が理論上の正しい答え。
>>819 そのやり方がアホだから、変動おkにしろと。
ほんま、ここ初心者なんやな
可変フレームレートを許すなんて、xna厨ぐらいしか言わないと
つい最近まで思い込んでたのだけど、今はその方が普通なのか?
何がきっかけで、そうするようになった?
(俺は偶々xna関連ブログから検討するようになった)
>>821 描画用ルーチンとゲームメインルーチンがあったとして
描画用ルーチンは変動してもいいけど、
メインルーチンは変動しちゃ駄目だろ。
つまり、FPSを安定させる方法も必要。
固定にしようにもマルチタスク環境ではどうにもならない。
んで結局
>>815はだめなの?
というのも
void Fps(){
static int time=0,ave=0,f[60];
f[count%60]=timeGetTime()-time;
time=timeGetTime();
if(count%60==59){
ave=0;
for(int i=0;i<60;i++)
ave+=f[i];
ave/=60;
}
if(ave!=0)FPS=ave;
return;
}
というのをやったらFPSの値はなんでか16.0で安定してるんだよ
安定するのはいいんだけどなんで60にならないんだろう?
平均値の求め方がバカなだけです。
算数をやりなおしましょう。
16msecで
望んでる結果じゃねえか
ふれーむ ぱー せかんど ってのは もじどおり
ふれーむ ÷ びょう
って意味だよ
びょう ÷ ふれーむ じゃないよ
>>823 物理エンジンとかが容易に使えるようになったからかな・・・
アレも変動した時間間隔を渡すし
エルフェンリートは漫画とアニメのギャップに驚いた
DEADSPACEとかのってやっぱりバラバラ死体を作ってから
それをくっつけて形にしてるのかなあ?
普通にモデルをすり替えてるよ
ソースはQuake3
…GTA4とかの変形した車とかは、頂点シェーダとか使ってるのだろうか?
線を表示したんだけどカメラを動かしたら線も一緒に動きます
どうしたら線を動かなくできますか?
フラフラすんな!
線用のカメラを用意しろ
841 :
デフォルトの名無しさん:2009/06/19(金) 17:18:45
#ifndef _3DMODEL_H
#define _3DMODEL_H
#include <Windows.h>
#include <mmsystem.h>
#pragma comment(lib,"d3d9.lib")
#include <d3d9.h>
#pragma comment(lib,"d3dx9.lib")
#include <d3dx9.h>
#define MAX_MODEL 20
struct MODEL
{
LPD3DXMESH p_mesh;
D3DMATERIAL9* p_materials;
LPDIRECT3DTEXTURE9* p_textures;
DWORD nummaterials;
BOOL used;
};
//以下クラス宣言など
このヘッダをinclude すると
3DDevice.cpp
\3dmodel.h(20) : error C2236: 予期しない 'struct' 'MODEL' です。';' が入力されていることを確認してください。
\3dmodel.h(20) : error C2143: 構文エラー : ';' が '{' の前にありません。
\3dmodel.h(20) : error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?)
とエラーが出ます。
構造体定義が間違っているのでしょうか?
糞チョン、マジむかつくけどぉ〜
スロやパチンコは別だからぁ〜 /
 ̄ ̄ ̄ ̄ ̄ ̄// ̄ ̄ ̄ ̄ ̄ ̄
_
/三ー\ __________________
/ノ:::三(@)\___皿_____||
. |:::::(@):::::::⌒)\::+:+::::\. ||
. |::::::::::(__ノェェイ::::::|:###::::*:: ||
\::::::\`ェェェノ:::::/::444::U::: ||
\ ∪::::::::::_ノ*::::u::::*::: ..||
/ ̄ \\:::ー:::/::||
/ フ /ヽ ヽ=======◎
↑
パチンカス
>>841 たぶんだけど
そのヘッダーの一個前にインクルードしてるヘッダーにエラーがある
844 :
841:2009/06/19(金) 18:53:57
ありがとうございました。
別のヘッダのクラスに;付け忘れてました
1フレーム間隔固定する話か
どうせよほどのキチガイゲーマーでなきゃ10msくらいかわっても気づかんよ
秒間60フレーム描画したいなら1フレームあたりの処理と描画とウエイトタイムの合計が
16msくらいになるようにすればいいだけだろ
音ゲーでもない限りカリカリするような話題じゃないとおもうんだが
まるで生きがいであるかのようにこだわる奴がいるよな
むしろP2Pネットワーク対戦とか実装するなら
ある程度変動を許容するファジーな仕様にしといたほうがいいと思うけどなー
まー人それぞれだわな
そうやってPCスペックで難易度の変わるゲームが出来上がるんですね
某MOゲームの高スペックマシンにのみ起きる多段ヒット即死みたいな
IDirectSoundBuffer8::Play + DSBPLAY_LOOPING で音をループ再生しているんですが、
ループ回数を指定したい場合どのようにすればいいですか?
ループの瞬間にコールバックしてくれるとか、そのままズバリループ回数が指定できるとか、
そういうのがあればいいんですが...。
毎回 IDirectSoundBuffer8::GetCurrentPosition やって、直前のポジションよりも小さな値が入ってきたら
ループ回数をインクリメント、規定回数になったらループフラグをはずすとか..
でも再生中にループフラグ変えることできませんよね
// 次に更新するまでの残り時間を返す. 更新すべきタイミングなら 0 を返す
int My_FPSWait(void) {
int now = My_clock(); // 現在時刻(msec)
int next = g_start + 1000 * g_frame / FPS;
if (now < next) return (next - now); // 待機中
if (g_frame < FPS - 1) {
//フレーム数が指定 FPS-1 に達していない
if (now < g_start + 1000 * (g_frame + 1) / FPS) {
//1フレーム時間以上の遅延がなければ、そのままフレーム番号をインクリメントする
++g_frame;
} else {
//1フレーム以上の遅延があった場合は、リセットして最初から計測しなおす
g_start=now; g_frame=0;
}
} else {
//フレーム数が、指定 FPS-1 だった
if (now < g_start + 1000) {
//スタート時間からまだ1秒経過していない場合は、スタート時刻を1秒ずらした値を新しいスタート時刻にする
g_start += 1000;
} else {
//スタート時間から既に1秒が経過しているならスタート時刻を現在時刻でリセットする
g_start = now;
}
g_frame = 0;
}
return 0; // 待機終了
}
スプライトはテクスチャーに書けないですか?
凸凹なポリゴンの高さを得たいんですけどどうすればいいんでしょう?
DirectXにスプライトなど存在しない
つ CreateTexture+D3DUSAGE_RENDERTARGEEEEEEEEEET
SetRenderTargetしてもバックバッファに描かれるんだけど
戻り値は確認したのか?
Begin〜Endの中だったり
D3DXSprite::Drawはその場で
>>850 初心者にはD3DXIntersectの存在を教えるだけでOKでしょ
DirectXにD3DXは存在する
じゃあ「D3DXのSpriteについて教えてください」といわれたら
嫌がらせるためにはどう答える?
ググレカス
初心者はそんなもの使わないで
自前で描いたほうが勉強になるよ、と言う
>>863 厨房が勝ち誇ったように言ってると思われて
第三者に諭されるだけだぞ
いま、メインスレッドで Now Liading アニメを描画し、もうひとつのスレッドでひたすら
テクスチャ生成というのをやっているのですが、WinXPではうまく動くのに
Win7だとメインスレッドが止まったまま、裏スレッドが動き続けてしまいます。
(エラーはいっさい発生せず、メインスレッドがどこかで無限ループに陥ってる?)
で、はっと気づいて BeginScene から EndScene までと、テクスチャの生成関数、
テクスチャ Lock から Unlock までをクリティカルセクションに指定しました。
すると今度は Win7 で正しく動くのに、WinXpでは動かなくなりました。
ためしにクリティカルセクションを向こうにしてみると、 Win7では動かず、WinXPでは
正しく動きます。
いったいどういうことなのでしょう??
CreateDeviceにD3DCREATE_MULTITHREADEDつけてるか?
>>865 まずはちゃんとマルチスレッドのデザインパターンを勉強しような。
スキンメッシュの読み込みが初心者には難易度が高いので
このコードを使おうと思っています。
ttp://www5f.biglobe.ne.jp/~kenmo/program/skinmesh/skinmesh.html CAllocateHierarchy hierarchy;
で宣言すると抽象クラスをインスタンス化できないとコンパイルエラーが出てしまいます。
CreateFrame
CreateMeshContainer
DestroyFrame
DestroyMeshContainer
の4つがオーバーライドされているので問題ないと思うのですが、何か根本的な間違いをしているでしょうか?
変更した所といえば、コンパイルが通らないので 下記のように"__stdcall"を追加したくらいです。
HRESULT __stdcall CAllocateHierarchy::DestroyFrame(LPD3DXFRAME pFrameToFree)
3日考えてもわかりませんでした。
よろしくお願いします。
ありがとう! 自分でクリティカルセクション設定しなくていいんですね
その方法で解決しました > 866
なんか WinVista からマルチスレッド関連が仕様変更になったらしいですね
>>869 マルチスレッドにしてる限り自分で何も考えなくていいわけじゃないぞ・・・。
ある日マルチコア環境で不具合発生とかで泣くなよ。
>>868 考えたくもねー。ID3DXAnimationControllerのクソ仕様に無駄に苦悩させられるだけだから
自分で作ったほうが早いわ。
>>858 >ただ、SDKのバージョンは9.0bなので、9.0cだと、
>CreateMeshContainerの引数や、アニメーションコントローラのメソッドが変わっていたります。
って書いてあるじゃん
たぶん何か足りないか関数名が変わってるとかしてるんじゃない?
>>361 ID3DXSpriteと書けば何の問題も発生しない
3と8を間違える男の人って・・・
スキンメッシュの話を仲間内でしてた時、
「(足を上げたときに)お尻が丸い」と巧く変形した事を褒めたら
会話の流れを知らない第三者にセクハラだと思われた事があったんだよな
児ポ法の規制が通ったら、
・サンプルの特徴の無いキャラは子供っぽく見える
・スキンメッシュの話の為にM字開脚した時の破綻画像をネットにあげる
・第三者ババァがロリサイトだと言い張る
・捕まる\(^o^)/
って事になるんじゃね?
言い方を変えればOK
臀部が球状だねとかなんとか
こちらの想像の斜め上を行く発想が来ることを言ってるので…
破綻画像を他人に見せる時は、破綻を解決する方に無い知恵絞ってる最中だろ?
そんな時に、言い方とか、キャラにテクスチャ貼って30過ぎのオッサンである事を一々伝えるか?
2次オタが、足の動きに合わせて臀部が球状になるのを見て
性的興奮をするのは想定の範囲内です
っていうか、どうせ変態だろうし
あらかじめ捕まっとけよ
男は全員変態だから問題ない
3次元の変体より2次元の変体のほうがむしろ危険度は低いのでは?
地形のデータによく何か内側に絵が描かれてる箱みたいな奴がありますが、あれは何というのですか?どういう意味があるのですか?
その説明だとスカイボックスの事を言ってるようにしか見えない
多分それは決められた座標に常にあって、
一度箱の中心にカメラ位置を設定して描画してから
プレーヤー視点にカメラ位置を戻して描画すると
箱の画像が背景になる。
ゲームの内部データを無断で見てしまうなら、Pixとか使ってしまっても
良いと思う
スカイボックスのこと?
空とか地平線などの遠景のテクスチャを
でかい球やボックスの内側に貼り付けて
その内側にシーンをレンダリングすることで自然な背景を演出するためのもの
ありがとうございました
エラーメッセージの有無によって動作を変更するプログラムを作っているんですが、
CやC++でコンパイルエラーが1行になることはあるのでしょうか?
教えてください
コンパイルエラーはまったく関係ないだろそれ
質問の仕方の悪いやつが多いなぁ
頭の弱い子なのかと思ってしまう
847もわすれないでください...
Xaudio2使え
>>847 難しいこと考えないでDSBPLAY_DEFAULTでならして
GetStatusで再生が終了したら指定回数終了するまでもう一度鳴らすって
別スレッドを作ればいいだけの話では?
BGMも効果音もXaudio2使うのが正解?
>>894 DirectSoundより圧倒的に楽だからな。
ループを含めたBGM・音の再生ルーチンを用意するのに200行もかからない。
効果音のオンメモリによるゼロレイテンシの再生はまだ必要ないので実装してないが。
今からやるならXAudio2だけで十分。XPでも普通に動くし。
ありがとうございます
サウンド部分はまったく手をつけてなくて便乗して質問させていただいたのですが、
Xaudio2から始めてみます
でも初心者にはDXライブラリは知ってもXAudio2なんて知らない
いつの時代でもDirectSoundから始めて詰まる事に変わりはしないし
このスレもずっと荒れつづける
スキンメッシュからシェーダー外すのも簡単だな
いや、はずすなよw
スキンメッシュやれる技量あるのになんでシェーダーやらない?
SDKのサンプルみたいに
固定機能シェーダ−>ソフトウェア−> HLSL シェーダ
の順に習得する物なのかな…?
この辺りの歴史背景とか知らないので、教えてエロい人
スキンメッシュクラスを作るためにもシェーダーは外す必要がある
シェーダーなんてbeginとendで囲むだけだし
いきなりHLSLでOK
固定機能はDirectX10-11以降は存在しません
加えて11では今の頂点シェーダ、ピクセルシェーダに加え
新たに4つのシェーダーが加わりさらに複雑化する見通し
いまのうちから慣れておいて損はない
固定機能ってどこまでを指すのか実は理解できてないんですけど
SetRenderState や SetSamplerState などが無くなるって意味?
>>905 そんな意味の無い質問繰り返してるのが時間の無駄
ついでに言えば固定シェーダに悩んだ時間はただの時間の浪費でしかない
サンプル見つけてその通り書いてみるだけでもうなにもかもわかる
まぁ導入には固定機能もアリだとは思うけどね
理解すれば勝手に使わなくなるもんだw
未だにG550のMatrox儲としては固定機能も選択肢の範囲内
固定機能 != 固定シェーダ
固定機能をシェーダーにするのも容易い事なんだから
それに、各種エフェクトや半透明とかの対処を学ぶにもシェーダーを用意しなくて良いから楽
「楽」な割には固定機能で○○ができませんか?的な苦労をしてる初心者が多いようですが
2DはD3DXで固定機能
3Dはシェーダーで描画
こんな風に併用してる奴は俺以外にはいないか?
面倒だから全部シェーダー
DirectXの本とかサンプルとか書いてるページで
固定機能を先に説明してる奴が悪い
むしろ、2D処理こそがシェーダーが活躍する分野だと思うんだな。
いちいちSIMD化しないといけない憂鬱を考えたらホント楽。
2000年以降ぐらいで発売されたPCならノートでもデスクトップでもシェーダー動かないってことはないだろう
それより以前の使ってる奴なんているわけない
シェーダの中で、CullModeとかも設定できるじゃないですか。
でもあれって、無駄な切り替え扱いで処理速度落ちちゃってるんでしょうか?
プログラマブルシェーダになって、すべての描画設定のところに
CullMode = CCW
を入れているのは、固定シェーダ時代でいうと
毎描画前にSetRenderStateでCCWを設定している相当の遅さになるような気がするのですが…。
ステートブロック化されてるからそうでもないはず。
だったら最初に一度設定してテクニック内では変更しなければいいじゃない
エフェクトのBeginのときにD3DXFX_DONOTSAVESTATEを指定しない場合は
Begin時に現在のデバイスステートを保存しEnd時に復元される
Begin時にCullModeがCCW以外であれば
切り替えて戻すことになるので実行速度は遅くなる
Begin時にCullModeがCCWの場合は
これは実行環境によるような気もするけど俺が前にPIXで確認したときは速度に影響はなかった
とはいえ、デフォルトの設定はあらかじめきちんと自分でしておき
デフォルトでないステートを使いたいときのみテクニック内で変更してEndで復元するという使い方が正しい気がする
そういえば
PIX for WindowsがSDKのユーティリティに付属してることを知らない人多いよね
初心者スレならテンプレに乗せても良いくらいだ
Direct3DにPIXなどない。
Microsoftが勝手に作ったツールに過ぎない。ID3DXSpriteより外縁の存在だ。
いいじゃん、便利だし
知ってるのと知らないのとじゃ大違いだしなー
使う使わないは本人が決める事だが
>>921 このスレだと、そういう事をマジで言っちゃう奴とか居るので
そういうボケはちょっと・・・
PIXは便利だけど強力すぎるので、知らない人は知らないままでいて欲しい。
926 :
デフォルトの名無しさん:2009/06/21(日) 17:19:10
投影変換した頂点で作った板ポリゴンってワールド行列変換で移動できない?
1万枚の位置とか色が変わる板ポリゴンを描くとして
頂点バッハに入れておいてどばーっと描くのと
4つの頂点だけ作ってトランスで操作しながら描くのは
どっちが速い?
まずはやってみるんだな
プログラムなんだし何やっても怒られないだろ
929 :
デフォルトの名無しさん:2009/06/21(日) 17:29:54
やってるけどできない・・・
.xメッシュは移動できる
出来ないならどっちが速くても関係ないな
ちなみに、技術系の板でわざと知ったかぶりしてみると本当の答えが返ってくる。
どう考えてもDrawPrimitiveの回数の少ない方が速いだろ
回数が少ないほうが量が多いってことね。
人一人描画するのでも髪、肌、服(鎧)、アクセサリ、他・・・って
マテリアル切替まくるのにいまさらそんなものの回数なんて気にしてられるか
だれも人モデルの話なんてしてないがな
あ、この流れ久しぶりだ
枚フレームVertexBuffer書き換えるほうが遅い
適切に動的頂点バッファとして使えば速くなることはあっても遅くなることはないよ。
もっとも最近のVGAではユーザーメモリに対しての優位性はほとんど無くなってるらしいが。
そもそもモデルデータでもない限りVertexBuffer書き換えないで描画なんて出来ないだろ。
UP系のメソッドだって中じゃVertexBuffer経由してんだから。
一万枚の板ポリが前提の時点で、無能以外の何者でもない
・VertexBufferを書き換えない
・DrawPrimitive呼び出しが少ない
で、ジオメトリインスタンシングがいいんじゃないか?
使ったこと無いけど。
1フレームに二万ポリゴン、それをリアルタイムで動的に変更する場面を考えてみろ。
レトロ2Dゲーに限ってDrawPrimitiveを毎回呼び出すのは無理だよ
32x32マップチップを800x600の画面に描画するのでさえ処理落ちするし
そういう用途に限ってVertexBufferを使用する最大数まで確保しておいて
使用頂点数指定して描画したほうがいい
ただ、マテリアルの切替とかできないから汎用性をつけるのははっきりいって無駄
もうそこだけ限定でおk
一万枚だけじゃわからん。
たとえば単一のテクスチャで草や葉の一群を描画するのか
弾幕STGの敵や弾でテクスチャ等がいろいろ混じって一万枚なのか。
そういえばDrawIndexedUPとかDirectX10にないんだけど、みんなどうしてるの?
>>946 あんまりよく覚えてねぇけど
頂点の使用数を入れる引数があったはずだから別にUPとかいらないんじゃない?
前から
どうだっけ?
っていうかD3D10使ってる人いるの?
ジオメトリシェーダの話題とか皆無だよな
>>946 CreateVertexBufferで一定サイズごとに動的バッファ作ってプールしといて使いまわし。
>>944 DrawPrimitiveを475回呼び出すだけで処理落ちとか、
どれだけ糞環境なんだよ?
なにも考えずに
DrawPrimitiveを回数呼ぶと簡単に落ちるよ
背景だけ描いて終わりじゃないしな
今のPCなら数百万ポリ位は描画できる
それが出来ないのはFPSを固定していないから
処理落ち云々言ってるのは正に初心者
>>数百万ポリ位は描画
これを本気でいってるならそのほうが初心者っぽいが
1フレームで数百万はあり得ないが、1000回程度なら60fpsは簡単に出るぞ
処理落ちとして考えられる理由。
テクスチャを32*32ごとに一つずつ作って、毎度切り替えている。
動的バッファを作っていながらAGPメモリを使わずに毎度書き換えている。
意味も分からずID3DXSpriteを利用している。
自分はミスしない、悪くないという奴に限って、
致命的に馬鹿なことをしているのが通例。
考えられる原因
裏画面に全体を描き込んで一度に転送していない
(1チップ毎に画面転送している)
全てのテクスチャを作り直している
FPSを固定していない
垂直同期に設定している
無駄なSLEEPを入れている
ハードウェアアクセラレーションを使っていない
>>959 そんなの今更考えられる原因としてあげてるのおかしいだろw
処理落ちソースをさらしたら、猛烈に突っ込みを受けることになるんだろうな。
まぁ、ソースだせや
馬鹿コードを直してやるよ
>FPSを固定していない
>垂直同期に設定している
質問者とは別人だが、その辺をどうしようか考えているところ。
その辺のことを解説したいいページとかないかな。
MSDNに書いてある?
やりたいのは液晶(通例59ないし60FPS)、CRT(60以上)どちらでも
最大60FPSを(処理落ちしない限り)安定して提供できるようなフレーム処理がしたい。
意味も分からずID3DXSpriteを利用している。
いつの話だよ。
今のは最低限のDrawPrimitiveにまとめる構造になってるぞ。
「DrawPrimitiveは遅いって聞きました」のひとことから始まるこの混沌を
僕はいつも楽しみにしています
矩形をたくさん描画するような処理やるときにまとめずに
分割して呼び出すと遅いってだけでそれ以外はこいつ呼ぶしかねーんだから
遅いも糞も使わなきゃなにもでんがなw
多分、垂直同期で決まりじゃないか?
ちなみに何FPS出てるのか知りたい
マップタイルはサーフェイス作るっしょ
シーンの初期化時「Now Loading...」とでも表示してる間に並べて描いて
後は領域切り出して転送するだけ。
971 :
963:2009/06/22(月) 00:09:34
>>968 なるほど……垂直同期で待機する方法を調べてみるか。
>ちなみに何FPS出てるのか知りたい
今のところネットブックで動かしてもフルスクリーンにすれば
60FPSが出るように処理量を抑えることができている。
でも環境によって、CPUに余力があるはずなのに
常に100%使用になっちゃう場合があるんだよね。
垂直同期で待機するとフレームが飛んだ場合の検出を別にやる必要が出てきそうだ。
その場合はtimeGetTimeでいいのかな?
>>970 それだと縦横4096超えるようなマップが作れなくない?
オレならマップチップを並べた状態のメッシュを用意して、1つのオブジェクトとして描画させるが。
今のところ32x32サイズだが、テクスチャが共有できてれば速度的な問題は無い。
若干問題は残っていてフェードアウトかけたいときにマテリアル光のαを減らすと、
2重になってるマップチップだけ1重のところより明るく見えちゃうことだな。
これを回避しようと思ったら970のいうように一旦サーフェイスに書いて、
改めてα合成をやり直す必要があると思う。
cpu100%…
core2なら50%、クアッドコアなら25%になるんだろ?
もろ、FPS固定、可変SLEEPが出来てない証拠
2D (笑)
>>974 いや、どうもダメな環境の場合、
Draw*Primitive*() 〜 Present() あたりで制御が返ってきてないように見える。
まだちゃんと時間計測やってないけど。
メイン環境だと処理能力に余裕があるからSleepする時間が取れるんだけどね。
ネットブックのGME950は挙動にくせがあるなー。
テクスチャの初期化のされ方もほかの会社のと違うみたいだし。
垂直同期使ったらいかんよ?
モニタの垂直回帰を自動で待つんだから
垂直同期は外してマルチスレッドで主スレッドはメッセージループのみ
子スレッドでメインループを作る
>>973 DirectDrawでチップ組みの2DRPGを組むときのやり方と同じでしょ。
画面が1024x768でチップが32x32なら、サーフェイスは(1024+32)x(768+32)だけ確保して
矩形を4回描画すりゃできる。(2^nサイズの問題はおいておく)
これがベストって雛形ください
>>978 なるほど。そうやるのが定石なのか。
マップチップがアニメーションする場合は効率があまりあがらないような気がするが、
メッシュ処理をする場合にも最低限UVを張りなおしが必要なんだよな。
(テクスチャ上のチップを規則立てて並べることでピクセルシェーダ上で張替えを行う力業もあるわけだが)
>>977 そうなのか。垂直同期待ちというのは面倒そうだな。
>垂直同期は外してマルチスレッドで主スレッドはメッセージループのみ
>子スレッドでメインループを作る
趣旨は分かるんだが、メッセージループでクリティカルなイベントを拾ったときの対処が面倒になるね。
例えばフルスクリーン、ウィンドウ表示の切り替えだとか。
1スレッドでやってるときはスクリーン切り替え中は勝手に処理が止まってるわけだが、
非同期で動いている場合は外から止める必要がある。
まあ既に7割以上のPCがデュアルコア以上になってるという市場の調査結果もあるから、
マルチスレッドによる計算資源の活用は積極的にやるべきだよな。
メッセージループって新たにスレッド作って回した方がいい?
>>973 全然わからんのだが教えてくれるか
>サーフェイスは(1024+32)x(768+32)だけ確保して
なんで+32?端の32x32 x nをマップチップとして使うの?
それだと数が限られないか?
>矩形を4回描画すりゃできる。
なんで4回?
この数字はどっから出てきた?
>>983 エスパーの俺が受信したところによると
全画面より1チップ分だけ縦横にスクロール分を確保。
4回の件は、例えば左上にスクロールするとすると、左上部分を転送(1回目)
右部分の縦に細長い矩形を転送(2回目)
した部分の横に細長い矩形を転送(3回目)
右下の1チップを転送(4回目)
ってことではなかろうか。
こんな方法が標準かどうかは別の問題だけどさ。
DDrawの初期はVRAMが4Mとか8Mなので、サーフェイスの確保も表示画面数個分とか。
そんな時代にBltFastを駆使してドット単位スクロールをするなら・・・という手法かな。
その後すぐに、システムメモリに画面を作ってCPUで全画面転送した方が早いので
素直にでかいメモリ確保するようになった。
988 :
デフォルトの名無しさん:2009/06/22(月) 02:48:03
D3DFVF_XYZRHWで作ったポリゴンって1回固定パイプライン通ってるからシェーダー通せない?
頂点シェーダはスキップされる
ピクセルシェーダは使える
やってみたけど頂点シェーだ無視された・・・
991 :
デフォルトの名無しさん:2009/06/22(月) 04:36:36
D3DFVF_XYZRHWで作ったポリゴンってループ内で動かすことはできないんですか?
ESPを使っても分からない!
ESP?
D3DFVF_XYZにして
とらんすふぉーまー
XYZRHWじゃ無理っぽいな
一度サーフェイスに書き込んでXYZで描きなおすしかないか
最初からXYZで描けよw
D3DFVF_XYZRHWは頂点計算済みと見なすと書いてあるんだから、
スキップされるのは当然じゃないか。
なぜ普通にレンダリングしない。
>>978 今更だが、1024+32だとメモリがスゲー無駄になりそうだから工夫がいるな
>>998 基本的なアイデアとしてはこれで問題ないだろう。
また、最近のVGAボードなら2の累乗サイズでないテクスチャも扱えるし。
(処理速度に差がある場合があるようだが)
1024x1024で確保して768より下の部分をワーク部分とする方法もあるし、
2048x2048確保する方法だってあるだろう。
>最近のVGAボードなら2の累乗サイズでないテクスチャも扱えるし
2の累乗以外対応のハイスペックVGAならそこまで効率を考える必要はないとして
むしろ対応してないロースペックVGAのことを考えるべきじゃないかと
>2048x2048確保する方法だってあるだろう
だからそれが無駄だと
>1024x1024で確保して768より下の部分をワーク部分とする
そういう工夫がいるよなって話
2048でもあいた所をうまく使えればいいかもしれないけど
解像度高めのテクスチャって環境チェックとかめんどいんだよな…
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。