【C++】 DirectX初心者質問スレ Part21 【C】
前スレはカスしか居ないので廃棄の方向で。 ※回答する人も、質問する人も必ず読んでください これらに当てはまる人のための質問スレです。 1.C/C++は多少理解している。 2.最近DirectXを始めたばかり 3.SDKを見ても、Googleで検索しても、いまいち理解できない人 4.余計な雑談は不要ですよ 【 回答してくださる方 】 ・ できるだけ優しく質問に答えてあげてください。 ・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。 「ググれ」「SDK見れ」以外の回答でおながいします。 ・ 神ですら理解不能な質問は無視して下さい。 【 質問する方 】 ・ どんな事で躓いているのか明確にしよう。 ・ 長くならないなら躓いている部分のコードを晒してみれ。 ・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。 ・ 回答して貰ったら、出来るだけお礼もしよう。
>>1 のちのち再利用をするとは思うが、無駄なスレは立てんなよ
お前が一番のカスだぞ
ほっしゅーと
6 :
デフォルトの名無しさん :2008/12/29(月) 17:08:46
すみません、前のスレに書いてしまったため、こちらに書かして頂きます。 何回も書いてしまって申しわけありません 初めまして、DirectX初心者のものですが皆様にご質問させていただきます。 現在DirectX9のノートパソコンでVisualStdioでプログラミングを行っております。しかし使用しているパソコンがノートなので 処理が重く効率が悪いのでパソコンの購入を考えているのですが、お店で売っている商品は DirectX10ばかりです。DirectX10のパソコンでDirectX9のプログラミングを今までどおり 行う事は可能でしょうか?
なんでそんな簡単に答えが帰ってきそうな質問まで マルチポストするんだ
8 :
デフォルトの名無しさん :2009/01/05(月) 20:58:57
HRESULT CString::Draw(LPTSTR str, INT iX, INT iY, D3DCOLOR color) { RECT rect = { iX, iY, 0, 0 }; // 文字列のサイズを計算 m_pFont->DrawText(NULL, str, -1, &rect, DT_CALCRECT, NULL); // そのサイズでレンダリング m_pFont->DrawText(NULL, str, -1, &rect, DT_LEFT | DT_BOTTOM, color); return S_OK; } 引数のD3DCOLORをD3DXCOLORにしても正常に実行できました。 D3DCOLORは0xff00ff00とか16進数はよくわからないので 簡単に指定したいのですがD3DXCOLORでもいいのですか? 前スレでD3DCOLORとD3DXCOLORは文字は似てるけど内容は全然違うと言われたので どうしていいか迷っています アドバイスよろしくお願いします
>>8 16進数が分からないのは致命的なので勉強した方がいい。
色指定を16進数でしたくないなら、D3DCOLOR_ARGBマクロや
D3DCOLOR_COLORVALUEマクロを使う方法もある。
D3DCOLOR_ARGBマクロは0〜255の整数で色を指定する。
D3DCOLOR_COLORVALUEマクロは0.0〜1.0の実数で指定する。
分からないなら黙っていてください。うざいだけです。
>>10 分からないなら黙っていてください。うざいだけです。
全スレで違いが問題になったのは シェーダーがカラー情報をD3DCOLOR(2byte)だと認識しているのに 実際の頂点情報がD3DXCOLOR(16byte)だったために どんどんずれて正常に描画されくなっていただけ そのm_pFontがなんなのかがわからんが 正常に描画されるというならDrawTextが D3DCOLORでもD3DXCOLORでもOKなようにオーバーロードしてあるだけだ
D3DCOLORは4バイトだろ
正直すまんかった その通りでございます
子曰く 「どうすればいいのか、どうすればいいのか、と考え悩みぬいた者でなければ 私にもどうしようもない」 最初から他人をアテにしてるようじゃダメってことだな。
DirectMusicを使おうと思い最新のSDKを入れました。 しかし、d3dx9.hなどはインクルード出来たんですが、dmusici.hが見つからないといわれます。 DirectMusicはなくなったのでしょうか?
ない
頂点バッファをロックするとき void *vert= NULL; if(FAILED(pVB->Lock(0, 0, &vert, 0))) { return E_FAIL; } と BYTE *vert = NULL; if(FAILED(pVB->Lock(0, 0, (VOID**)vert, 0))) { return E_FAIL; } 使用用途によって変わると思いますがどっちがいいですか?
BYTE *vert = NULL; if(FAILED(pVB->Lock(0, 0, (VOID**)&vert, 0))) { return E_FAIL; } です
>使用用途によって変わる
そもそも >(VOID**)&vert とか無駄なキャストをしている時点で、DirectX以前に言語の基礎からやり直せ。
24 :
18 :2009/01/06(火) 22:09:26
>19 やはりなくなったんですか… DirectSoundを使うことにします。 ありがとうございます。
DirectMusicの代わりならDirectSoundじゃなくてmidiOutとかだろ
>24 ウインク一発決めてやらぁ
27 :
18 :2009/01/06(火) 22:52:11
>25 こういう関数があるとは知りませんでした。 ただ、Waveを再生しようと考えていたのでDirectSoundを使ってみます。
DrawIndexedPrimitive(D3DPT_LINELIST,〜 で線をたくさん描画しており、 線の色はD3DXCOLORで指定しています。 しかし、D3DXCOLORで色はしっかり反映されるのですが、アルファ値が反映されず、半透明や透明にできません。 すいませんが原因をエスパーしてください。
レンダーステートのアルファ関連が適切に設定されていない。
LPDIRECT3DDEVICE9 p; p->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); p->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); p->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); とかやってみたらどうだろう
31 :
デフォルトの名無しさん :2009/01/07(水) 15:46:52
質問させていただきます。 独自のxファイルを読み込みについて質問させていただきます。 Lightwaveで作った単一のアニメーションを再生させることには成功したのですが、そこから別のアニメーションにつなごうとすると一気に表示がおかしくなります。 具体的な方法は、まずメッシュ情報だけのファイルを読み取り、その後でアニメーション情報だけを全て読み込んでいきます。 そこで、たとえば最初のコンストラクタでキャラクターに立ちポーズのアニメーションをセットして、 立った状態で肩を揺らすようなモーションを再生させることはできるのですが、 そこからパンチを出すようなモーションに切り替えようとすると、キャラクタのルートフレームの合成行列やほかのフレームの行列が著しく変わってきます。 単一のアニメーションでしたらどちらも問題なく再生できるのですが・・・ 同じような経験をされた方はいないでしょうか? よろしくお願いします
モーションブレンドの前提条件として、回転をクォータニオンで持っていること。 行列で線形補完しているのなら問題外。
33 :
デフォルトの名無しさん :2009/01/07(水) 16:10:33
質問お願いします。 XYZ座標,頂点法線ベクトル,UV座標の情報を持つ構造体をxファイルから独自形式に変換して作りたいとおもっています。 xファイルにXYZ座標,UV座標,面法線ベクトルがあるのは分かるのですが頂点法線ベクトルがどうやったら得られるのか分かりません。 構造体はx,y,z,nx,ny,nz,u,vになります。 xファイルから頂点法線ベクトルはどうやったら得られるのでしょうか?
MeshNormalsに入っているだろ。 無ければ元から無いだけ。
そもそもX-Fileを経由なんて回り道をしなくても、自分の使っているモデリングソフトのエクスポータを作った方が手っ取り早いだろ。
>>34 ありがとうございます。
見つかりました。
ただ頂点の数と頂点法線ベクトルの数が合っていませんでした。
別のソフトを使って試行錯誤していこうと思います。
>>35 エクスポータですか。
確かに便利そうです。
ありがとうございます。
調べてみようと思います。
>ただ頂点の数と頂点法線ベクトルの数が合っていませんでした。 ベクトルの方の配列じゃなく、きちんとインデックスの数で比較したか?
>>32 さん
まさに二つのモーションの割合を行列にかけて計算していました・・・
本当にありがとうございました。クォータニオンの勉強をします。
しかし線形ではなぜダメなのでしょう。読んだ本でも同じようにモーションの割合を掛けていたはずなのですが
箱を想像してみろ 適当な軸から中央を起点にして180度回転させて以前の座標との平均をとったら箱の形はどうなる?
>>39 さん
平面が想像されました・・・
確かに180度とかだとモデルの形は維持できませんね。分かりやすいです。
クォータニオンでやってみて無理でしたらまた相談させていただきます。
ありがとうございました。
>>37 すいません。
勘違いしていました。
インデックスの配列合っていました。
お騒がせしました。
アニオタうざい
テレポーテーション〜♪
質問なんですがvisualC++を使っていてなぜかcout endl が定義されていませんと出たのですがどうすればいいのでしょうか
coutもendlもDirectXじゃないだろう。
知らないなら黙っててください
#include <iostream>
49 :
デフォルトの名無しさん :2009/01/08(木) 19:58:16
質問者、知らないのに書き込むなよ ここに書き込んでいいのは知ってる奴だけだ
<usingnamespace std>
52 :
デフォルトの名無しさん :2009/01/08(木) 23:12:39
仕事で普段.netフレームワーク(主にC#)を使ってて 趣味でゲーム作りしてみようと思ったんだけど VC++.netでDirectX開発(DirectX+.netフレームワーク)って可能ですか? C#でManagedDXとかXNAも検討して 結局、不都合が多く C++かなと考えたんだけど .netフレームワークは使いたいと思い、このスレで質問しました。
D3DXRotation○ と D3DXVec3TransformCoordの違いは 軸を中心に回転とその場で回転って感じでいいんですか?
>D3DXRotation○ そもそもそんな関数は存在しない
ごめんなさい D3DXMatrixRotation○です
回転行列を作る関数と、ベクトルをトランスフォームする関数で、 全く違う用途が違う関数なんだが何を言っているんだ?
57 :
デフォルトの名無しさん :2009/01/09(金) 02:42:39
DirectSoundについて質問です。 色々なサイトを見ると最初にプライマリバッファを作り、次にセカンダリバッファを作ると載っているのですが、 MSDNのリファレンスを見ると少なくとも1つのセカンダリバッファが必要であるとしか書いていません。 実際にプライマリバッファを作らず、セカンダリバッファのみを作って音を鳴らしたところしっかり鳴りました。 プライマリバッファを弄らない場合でもプライマリバッファは作る必要があるのでしょうか?
プライマリのフォーマットを変更するために作る。 変更する必要がないなら作る必要もない。
59 :
57 :2009/01/09(金) 10:39:31
>58 なるほど。 分かりやすい説明ありがとうございます。
60 :
デフォルトの名無しさん :2009/01/09(金) 11:43:12
Cについての質問です CSVファイルをカンマ区切りで読み込みたいのですがやり方を教えてくれませんか? 今までVBAしかやっていなくて混乱しています
62 :
デフォルトの名無しさん :2009/01/09(金) 12:46:27
63 :
デフォルトの名無しさん :2009/01/09(金) 23:47:58
質問させていただきます。
サンプルのスキンメッシュと、こちらのサイトを参考にアニメーションの勉強をさせていただいているのですが
ttp://www.shader.jp/xoops/html/masafumi/directx9/3dtips/d3d16.htm こちらのサイトのコードを見て実行してみたところ、F5でHLSLに切り替えようとしましたら
// setup the material of the mesh subset - REMEMBER to use the original pre-skinning attribute id to get the correct material id
m_pd3dDevice->SetTexture( 0, pMeshContainer->ppTextures[pBoneComb[iAttrib].AttribId] );
// Set CurNumBones to select the correct vertex shader for the number of bones
m_pEffect->SetInt( "CurNumBones", pMeshContainer->NumInfl -1);
// Start the effect now all parameters have been updated
UINT numPasses;
hr = m_pEffect->Begin( &numPasses, D3DXFX_DONOTSAVESTATE );
for( UINT iPass = 0; iPass < numPasses; iPass++ )
{
hr = m_pEffect->BeginPass( iPass );
// draw the subset with the current world matrix palette and material state
pMeshContainer->MeshData.pMesh->DrawSubset( iAttrib );
}
このあたりで、どうも挙動がおかしくなりHLSLでの描画ができない状態です。。
何が原因かわかる方はいないでしょうか・・
別に特に問題なく実行できるけど? どうおかしくなるのか なぜ、そこがおかしいと思ったのか書こうぜ あとビデオカードの種類とか 頂点シェーダのバージョンとか定数レジスタの数とか
画面のカラー品質を16ビットに固定したいのですが Direct3Dの機能で変更することはできるんでしょうか?
21世紀に32bppより下を使う意義とは…
ゲームのHPゲージの部分など大体ビルボードで描画されているのが多いですか?
たとえば3D格ゲーとかだと、ゲーム世界を描画するレイヤと、ステータスを表示するレイヤを分けてるから ビルボードとかあんまし関係ないような気もする 逆にゲームキャラクターの脇にゲージを表示するような場合ならビルボードで描いてる気がする。
無きにしも非ずってことですな、 子官庁が泣く前に巣にもどるとしますわ。 お暇します。
スマートポインタとCOM理解できないやつはプログラムやらなくていい。
お前は本当にCOMを理解してんのかよ どうせインタフェース取得して使ってるだけだろ
>>71 お前がCOMがC++のクラス(仮想クラスの延長)
ってことも知らないくせに出しゃばるなよ。
独り言はチラ裏に書いてろカス
COMなんて過去の技術で 知る価値なんてないのに・・
>>74 使いこなせないからって負け犬の遠吠えはするなw
恥を知れ。
>スマートポインタとCOM理解できないやつはプログラムやらなくていい。
何の脈略もなく、流れと関係ないことを突然喚く
>>70 みたいな奴って、
リアルでもコミュニケーションがまるでとれないんだろうね。
馬鹿が一つ覚えてはしゃぎ回る光景が、正に今ここに。
また質スレで雑談してるハゲ共がいるのか
COMないとWindows動かねーしw
>>80 そもそもWindows95発売当時はCOMが存在していないんだが、一つ覚えの知識はその程度。
どうせこの後、真っ赤になりながら恥の上塗りで言い訳を続けるんだろうけどさ。
95なんて化石を持ち出されても・・・
>>82 >81はWin95でゲーム作ってんだろうし別にいいんじゃないの?
COMについて熱く語るスレはここですか
てかCOMって何?w
DirectX使うのに必要なCOMの知識なんてインターフェイスがどうとか その程度あれば十分だと思うけどな
>スマートポインタとCOM理解できないやつはプログラムやらなくていい。 >COMないとWindows動かねーしw >COMないとWindows動かねーしw >COMないとWindows動かねーしw >COMないとWindows動かねーしw
COMにこだわってる阿呆は一人だけだろ。
.NETでおk
某ブログから抜粋 --------------- こんにちわ プログラム担当Uです。 私は主に3Dプログラミングとシステム周りの設計をしています。 使用言語はC++とOpenGLです。あえてOpenGLを選んだ理由は最近の3DプログラミングはDirectXなどの左手座標系から右手座標系に移動しつつあるからです。 (現にOpenGLはプレステ3のメインエンジンとして使用) 最近の私の仕事はグラフィクのUとIが作ったモデルデータを読み込んで動かす仕事をしています。 これからが大変だと思いますが、卒業制作や作品集に入れるつもりなので休日返上?で頑張りたいです。 ---------------- そうなのか・・・?
なにがそうなの?
世界的にプレステより売れてるXBOXはDirectX9なの知ってて書いてるなら大したやつだと思うけど。 そもそも行列の問題でしかねぇんだし、DirectXでも右手座標が普通に使えるじゃねーか。
完全に座標系を誤解しているな。
そもそもOpenGLもDirectXもエンジンじゃなくてAPIだろって話
ビデオカードのアンチエイリアス設定をプログラムから制御したいのですがどうすればいいでしょうか? ビデオカードのアンチエイリアス設定の「アプリ制御」に対応するようにしたいんですが・・・ 検索して色々レンダーステートなど試してみたんですが中々上手く行かないので質問させてください。 具体的には 自分のPCのビデオカード(GeForce4 Ti4200)のアンチエイリアス設定には オフ 2x 2xQ 4x 4xS 制御されるアプリケーション の6種類があるんですが これを「制御されるアプリケーション」に設定して プログラムを実行したら「4xS」のアンチエイリアスが効くようにしたいのです。 directXのバージョンは9.0cを使用しています。 よろしくお願いします。
SDKのサンプルコピペじゃ駄目なのか?
サーフェイスをMSAA対応で作成してちゃんと対応したプログラムを組む必要がある。 アプリでコンパネのヤツを気軽に設定してアンチエイリアスが使えたりはしない。
>>97 D3DPRESENT_PARAMETERSのMultiSampleType
VS2008でのプロジェクトの作成で少し疑問に思ったことが・・・ Visual C++ の win32API でDirectXを使用する 〇 Borland C++ の win32API でDirectXを使用する 〇 ならば Visual C++ の C++/CLI でDirectXを使用する ? これはどうなんでしょうか? ライブラリを組み込んだら普通に使える予感がするんですが・・・
XNAやMDXが何で書かれているとお思いで?
んー独学で、感覚で打ってるのでそういうツールやインターフェイス、専門用語には疎いんです・・・ わかりやすくお願いします
105 :
デフォルトの名無しさん :2009/01/12(月) 23:57:33
DirectXのライブラリはC++でできているので、WinAPIやC++/CLIも元を辿ればC++であることから使える てところでしょうか?とりあえず使えることが分かったのでほっとしました。ありがとうございます。
全然違うけど結果は同じだからいいか・・
DirectX 10 って、Xp で動かないんですか?
そうだよ
109 :
デフォルトの名無しさん :2009/01/14(水) 04:03:34
#include <d3d9.h> #include <d3dx9.h> #pragma comment(lib, "d3d9.lib") #pragma comment(lib, "d3dx9.lib") #pragma comment(lib, "dxguid.lib") ・ ・ ・ って入れてっても'g_pD3DDevice' : 定義されていない識別子ですって出る どうしてだろう libフォルダとincludeフォルダは設定してある
DirectX以前だからスレ違い
g_がつくとこみるとグローバル変数だな。 どこからコピーしてきてんだか知らないけど、全部持ってくれば。
ていうか根本的な部分が理解できてないだろ Cからやり直せ
意味不明な質問かもしれませんが・・・。 DirectMusicの解放処理をするタイミングはDirectMusicクラスのデストラクタで大丈夫ですか? CDXMusic::~CDXMusic() { m_performance->Stop(NULL, NULL, 0, 0); m_performance->CloseDown(); m_loader->Release(); m_performance->Release(); m_segment->Release(); CoUninitialize(); }
終了処理メンバ関数作ってもいいし、好きにすればいいと思うけど何が不安なの?
>> 115 エスありがとうございます もうひとつ質問なのですが 1>_Lib_DXMusic.obj : error LNK2001: 外部シンボル "_CLSID_DirectMusicPerformance" は未解決です。 1>_Lib_DXMusic.obj : error LNK2001: 外部シンボル "_IID_IDirectMusicPerformance8" は未解決です。 1>_Lib_DXMusic.obj : error LNK2001: 外部シンボル "_CLSID_DirectMusicLoader" は未解決です。 1>_Lib_DXMusic.obj : error LNK2001: 外部シンボル "_IID_IDirectMusicLoader8" は未解決です。 1>_Lib_DXMusic.obj : error LNK2001: 外部シンボル "_GUID_StandardMIDIFile" は未解決です。 1>_Lib_DXMusic.obj : error LNK2001: 外部シンボル "_CLSID_DirectMusicSegment" は未解決です。 1>_Lib_DXMusic.obj : error LNK2001: 外部シンボル "_IID_IDirectMusicSegment8" は未解決です。 C:\Documents and Settings******** : fatal error LNK1120: 外部参照 7 が未解決です。 と出るのですが何が原因でしょうか? これはインクルードしてあります #include <dmusici.h>
何を見て勉強してるのか知らないけれど、資料どおりに書くことからはじめた方がいいと思う。
>>166 DirectXSDKインストールしろよw
119 :
116 :2009/01/14(水) 22:24:35
ゲームコーディング2を見ながら勉強しています。 サンプルをビルドしてみたのですが 116 と同じエラーが出ます。 DirectXSDK 2008 Novenber DirectXSDK 2007 August インストールしてあって両方VC++ディレクトリのインクルードファイルとライブラリファイルに追加してあります リンカ→入力のdxguid.libなど本に書いてあるやつはすべて追加されています 誰か解決方法ご教授お願いします
本に書いてあるやつ、なんていわれてもわからん ちゃんとリンクしてあるlibを全部書け
>両方VC++ディレクトリのインクルードファイルとライブラリファイルに追加してあります 海に帰れ
申し訳ございません dxerr9.lib gdiplus.lib d3dxof.lib d3dx9.lib d3dx9d.lib d3d9.lib dxguid.lib winmm.lib Version.lib comctl32.lib です
とりあえず2007と2008のライブラリの優先順位をいれかえてみたら
124 :
116 :2009/01/14(水) 22:50:35
原因がよく分からないのでSDKを再インストールしてみます
>>123 もうアンインストールしちゃいましたw
たぶんそれかもしれません
お昼にビルドできたノートパソコンは優先順位が逆だったと思います
結果が出たら報告します
レスありがとうございます
優先順位以前に混在させるなよ
色々アドバイスありがとうございます 優先順位を変えたら、無事ビルドできました
DirectMusicで音楽を再生するプログラムを勉強しているのですが wavだと要領をかなり取るのでoggで再生しようと思うのですが oggを読み込む→wavに変換→wavを再生 って感じでおkですか?
容量です すいません;
wavはコンテナであって、容量を食うかどうかは中の圧縮形式次第 DirectMusic云々以前に基本的なところから出直せ
そのまま再生する関数あるぞ? 教えないけどな
不動高校のまとめ ●殺人者 :10名 ●犯罪者 :2名 ●死亡者 :19名 ●行方不明者 :1名
134 :
128 :2009/01/15(木) 07:45:17
>> 130 勉強不足でした、すいません 128のはogg再生の手順としては一般的ですか?
ビルボード用のテクスチャも2のn乗正方形にしないとまずいですか?
なにをもってまずいとするのか、まずは定義を明確にしろ。
135じゃないが、テクスチャのサイズは2のn乗にしないと ビデオカードによっては正常に動作しないらしいが レンダリングターゲットのサーフェイスとして生成したテクスチャも 2のn乗のサイズにしなきゃいけないの? それかなり無駄な領域があるし絶対おかしいと思うんだけど そこんとこどうなの?
普通のテクスチャでも無駄な領域はあるがこっちは絶対おかしいとは思わないんだな
で、実際のところどうなんですか?
ビデオカード次第 それ以上でもそれ以下でもない
そっちの方がビデオカード的に都合がいいんだからしょうがない
都合が良いかどうかもビデオカード次第
2のn乗じゃないと不具合が出るビデオカードってそんなに多いの? ていうか具体的にはどんな不具合が発生するの?
メーカーにお聞きになればいいと思いますよ
不具合が出るビデオカードは現在ほとんどないと思われる しかし、2のn乗じゃないとパフォーマスンが落ちる場合があると 公式でアナウンスされている以上従っといた方が無難 ターゲットとなり得る全てのビデオカードで パフォーマンステストして問題ないと判断したなら別だが・・・ 開発マシンでは問題ないが別のビデオカードだと処理落ちなんて 原因のよくわからない不具合で悩みたくないしな
見かけ上は2の累乗でないテクスチャでも VRAM上では2の累乗になるように 余分な(無駄な)領域が確保されている場合もあるそうだ あくまでビデオカード次第だが
なるほどー ありがとうございます
ここで2の累乗云々騒いでいる奴って、ビデオカードの能力の確認方法や、 どのCAPSが該当する制約を示しているかすら調べてないんだろうな。
なぜそうなるw
むかーし、あったね 256 までの 2の累乗の正方形でないと受け付けないビデオカード RivaTNT とかがまだ最新だった時代。
CAPS上は制約がないけど内部では何やってるか分からんって話
Direct3D10+DXUTの組み合わせで、表示色がおかしくなるんだがだれか同様の現象を体験したことない? 例えばTutorial12のエフェクトファイルの110行目、ピクセルシェーダの出力部分に cTotal.rgb = float3(.5, .5, .5) と追加してから実行すると、なぜか#bcbcbcの色で表示される。 グラボはGeForce9600MGT。 Tutorial3みたいにDXUTを使っていないのでは正常に表示されるから、DXUTのせいだと思うんだけど。
156 :
31 :2009/01/15(木) 23:18:53
31です。以前質問させていただいたきり他の事で忙しくプログラミングできませんでした。 あのあと、結局いろいろ試してみましたが結局アニメーションのつなぎはうまくいきませんでした・・・ そもそも、ほとんど同じモーションなので座標変換や回転もないようなモーションですら変更できないという。 何がいけないのでしょう。。xファイル出力するときに何か他の設定が必要なのだろうか・・
ソースも出さずにその「独自」仕様とやらをエスパーしろとな?
>>何がいけないのでしょう こんなところで聞いてるのがいけない。
main.obj : error LNK2019: 未解決の外部シンボル "long __cdecl LoadTextureFromImageFiles(char const *,struct IDirect3DTexture9 * *,char const *,struct IDirect3DDevice9 *)" (? LoadTextureFromImageFiles@@YAJPBDPAPAUIDirect3DTexture9@@0PAUIDirect3DDevice9@@@Z) が関数 "long __cdecl SetupFVFTexture(struct IDirect3DDevice9 *)" (?SetupFVFTexture@@YAJPAUIDirect3DDevice9@@@Z) で参照されました。 これがどうしても解決できません。ライブラリとの整合性が取れてないエラーとのことで、インクルード/ライブラリのフォルダ設定・並び順、プロジェクトとの.libの関連付けもいじってみましたが上手くいきません。 それ以外に何が問題として考えられますか?
>>159 LoadTextureFromImageFiles に一致する情報は見つかりませんでした。
Googleに聞いてもわからない
162 :
159 :2009/01/16(金) 09:19:13
>>161 の言う通り、プロトタイプ宣言した物を実装していませんでした。サンプルからコピペのミスでした。
陰線消去したくてZバッファ法というのをやってみたのですがうまくいきません エスパーお願いします
>>163 それはグラボのせい
GeForce GTX 285を使うときっと治る
試しにZバッファ法というのをやってみたらうまくいきました
D3D の質問です。 フルスクリーンでない、ウィンドウのアプリを作っているのですが、 ウィンドウのサイズが変更されたときに、画像が縦に伸びたり 横に伸びたりするので困っています。 正方形が正方形のまま、拡大して欲しいのですが、どうすればいいのでしょうか C# とかじゃなくて、Windows API で作っています。 よろしくおねがいします。
矩形を指定してdevice.Presentする。
Reset
>>168 さんの reset でできましたー!
>>167 さんのは、ごめん、うまくいきませんでした。
>>169 です。
テクスチャを一度 Release して、もういちど読み直さないと行けないのがすこし面倒でした。
こんにちわ、DirectSoundでwavファイルを再生しようと思い
ゲームコーディング2という本を見ながらコードを書いていたのですが
同じようにやっても再生されません
コードに間違いがないか5回くらい見直しました
全てのコードを書くと長くなるので大まかな流れだけ書きます
DirectSoundオブジェクトを生成 Wavファイルを読み込む セカンダリバッファ作成
バッファに音データを書き込む 再生という手順です
一応コードをUPするので違うところがあれば指摘してもらえると幸いです
http://www7.uploader.jp/dl/inoguma/inoguma_uljp00001.zip.html 宜しくお願いします
>>171 Play()の戻り値見てないだろ?
DSERR_PRIOLEVELNEEDED が返ってきてるよ。
SetCooperativeLevel()呼べばいいと思うよ。
DirectSoundを初期化する時に // 協調レベルの設定 if(FAILED(m_pSound->SetCooperativeLevel(hWnd, DSSCL_EXCLUSIVE))) { return E_FAIL; } としてありますが上手くいきません
やってみたのかよ。 Play直前に呼んだら鳴ったぞ
実際やりもしない、戻り値を確認もしないでただ質問するだけってどうなんだろうね。
ところで実際の本ではどうなってるんだ? ウィンドウができる前にSetCooperativeLevel呼んだって意味がないだろうに。
ついでにデバッグしてみたが、、、 // gamemainの初期化 _gamemain = new CGameMain(); hr = _gamemain->FInit(m_device); _gamemain->GetHWND(m_hwnd); これを _gamemain->GetHWND(m_hwnd); hr = _gamemain->FInit(m_device); のように入れ替えれば動作した。元はどうなってんの?
ごめんなさい 戻り値の確認方法分からなくてクラスビューとかブレークポイントとかいろいろ試してました
Zバッファと深度バッファというのはまったく同じと考えていいんですか それとも、文書を読むときは微妙な差異に気をつけるべきですか
DirectInputってライブラリに組み込んだほうがいいですか?
何のライブラリよ
DirectInput を使わないで、 やりたいことが全て出来てる or 出来るのだったら 組み込まなくていいんじゃね?
リティアクス・ネマインズライブラリーです 物理演算なども組み込まれています DirectX9対応です
>>185 自作の物理演算ライブラリなので探しても出ないです
>>181 ポールペンって絵を描くための道具に含んだほうがいいですか?
俺の環境では、なくても動くから必要ないと思うな。 そのライブラリの中に使いたいものがあるなら別だけど
DirectInputを使うかどうかは別として 入力インターフェースの提供は最優先だと思うが
>>181 必要かどうかは仕様を知っている自分が判断しろ。
指示待ち人間で、他人の指示がないと動けないのなら、
他人にわかるようにきちんと仕様を説明しろ。
中途半端な情報で説明した気になるな。
質問する場所を間違えてね? 内容を加味すると、もっとも適切な相手は占い師だろ。
公開して他人に使わせようって言うんだろ? 変わった用途じゃない限りInputは付けておくべきだろ
演算ライブラリならDirectInputどころか、 そもそもDirectXスレとは何の関係もない。
誰か
>>154 再現しない?
再現しなかったって報告ならそれはそれでありがたいんだけど……
引数を渡す方法が分かりません inline void SetAmbient(D3DCOLORVALUE &col) { m_material.Ambient = col; }; CDXMaterial material; material.SetAmbient(); 1つ例を見せていただけませんか・・・
MSNDでD3DCOLORVALUEについて調べたのですが解決方法が分からなくて・・・
まずはC言語の勉強が先だ
>>196 D3DCOLORVALUE col;
col.r = 1.0f;
col.g = 0.0f;
col.b = 0.0f;
col.a = 1.0f;
material.SetAmbient(col);
こんな感じ?
なんか別に変なところ無い気がするけど・・・
参照渡しが解からんと言う意味ならC++の領分だが そもそも質問の意図が良くわからんので 「日本語でおk」としかいいようがない
もしかして入れても反映しないから悩んでるんじゃね? 光源計算してないときはLightEnableをオフに設定しないと表示されなくてだな ってそんなこと聞いてない?
例を見せてと言ってるんだし、
>>198 でよさげ・・・
失敗してるんなら、自分のとこでどうやったらどうなったくらい書けば早いのにな。
test
204 :
198 :2009/01/19(月) 17:08:22
D3DCOLORVALUE col = D3DCOLOR_COLORVALUE(, , ,); でcolを引数で渡そうとしてました・・・
やっぱり判らない。 ていうかお前が判ってないから無理。 さっさとCの初心者スレでソース*全部*晒して質問してこい。
>> すいません勉強不足でした ちなみに187さんの例で解決しました
初期化したいってことか? D3DCOLORVALUE colorValue = {0,0,0,0}; ってC/C++の話だな。参照(&が付いてる)の話だったらこれもC++
208 :
デフォルトの名無しさん :2009/01/19(月) 22:29:43
D3DXMATRIXA16 をnewした後にdeleteするとメモリーのバグを引き起こすんだが、解決策はないものか・・
D3DXMATRIXを使うとか。
そもそもバグがあるとは思えないが、 A16の実装自体たいしたことないし 自前の作れば?
>>208 ヘッダファイルを見れば分かるけど、
A16系は16byteアライメントのためにnewをオーバーロードしてる。
ステップ実行でちゃんとこのnew/deleteが呼ばれてるか確かめてみれば?
#define new DEBUG_NEW
とかやってて死亡とかありがち。
トゥルータイプ形式のアンチエイリアスがかかったフォントを表示するにはどのようにすればいいのでしょうか。 GetGlyphOutlineのAPI使ってもグレースケールのビットマップデータしか得られませんでした。
それって結局出力も一色になりませんか? それとも半透明化するときに、うまい方法があるのでしょうか・・・
グレースケールのフォントをα値にして半透明で描画すれば、それでちゃんと アンチエイリアスかかるが、何を求めているんだ?
>>214 言ってる意味が分からん
A8R8G8B8とかA4R4G4B4とかαチャンネル付きテクスチャを作る
RGBは表示したいフォントの色にして
Aの値にグレースケールの値を入れる
αの設定(テクスチャのα値*ポリゴンのα値)
デバイス->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
デバイス->SetTextureStageState(0, D3DTSS_ALPHAOP , D3DTOP_MODULATE );
デバイス->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );
XPだと、ディスプレイのRGB出力の並びに応じて、ピクセル未満の補間をするために 文字のRGBを設定していると思うのですが、その情報をどのように手にすればいいのかと思いまして・・・
ClearTypeをしたいなら、GetGlyphOutlineにはそういう機能はない。 GetGlyphOutlineは単純に大きめに描画して縮小したデータを返すだけ。
それ以前にアルファチャンネルを理解してない悪寒
端的にいうと、Color=AARRGGBB ↑ここでしょ 普通にフォントを表示することはすでにできています。
じゃあ、そこの色(値)がどうRGBに影響するのか言ってみろ
描画先 Ad Rd Gd Bd 描画元 As Rs Gs Bsとすれば As/255=a 1-a=bとおいて 結合後 (Ad) (Rs*a+Rd*b) (Gs*a+Gd*b) (Bs*a+Gd*b)でしょ。 単にかけ合わせの比率じゃないんですか?
ClearTypeは、CLEARTYPE_QUALITYかCLEARTYPE_COMPAT_QUALITYを 指定してフォント作って、GDIのテキスト描画機能を使うくらいしかAPIでの サポートは無いと思う。
文字の縁の外にむかって透明度を上げていけば 背景と馴染んでアンチエイリアスがかかるよね?って話 どういう段階で透明度を変えるかの情報としてグレースケールの情報を使う
デバイスをリセットする時に、テクスチャとかも一度破棄しないといけない場合があるけど、 その場合って元の画像ファイルを再び最初から読み込むのがいいの? それとも、アプリケーションの一時ファイルみたいなのに画像のビット列だけ保存してしまうとか、どうしてるの?
状況に合わせて自分の好きなようにやれよ。 なんで何でもかんでもお伺いを立てて、逐次指示されないと行動出来ないんだよ?
好きにすればいいんじゃない? その辺の判断がつかないならおとなしくD3DPOOL_MANAGED使っとけ DirectX10からデバイスロストなくなるみたいだし いずれは気にしなくてよくなる領分だ
>>DirectInputのDIJOYSTATE2のlYって下が+で上が-ですか?
LightWaveでボーン仕込んでXファイルのエクスポータで出力した。 そのファイルを読み込んでウエイトの値を調べたらどの頂点も0だったんだけど これって正常に出力されてないってこと?
エクスポータがどこまで対応してるのか調べた方がいいんじゃないかな。 あとたぶんここじゃなくてLightWaveのスレで聞くべきじゃないかなそれは。
// DirectInputオブジェクトを作成 if(FAILED(DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (VOID**)&m_pDInput, NULL))) { return E_FAIL; } // DirectInputDeviceオブジェクトを作成 if(FAILED(m_pDInput->CreateDevice(GUID_SysMouse, &m_pKeyDevice, NULL))) { return E_FAIL; } // デバイスをマウスに設定 if(FAILED(m_pKeyDevice->SetDataFormat(&c_dfDIMouse2))) { return E_FAIL; } // 協調レベルの設定 if(FAILED(m_pKeyDevice->SetCooperativeLevel(hWnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND))) { return E_FAIL; } // デバイスを取得する m_pKeyDevice->Acquire(); この設定で初期化して実行したのですがこのアプリが起動しているときに他のウィンドウをクリック すると強制終了してしまいます 原因エスパーしてみてもらえませんか お願いします
デバッグしなさい
解決しました return E_FAILで落ちてました ありがとうございます
234 :
デフォルトの名無しさん :2009/01/22(木) 21:23:31
すくなくとも公式サイトのはちゃんと出力される
229です もしかして、D3DXLoadMeshFromXで読み込んだメッシュの頂点情報ってウエイトは含まれてないんですか?
ファイル自体のウエイトはどうなってるんだ?
>>237 ファイル見たら、ちゃんと設定されてました
ってことは読み込みがだめなのか・・・
>>238 スキンメッシュは専用の関数が合ったはずだが
\(^o^)/ I'm a dreamer! ひそむパワー! ヘ(^o^)ヘ |∧ 私の世界 / / (^o^)/ /( ) 夢と恋と不安で出来てる (^o^) 三 / / > \ (\\ 三 (/o^) < \ 三 でも想像もしないもの ( / / く 隠れてるはず!
DirectInputでマウスやキーボード使うなよ てかXInputの時代
Direct3Dで複数のウィンドウに同一のテクスチャを表示したいのですが、 この場合、ウィンドウごとにデバイスを作成して、 デバイスごとにわざわざ同じテクスチャを何度も読み込むしかないのでしょうか。 ・一つのテクスチャを複数のデバイスで共用する あるいは ・一つのデバイスで複数のウィンドウに描画する というようなことは出来ないのでしょうか。どなたがご教示下さい。
DirectX3D始めようと思うんですが、なにからすればいいですか? どのぐらいの期間である程度使えるようになってくるんですか?
なにが分かっていないのかも分かってない人間に ものを教えることは非常に難しい とりあえず出来る範囲で自分でやって 具体的な質問が出来たときにもう一度おいで
>>243 sample動かしてソースを眺めてあきらめろ
もう一度おいでとか言われるとつらい あきらめろとか言われると燃える しかしthx
>>242 よく知らんけどデバイスの画素フォーマットが同じなら使い回せんじゃねーの
1. 開発環境をダウンロードする。 2. 現在の技量と熱意次第だね。とりあえず、そんなことも判らない君は技量は初学者レベルですぐ飽きると思うので 100年はみておこう。
D3DPRESENT_PARAMETERS で hDeviceWindow をとっかえひっかえして reset すればいけるんじゃねーの? あ、そうすると、テクスチャいちいち読み直す必要があるのか。だめじゃん。
>>242 つCreateAdditionalSwapChain
251 :
249 :2009/01/23(金) 14:30:40
なんだ、Present の第三引数を描画したいウィンドウにすれば良さそうじゃん。
IDirectXFileから、ID3DXFileに変わって、 保存方法の流れがヘルプにかかれなくなったこともあって、 なんかアホみたいに使いにくくなっている気がするんですけど、 IDirectXFileData::GetData的なものは諦めるとしても、 IDirectXFileSaveObject::SaveTemplatesの様な動作をさせるコトてできないんですか?
質問です。 何か手順の間違いの指摘や、避ける方法はないでしょうか? 下記のように、すでにAnimationSetに登録されているAnimationを削除した後、新たにアニメーションを追加するとメモリーリークするようです。 DirectXの初期化と、下記コードのみの最小構成でも起こりました。 下記ですと D3DX: MEMORY LEAKS DETECTED: 4 allocations unfreed (54 bytes) 54byteということで、"1\0"で2バイト、RSTそれぞれを合計すると20+16+16=52ですから、丁度アニメーションがそのままリークした換算となります。 これは数を増やしてみたり、渡すRSTの量を変えたりしても同様の結果がでました。 削除だけ。追加だけという場合はリークせず、削除&追加をした時のみリークするようです。 察するに、削除といっても内部ではカウンターを減らしているだけで、追加の際「delete せずに上書きしてしまう」ことによるライブラリ側のケアレスミスな気がします。 Microsoft DirectX SDK (March 2008) Microsoft DirectX SDK (November 2008) 両方で再現しました。 以下コードです。 CComPtr<ID3DXKeyframedAnimationSet> test; D3DXCreateKeyframedAnimationSet("Test", 4800, D3DXPLAY_LOOP, 2, 0, NULL, &test); D3DXKEY_QUATERNION r; // 中身を入れていませんが、中身をきちんとした値にしても結果は同じでした D3DXKEY_VECTOR3 s; D3DXKEY_VECTOR3 t; HRESULT hr; hr = test->RegisterAnimationSRTKeys("1",1, 1, 1, &s, &r, &t, NULL); hr = test->RegisterAnimationSRTKeys("2",1, 1, 1, &s, &r, &t, NULL); hr = test->UnregisterAnimation(0); hr = test->RegisterAnimationSRTKeys("3",1, 1, 1, &s, &r, &t, NULL);
追加情報です。 どうやらリークするのは、上書きした側の "3" のアニメーションのようです。 "3AAAA"など、最後のアニメーションの名前を長くしたところ、それにあわせてリーク量が増えました。 つまり「新規登録したアニメーションはちゃんとdeleteするが、上書き登録したアニメーションはdeleteしない」という動きのようです。
容易にライブラリのバグだと疑うな。
256 :
242 :2009/01/23(金) 18:49:22
勝手に Release されてたら気持ち悪いだろうが。
ID3DXFileSaveObject使って、STRINGをXファイルに保存するとき、 何故か2バイト文字が変に変換されて保存されてしまいます。 たとえば、 "田中太郎 -abcd- 鈴木次郎" なら、 "\223\田\222\中\221\太\230\郎\201\ -abcd- \227\鈴\226\木\216\次\230\郎" の様な具合です。 \223は、C言語のエスケープシーケンスで8進定数のことらしいと言うことまでは分かったのですが (田は\0x93,\0x63(\223,\143)なので) '\田'とか出てきたり動作がかなり変です。 始末の悪いことにID3DXFileEnumObjectで読み込んでも元に戻りません。 何か問題の所があるのでしょうか。 char strDxTemplate[] ="xof 0303txt 0032\ntemplate ID { <60F23340-4686-472f-AA91-4D1212D26476> STRING strName; DWORD dwID;} "; std::vector<char> Buff; DWORD dwBuff = 0xff00; const char strName[] = "田中太郎 -abcd- 鈴木次郎"; LPCSTR strNameBuff = strName; LPD3DXFILE pDxf; LPD3DXFILESAVEOBJECT pDxfSaveObj; LPD3DXFILESAVEDATA pDxfIDData; D3DXFileCreate(&pDxf); pDxf->RegisterTemplates(strDxTemplate, strlen(strDxTemplate)); pDxf->CreateSaveObject("test.x", D3DXF_FILELOAD_FROMFILE, tc - _T('0'), &pDxfSaveObj); Buff.resize(Buff.size() + sizeof(strName)); memcpy(&Buff[Buff.size() - sizeof(strName)], strName, sizeof(strName)); Buff.resize(Buff.size() + sizeof(dwBuff)); memcpy(&Buff[Buff.size() - sizeof(dwBuff)], &dwBuff, sizeof(dwBuff)); pDxfSaveObj->AddDataObject(IDID, NULL, NULL, Buff.size(), &Buff[0], &pDxfIDData); pDxfSaveObj->Save(); pDxfIDData->Release(); pDxfSaveObj->Release(); pDxf->Release(); SDKのバージョンは たぶんMarch 2008 そして、std::vectorの使い方が無茶苦茶なのは気にしないでください。
もう1ヶ月やってるのにウィンドウ作ってテクスチャを表示することすらできない・・・ 本とか見ても著者が作ったクラスとか構造体のことについて触れてなくて解析するのが大変だ 手取り足取り教えてるサイトとかありますか?
本とか読むより、DirectX SDK のチュートリアルやった方がいいぜ?
>>258 const char strName[] = "田中太郎 -abcd- 鈴木次郎";
この時点でおかしくね?
今時Ansiでビルドなんて天然記念物級だよ
でも、XFileのリファレンスをみると STRINGテンプレートはASCIIのBYTE列ってあるぜ やっぱ、これが原因じゃね?
ウィンドウが作れないならDirectX以前の問題。 DirectXの本なんて読んでもWindows初心者には理解できないのは当然だ。
GAME CODINGって本のサンプルは書き写せばそのまま動くから Windowsプログラミングに不安の残る貴方にもおすすめですよ
PIX って便利だね。 初めて知った。
まるぺけの最小コードを動かしてみて、猫でもも読んで、MSDNで確かめて、 ウィンドウが作れたのが1年半前 今では立派なサンデーコピペプログラマですw まー、APIスレの範疇なのかな
268 :
デフォルトの名無しさん :2009/01/24(土) 03:41:14
ビルボードの縮小に、Lanczos フィルタとか使えない?
mipmap
270 :
258 :2009/01/24(土) 04:11:48
>>261 ,262
Unicode非サポートなんですわ。
>>263 つまり、2バイト文字非対応ってこと?
仕方がないので、古いIDirectXFile系のインターフェース使ったら、
2バイト文字でも書き込めたけど、
今度は配列に配列いれたら(2次元配列という意味ではない)、
ちゃんと書き込めるのに、
読んだとき外側の配列が全て始めのデータで同じになってしまう…
なんでこんなに挙動変なんだ…
動作確認しないなら、カスタムテンプレートなんか作るなよ…
拡張するなら自前のフォーマットを作れって話ですわ。
272 :
デフォルトの名無しさん :2009/01/24(土) 19:35:54
DirectXを最初から勉強するにあたってこれだけは読んどけって本ない?
SDKのヘルプ
>>273 高額社の本でもよんどけ。
全く使えないというほどひどくもないから。
シェーダーにHLSLを使ってないのが時代遅れだが
インフィニティの本はそれなりの質だと思う。
サンクス! 早速注文してくるわ
SPRITEでの移動は画面のサイズが単位ですか? 800*600や1024*768など
DirectXにSPRITEなど存在しない
Spriteです すいません
DirectXにSpriteなど存在しない
正直初心者って最初はソース見れるライブラリで何か作ってみて、 そのあとライブラリの中を調べながら学習していくのがベストだと思う。
DirectSoundCaptureBuffer8でバッファのロック後データの移動をしたいんですが これロックしたらデータ書き込めなくないですか? 2つバッファ作って一方に書き込み、一方をデータ移行、で繰り返すならわかるんですが、 もしかして、次の書き込みが来る前にアンロックできないと音飛びする仕組みなんですか?
>>282 ストリーム再生なら次の再生位置に来る前の書き込み終わってなきゃ
どう考えても音飛びするだろ。
そもそもストリームのバッファ内でのデータの移動なんて意味不明なことをなんでするんじゃ。
ループスタートでキャプチャをしてバッファの一周したら動的メモリに書き込みを繰り返すと ヘルプに書いてあるんですが、ロックした あーすいません。lockのパラメータとしてサイズの指定がありました。バッファ全体をロックするのかと思いました すいませんでした!
「タスクシステム」でググって出てきた本全部買っとけ
IUnknown派生のAddRef, Release両関数にはアトミック性はありませんか? 代入などコピー時に参照数を加増したいのですが、自前で管理したほうがいいのかな。
マルチスレッド下ではInterlock系APIによって保護されている らしい てか、そこを疑ったらCOMを使ったプログラムは 全てスレッドセーフではないことになってしまう
テクスチャをWrapで繰り返し表示させると負荷が高いって聞いたんですが、これって本当ですか?
何と比較しての話なのかも明示せず、本当なのかもへったくれもないだろ。 どれだけ能無しなんだよ?
まぁそういう現象の起きるハードウェアは実際に結構あるので Wrapに頼る設計はWindowsではやらん方がいいね 一応言っとくが、↓でマップチップ使う使わないのケンカは禁止な
↑てめーがな
PIX for Windowsを使ってフレームの情報をキャプチャしようとしているのですが、 自分で書いたプログラムを起動すると、"PIX Experiment File Version Mismatch" というエラーのようなものが出て、キャプチャが出来ません。 このエラーは何が原因なのでしょうか? DirectX SDKのバージョンは August 2007 です。 DirectXのサンプルをコンパイルしたものは上記のエラーは出ずに正常に動作して、キャプチャも出来ます。
>>293 ファイルパスに全角文字があるとダメな場合があるわよ。
>>294 実行ファイルをドライブのルートに置いて試したところ、正常に動作しました
ありがとうございました
HLSLを使って描画したいんですが、IDirect3DDevice9::CreateVertexShader メソッドの引数の const DWORD *pFunction, [in] 頂点シェーダ機能トークン配列へのポインタ。このパラメータでは、各頂点に適用する処理を定義する。 の意味がよくわからないんですけど、いったい結局何を渡せばいいんでしょう?
>>289 めちゃくちゃ重い
uvの値を5,6・・・10,11,
って上げるほど恐ろしく重くなる
っていうかいくつかのPCでやってみろよ
少なくとも自分の環境でやって報告しろ
すぐにわかる
>>290 知らないなら黙ってろよ
ためしたことあるやつならわかる
>>288 明らかに古いごみドライバ使ってるとか
いんてるwのオンボードとかの話なら論外だぞ。
自前でソフトレンダラー組んだことあれば分かるが
WRAPのアルゴリズムは&演算1個だからどう考えても重くなりようがない。
ソースのピクセル量が増えて負荷が増えるだけなんだから、 それで遅くなるビデオカードならwrapしようが、 パターンを敷き詰めてた大きなテクスチャを使おうが、 同じように遅くなるだけ。
>>300 テクスチャキャッシュのキャッシュミスか・・・。
つーかそれならよほどデカイテクスチャ使ってるか
貧相なグラボつかってるかのどっちかだな。
描画サイズが変わらないなら 何回wrapしても ソースのピクセル量は変わらないし サンプリング回数も変わらないし フィルレートも変わらないと思うんだけど もしかして何か別の話してる?
wrapするかしないかの話をしているんだろ。 wrapせず描画色が決定して範囲外を単一カラーで塗りつぶす処理と、 何度もパターンを敷き詰める処理、当然前者の方が軽くなるというだけの話。
塗りつぶしてる時点でコストは一緒でそ
全然違うぞ。 どれだけ頭が悪いんだ?
とりあえずWrapの定義をはっきりさせようぜ 1、テクスチャ・アドレッシング・モード (D3DSAMP_ADDRESSxのD3DTADDRESS_WRAP) 2、テクスチャ・ラッピング・モード (D3DRS_WRAPxのD3DWRAP_x) 3、それ以外の何か
308 :
306 :2009/01/27(火) 12:47:18
なんかWrapを スタンプみたいに敷き詰めてると勘違いしてるお馬鹿さんが混じってない? 単なるテクスチャ座標の扱いの違いだろ
↑ 一番馬鹿
UVが0-1の範囲を超えていたらスタンプのようになるし、 Wrapが設定されていなければ境界色なりで塗りつぶされる。
違うだろう 結果的にスタンプになるだけで やってることは たとえば(u,v)=(2.5,3.8)を(u,v)=(0.5,0.8) としてサンプリングしてるだけだ
Windows via C/C++みたいなコンセプトがわかる書籍ってありますか? ここにいる人は詳しそうなのでどういったもので勉強しているのか教えてください。
DirectXのコンセプト?
>>312 繰り返しにならなければ範囲外の色が決定できるんだから、
そのぶんの読み出しコストが無くなるだろ。
もう頭が悪いのは仕方がないから、せめて自分で塗りつぶし処理を書いてみろよ。
話噛み合ってねーーー!!
第三者だが噛み合ってなさ過ぎワロタ
だれか助けてやれよw
たとえばスクリーン上の100x100の領域に描画するとしましょう この描画はどこで行っているかというとピクセルシェーダです 自分で塗りつぶし処理を書く必要はありませんね 以下が最小のテクスチャ付きピクセルシェーダです 固定機能パイプラインであっても見えていないだけで似たような処理をしています float4 PixScene( float4 Diffuse : COLOR0,float2 Tex0 : TEXCOORD0 ) : COLOR0 { return tex2D( g_Texture, Tex0 ) * Diffuse; } これは、アドレッシングモードが違ってもまったく同じものが ピクセルの数だけ、つまり100x100=10000回呼び出されます たとえ広範囲に同じ色が固まっていっても関係ありません、どのモードでも1フレームあたり10000回です ここでピクセルシェーダーの中をみてみましょう tex2Dとはg_Texture(テクスチャです。ここでは256x256のテクスチャを既にセットしてあるとします) のTex0(uv座標、頂点シェーダで計算済み)の色をサンプリングしてくれる関数と考えてください 例えば、Tex0.x=0.25、Tex0.y=0.5だったときはフィルタリングの状況にもよりますが テクスチャの(64, 128)ドットの位置の色を返します この色とDiffuse(ポリゴンの色、頂点シェーダで計算済み)を合成して最終的に塗りつぶす色を決定しています。 アドレッシングモードの違いはTex0の値が0.0〜1.0を超えたときのtex2Dの挙動を決定します Tex0.x=1.25、Tex0.y=1.5だったとしましょう CLAMPでは0.0以下であれば0.0、1.0以上であれば1.0として扱います つまりTex0.x=1.0 Tex0.y=1.0と同じ色、テクスチャの(256, 256)ドットの位置の色を返します WRAPでははみ出た分は巻き戻って計算します つまりTex0.x=0.25、Tex0.y=0.5と同じ色、テクスチャの(64, 128)ドットの位置の色を返します 当然では在りますが、PIXで処理時間を計測しても両者に差異は見当たりません
そういえば nVidia系のボードだと 同じ処理を固定機能で書いた場合とシェーダーで書いた場合で 結構処理速度に違いがでるんだけど ATI系だとほとんど差がでないんだけどこれって何でだろう?
>>319 恥の上塗りをしてるだけだからやめとけって……
>>320 どっちの方向に違いが出るのよ?
>>306 ,308
これだ
GeForce8300Gsでも激重になる現象確認
>>306 ,308の対応をしたら直った
というわけでmipmapに気をつけないと糞重くなります
今まで気をつけていなかった方が逆に不思議なんだが。
>>323 そこまでいうほどじゃねぇと思うな
俺なんか全く知らなかったしw
なんでミップマップ使うと軽くなるか分かってないんだろうな・・・ float4 PixScene( float4 Diffuse : COLOR0,float2 Tex0 : TEXCOORD0 ) : COLOR0 { return tex2D( g_Texture, Tex0 ) * Diffuse; } このソースで速度が上下するのはtex2D()の部分。 テクスチャが大きすぎてキャッシュに乗らない場合は1サンプルごとに メモリからの読み込みで帯域を食ってしまうが、キャッシュに乗るくらい 小さければキャッシュからの読み出しができるので大変高速に読み出せる。 ミップマップを使うと過剰なサンプリングを回避できる。 命令数と描画ピクセル数だけでは速度は決まらない。 テクスチャサイズが256x256で、-2.5をサンプリングしたら -640&(256-1)の計算でサンプルピクセルが出る。 この計算がどの程度重いかは考えてくれ。
でかいテクスチャを使うと重くなる理由がキャッシュだけしか思いつかない馬鹿が、 知ったかを晒す悲しいスレ。
素直に感心した。なるほどな
なんで、ATI系はおそくならないの? 多少大きいテクスチャを参照したぐらいで 露骨に性能減するって、しょぼい木がするけど そんなもんなの?
>>329 前、Radeon9600proもってたけど
遅くなった気がするけどな
ドライバーのバージョンによっても変わるし、 実際のゲームだと描画するたびにテクスチャ切り替えとか 複数のテクスチャを1度の参照したりとかで重くなったりするから、 正確に何が重くなってるか測らないとあかん。
333 :
デフォルトの名無しさん :2009/01/28(水) 13:12:45
同次座標(D3DFVF_XYZRHW)での表示はビルボードと同じ効果が得られますか?
はい
335 :
デフォルトの名無しさん :2009/01/28(水) 13:29:32
336 :
デフォルトの名無しさん :2009/01/28(水) 16:36:54
まぁそういう現象の起きるハードウェアは実際に結構あるので Wrapに頼る設計はWindowsではやらん方がいいね
XFileでアニメーションを実装するのとObjファイルを書きだしてモーションパスでアニメーションを実装するのはどちらがいいですか? XFileは簡単だけど処理が重いと聞きました この2つならどちらがいいかアドバイスお願いします
ファイル形式が違うだけで処理の重さは処理を作るやつ次第だと思うが・・・
Xファイルは処理が重いって言うより、単純にアニメーション再生させるなら簡単だけど それ以上のことをやろうとすると難しいっていう感じだな
>> 339 なるほど 例えばOBBで衝突判定をしたりとかですか?
>>337 objファイルでアニメーションしたほうが何かといいよ
342 :
デフォルトの名無しさん :2009/01/29(木) 15:54:56
半透明のポリゴンを持つメッシュを表示したいんですが 普通に描画すると、半透明ポリゴンを先に描画してしまった時に後ろのポリゴンが表示されない場合があると思うんですが どうすればいいでしょうか?
Zバッファ法の限界なのでどうにもならない 半透明ポリゴンは最後に書き込む何らかの仕組みが必要
ここんとこずっと朝から晩まで本見たりネット見たりしているのにいまだに画面に何か出すことすら出来ない
Javaでもやれば?手っ取り早いし、それなりに実用的だぞ
DirectMusic8で音鳴らしてるんだが エラーでないのに音が鳴らないときとかあって困る DirectMusicLoaderは1つしか使うなっていうから 1つしか使わないようにコードかえたが やっぱり音が鳴らないときがある
>>348 MIDI?WAV?そもそもキミのPCは正常に音は再生できてるのかい?
>>349 みんなできててすげーな
これでも高校のとき成績は理系でトップクラスだったんだぞ
そもそも発想がイケてない 画面に何か出てるサンプルからみろよ っていうかそこまでアフォならちょっとしたゲームを作れる入門書から買ったほうが速いだろ? VCとかDirectXとかもうダウンロードしてきたのか?
VC++もSDKももうある サンプルを改変して.xを表示することくらいはできた 自分で1から作ることができない。"概念"さえ掴めばパッパといける気はするが
>>350 WAV 正常に再生できてるよ
DirectSoundのサンプルはちゃんと再生されるけど
DirectMusicのサンプルは再生されないときがある
ワケワカラン
おとなしくDirectSound使いたいところだが
SDKのVerがアレなので(ry
>>346 WIN32APIプログラムとかの入門をとばして
いきなりDirectXの入門書を見てたりしないか?
>>354 なんだできてんじゃん
>自分で1から作ることができない
1からってどういうこと?
なにもみないで書くって意味だったら10年やってる俺でも無理だ
テキトーに必要なもんかき集めてぺたぺた貼って動かすぐらいならできるがな
初期化処理の書き方なんてその時代時代でやることかわるし
大事なのはサンプル理解して応用していける力なので
そういう自分で・・・っていうのは必要ない
まずはなんでもいいからゲームを作ってみろ
それ以外のことは無駄だから考えるな
そうだ、テトリス作れ3Dテトリスな(ゲーム的には2Dの)ハイ決定さっさと作れ
頭が悪い奴って勉強頑張れるらしい
ID3DXSpriteはIDirect3DDevice9のように2つのテクスチャを合成してから表示させたり出来ないんでしょうか?
質問です Direct3Dで線分を描画したいんですけど、どうすればいいんでしょうか?
これはググレカスといわざるを得ない
DrawPrimitiveで引数にLINELIST
なるほど、DrawPrimitiveでできたんですね ありがとうございました
363 :
デフォルトの名無しさん :2009/01/30(金) 23:00:59
DirectXのプロジェクトってユニコードビルドにしないとだめなのでしょうか、 単にデフォルトがそうなっているだけなのでしょうか? チュートリアルのプロジェクトがデフォルトがユニコードになってます。
サンプルフレームワークのDXUTがUnicodeビルド前提ってだけだ。 DirectX SDK使う分にはどっちでもいいよ。
365 :
デフォルトの名無しさん :2009/01/31(土) 01:40:58
トンクス!
画面にピクセル単位で指定して描画したのですが D3DFVF_XYZRHWで描画したポリゴンではできるのですか?
画面にピクセル単位で指定して描画したいのですが D3DFVF_XYZRHWで描画したポリゴンではできるのですか? 訂正ですすいません
既に描画したポリゴンでできるのかと聞かれても、よくわからない。
D3DFVF_XYZRHWを使って作った頂点バッファだったら簡単にできると思う。
>>369 どういうこと?話が見えないんだけれども
371 :
368 :2009/01/31(土) 18:50:16
>>370 レスありがとうございます
とりあえずやってみます><
372 :
371 :2009/01/31(土) 20:13:11
なんで1024×1024で試してみてから質問しないのですか?
>>373 1024*1024で貼り付けてUVで調整したら解決しました
お手数掛けて申し訳ありません
テクスチャの画像はどうやって作ってるの? それのために呼び出したAPIを全部調べたの?
D3DXCreateTextureFromFileEx です API調べてませんでした 次から調べてから質問します 申し訳ございません
DirectXに、次はねぇ・・・
if(diks[DIK_UP] & 0x80) { m_dir = FOR; Sleep(500); } DirectInputでキーボードから入力値を取得しています Sleep()を抜くととてつもない速さでカーソルが移動してしまいます Sleep()を使うとほかの処理も止まってしまうので 他の処理をとめないで同じようなことできる方法ありませんか?
押しっ放しじゃなくて 押した瞬間だけ検出するようにしろよ
D3DPRESENT_PARAMETERSのPresentationIntervalをD3DPRESENT_INTERVAL_ONE にするとリフレッシュレートに勝手にあわせてPresentが行われまする。 普通1フレーム当たり1/60秒になるので、待たせたい秒数になるように フレーム数をカウントして、一定数ごとにカーソルを移動とかじゃだめ? 間抜けな回答してたらどうしよう・・・。
>>381 SDKのサンプルみろ
それが一番速い
設定選べるようになってるサンプルあるだろ?
> 普通1フレーム当たり1/60秒になるので、 とはかぎらない。
まあ、だいたい液晶だからなるっちゃなるなw
よくいるよね、一般的な例の話をしてるのに特殊な例を持ち出してこれは違う!って言う奴。 そんなことは百も承知だってのに。 そんなに自分が物知りだってひけらかしたいのかね。
お前らよくこんなカス共の質問に回答してやれるなw
そもそもマルチだしな。
60にすると具合悪い事はままある
V-Syncって普通自前でやるのかな?
>>382 の言ってるサンプルがどれかわかんなかったw
よく調べたらうちのはディスプレイモードによってリフレッシュ
レートが56〜75の間で4種類くらいあるから、フレーム数決め打ち
だと環境によって変わっちゃうなあ。
>>386 は50Hzだったし。
QueryPerformanceCounterとかからミリ秒算出して、前のカーソル
移動時の時間と比べて一定時間たったら再実行とか。だめ?だめ?
液晶でも最近のフルHDのTVにつなぐとデフォが24Hzになったりするしな。
QueryPerformance系使うくらいならtimeGetTime()の方が制約が少なくてらくだけどね どうせミリ秒単位を扱うわけだし
DirectXのVSyみそなんかリフレッシュレートっぽい 時間でウェイトかけてるだけだから。 ゲーム機の実Vクロックでループ回すのとはわけが違う。
>>395 タイマでウェイトかけるのはウインドウモードのときだけだよ。
>>392 >サンプルがどれかわかんなかったw
全部見ろよ
サンプル連呼されても初心者にはわからんものだよ 頭の固い奴にはそれがわからんのです
ゲームで複数のXFileを読み込むときのロード時間が気になっているのですが これを高速化したりするのは可能でしょうか? ネットで調べたところ、一度DirectXの「Xファイル読み込み関数」で ロードしておいたメッシュデータをバイナリで保存して、次回起動時に そのデータを直接読み込むという手段を取られていた方がいるのですが 具体的にどうやるのでしょうか?また、本当に早くなるのでしょうか? D3DXLoadMeshHierarchyFromXなどのXファイルロードルーチンはそのマシン で描画が早くなるようにロードしたメッシュを最適化しているという 話を聞いたことがあるので、このやり方で本当にロードが早くなるのか 心配です・・・。 どなたかXFILEのロードの高速化について詳しい人がいたらアドバイスを お願いします。
どれだけ速くなるかは知らないけど 頂点バッファとインデックスバッファ、あと属性テーブルみたいなの取得すればいいじゃん
>400 ありがとうございます、階層化されたメッシュの場合にかなり面倒そうですが 今度の週末にでも一度組んでみようと思います。
>>401 最近その問題(遅い)にぶちあたったが、遅いのはアニメーションのロードだった
アニメーションのロードだけ自前でやるのお勧め
メッシュのロードはそこそこに早かったよ
カメラの回転での質問です。 横回転は問題ないのですが、縦回転すると90度を超えると 急に視界が反転してしまいます。 90度になったらD3DXMatrixLookAtLHのpUpを逆方向にすると 縦回転だけする場合は良いのですが、 少しでも縦回転した状態で横回転すると、視点がぐるぐる 変に回ってしまいます。 どうすれば良いでしょうか?
404 :
403 :2009/02/03(火) 00:32:03
すいません 横回転が加わっている状態で縦回転すると、でした。 横回転はどの場合でも普通に回転してくれます。
まわす順番がおかしいんじゃねーの? とりあえずその部分のコード貼れや
D3DXMatrixLookAtLHの引数で回転するんじゃなくて 注視点を原点とするカメラのローカル姿勢を回転させて そこからビュー行列を逆算すればおk
407 :
403 :2009/02/03(火) 06:23:07
>>406 すいません具体的にどのようにすれば良いでしょうか?
今現在は
D3DXMatrixRotationX(&mat, g_CameraAngle.x);
D3DXVec3TransformCoord(&g_Camera.vecEyePt, &g_Camera.vecEyePt, &mat);
という感じでカメラの座標を変換してから
D3DXMatrixLookAtLH(&matView, &vecEyePt, &vecLookatPt, &vecUpVec);
pDevice->SetTransform(D3DTS_VIEW, &matView);
でカメラ位置を変更しています。
// カメラの初期姿勢(視点(0,0,-10)、注視点(0,0,0)の場合)(変更しないで保持する) const D3DXVECTOR4 vecEyePt(0,0,-10,1) ; const D3DXVECTOR4 vecLookatPt(0,0,0,1) ; const D3DXVECTOR4 vecUpVec(0,1,0,0) ;//ここだけw成分が0であることに注意(回転のみ反映) // 初期姿勢からどれくらい移動したいかの行列 // 回転だけでなく拡大縮小移動なども合成できる D3DXMatrixRotationY(&mat, g_CameraAngle.y); D3DXVECTOR4 Eye, Look, Up D3DXVec4Transform ( &Eye, &vecEyePt, &mat ) ; D3DXVec4Transform ( &Look,&vecLookatPt, &mat ) ; D3DXVec4Transform ( &Up, &vecUpVec, &mat ) ; D3DXMatrixLookAtLH(&matView, (D3DXVECTOR3*)&Eye, (D3DXVECTOR3*)&Look, (D3DXVECTOR3*)&Up); もうちょっとスマートなやり方あるけどそれは少し考えればわかるよね
最初はスマートなやりかたより理解しやすさを追求すればいいじゃない UpVectorが0成分だと気づかなくて 3日くらい悩んでたのを思い出した
>402 ありがとうございます、時間が取れたのでアニメーションの書き出しを 試してみたのですが、アニメーションコントローラにアニメーションデータの 実体が見当たりません。 アニメーションデータの実体とサイズはどうやって取得したら 宜しいのでしょうか?
Xファイルを読み込むためのD3DXLoadMeshHierarchyFromX関数にて LPD3DXANIMATIONCONTROLLERというアニメーションコントローラに 値を入れてアニメーションを管理しているんですが、どうもこの LPD3DXANIMATIONCONTROLLERに実体が無いというかsizeofしても 4の値しか返ってこないんですが・・・。
C/C++の基礎を勉強したらどうかね?
DirectXの前のCの本読んだほうがいいなコレは。
415 :
412 :2009/02/04(水) 09:57:16
日頃の勉強不足を晒してしまい申し訳ございませんでした。 DirectXでゲームを何本か作った事はあるのですが、DirectX側で 保持しているアニメデータを直接いじった経験が無く、ネットで色々 調べてみたのですが、どうにもお手上げな状態です。 アニメデータ等が読み込まれているメモリ配列部分がどこにあるのか 皆目見当がつかないのです。 なにかアドバイス等もらえないでしょうか・・・?
>>415 頭に LP がついているのは、ポインタだ。
ポインタは(32bitOSなら)4バイトで当然。
あと、アニメーションコントローラーの内部が確保したメモリーに直接アクセスする手段はない。
AnimationSetを取得したり、そこからさらにAnimationを取得したりという間接的な手段でアクセスするべし
あと、AnimationControllerをいじるのはやめたほうがいいぜ。
メモリーリーク含め、バグが多すぎる。
例えば時間0の情報を書き換えると、アニメーションが正常に行われなくなる。
取得したAnimationSetを、他のコントローラーにセットしてもまともに再生されない。
Animationを削除してから追加すると、メモリーリークする。などなど
ウィンドウの左端を画面外に移動させると画像も画面外から描画されることを期待していたのですが 画面端から表示されてしまいます。 画面外に移動させてもクライアント座標の(0, 0)から描画させるにはどうすればいいのですか? // これだとウィンドウの左端が画面外に出たときに(0, 0)から描画されない LPDIRECT3DDEVICE9 pD3Ddev; pD3Ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255, 255, 255), 1.0f, 0); pD3Ddev->BeginScene(); Draw(); D3Ddev->EndScene(); if( FAILED(pD3Ddev->Present(NULL, NULL, m_hWnd, NULL)) ) { pD3Ddev->Reset(&g_pDirectX->d3dpp); }
つーかアニメデータなんて自分用の形に吐き出して自分で管理クラスつくれよ
>>417 Presentの引数を全部NULLにするとか。
ごめん、勘で言った。
>>417 ウィンドウサイズを変える毎にクライアント領域のサイズに合わせてデバイスを作り直す
デスクトップ領域からウィンドウが外れたときの話だと思うが
無知発見。
>>417 そのソースコピペ?
コピペじゃないならコピペにしてくれ。
他にも書き写しのときにミスがありそう。
ああ、あと、俺の環境では画面からはみ出しても普通にクライアント座標の端っこから描画されるぞ。
はみ出した部分は画面外だから当然見えない。
<環境>
WindowsXP Home Edition SP2
DirectX 9.0c (4.09.0000.0904)
DirectX SDK Novemver 2007
こんぱいら BCC 5.5
だからクライアントサイズとデバイスサイズが合ってないとそうなるんだよ
425 :
403 :2009/02/04(水) 23:06:07
>>408 とても参考になりました
わかりやすいコメントまでつけてくださって
本当にありがとうございます
DirectinputのDIK_LEFTとかを引数で渡したい場合は どうやるんですか? intなら foo(int i); foo(??? DIK)
BYTEでいいんじゃね? >Dinput.h に定義されているキーボード デバイス定数は、キーボード デバイスの >データ パケット (256 バイト配列) 内でのオフセットを表す。
ありがとうございます><
429 :
412 :2009/02/05(木) 08:21:42
>416 丁寧な解説ありがとうございました。 自前でアニメーションの仕様を0から組むのはあまりにも敷居が高いですし メモリリークなどが発生してしまうようではどうも面倒の方が多そうですね。
現在頂点カラー(0xFFFFFFFF)で描画しているテクスチャを 頂点カラー(0xFF000000)に変更して全く同じように描画、 つまり、テクスチャのポリゴンとの合成方法を加算合成にしたいのですが、 どの設定メソッドを使用すればいいのでしょうか? ピクセルシェーダを自作すべきなのでしょうか?
DirectInputやDirectSoundについて質問です ゲームループをタイトルとゲームで分けています タイトルが呼ばれたらインプットデバイス・サウンドデバイスを作る ゲームが呼ばれたらタイトルを破棄してゲームでインプットデバイス・サウンドデバイスを作る というやり方でいいでしょうか?
>>430 デバイス->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );// 合成元1(テクスチャ)
デバイス->SetTextureStageState( 0,D3DTSS_COLORARG2, D3DTA_DIFFUSE );// 合成元2(頂点カラー)
デバイス->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_ADD );// 合成方法(加算)
>>431 タイトルとゲームでウインドウ遷移したりするの?
しないならデバイス作り直さなくてもよくね?
別に作り直ししちゃいけないわけでもないし
そのやりかたでもいいんじゃね?
シーンごとにリソース解放するってならわかるけど
デバイスを無理して作り直す必要はないとは思うけどね
435 :
430 :2009/02/06(金) 13:53:26
436 :
デフォルトの名無しさん :2009/02/06(金) 16:01:00
最近3Dの勉強を始めた者ですが、質問です。 人間モデルがあったとして、手に別のモデルをくっ付けたい場合は、その座標等を取得する関数のような モノがあるのでしょうか? いまいちその辺のスタンダードな取得方法がわからなくて迷走してます。 3Dモデルのノード?に名前をつけれるのでその名前から取得したりするのかなぁと思ったりしてるんですが どうなんでしょう? ググッて調べても検索ワードがまずいせいか、その辺がまったくわからなくて…Orz
ボーンの座標計算を自前で行えば自由自在
一発で座標を取得できるような便利関数は無い しかし、どんな方法であれアニメーションをさせている限り ボーンが今現在どんな姿勢をしているかは取得できるはずなので 自力で目的のボーンの変換行列を探せばOk
439 :
436 :2009/02/06(金) 16:31:55
>>437 >>438 なるほど、モデルじゃなくボーンの方を何らかの方法で調べて
目的の行列が見つかりさえすれば座標が取得できるわけですね。
もやもやした感じが少し晴れました。
その方向で調べてみます。
ありがとうございました。
深度バッファの取得方法がよく分からないんだけど もしかして2回レンダリングするの?
441 :
デフォルトの名無しさん :2009/02/06(金) 22:08:55
direct X ではベクトルの始点、終点を与えて矢印を引くことできないんだ。。。 (x,y,z)成分が与えられていれば、θ=arctan(y/x)、φ=arctan(z/sqrt(x^2+y^2) から角度が求められるから、x-Fileで作成した例えばy方向の矢印を順次回転 させて(x,y,z)方向に向ければいいんだろけど(しかし、これもx≒0のときθの 精度が悪くなるからarcsinやarccosに切り替えたり、θが第何象限にあるかを 判定する必要があるから、そう簡単ではない)。 それよりもわからないのは、剛体の3次元運動の角速度は、普通、剛体に固定 された回転座標系ξηζ上で成分表示されている。これをもとに角速度ベクトル、 角運動量ベクトルをワールド座標系上で矢印表示するにはどうしたらいいんだ? directXの回転変換マトリックスってベクトルを回転してるのか、それとも座標系 を回転してるのか?マトリックスの内容と表示を照らし合わせて確認すればいいが 面倒クセェ。 、
>>440 深度バッファをシェーダで利用したりするのは、DirectX10以降でないとダメ。
それ以前はNVIDIAが独自拡張で別のことに使っていた関係で使えない。
だから9では、MRTで深度値を別のテクスチャに描画して使う。
>>441 なんでいちいちθを求めるんだ。
方向ベクトルがあれば、そこから直接回転行列作ればいいだろう。
ちゃんとベクトルの勉強してたら暗算でできるレベル。
443 :
デフォルトの名無しさん :2009/02/06(金) 22:51:54
>>443 質問文が長すぎる
簡潔にこれがわからないって最初に書け詳細がその後だ
446 :
デフォルトの名無しさん :2009/02/07(土) 07:25:07
>>444 お前はひっこんでろ
>>446 ありがとう。
directXには任意の軸方向回りに、ある角度だけ回転した場合の
回転行列を求める関数がある。
なので、X-Fileで作成した初期方向のベクトルaと希望の方向の
ベクトルbの外積を求めれば、必要な情報が得られることは紹介
してくれたサイトを見ないでも、しばらくしてわかった。
あとは、World座標系と剛体に固定された座標系の間の座標変換行列
が必要だけど、これはベクトルの回転変換行列と要素が一致するだろう。
(そうあってほしい)
>>446 直接 〜が知りたい って文章かけないわけ?
もういいから放置しておけよ こいつが必要なのはDierctXの知識じゃなく日本語の知識だ
449 :
デフォルトの名無しさん :2009/02/07(土) 16:49:31
考えるまでもなくベクトルの回転も座標の回転も同マトリックスでできるだろ。 座標の回転なんて基底ベクトルの回転に等しい。
数学がわからんだけじゃないか DirectX関係ねぇ
452 :
デフォルトの名無しさん :2009/02/07(土) 17:18:49
ふぁーーっ。
>>450 おお!、あんた、なかなk筋のいい回答してるよ。
良くできましたね! 皆さんでほめてあげましょう(校長先生のお話)w。
>>451 相変わらず馬鹿だな。お前に言われるのは、100年早い。
死ね、臭ぇーーー腐れチンポが。
まだ、書いていいぞ。あっははは。
やーい、腐れチンポ、あははは
見た瞬間、グロかとおもた。
ビビタ
>>453 モデリングソフトで真正面・真横・真上・真下から
レンダリングした絵をテクスチャにして平行投影で貼ればよかろ?
ってCGワールドに載ってたw
ゲームのDVDから画像データを抜き出すことってできるんですか?
できるよ GetModuleDds(Disk code);
>>459 ゲーム実行中にVRAMコピーすれば余裕
でもそんなこと頑張ってもたかが知れてるぞ
>>461 専門がそっちなんで最初はそれを作ってたんですが、XBOXを3台ほど壊してしまって
少しぐらい難しくても経済的にソフトでやろうと思ったんですが、予想以上にファイルがどうなってるのかわからず困ってます
アドバイスお願いします。
スレチ
該当しそうなスレはことごとく餓鬼の巣窟でまったく話にならないんです。 本気で取りだしたいのでゲームに埋め込むときのノウハウががわかっている方がいるであろうこのスレを選びました。 3Dデータの本質がわかっているこのスレでお願いします!
それらしいスレにはわかる人はいないんですよ
俺はわからないけど、とりあえず夜まで待てば?
データだけ取り出せればいいの? 画像フォーマットの解析は自分でやるんだよね?
暗号化されているのか、対応ソフトがあれば見れるのか そもそも3Dデータであろう部分は判別できるのかとか ゲームを作る時のデータ扱いの常識と、あとは自分で調べていけるような流れを教えてもらえるとうれしいです
スレチだっつってんだろ死ね
XBOXは覗いたことないけど普通は独自で解析できないようにしてるんじゃないのか? もし見れたらMADゲームとかで好きにキャラとか動かして遊べるからそうとう盛り上がってるはずだけど ぐぐっても出てこない、きびしいんじゃないだろうか
DirectX関係ないだろアホか
単なるbyteの配列を抜き出してどういうフォーマットのデータがどう並んでいるかなんて判別不可能に近い。 ましてやXBOXなんてUMAだからシステムメモリとビデオメモリが共有だろ。 どこに何があるのかすら分からないだろ。
まったく関係なくもないな 同じような道だし DirectXを使ったPCゲームで3Dモデルをどう使ってるかから調べればいいんじゃないのか? XBOXはPCゲームを移植しやすいように作ってあるらしいから共通点がみつかるかも
475 :
デフォルトの名無しさん :2009/02/08(日) 18:54:57
俺も知りたいからあげ
そんなもんゲームによりけりだろ
477 :
ボコボコにしてやんよ ◆BokoBoko7c :2009/02/08(日) 19:31:23 BE:1083996656-2BP(2537)
氏ね
>>471 VRAMに展開された状態なんだから圧縮も糞もないだろ
開発環境あったら普通にみれるじゃん
VRAMってもしかしてメモリチップのことじゃなかった?
質問者はDVDからっていってるからファイル解析じゃないの というかVRAM覗ける様にする方がしんどくね?
481 :
デフォルトの名無しさん :2009/02/08(日) 21:08:52
D3DX10CreateEffectFromFile()で失敗します。 FXファイルはあります。この場合失敗する理由をどうやって調べればよいですか? よろしくお願いします。
482 :
デフォルトの名無しさん :2009/02/08(日) 21:12:11
481です。 D3DX10CreateEffectFromFile()からはE_FAILが返ってきてました。
483 :
デフォルトの名無しさん :2009/02/08(日) 21:33:39
481です。 自己解決しました。 fxc.exeでFXファイルをコンパイルしてみたところコンパイルできなかったので FXファイルを再度チェックしたところ、書き方の間違いが見つかりました。 それを修正したら動作しました。 ありがとうございました。
fxc使う!
orz
まずは圧縮(パッキング含)されてそうならそのアルゴリズムを解析する。 たいていLZ法やハフマン法とかなんで、あとはつじつまが合いそうな データ並びを調べ、展開ツールを自作する。 それが終わったらデータ一つ一つのフォーマット解析だ。 単純そうなデータがあればそれを解析サンプルとして使う。 ピクセルカラーやパレットがどう入ってるかあたりを付けながら、 確認可能な画像フォーマットに変換してみる。 ここまで読んでわからない奴には無理だから諦めなさい。
487 :
デフォルトの名無しさん :2009/02/09(月) 03:19:16
HLSLの質問です サチュレーションをシェーダで実装したいのですが 参考になるサイトや書籍、調べるきっかけになる単語があれば教えてください。 よろしくお願いします。
>>487 もっと詳しくかいて
何をどう飽和させたいのかがさっぱり意味不明
489 :
デフォルトの名無しさん :2009/02/09(月) 03:49:45
490 :
デフォルトの名無しさん :2009/02/09(月) 05:00:05
@はHDRを中心に検索をかけ、ある程度自己解決 Aは、擬似HDRで実装したゲームでの表現があることから糸口発見 もし参考になるサイト、書籍を知っている方、 アドバイスをいただける方がいらっしゃれば情報をください。 よろしくお願いします。
シェーダプログラミングブックのクロスフィルタ
質問です。 3Dキャラクタを表示するとともに、仕込んであるボーンも表示するビュワーを作ったところ、疑問がでました。 3DキャラはXファイルを読み込んでいます。 Direct3Dだと、どうやらボーンは「ボーンの長さ + そのボーンの先での変換行列」という形で情報を持っているようです。 ですが、通常3Dソフトだと「そのボーンの根本での変換行列 + ボーンの長さ」という形が一般的だと思うのです。 たしかにDirect3Dの形式だと、「末端のボーンには長さ要らないんだけどなー」という点において有利な気はします。 が、直感的には後者のほうがずっとわかりやすいと思います。 また、ボーン名を表示する機能もつけてあるのですが、Direct3Dの仕様に合わせると「1つ上の階層のボーン名」を表示しないと、人間の直感からは1つずれた名前になってしまいました。 私が思ってる「一般的」は、もしかしてズレてるのでしょうか? Xファイルしかファイルフォーマットを勉強したことないのですが、他の形式がどうなっているのか知っている方がいらっしゃいましたらコメントいただきたいと思います。 よろしくお願いします。
Xファイルなんか使うな
Xfile使うなって言ってるやつは何つかってんだよ 誰が何使おうが好きなようにすればいいじゃない
>>494 調べればわかるけどXファイルは面倒臭い
逆に聞き返すが何のツールでXFile出そうとしてんの?
5万だしてXSI買ったほうがナンボか楽
modとかならmaxかmaya行くと良いよ
>>496 maxとmayaってゲームで使えるモデルが出力できる環境整えると
いくらぐらいになんの?
mayaがタダになったような気がするけど
プラグインまで使えるバージョンだっけ?
いきなり初心者に5万出せってのはどうなんだよw
>>498 オラァ!さっさとジャンプしてみろ!
チャリチャリなるだろチャリチャリィィィィィィィィィ!
チャリチャリなるような財布に5万はないだろ
ウォレットチェーンに違いない
DirectXシェーダプログラミングとかいう本読んでるんですが、 これ、DirectXほとんど関係なくないですか?シェーダって思いっきり別言語じゃないですか DirectXでGPUを操作するものは用意されてないんですか? 今後はシェーダのスレに言った方がいいんでしょうか?そもそもシェーダのスレはあるんですか?
>>503 お前はDirectXを何だと思ってるんだ
シェーダのスレはあるかと思いきや意外と見あたらないな。
別にここでいいと思うが。
まじこのHLVSとかいうの覚えなきゃいけないんですか?
HLSLだよ何で間違えるw 覚えたくないならDirect3D9以前を使うこと。 Direct3D10では必須。 基本的な機能だけならコピペでもなんとかなるが。
507 :
417 :2009/02/10(火) 10:37:56
返信遅れてすみません。 >424さんの言うとおりクライアントサイズをデバイスサイズが違うことが原因でした。 ありがとうございました!
HLSLってかなり楽しいと思うんだが 正直、DirectXとか機能覚えるだけで全然楽しくないけど シェーダは、この表現はそういう処理になってたのか、とか そういうのがあって楽しいよな
509 :
デフォルトの名無しさん :2009/02/10(火) 20:43:00
SIZE構造体とか、RECT構造体とか、こういうのって使いますか? 本のサンプル見てるとやたら使ってるんですが、全部覚えないとだめ?
>>509 関数の引数で決まってるので使わざるを得ない
>>509 なんで覚えるんだよ
必要なとき調べりゃいいだろ
まさか暗記でもする気か?
無駄だぞ無駄
512 :
デフォルトの名無しさん :2009/02/10(火) 21:10:16
DirectXシェーダプログラミング読もうかと思ったんですが、この本の内容ってDirectX10 でも使えますか?
特にDirectXAPI側の形式が変わってしまっているが、やってることは同じ。 そのままコピペで使えるのかという質問なら否。
514 :
デフォルトの名無しさん :2009/02/10(火) 22:57:42
>>513 ありがとうございます。
そのままコピペできるような本は日本語ではないですか?
なければ英語でもいいので教えてください。
なんでコピペにこだわるんだろうか・・・ 初心者の前に人間ですらないのだろうか?
コピペ君って本当に馬鹿なんだなって聞こえた気がした
コピペして動かせた方が勉強するにしても役立つのは明らかだからな
だったらSDKのサンプルでもみろよw ていうか ソースが本に書いてあってもそのソースの解説が載ってる 本は正直みたことねぇな っていうかそんなことしたらページがいくらあっても足りない ただ、載ってるだけだw
519 :
デフォルトの名無しさん :2009/02/11(水) 00:18:16
だって分からないんス。 SV_POSITIONとか言われてもぜんぜんピンとこない。 だれかがソースを目の前で書きながら分かりやすく解説しつつ、 手取り足取り教えてくれたらいいのに。シェーダのプログラムのやり方を 解説した実況中継DVDとかないですかね。
シェーダの流れに便乗して質問なんですが tex2Dprojって、MSDNに微分係数付きのテクスチャ座標という説明しかなくてよくわかりません デプスシャドウなどで深度値を比較するときに使われてるみたいですが 普通のtex2Dと何が違うんですか?
521 :
デフォルトの名無しさん :2009/02/11(水) 07:27:22
>>519 ピンとこないとダメなら自分でピンとくる3Dエンジンを作るよろし。
>>520 微分は、tex2Dgradの方じゃ?
tex2Dprojは、xyをwで割って
サンプリングする座標を求めるもの
tex2Dproj( xy, t ) ≒ tex2D( xy / t )
シャドウマップではサンプリングに射影変換が
必要なケースがあるので、こいつが使われる。
↑間違ってる、正しくは↓ tex2Dproj( s, xyzw ) ≒ tex2D( s, xyzw / w )
よく分からないけど、wで割るっていうのは スクリーン座標をビュー座標にしてるってことですか?
526 :
デフォルトの名無しさん :2009/02/11(水) 20:17:20
そんなわけねーじゃん
俺の頭じゃ理解できない 詳しく教えて下さい
だってビューってみたかんじからして Y座標逆っぽいじゃん
すみません、なんか勘違いしてたみたいです wで割ると射影空間上のX座標Y座標が-1から1の間に収まるっていう感じであってますか?
>>525 同次クリップ空間からビュー座標にしてるんじゃね?
531 :
デフォルトの名無しさん :2009/02/11(水) 23:46:32
独習デザインパターンC++は役に立った
288*256の画像ファイルを読み込んで、24け32の範囲を 貼り付けると横が伸びるんですけどなんか方法はないですか?
どうやって画像を読み込んで、どうやって表示してるのか言わないとわからない。
256*256にしとけ
「288*256の画像ファイルを読み込んで」の時点で テクスチャが512x256になってるって落ちじゃ? D3DXCreateTextureFromFileで読み込むとそうなる D3DXCreateTextureFromFileExでちゃんと幅と高さを指定してつくれ
Maneged DirectXってDirectShowだけじゃなくてDirectMusicも含まれてないんですか? VS2008なんですけど、ヘルプを組み込むにはどうすればいいんでしょうか DirectXをインストールして入ってなければあきらめるしかないですか? 今はchmを直接開いてるんです
スレ違い
うほ
アルファブレンディングとZバッファの関係で躓いています。 使用バージョン DirectX 8.0 (d3d8.h d3dx8.h) VS2008 VC++ 最背面 背景 > 半透明オブジェクト 最前面 のように描画されてて半透明オブジェクトの中身は TLVertex で 000 010 000 0は完全透明、もしくは半透明だと思ってください。 1は完全不透明です。 で、この半透明オブジェクトの背面に新たに TLVertexのオブジェクトを描画したくて、 0の部分はこの新たなオブジェクトと普通の半透明処理をして 1の部分は描画を破棄するなどして背面にあるように見せかけたいのです。 仕様として描画の順番を入れ替えることができないのでZソート法などを使うことができないのですが、 多少結果が食い違ってもかまわないのでどうにか背面にあるように見せる方法はないでしょうか?
>>540 半透明はZソートしない限り不可能。
完全に透明なら、Zテストを使えばいい。
>>541 現状完全透明でも描画できていないので半透明については保留にしておいて
Zテストについて色々調べてみます。
ありがとうございました
>>543 ごめん、Zテストじゃなくてアルファテストの間違い。
DirectXで画面(800*600)の任意の場所にドット絵を表示させたいのですが どうしてもアンチエイリアスがかかったようにぼけてしまいます。 //プロジェクション行列 D3DXMatrixOrthoLH( &ProjectionMatrix, 400, 300, 0, 100 ); //キャラクターのマトリックス D3DXMATRIX mat; D3DXMatrixIdentity(&mat);//現在は原点 mat * ProjectionMatrix を掛け合わせた行列で シェーダーでキャラクターの頂点を変換しているのですがうまくいきません。 ご教授お願いします><
シェーダを使わずにレンダリングしたら正常ってことだよな
>>545 デバイス->SetSamplerState( 0, D3DSAMP_MIPFILTER, D3DTEXF_POINT );
デバイス->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_POINT );
デバイス->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_POINT );
>>546 シェーダーに頼り切ってるのでシェーダー使わない方法が今一わかってません…
>>547 DirectXにテクスチャを送らなく
シェーダーにテクスチャを送っていたので
//普通のテクスチャ用
//普通のテクスチャ用
sampler2D NormalSmp = sampler_state {
Texture = NormalTex;
MipFilter = LINEAR;
MinFilter = LINEAR;
MagFilter = LINEAR;
AddressU = CLAMP;
AddressV = CLAMP;
};
↓
sampler2D NormalSmp = sampler_state {
Texture = NormalTex;
MipFilter = POINT;
MinFilter = POINT;
MagFilter = POINT;
AddressU = CLAMP;
AddressV = CLAMP;
};
にしたらきちんとうつりました
ありがとうございます。
D3DXをつかわずにPNGとかの画像を読み込んで テクスチャーを作るにはどうするですか?
CreateTextureで必要なサイズのテクスチャを作って そのテクスチャをLockRectして画像から読み取った色情報を書き込めばOK ただしその画像フォーマットがどのように色情報を格納しているかの知識が必要
DirectXは△ポリゴンしかサポートしてないと聞いたのですが □ポリゴンが混ざっているXファイルが読み込めました 調べたのですがサポートしていないとは不具合があっても対処しませんということでいいのですか?
それモデラーがXファイル出力するときに3角形にしてるだけだろ
てかほっとくと普通に5角形とか6角形とかまざってね?>Xファイル モデラーで三角形分割しないと駄目だろ
D3DX使うと読むときに全部三角分割してるよ
>>554 どんな感じで?w(←絶対にデザイナに責任取らせたほうがいいと思うw)
自動で三角形分割やらせて ウンコみたいなUVの設定とか変な分割のされ方したぐらいで プログラマに怒りをぶつけるようなデザイナの尻には浣腸しかない
どんな感じも何も四角形を三角形二つに分解したって、
表示結果は全く変わらないんだが、
責任とか訳のわからないことを言い出す
>>555 って、
どれだけ頭が悪いんだろう?
三角形->四角形 非可逆 四角形->三角形 可逆
>>558 すごいな
どの三角形とどの三角形で四角形を形成してたのかわかるのか?
面積0とかはないとしても難しいな
よく読め
ランドスケープ(格子状モデル)みたいなのイメージしてみたけど結構難しいな 同一平面で辺がくっついてたらとか考えたけどサルの浅知恵だった
UVぶっちぎれね?
>>557 四角は平面だとでも、思ってんのか?お前
ただ556の浣腸は正しい
>>564 出力されたデータを検証したことがないだろ。
平面じゃなければ、すでにエクスポート段階でデータが欠損していることになるが、
そんな間抜けな実装をしているエクスポータを挙げてみろよ。
平面じゃない場合は四角形ではない。 四角形なら必ず平面。
蚊以外いらん
キングコブラと蚊はいいセンスしてんなw
蚊のやつ、上半身と下半身が分離してるように見えてならない
こんなの人間の女の子に猫耳つけて猫ですってレベルと変わらないじゃん
マムシハァハァ …ふぅ
俺もマムシ一択だな
DirectX関係ないぞ
そのコピペそこらじゅうに張ってあるぞ そのあとのトークとセットで
>>565 お前様はfbxいじった事はあるの?
てか、もし師範様なら、割られた三角で取得する方法教えて下さい・・・
>>577 FBXなら普通にメッシュのクラスにTriangle化するメソッドあるだろ・・・
DirectX9でMFCのViewに表示させる場合、CreateDeviceのhWndはViewのm_hWndじゃだめなんでしょうか? コンパイルできるんですが、そのあとの描画でデバイスのClearで止まるんです
ClearでとまるならZバッファないのにZクリアーしてるとか ステンシルないのにステンシルクリアーしてるとかだろ。
HRESULTいくつよ?
戻り値までいきません。ハンドルされていない例外でストップするんです。 class CView : public CView{ CXView::CXView() { pDirectX9 = new CDirectX9(); pDirectX9->InitD3D(this->m_hWnd); } void CView::OnDraw(CDC* /*pDC*/) { CXDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; g_pD3DDev->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0 ); } }
if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pD3DDev ) ) ) { return E_FAIL; } これが失敗してます。 CViewのハンドルはm_hWndで問題ないですか?
これってソースそのままコピペ? class CView : public CViewでいいのか?
class CXView : public CViewでしたすいません
g_pD3DDevがNULLってこたぁないよな
デバイスの生成でミスってんならそこでちゃんとエラーだせよ・・・。 パラメーターがどっかしらおかしいんか、ウィンドウハンドルがNULLじゃなきゃ失敗しねえ。
CreateDeviceの戻り値は-2005530516です。 最新版のSDKでdxerr9.libからMAX_ERROR_TEXT_LENってなくなってないですよね? これdefinいくつかわかりませんか?エラー関数コンパイルできなくなってエラーコード調べられなくなりました
失敗してんじゃん d3dppがおかしんじゃね
D3DERR_INVALIDCALLでしょ。 d3dppの内容は?
thx これです D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof(d3dpp) ); d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = d3ddm.Format;
とりあえず CViewのコンストラクタ内ではまだm_hWndはNULLであることをお伝えしておく
そこ手打ちみたいで怪しいから無視してたわ・・・
つーかDirectXをまずデバッグモードにしろや。 それでコンソールにエラー内容全部表示されるようになるだろ。
うおーできた!!! ありがとう。 まじありがとう!!!
>>595 解決したらどんなエラーだったかを示すのがスジ。
まあOnCreateあたりでCreateDeviceしたんだろうけど。
CViewのコンストラクタ内でハンドルを渡したら中身がNULLだったので InitUpdateの中でやったら解決しました。
599 :
デフォルトの名無しさん :2009/02/15(日) 20:08:59
DXTRACE_ERR()をやたら使ってるソースがあるんですが、これって意味あるんでしょうか? なんにも有効そうなログとかだしてくれないんですが、、、
それこそ使い方による
Xファイルのアニメーションを切り替えるサンプルコードどっかにない? SDKのは長すぎて解読不能だたよ
まるぺけ
まるぺけは自作関数使ってるじゃん わかりづらいよ
604 :
デフォルトの名無しさん :2009/02/15(日) 22:58:31
まるぺけって結構有名なんだな。 参考にしたのオレだけかと思ってたよ。
分かりやすいサンプル=SDK付属のサンプルだと思うんだ
それはお前だけ(笑)
Xファイルの読み込みってめたくそむずかしくないですか? VBだと読み込みと描画で2行でかけるのに・・・やばくないですか?Cとかいって 自分が見てる解説サイトがわかりずらいだけなのかな
VS2008なんですが、プロジェクト新規作成にDirectXウィザードが無いんですが どうすればいいと思いますか?
あきらめればいいと思います
エンプティープロジェクト シンプルサンプル
D3DCAPS9の中身を埋めてくれる関数は何ですか?
GetDeviceCapsがありました
質問です レンダリングターゲットとして生成したテクスチャーは、マルチサンプリングが無効になってしまうようなのですが これは「2倍の大きさで描画して、表示する際に50%縮小すればアンチエイリアシングかかるじゃん」というやり方をしろということなのでしょうか? それとも何かしら設定があるんでしょうか?
質問です 1.レンダリングターゲットのサーフェイスを変えて描画 2.深度バッファはそのままでレンダリングターゲットを元に戻しす 3.深度値の書き込みOFFで画面サイズのスプライトにさっき描画した内容をテクスチャとして描画 4.深度値の書き込みONにして適当にオブジェクトを描画 このときに、サーフェイスのサイズが正方形だとうまくいくんですが 640x480とか、横に長かったりするとスプライトに描画したときにピクセルが微妙にずれてしまいます。 たぶんサンプリングの問題だと思うんですが、 最後のオブジェクトを描画するときに最初の深度バッファをそのまま使いたいので ずれてしまうと、何もないのに隠れてたり、その逆が起きたりしてしまいます。 ピクセルがずれるのは1ピクセル程度ですが。 どうすればいいのでしょうか?
DirectXにスプライトなど無い。
DirectSoundを使って音楽を再生しようとしているのですが wav形式は再生できたのにmid形式をデバッグなしで再生しようとすると失敗します。 (デバッグありなら再生可能で、デバッグしてなくてもたまに鳴り出す) これはいったい何が原因なんでしょうか。
デバッグありだと再生できる方が超常現象だろう
618 :
616 :2009/02/16(月) 23:53:52
訂正 DirectSoundじゃなくてDirectMusicでした。
初期化で hr = D3DXCreateTextureFromFile( m_pD3DDev, _T("earth.bmp"), &m_pTexture ); の後、 m_pD3DDev->SetTexture(0, m_pTexture); を描画start,endの間に追加したんですが 四角形の色が変わるだけで絵が表示されません、どこが原因なんでしょうか
uvがちゃんと設定されてないんじゃ?
どこかおかしいところありますか? typedef struct { float x, y, z, rhw; //スクリーン座標での位置 DWORD color; //頂点色 float tu, tv; } CUSTOMVERTEX; CUSTOMVERTEX vertices[] = { // x y z rhw color (赤 緑 青 α) {50.0f, 50.0f, 0.5f, 1.0f, D3DCOLOR_RGBA(0xff, 0xff, 0xff, 0xff), 0, 0}, {250.0f, 50.0f, 0.5f, 1.0f, D3DCOLOR_RGBA(0x00, 0x00, 0x00, 0xff), 1, 0}, {50.0f, 250.0f, 0.5f, 1.0f, D3DCOLOR_RGBA(0xff, 0xff, 0xff, 0xff), 0, 1}, {250.0f, 250.0f, 0.5f, 1.0f, D3DCOLOR_RGBA(0x00, 0x00, 0x00, 0xff), 1, 1} };
SetFVF で D3DFVF_TEX1 入れ忘れてるんだろう
m_pD3DDev->SetFVF(D3DFVF_CUSTOMVERTEX); これですか? コメントアウトしてもだめでした
D3DFVF_XYZ だけにしたんですがそれでもだめでした
わかりました D3DFVF_XYZ を D3DFVF_XYZRHW にしたら表示されました ありがとうです!
2Dゲームを作る場合、ポリゴンにテクスチャを貼り付けるのですか? それとも、スプライトで画像を表示した方がよいのですか。
ポリでいいと思うよ
Direct3Dにスプライトなんぞない。
D3DXにはあるけどな
D3DXのspriteは遅いと聞いた 結局内部で板ポリにテクスチャ貼り付けてるだけだろ
DirectXの再頒布パッケージについてなんですが、directx_nov2007_redist.exeというファイルをダウンロードしたところ 中に大量のcabとDXSETUP.exeなどが入っていました。頒布する時は、directx_nov2007_redist.exeを同梱するんですか? 他に何かいるんでしょうか?
>>630 ちゃんテクスチャソートとバッチ処理されてるし
そこらの馬の骨が組むよりよっぽど速い
D3DXにもスプライトもspriteも存在しない。
kimoi
ID3DXSpriteだったらあるが、それはスプライトでもspriteでも無いだろ。 どれだけ頭が悪いんだよ?
そもそも問題は質問するのにまともにソースも出さなければ、 使っているクラスやメソッドの名前すら正確に書かないことだろう。
なにこのめんどくさい人…
ソフトウェアエミュレーションだってスプライトだな 知ったかしたいのは分かるが いい気になってあちこちで書いてるんじゃねーぞ まあ笑えるからいいけどよw
>>638 同感
脳みそにどんだけファブリーズ必要なのか問い正したい
ソースうpすれば多少口悪いかもしれんが 他の改善点も指摘されてためになるってもんだ
>>636 ID3DXSprite メンバ
Begin スプライトを描画できるようにデバイスを準備する。
Draw スクリーン空間に単純なスプライトを描画する。
DrawTransform 指定した行列によってトランスフォームしたスプライトを描画するためのしくみを提供する。
End ID3DXSprite::Begin が呼び出された時点のデバイス ステートを復元する。
GetDevice スプライト オブジェクトに関連付けられている Direct3D デバイスを取得する。
OnLostDevice
ビデオ メモリ リソースへの参照をすべて解放し、すべてのステートブロックを削除する。
OnResetDevice
デバイスがリセットされた後に呼び出す必要がある。
どうみてもスプライトです
ありがとうございました
スプライト君=どれだけ君かよ
>>642 -------------------------
ID3DXMesh インターフェイス
ID3DXMesh インターフェイス
アプリケーションは、ID3DXMesh インターフェイスのメソッドを使ってメッシュ オブジェクトを操作する。
-------------------------
ID3DXFont インターフェイス
ID3DXFont インターフェイス
ID3DXFont インターフェイスは、指定したデバイス上に指定したフォントをレンダリングするために必要なテクスチャとリソースをカプセル化するために使う。
-------------------------
おまえはID3DXMesh をメッシュ、ID3DXFontをフォントと呼ぶのか?
頭が悪いにもほどがある。
>>644 それは
>Begin スプライトを描画できるようにデバイスを準備する。
このヘルプを書いたマイクロソフトに言ってください
正直どうでもいい
正確には〜じゃないとか言って 問題の解決をややこしくするだけの頭の固い奴ウゼー そういうのは初心者じゃないほうの質問スレでやってくれ それでもウザいのにかわりはないけど
彼はきっとsprite(妖精)に捕り憑かれてるんだ
スプライトに描画するというのがよくわからん
>>649 指摘されているんだから、きちんと質問内容を精査して書き直せ。
>>649 >640x480
これがまずいんじゃねぇの?
もしかして・・・
正方形じゃなくて2の累乗とかどうよ?とかテキトーなこと言ってみるw
>>650 変換済みの頂点で作ったポリゴンを2枚用意して、それで四角形を作って
それにレンダリングした内容をテクスチャを張り付けてます。
ビューポートとかどうなってんだよ
>>655 ビューポートはテクスチャのサイズに合わせています
レンダリングターゲット変えて描画するときはZバッファ使ってないの?
描画のx,yを-0.5ずらせば直るパターンじゃないの
1234は時系列なの?
そもそもずれるって、位置がずれるのかサイズが変わるのかすら不明。
>>663 とりあえずテクセルとピクセルの違いについて述べよ。
>>663 >1.レンダリングターゲットのサーフェイスを変えて描画
>2.深度バッファはそのままでレンダリングターゲットを元に戻しす
>3.深度値の書き込みOFFで画面サイズのスプライトにさっき描画した内容をテクスチャとして描画
>4.深度値の書き込みONにして適当にオブジェクトを描画
んじゃ
1でずれるってこと?
2でもう元に戻してて関係なさそうな234の説明は詳しいけど
ズレてるのは1の部分なんでしょ?
>>665 1の内容を3に描画したときにずれてしまいます
>>666 意味がわかんねぇw
1ができてるってことはテクスチャにはちゃんと描画できてるんでしょ?
後はポリゴンにテクスチャ貼り付けて描画するだけじゃん
ズレてるのは何?
仮に1のテクスチャを使わないで描画するとズレない?
>>667 普通に1を描画したときと
1をテクスチャに描画して画面サイズのポリゴンに貼り付けたときて
描画した時とで、ずれてしまうんです
1を描画した時に使った深度バッファをそのまま使って4のオブジェクトを描画したいんですが
3がずれてるため、深度バッファの位置と描画されてる1の位置がずれてしまいます
バックバッファとテクスチャのサイズ違うのに深度バッファ使いまわすから?ってこと?
いいからもうソースだせよ
うp
>>669 バックバッファのサイズとテクスチャのサイズは同じ大きさにしてます
板ポリゴンもID3DXSpriteもやる事ぶっちゃけ一緒だから 行列で自由にうねうねとかしないならどっちでもいいかと
>>668 日本語がわかんね
1は絶対ずれてねぇ?
でも1を描画したときにZバッファがなんか怪しいと?
んでレンダリングターゲットを元に戻してZバッファを使って描画してみると
なんかおかしいと・・・
つまり、1でレンダリングターゲット切り替えたときにZバッファなんかおかしくなったんじゃね?
675 :
デフォルトの名無しさん :2009/02/18(水) 00:09:42
なんでここの人間ってD3DXとかスプライトの質問になると過剰な反応示すの?
とりあえずテクスチャがそんな変なサイズで本当にできてるかあやしくね? レンダリングターゲットにしてるテクスチャをGetDescしてサイズ調べてみろ 作ったサイズと違うなんてのはままよくあること
ウザいのがおとなしくなってるのに蒸し返すなよ
Zソートじゃねーの
>>678 一番上でZバッファがONかOFFかが一番大事なところじゃねぇの?
んでやっぱレンダリングターゲットを変えた後のZバッファがうまくいってねぇんだろ?
Zバッファ云々の前に、箱を書いたテクスチャを思ったところに描画できないってこと? だとしたら0.5ピクセルずらせば解決しそうな予感。
検証オススメ ●仮にSetRenderTargetでZバッファを設定だけして テクスチャに何も書き込まずに元に戻して描画するとどーなんの? ●なんかマジでビューポートあってんのかきになりまくりだろ テクスチャをGetDescしてビューポートとサイズあってるかたしかめてほしい 俺の脳みそではこれが限界だ
>>681 それって正方形にして正常に描画できてるときにずれたりしないんですか?
>>682 Zバッファのほうはうまくいってます
GetDescも確認しましたが、サイズはあってました
>>683 ビューポートをちゃんと設定すれば、っていうのは、普通とは違う方法で設定するっていうことですか?
>>684 いや、そこまでちゃんとできてるなら0.5ピクセルっぽいねw
三角形ラスタ化ルールでググレ!
>>685 三角形ラスタ化ルールってのがあったんですね
初めて知りました
0.5ピクセルずらすとか応急処置っぽくて嫌だったんですが
ちゃんと理由があったんですね
>>687 再配布パッケージのexeだけでいいはず
>>686 ちゃんとDirectXのドキュメントにもラスタライズの項目に説明されてるじゃまいか
Xファイルのフォーマットの仕組みはどうやって勉強すればいいですか? 10からXファイルがなくなったと書いてあるのをみたんですが、もっといい方法でできるようになったからいらなくなったんでしょうか? いまからXファイル勉強するいみありますか?
ヘルプに説明が入ってるだろう。
3DのRPGを作ってるんですが、 3D酔いが酷くて狂いそうです なにか酔わなくなる特殊な描画方法はあるんでしょうか?
その辺はいろいろ研究してる人もいるみたいだけどよくわかってない。 入力に敏感に反応しすぎたり速く動くと酔いやすいね。 カメラを調整して歪みを減らすとかもきくかなあ。
>>688 ありがとうございます。
中身を取り出さず、ダウンロードした物をそのままですか?
好きにしろよ 「自分でインストールしてね」って注意書きつけるならそのままでもいいし 親切設計でアプリにインストーラーからシェルかなんかで実行できるようにするなら 展開済みのをものを使ったほうがいいだろうし
分かりました。同根だけにしときます。
Xファイルの表示は出来たんですが 地面はどうすればいいんですか? ものすごくでかいXファイルで小さいViewでそれらしくなるんですがファイルの容量もでか過ぎます もっと地面をでかくするのに限界を感じるんですがどうすればいいとおもいますか?
モデルの大きさとファイルの大きさは関係ない 容量がでかいというならもっとローポリでモデルを作れ 広くしたいなら地形を分割して必要なエリアだけ読み込み表示
DirectInputのDirectInput8Create第3引数IID_IDirectInput8で外部シンボル未解決エラーがでるんですが #include <dinput.h> #pragma comment(lib, "dinput8.lib") とあと何が必要でしょうか
>>699 #define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>
#include <dxerr9.h>
3つとも入ってますがだめです
3Dのクラスと一緒にしたのがまずいんでしょうか
#pragma comment(lib, "dxguid.lib")
もしくは#define INITGUIDか
dxguid.libでした。ありがとう!
Xファイルの3Dのアニメーションってどういう仕組みなんですか? アニメと同じでコマごとに全体のポリゴンが時間速度とセットで一緒になってるだけなんですか? それとも頂点の移動が記録されてるんですか?
>>706 かすりもしてない
一度ググって下調べしてから
これってどういう意味ですか?って質問をしなおせ
いまの状態で1から教えるのは無理
709 :
デフォルトの名無しさん :2009/02/18(水) 19:00:19
DirectXのClearRenderTargetView()で二つ目の引数がfloat4個の配列なのですが、 なんで3個じゃなくて4個の配列が必要なのでしょうか?
なぜ疑問に思うのかが疑問だ
711 :
デフォルトの名無しさん :2009/02/18(水) 19:47:39
だって、RGBって数字3個で色を表せるんですよね? 最後のAってなんの意味があるのか前から疑問。 いっつも1.0fにしてます。
これも釣りなのか? アルファ値のAだぞ
713 :
デフォルトの名無しさん :2009/02/18(水) 19:53:52
アルファ値のAってなんですか?
714 :
デフォルトの名無しさん :2009/02/18(水) 19:54:52
すいません、調べたらすぐに出てきた コンピュータが扱うデジタル画像データにおいて、各点に設定された透過度情報のこと。完全な透明(無色)から、完全な不透明(背景の色をまったく通さない)まで設定することができる。 コンピュータが画像を扱う場合、色情報として、各点についてR(赤)・G(緑)・B(青)の三原色の情報をもち、その組み合わせで色を表現する(CMYKモードの場合は4色)。点の透明度を表現する場合にはこれにアルファ値を加え、4つの情報の組み合わせで一つの点を表現する。 アルファ値は、データ形式やソフトウェアによって扱える場合と扱えない場合がある。扱える場合、各点の色を表すデータに追加する形で表現される。この追加されたデータ領域をアルファチャンネルという。
715 :
デフォルトの名無しさん :2009/02/18(水) 19:56:49
すいません、でもClearRenderTargetView()でA値を変えても表示される内容は同じなんです。 だから分からなかったス。
アルファは透明度として使うことが多いというだけで、べつに透明度に 限ったものでもないけどな。用途に応じて何入れてもいい。 アルファを透明度として使う設定をしなきゃ、透明度にはならない。
αは透明度じゃなくて不透明度
>>715 フラグ立てないとアルファは有効にならんよ
719 :
デフォルトの名無しさん :2009/02/18(水) 21:53:19
フラグですか? どんなフラグか教えてください。 お願いします。
>>719 腑抜けが
さっきから度肝を抜かれる発言ばっかりだな
おれ、ビルドが成功したらうんこするんだ
722 :
デフォルトの名無しさん :2009/02/18(水) 22:14:03
じゃあこれを教えてください。 void Func() { Device->ClearRenderTargetView(); Device->RSSetViewports(); Device->OMSetRenderTargets(); // Sprite の設定 SwapChain->Present(); } こんな関数をMain関数から繰り返し繰り返し呼んでるんですが、 どうして、RSSetViewportsを毎回よばないとだめなんですか? こんなの1回どこかで呼んどけばいいような気がするけど。 お願いします。
こんなスレにいられるか、俺は○○○スレに戻る!
724 :
デフォルトの名無しさん :2009/02/18(水) 22:20:51
ごめん、、、
自分で呼んどいて 「何で呼ばなきゃいけないんですか」 って言われても 呼ばなきゃいいじゃんとしか言いようがないわ
>>722 レンダリングターゲット切り替えないなら呼ぶ必要ないんじゃね?
>>722 どこかで、ClearState してるんでね?
エロ画像くれたら教えてやる
これってグローバル変数・関数の弊害だよねw 1つの関数を呼ぶことでDirectX内部にある変数の動きがわからない っていう・・・ちゃんとユーザ側にすべてのインスタンスをもたせて 関数の引数にいれるように作ってくれればよかったのにねw
自分で管理すればいいだろ
>>730 でもDirectX側のある関数を呼んだことで変化する
DirectX内部の変数はやっぱりわからないでしょ?
ちょっとそのレスは的外れだと思うぜ
内部の変数?ってのは状態の事言ってるんじゃないの? 状態なら自分で設定したんだから把握できるしGet*系のメソッドもあるしなにを知りたいのかわからんのだけど
あー、ここ質スレだったから>732とかスルーしていいわ
アルファ付フレームバッファを作りそれを動的なテクスチャーとして使いたいのですが、 このフレームバッファのアルファ値へ書き込むにはどうやればいいでしょうか?
ぴくせるしぇーだー
BLENDOP
InitDInputのSetCooperativeLevelに渡すhWndなんですが、ヘルプにはアプリケーション ウインドウへのハンドル を渡すと書いてあるんですが、MFCのCViewで表示し、この中だけでDirectInputを使いたい場合何を渡せばいいんでしょうか というかこれ実現可能ですか?
Inputだけ使いたい場合はどうすんだ?w
739 :
デフォルトの名無しさん :2009/02/19(木) 07:51:41
フォーカスがあるときだけ処理したらいーじゃない
>>734 明示的に書き込みを禁止しなければ、デフォでα値も書き込まれるが。
ただ、ちゃんと書き込みたいα値が出力されているかは、シェーダなり
テクスチャステージの設定次第。
モデリングソフトによくある面があらくてもきれいに見えるスムーズ機能はDirectXにあるんでしょうか? もしかして自力で計算して作るんでしょうか?
>>741 あれは法線を調整することで、ライティング結果がなめらかになるようにしてくれているだけ。
スムージング済みのデータをもってくれば、DirectXでも同様に見える。
・ちゃんと(せっかく改良してくれた)法線を出力する
・Direct3DXについてる法線再計算関数を呼ばない(呼ぶと、普通の法線に戻されちゃう)
微妙に質問の答えになってなかった。 スムージングをかける機能はDirect3Dにも3DXにも存在しないと思う。
nurbsとかのことを言ってるんじゃないかと予想
スムージングの機能がないってことは、スムージング済みのXファイルを作るってことはポリンゴ数増えてるってこと? GPUの能力でスムージングするのかと思ったんだけど もしかしてXファイルってかなりやってることの中身理解できてないとエクスポートするソフトによって違いが出すぎるような気がするんだけど 大丈夫なの?
君が言うスムージングってどれのこと? 具体的な例出してみてよ。
D3DSHADE_GOURAUDのことじゃないよな
それははスムージングとはいわないだろう グローシェーディングでもライティングは頂点単位だから ポリゴン荒いと段差がみえちゃうのをどうにかしたいって話じゃないの? 頂点シェーダから法線と視線のベクトルも出力して ピクセルシェーダでゴリゴリ計算すれば出来そうな気がするけど ただしピクセルシェーダに掛かる負荷を無視できる環境に限るが
初心者は用語の正確な意味なんか把握してない
もしかしてDirectInputってフルスクリーンのときだけしか使えないんですか? ずばりそう書いてあるんですが
>>752 そんなことが書いてある本は窓から捨てましょう
私が拾いに行きます
3D起動後画面が一瞬バチッってなるんですがどうしてでしょうか
バチって言われてもよくわからないけど、ウィンドウ作成後Direct3Dでウィンドウに描画する前は、 普通のウィンドウズアプリケーションと同様にアプリが窓描画するから、白色とかだと目立つかもしれない。 これが原因なら回避するためにウィンドウクラスの背景ブラシに黒色を指定するとか。
漏電してる
thx。こうやったら一回止まりました。どうも2回バチッとなってたみたいであと1回止めたいです。どこでしょうか wcex.hbrBackground = (HBRUSH)(NULL_BRUSH);
どのタイミング? WM_CREATE中のWM_ERASEBKGNDか?
WM_CREATEはどこにあるんですか?メッセージ処理は WM_COMMAND、WM_PAINT、WM_DESTROYしかないんですが 自分でcase:WM_ERASEBKGNDを書いてスルーさせなきゃいけないんでしょうか
WM_ERASEBKGNDが来るのはBeginPaint呼んでる先から来る。 でもブラシ無ければこない。 wcex.hbrBackground = NULL;か (HBRUSH)GetStockObject(NULL_BRUSH);じゃないのか?
ほんとに止まるとは思ってませんでしたw その書き方で止まりました。ありがとうございました!
762 :
デフォルトの名無しさん :2009/02/19(木) 20:40:44
便乗で質問させてください。 wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); これって何をやってるんでしょうか?
763 :
722 :2009/02/19(木) 21:12:25
>>725-729 ありがとうございます。まだ解決できてません。
ウィンドウをResizeした後に
Device->RSSetViewports();
Device->OMSetRenderTargets();
をやらないとスプライトが表示されなくなるので、Resizeの処理でClearState()というのを
やってたのかと思ってみてみたのですが、
Device->OMSetRenderTargets(0, NULL, NULL);
Device->CreateRenderTargetView();
RenderTargetView->Release();
SwapBuffer->ResizeBuffers();
こういうのが動いてそうなのですが、この中でClearState()やってるかどうかは
どうやればわかりますか?
プログラムの書き方としては、ウィンドウをResizeした後に
Device->RSSetViewports();
Device->OMSetRenderTargets();
をやっとけばいいというのは分かったのですが、これが必要だというのは
何を理解すればわかるでしょうか?
だからグローバル変数・関数の弊害だって言ってるだろ MSが使って組んじまったんだから今更ガタガタ抜かすな これから自分のプログラムでグローバル変数や関数を作らなければいいだけの話
口が悪いですね
んでもリサイズだからビューポートは変わるんじゃね? いや、でもかえる必要ないときもあるよなぁ・・・
>>762 まずハンドルかどうかを上位バイトで判断
ハンドルじゃなかったらCreateBrushするんだと思うよ
+1してるのは0の定義がすでにあったから
座標関連が理解できないんですが、物体を3次元座標、たとえば(10,10,10)に置いて、 その座標が見えるようにカメラの位置を(10,10,0)から(10,10,100)を向いて設置という風に配置していくんでしょうか? それともワールド座標っていう原点を作ってそこからの相対的な座標であらわしていくんでしょうか?
3回読み直したけど何を聞きたいのか分からん
771 :
デフォルトの名無しさん :2009/02/20(金) 18:39:43
お前が低能なだけだろwww
空間上の物体の配置の概念が知りたいんです。 メモリの上限の関係から空間の中心、たとえば(INTMAX/2,INTMAX/2,INTMAX/2)を中心とするのか 基本の点があって、そこからすべての物体を相対座標で配置しているのかを知りたいんです
物体は(0,0,0)を原点とするワールド空間に配置する
774 :
デフォルトの名無しさん :2009/02/20(金) 19:11:59
いんとまっくすわるに? いんとの中心なんて考えるまでもなく零ちゃうんけ?
775 :
デフォルトの名無しさん :2009/02/20(金) 19:14:38
(1)ローカル座標→(2)ワールド座標→(3)ビュー座標→(4)射影座標→(5)スクリーン座標 でしょ。 (1)はそれぞれの3Dオブジェクトごとの座標系 (2)はそいつらをまとめて1つのシーンの中に配置したときのその座標系 (3)は(2)の中にカメラを置いて、そこが原点になるようにした座標系(視線の向きも考慮) だから、カメラの位置とかはワールド座標では考慮しない。ワールド座標をビュー座標に 変換するときにカメラ位置を考慮する。
>>773 thx
そうすると、ワールド座標変換っていうのがよくわからないんですが
これは空間に地面などの基本にしたい物体の中心などの座標を指定して、
そのあとに追加する個別の物体を地面の中心などを原点として、結果的に空間の相対座標になるようにするためのものなんでしょうか?
>>775 なるほど。メモリ上の(0,0,0)を原点とする空間のことをローカル座標っていうんですね
変換行列っていうのは基準点に元の空間を持ってくるってことなんでしょうか?
たとえばワールド変換した地面をカメラで見る場合は地面をワールド座標からビュー座標に変換して、カメラを移動させるのではなく、
ローカル座標は変わらないが、ワールド変換した相対地形座標をローカル座標上でカメラのローカル座標から見える位置に移動させるってことなんでしょうか?
>>776 ワールド座標が、世界そのもの。
ワールド座標を何かに合わせるのではなく、全てのものをワールド座標に合わせる。
個々の物体の中心は常に(0, 0, 0) これを、たとえば(10, 10, 10)に配置するように変換することをワールド座標変換
>>778 まず絶対に物体は地形も含めてすべてワールド座標に変換するんですよね。
もうここはローカルから見ると相対とか考えずにまず最初がワールドと考えることにします。
でなんでビュー座標とかが存在しなくちゃいけないんですか?
これはカメラの位置を原点として見えるものの位置をまたワールドから相対で見た座標ですよね
ローカル座標のカメラの位置と方向からすべてのローカル座標の物体が見えるどうか判別して表示してくれればそれで済むんじゃないんですか?
とすると、そもそもワールド座標すらいらないことになるんですがどういうことなんでしょうか。なんでわざわざ変換してるのかがわからないです
>>780 カメラの位置ってワールド座標上の数値やん・・・
そうだよ。 ワールド座標変換なし(単位行列をかける) ビュー座標変換なし(上に同じ) で 総合変換行列をかける でも出力結果は同じ。
あーやっぱり! これで全座標系を使いこなせそうです ありがとうございました!
そもそも 座標系の変換なんて LxWxVxPとしようががLxExEx(WxVxP)としようが一緒。 ただWとかVとかPの変換をするときに、それぞれ固有のパラメータがあるから それぞれ別に計算してるだけに過ぎない。
ワールド座標2つ作っても別にいいしね 互いの世界は関われないけどw
物体の回転は出来たんですが、移動がわかりません。 X = X+1; とかで移動は出来るんですが、物体が向いている方向に移動するには 回転行列*進む距離という感じなんでしょうか?どう書けばいいんですか?
向いている方向分のベクトルを正規化して力量を掛けて、その結果を足すだけ。
掛けた後足さなきゃいけないのか。 ありがと
画像を何枚か重ねて表示しようと思って 頂点を設定→ロック→メモリにコピー→ロック解除→画像読み込み→画像をポリゴンに貼り付け→描画 というやり方でやってるんですが、頂点の奥行き(Z方向)の設定にかかわらず描画した順に向こう側から描画されているようです。 エスパーの方、思い当たる原因は何でしょうか?
Zバッファ
>>790 Zバッファの設定1個忘れてましたサンクス
792 :
デフォルトの名無しさん :2009/02/21(土) 02:09:26
スプライトをウィンドウの中に4個表示させたいのですが、それぞれの位置はViewportを別々に指定することで やればいいでしょうか?
別にそれでもできるけど座標なり行列で指定する方が後々楽
お題。 ISO/IEC 14882:2003とXLib、Win32APIの範囲内でスクラッチからエディタを作る。 Win32、XLibともに標準C++ライブラリとかぶる機能があるが、この場合 標準C++を優先して使う。 これは、少しでも移植性を高めるための努力と考えてほしい。 また、拡張性の担保ともなりうる。 これは時間かかるけど、やりがいあるよ?
すいません。誤爆しました。
796 :
デフォルトの名無しさん :2009/02/21(土) 15:31:50
D3DXMatrix m; m = m + 1; // OK m = m + 1.0f; // NG 行列計算で、D3DXMatrixが、Floatとの足し算がコンパイルエラーになるのに、 Intとの足し算はコンパイルできてしまいます。でも、D3DXMatrixの定義を見ても、 Intとの足し算は定義されていないように見えるのですが、定義されてますか?
1はintじゃない
>>796 まず大文字小文字はきちんとしようね。
D3DXMATRIXにはoperator FLOAT* ();があって、
これによって暗黙のうちにFLOAT型の生ポインタに変換できる。
んで、ポインタに整数を足して、その後D3DXMATRIXのコンストラクタ
D3DXMATRIX( CONST FLOAT * );によってまた暗黙のうちにD3DXMATRIXに戻るというわけだ。
もちろん意図しない動作。 コンストラクタをexplicitにするか、operator FLOAT*();を消すしかない。
std::stringにoperator const char*();がなくて代わりにc_str()があるのはこの理由によるらしいね。
799 :
デフォルトの名無しさん :2009/02/21(土) 16:16:12
ということは、D3DXMATRIXはD3DMATRIXを継承してて、D3DMATRIXはfloat型を16個もつ構造体だから、 D3DXMATRIXがFLOAT型の生ポインタになると、FLOAT型の配列の先頭(float[0])を指すポインタになるということですよね? そこに+1すると、その生ポインタは先頭の次(float[1])を指すようになり、今度はそこを先頭にして D3DXMATRIX(CONST FLOAT *)によってD3DXMATRIX型に戻るということですか? つまり、float1個分だけ後ろにずれる、と?
そそ、そういうこと。
801 :
デフォルトの名無しさん :2009/02/21(土) 17:23:08
すごいス。 実験してもその通りの結果になりました。 ありがとうございました。
POD型の継承って基底クラスにvirtualデストラクタがいらないんだっけ?
むしろvirtualデストラクタがあったらPODじゃないんじゃね
805 :
デフォルトの名無しさん :2009/02/21(土) 20:06:30
スプライトを描画するときに、 sprite.TexCoord.x = 0.0f; sprite.TexCoord.y = 0.0f; sprite.TexSize.x = 1.0f; sprite.TexSize.y= 1.0f; とかやってるのですが、このfloatの数字はテクスチャーの何を表してるんですか? TexCoordが左上の点、TexSizeがそこからの高さと幅、というのは分かってるんですが、 Pixel値じゃなくてfloat値になっててしかも、2.0fとかもありだし、よく分かりません。
DirectXにスプライトなど存在しない。
Tex: テクスチャ 0.0f: テクスチャの0px位置 1.0f: テクスチャのpx幅
DirectX に SQLite など存在しない。
D3DXは使うなって常識だろ
ヘルプにもちゃんと「スプライト」ってちゃんと書いてあるw
D3DXって何でいかんの?
都市伝説
D3DXに頼らない俺かっけえええええええええ
バイナリ依存
バイナリ依存しない俺かっけえええええええええ
>>811 DirectXにフォントなど存在しない
DirectXにメッシュなど存在しない
DirectXなど存在しない
たしかマイクロソフトが出してたはず 最新のバージョン11
マイクロソフトなど存在しない
きちんと固有名詞があるものに普通名詞を使う奴は、 注意力も足りなければヘルプも読まないのが特徴。
823 :
デフォルトの名無しさん :2009/02/22(日) 09:57:06
821など存在しない
そんな言葉遊びにこだわるなんて馬鹿なの?死ぬの?
過去に質問した時に叩かれた私怨なのだろう。
現場で「ID3DXMeshがどうたら」なんてしゃべってる奴いねーよ ID3DXMesh使ってようが自前で描画してようが メッシュはメッシュだろ スプライトも同じ
現場でID3DXMeshを使うような池沼はいないからそれは当然だろう
結局は同意なんじゃないか
同意
このスレ、DirectX10使ったことないド素人ばかりでワロタ 終わったなw
DirectX9で市販ゲームを作っている人間はド素人っと
新しい技術を取り入れて好きなものを作るのは、それこそ素人の特権。
個人がつくるヘボゲーなら8でも十分だろ なんでわざわざ10なんか使わなきゃならんのか VISTAマンセーなの?
最新のDirectX使う俺かっけええええええええええ
', ./:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::_ハ_,,. -┐ / / ', ___,,.へ./:::::::/\:::::::::::::__::::::::::::::::::::_;;:-‐''" |_____ / ', 「 `` ヽ、_ハ-'ァ´ ハ⌒ヽ-''" _,,. / / rソ \__ >''`'ー---─'--< _;:イ___ / _,、∧/ \ く >'"::;:- '"´ ̄`ヽ、::::-─- '"´ ̄ `ヽ、:::::::::`"'< 「 ノ>'"_:;ア´ ヽ、::::::::::::< _,,.:::''":::::ア´ / , '´ / i ', i Y:::::::::::::_;> 使 何 ..,,_ く;::::::::::::::/ / / i. 、,' ハ ,ハ ,i ハ_ iヽ;__;;;:::::> う を `ヽ、::::ノ ,' .i ハ i\/ ', / i / i ,.イ´./i ! i / .か _____ ,,.イ i i ./ ァ'" ̄`ヽー/ | /,ァ''" ̄`ヽハ ハ ∠_ よ ∧ '" /| ノ ,ハイ i'´'`i レ' i'´'`i. ト| / i ヽ7 り \∧/ Vi/ |_,. -‐ァi/ !__,リ !__,リ ' レ'_ン i /へ / | `'' ー- -‐ ''´ i ハ' ハ i\/V\/ 自 何 ∠,ハ "" ` ""〈 ,.イ ./ ! ', ---─ 分 を /从 /´ ̄`' ー--‐ '"´ ̄`ヽ ハ ノ /‐ 、' ヽ. を. 作 /_ ,.へ. i `'' ー- ー─-‐‐ ''" i ,.イ人iハr' ヽ、. ヽ. ', - ..,,__ 語 る /| .ノヽ、r'´ ``ン'7 i ノ ヽ. ヘ/ れ か く |/ i::::::`i>.、.,,_______,,.. イ:::::::iヽへi Y \ よ で > ,イ::::::::::|ヽ、.,____l_」___,.イi::::::::>-く | ', \ !!! < |/:::::::::::|_____ |o| __rへi_ン-‐ァ _r'-イ> ',
米国じゃVistaからXPのダウングレード料金の訴訟が起きてるご時勢に DirectX10とかワロスワロス
このスレとDirectX総合スレってなにが違うの?
板が違う
>>835 wwwwwwwww
どっから持ってきたそのAAw
>>830 お前スレタイを100回声に出して読め
初心者質問スレだぞ、ここ
>>836 でもそいつら今の状況だとWindows7が出ると同時に死滅しそうだけどね
MSDNライブラリが開くのいちいち遅いんだけど皆どうしてる?
1.SSDを買う 2.Windows7Betaをインストールする
3. 索引つきで全部印刷する
SSDにVisualStudioとMSDN入れるとマジ早いよ。 32GBのならもう一万しないから騙されたと思って買ってみるといい。
Windows7がでたらDirectX11も出るから 結局10はいらない子
10も11も基本は一緒。 このスレの連中は一生9で困らないようだから関係ないかw
>>831-836 は時代についていけない取り残された無能だろ
初心者=DirectX9前提に勘違いしている可哀想な奴もいるし
7から8にいったときもそんな感じだったな 8が浸透するまえに9が出て 9はバージョンアップを繰り返してわけわからんかったなw
9でいいならXNAやった方がよくね?
ここには開発者はいないのか 普通はなるだけ古いバージョン使うだろ 9で出来るなら9を使えばいいし 10でしか出来ないなら10を使えばいい 取り残されるとか訳解らん
質問者が9使ってるか10使ってるか確認して回答できそうならするだけじゃないか 今9と10どっち使うのがいいかそんなに揉めたいなら他所でやってこいよ
初心者にDX10は辛いらしいな。 FVFとか固定機能消えたし。
私ぐらいの初心者だとどっちにしろソース丸コピペなのであまり辛くないです
バージョンの違いを聞き出そうとするのはやめろ 素直になれ
.NET使ってるやつはほとんどいない
DirectX9=時代遅れってどんだけ時代が見えてないんだよ
9を完全に使いこなせる上で10もやるならいいだろうけど 単に最新だからというだけで10から勉強し始める初心者はどうなんだろう? 個人の趣味でやるんだったり就職は5年後です、っていうならそれもいいだろうが
世間がセブン状態になるまでスルーでいいお
SSE4非対応アプリでぼろ負けするので買えません>< クロック勝負のLameエンコも惨敗です^_^;
開発ツールがVista未対応だったりすることが多いから Vistaマシンが一台もない現場もざらにある
馬鹿しかいないな しかも誰でも思いつきそうなことをよくひねりもせず言えるよな 開発現場は常に最新も入れる。対応させないといけないから
常にとか言い切るお前がどう見ても馬鹿 一瞬で反例を挙げられて論破
Vistaに対応してないツールなんてあんのかん?
>>862 実行環境はその通りだけどね。SDKは開発環境だからね・・・
ボリュームゾーンがそこにあるならともかく、そうでないときは
むりにさせないね、商業ソフトウェアは特に。
個別の研究くらいはやるけどな。
基盤メーカとかに 開発マシンはVistaですって言うと Vistaでの開発はサポートしてませんって普通に言われるぞ
カーネルモードドライバ開発・署名取得が面倒だからだろう。
最新の環境でも実行できることは確認するけど 常に最新の環境で開発できるとか業界に夢みすぎじゃね? 学生?
プログラマのPCなんて常にグラフィッカーのお下がりですよ
でも換装すれば結構使えるのが嬉しい
>>851 が正解。
勉強という意味なら最新もいじったりはするが、開発ならなるべく古い枯れたものを使う
RM いじってくる。
家庭用ゲームの開発だと結構ギリギリでも最新ライブラリに入れ替えちゃうような気も
ギリギリなんてろくにデバッグもできない状態で、そんな冒険するわけないだろ なんでそんなに頭が悪いんだ?
DirectXのSDKならいくつも同時に入れてるだろうw
いやギリギリってマスターアップギリギリのわけないじゃん そんな冒険するわけないとまでわかってるのになんでそこまでのギリギリだと思うの?
普通ギリギリっていうとマスター直前を思い浮かべる気がするけど 後半とか終盤とか言いたかったんだろうか
DDBの二次元な左上座標(x, y)から DIBのアドレス(32bpp)に変換する場合 dib[WIDTH * (HEIGHT -1 - y) + x] より短い文にならない?
単文より短いのはなかなか思いつかないなあ
WIDTHをWに、HEIGHTをHにするとか
dib[HEIGHT-1-y][x]
dib[WIDTH * y + x]でいいじゃないか。 top down dibで作ればいいだけだ。
884 :
デフォルトの名無しさん :2009/02/23(月) 20:17:23
マクロ使えばいいじゃん ばっかみて
885 :
デフォルトの名無しさん :2009/02/23(月) 22:00:28
ShaderResourceViewとRenderResourceViewってどう違うんですか? RenderResouceView:パイプラインがバックバッファに書き込むときのインターフェイス ShaderResourceView:パイプラインが画像ファイルを読み込むときのインターフェイス という理解でいいですか?
たぶんそう
887 :
デフォルトの名無しさん :2009/02/24(火) 09:40:10
テクスチャを貼って デバイス->SetRenderState(D3DRS_LIGHTING, TRUE);にするとテクスチャが真っ黒になってしまう デバイス->SetRenderState(D3DRS_LIGHTING, FALSE);にすると普通にカラーで表示される どこが悪いんだろう
D3DRS_LIGHTINGをTRUEにするならちゃんとライトの設定をしないといけない。 確かデフォルトでは光源なしじゃなかったっけ。 どの関数で設定するのかとかは忘れた
ライティングの設定
890 :
デフォルトの名無しさん :2009/02/24(火) 09:56:35
->SetLight( 0, &light ); ->LightEnable( 0, TRUE ); ->SetRenderState(D3DRS_LIGHTING, TRUE ); ->SetRenderState( D3DRS_AMBIENT, 0xff030303); 一応これだけはやっておいたんだがわからん・・・
D3DX使えばDIBだのDDBだのとは無縁だろ
>>887 どこが悪い以前に、最低限チュートリアルは全部終わらせたんだろうな?
893 :
デフォルトの名無しさん :2009/02/24(火) 10:30:16
ウィンドウを開いて、その中の一部だけDirectXで使って、残りは普通のコントロールを表示させるためには どうすればよいでしょうか?
Direct3Dのクリッピングで描画範囲をしぼるって手もあるけど ウインドウ分けするのが楽でいいよ。 メインウインドウの上にサブウインドウ作って、そこだけDirect3Dで描画
>>878-884 このスレのレベルがわかるなw
やっぱり
>>831-836 こいつら10使えない言い訳しているだけだなw
11が出るのに今時9はないわw
言い訳するな低脳
一生言い訳しながら9使ってろよw
つーか 10使ってない=移行するのが面倒or難しいじゃなくて 10じゃ現状仕事にならんってだけ
下請け会社の万年下っ端社員には無理もないwwwwwwwwwwwww もうみんなvistaだよ
なぜ仕事にならないの?
DirectX10のパラダイムシフトについていけなかった人達が市場を言い訳にして初心者を相手にしているスレ
しかしまぁこうバッサリとDX10がVista専用となるとは思わなかったなぁ。 XPの普及率バカにならんのだしもうちょっと待てば良かったのに。 MSはそれでVista普及するとか思ったのかしら。
しかしまぁこうバッサリとDX11が7専用となるとは思わなかったなぁ。 Vistaの普及率バカにならんのだしもうちょっと待てば良かったのに。 MSはそれで7普及するとか思ったのかしら。
話ぶった切るけど サンプルのMultiAnimationのアニメーションセットの圧縮をしてるところ AddCallbackKeysAndCompress内の ID3DXKeyframedAnimationSet::Compressの第2引数 FLOAT Lossinessってつまりなんなのか解る人いる? ヘルプによると Desired compression loss ratio, in the range from 0 to 1 なんだけど、結局なんだよって感じ 追加するコールバックキーの数が増えるにしたがって減らしてるような感じではあるけど なにか根拠があってこの値なのか適当なのか
キーを減らすならエクスポート段階でやらないと話にならない
市場とか関係なく最新の技術使うのが偉いと思ってるのならD3D11とかケチなこと言わずに GLでnvidiaの最新の拡張でもいじってればいいのに
10が最新の技術とかどんだけ時代遅れなんだよ
Vistaの普及率はまだ30%未満
世界的にみたら20%いくかいかないかだろ
Vista自体普及していないことに加え、PCの出荷比率は圧倒的にノートが優勢。 そしてVista発売後に出荷されたノートのビデオチップが、圧倒的割合でDirectX10に対応していない。 どうしようもない。
910 :
デフォルトの名無しさん :2009/02/24(火) 22:45:55
ねぇねぇ、DirectXで地デジチューナーの制御プログラムとか 書いてる人いる?
GLは拡張のつぎはぎがうざい。
913 :
デフォルトの名無しさん :2009/02/24(火) 22:49:59
ありがとう。
Directx9でスキンメッシュのアニメーションを再生する最小のコードを教えたもれ
SDKのサンプルのSkinnedMeshのコードから 自分の使わないSkinningMethodを削除したものが最小
>>897 まあ、国内のPCゲーム市場は壊滅的だからな
XP延長サポ突入、Vista SP2、7、2k終了、 無駄に荒れそうなイベント盛り沢山だな
すくなくともWindows7はかなり出来がいいし、 みんなVistaはスルーしてXP->7って感じになりそうだがな。 XPじゃドライバモデル的に限界にきてるし7でDx10/11が元気になるといいが・・・。
11は Vistaに載る
920 :
914 :2009/02/25(水) 11:26:11
DXUT.cppその他が大杉て嫌になるよ 日本語訳とかしてるページないかな?
そういえば 最近まるぺけがスキンメッシュのソース公開してた気がする 中身みてないからどれくらい分かりやすいか知らんけど
市場って、最近のVista搭載ノートPCはDX10に対応してないの? SM4.0は動くけどメッチャ遅いとかなの?
10で使えて、9で使えない機能ってそんなに多かったっけ? なんで対応PC減らしてまで10にしなきゃならんのかわからん
924 :
デフォルトの名無しさん :2009/02/25(水) 16:13:52
Crysisやロストプラネットに対して 「なんで対応PC減らしてまで10にしなきゃならんのかわからん」 と言うようなものだな 要するに低脳はガタガタ文句言わずに9だけやってればよい テクスチャ解像度やシェーダのOn/OffなどグラフィックスレベルをsettingできるのもPCゲーの常識 両バージョンに対応して当たり前 「国内のPCゲーム市場は壊滅的だから」「対応PC減らしてまで」とか甘いにもほどがある
理想論にもほどがある 予算が倍になるならいくらでもやるがな
>>925 要件に対して「これはできないあれもできない」とすぐ駄々こねるタイプのプログラマーだな。
口癖は「予算が倍になるならいくらでもやるがな」
これはハイスペック厨ユーザーが混じってる流れ
>>924 なんで「最先端技術を使うこと」が要件に入ってるゲームを例に挙げてるんだよw
それなら遠慮せずに10使うわい
と思った時には技術の蓄積が無かったのでよそにかっさらわれる、と。
結局「10使う必要はない」と自分に言い聞かせているだけかw だっせーw
初期化は面倒だけど、その他は10のほうが柔軟性があって楽だよ
おまえら質スレで議論すんなよ そういうスレ違いの主張はスプライト君だけで十分だ
933 :
デフォルトの名無しさん :2009/02/25(水) 18:58:45
社長が9のexeも10のexeも両方作れって言ったときは この馬鹿なんか言い出したよと思ったけど 実際やってみたらたいした時間かかんなかったからどうとでもなんだろ
一人でがんばりきれなくなって、とうとう妄想を語り始めた 悲しきかな
実際国内でPC向けでDirectX10対応ゲーム作ってる所ってどこよ? アミューズメント業界でDirectXだとほとんど XPEmbedded+DirectX9対応ボードがほとんどだから使いたくても使えん セガが今度SM4.0対応基盤を出す見たいだけどね
ざっと調べたらカプコンの一本だけしか見あたらない。 ひどい有様だ。
ロコロコみたいなプニプニした表現ってどうやってやるんだろう・・・
物理演算
>>937 俺のやり方だが、輪郭は適当な数の点で多角形とする。
面積から内圧の計算をして、潰れてたら外向きの力を各点に与える。
隣接する各点の距離が初期長よりどれだけ離れているかに応じて点同士引っ張ったり離したりする。
これだけである程度いい形になる。衝突判定とかはここまでできたら自分で考えなさい。
Intelのオンボでも4500MHDはDirectX10対応だぜ。 DirectX9は頂点シェーダーのレジスタ数が少ないからスキニングするときに メッシュを分割しなきゃいけなくてその分Draw数が増えて無駄に重くなったりする。 テクスチャに関してもフィルタリングやブレンディングの制限がグラボ毎にあって面倒くさい。 シャドウマップのサンプリングもnVIDIAのハードウェアシャドウ相当の機能が DirectX10では標準機能としてサポートされていたりする。 ゲーム的には同じものでもDirectX10に対応するだけで10%以上高速に動作する事が期待できる。 MRTでMSAAや独立したフォーマットが使えるのはかなり大きい。
10がすごいことはみんな分かってんだよ だれもそんな話してないぞっと
>>940 オンボードでDirectX10があるのもみんな知ってるんだよ。
有る無しではなくVistaマシンとして出荷された割合の問題。
これだけ論点がずれた話をする時点で、相当頭が回らないのは分かるけどさ。
10には10の(最新、いろいろ機能UP、再整理されてすっきり) 9には9の(最低限の機能は揃ってる、対応PCが多い、文献が多い) 良さがある。 喧嘩することじゃなかろ
その昔Direct3Dが出始めた頃にも似たようなことはあった。 3D使わないのは馬鹿とか言う馬鹿が湧くわけだが、 3Dアクセラレーションが普通に使える今は、 みんなDirect3Dを使ってプログラムを組んでいる。 いずれ10の環境が普及したら同じようになるというだけの話。
>>942 今のノートなら大抵がVISTA + INTELオンボorGF86000orRade3600あたりじゃね。
モバイル用のGF8600MはSM3.0だね
>>946 それVistaで動かせばSM4.0で認識すんぞ
>>945 ついでにVISTAが皆に歓迎されて、
普及率が50%余裕で超えてるとかなら
こんな泥沼議論にはなってないかと
10が悪いんじゃない
VISTAがうんこたれなだけ
今から作るなら10以降だろJKって時代は
もう少し先の話
>>943 でFA
おまえら初心者スレで熱くなり過ぎ
他でやれ
まぁXファイルのサポートもあるしとりあえずはDirectX9からやっときゃいい。 DirectX11あたりでFBXがサポートされれば最高なんだけどね。
MSに他企業の提唱するフォーマットを標準にする度量があるかどうかだな Xファイルを世界標準にできなかった事であきらめてくれればいいんだが なんかまた独自仕様のフォーマットを出してきそうな希ガス
>>950 すでにXNA3.0の標準フォーマットはFBXになってんぞ
VRML
どこかに横スクロールアクション(洞窟物語みたいな)のソースとかないでしょうか?
>>924 こんなことを言う奴が増えたおかげで、クソゲーが急増した。
ばか雑誌がグラフィックばかり追いかけた結果だ。
Xファイルのアニメーションについて質問です 歩行や武器を振るアニメーションを実装する場合は 1つのXファイルにモーションをまとめて再生するの動作ごとに別のXファイルを再生するのは どちらが一般的ですか
普通に考えてメッシュは一つ、アニメーションが複数
957 :
デフォルトの名無しさん :2009/02/26(木) 19:02:17
横スクロールのシューティングだって大して変わらないじゃないの とすると縦横のスクロールなんてたいしてかわらないってことで ゲームと一切関係ない背景のスクロールがそんなに重要か?って話になって 結局インベーダに落ち着いた感動ストーリー
958 :
955 :2009/02/26(木) 21:08:05
ということは 1つのXファイルの中に複数のアニメーションを入れて 使いたいフレームを呼び出すということですか ありがとうございました
質問させてください。
開発環境は「Visual C++ 2005 Express Edition」です。
http://msdn.microsoft.com/ja-jp/academic/cc998628.aspx よりサンプルソースをダウンロードし、
DirectXのSDKは
http://msdn.microsoft.com/ja-jp/directx/aa937788.aspx の 「DirectX SDK (November 2008) 公開中 (英語)」をインストールしました。
ビルドしたんですが catch(void) の部分、Microsoft.DirectX.dll が見つからない、ともう一つのエラーが出ました。
上記2点は解決したんですが最後のひとつの
error C2664: 'Microsoft::DirectX::Direct3D::Device::Device(int,Microsoft::DirectX::Direct3D::DeviceType,
System::IntPtr,Microsoft::DirectX::Direct3D::CreateFlags,Microsoft::DirectX::Direct3D::PresentParameters __gc * __gc[])' :
3 番目の引数を 'CApp __gc *const ' から 'System::IntPtr' に変換できません。(新しい機能 ; ヘルプを参照)
コンストラクタはソース型を持てません、またはコンストラクタのオーバーロードの解決があいまいです。
の解決方法が分かりません。
コードの抜粋です。
m_pDevice = new Direct3D::Device(0,Direct3D::DeviceType::Hardware,
this,
Direct3D::CreateFlags::SoftwareVertexProcessing,
pd3dpp); // Direct3DDeviceオブジェクトを生成
引数のthisの型は __gc class CApp : public System::Windows::Forms::Form です。
ご教示よろしくお願いします。
Direct3D::PresentParameters* pd3dpps __gc[]= { pd3dpp }; m_pDevice = new Direct3D::Device(0,Direct3D::DeviceType::Hardware, this->Handle, Direct3D::CreateFlags::SoftwareVertexProcessing, pd3dpps); ってすれば通るけど、 Managed C++ は窓から投げ捨てた方がいいな。
961 :
959 :2009/02/27(金) 00:14:09
>>960 ありがとうございます。
該当部分のエラーは切り抜けたんですが今度は’winmm.lib’が見つからない言われました。
デフォルトではインストールされてないみたいです。
こっちのほうはもう少し調べてみますが。
>Managed C++ は窓から投げ捨てた方が
Managed C++という単語を調べたんですが
意味的には「Visual C++ 2005 Express Edition」は捨てたほうがいいということですかね?
DirectXは何も分からないので勉強にはいいかな?と思ったんですが・・・
ちんこ起つのかな??
>>961 Windows SDKいれてないだろ?
今すぐVC++ 2005EEをアンインストールして2008入れ直せ
3つの頂点から三角ポリゴンを書きましたが、これどっちが表なんですか? 法線とかいうのは表に向かう線ですよね?どこで表裏の設定するんですか?
カメラから見て点が時計回りになるなら表。そうでないなら裏として描画される。 裏なら描画されない。 ただ、設定によっては逆回りを表とすることもできるが、あまり一般的ではないな。 両方表とすることもできる。こちらは時々使うかな。
なるほどそういう決まりがあったんですね。 モデリングソフトの吐き出し方を調べてみますありがとう
glは反時計回りが標準だからソフト次第だな
シェーダの本を一通り読んだんですがほとんど理解できません これは光と影の色の計算が膨大なためGPUにやらせるというのはわかりましたが 1点1点をfxの入力に渡してその点の色を計算させた後そのまま描画させるのが流れなんですか? 行列変換の命令とかあるんですが、データ丸ごと渡してアクションの動きの処理も全部GPUにやらせることができるんですか?
DirectInputでゲームパッドを使えるようにしようと思ってサンプルを参考に打ってたんだが、 static LPDIRECTINPUTDEVICE8 g_lpDIJoypad = NULL;で定義して使ってみようとしたら ((*(IUnknown*)(&*pDInput))).__vfptr CXX0017: エラーです: シンボル "pDInput" が見つかりません と出たんだ。 一日原因調べたがさっぱりわからない、誰か助言してもらえないだろうか?; 開発環境はVS2005、DirectX SDK (November 2008) を使用してる。
971 :
デフォルトの名無しさん :2009/02/27(金) 18:37:51
頂点シェーダが頂点単位でやる処理で ピクセルシェーダがポリゴンの面を塗る処理だ よし理解はバッチリだな
972 :
デフォルトの名無しさん :2009/02/27(金) 18:54:11
>>970 動くサンプルを参考にしろよ
サンプルを参考に組んでる段階で動かないものをうごくようにするのは
経験者でもキツいときある
DirectXのサンプルは、元ソースからビルドして動かなくても、 サンプルのexeファイルが動けば問題ないんでしょうか?
ビルドして動いたほうがいいだろ
975 :
959 :2009/02/27(金) 20:06:12
>>964 ありがとうございます。
2005を削除して新しく「Microsoft Visual C++ 2008 Express Edition」を入れました。
>>960 さんのコード変更をしてリビルドしたら通りました。(いくつか警告は出ましたが。。。)
>>960 さん、
>>964 さん、ありがとうございました。
>>971 ぜんぜんわかりません
移動とか全部GPUでやれるってことですか?
つかめないんですが、移動したあとの計算結果の値をまたC++に戻して相互に処理できるんですか?
DirectXの本とか読めば描画の流れくらい書いてるだろ まあテクスチャに出力させたりして無理やり値を得ることもできる
>>976 移動とかじゃなくて
3D空間にあるものを2Dのスクリーンに表示するには
ビデオカメラで撮影するみたいに単に撮ればいいってわけじゃなくて
頂点の位置が2Dにしたときにどの位置に見えるかってのをいちいち計算しないといけない
計算方法自体はすでに確立されていて難しいことはないんだけど
その計算を頂点シェーダーにやらせてしまおうって話
>>976 おいおい
だから落ち着いて考えろよ
@ローカル→Aワールド→Bカメラ→C射影→Dビューポート→Eシェーダ
で頂点と面の塗り処理はEだ
物体の移動は@とかAだろ
Eの処理をシェーダでやるんだ
移動といっても頂点の移動ならできる
ちなみに@〜Dがプログラム側(C++側?)の処理だ
計算結果をC++にもってくるのはできないだろ多分
できるような話もきいたことあるような気がするがとりあえずできないと思ってて
いーんじゃねぇの?
計算結果持って期待ならシェーダーでとっておくしかないんじゃね
移動ってエフェクトとかアニメーション変化するようなものに使うんですか? 相互やり取りできないとそれぐらいしかないですよね。しかも最初の状態に戻さないとどうなってるかもわからないんじゃGPUでの移動の状態で C++側でプログラム分岐もできないですよね GPUで処理させたデータ持ってこれるのかと思って変数登録、初期化した後は全部GPUでやるのかと思ってました
979に突っ込みたいが、その前にそろそろ次スレの心配をしようぜ。
よし、じゃあたててくる ここって再利用だったんだな
>>981 >移動ってエフェクトとかアニメーション変化するようなものに使うんですか?
頂点の移動だよ
物体(メッシュ)の移動じゃないよ
スキニングとか
thxだいぶ見えてきました つまりオブジェクトの移動はどうあがいてもCPUなのでソフト処理で勉強しても損はないんですね いや、本にハードが対応していない場合ソフトで処理することになると書いてあったので最初からハードでいいじゃんとおもったんです まず行列から勉強します。かげとか、反射が必要になってからシェーダですね
>>986 ばっかじゃね
そんな糞みたいな心配するよりさっさと組んでみろといいたい
こいつ触れてもいねぇのに無意味な質問しててすげーアホだな
興味ないならやめちゃえよ
梅
ウメ
Direct3DでGDIのPolygonをやる場合いい方法ありますか? 塗りつぶし方としてはWIDING指定の物と同じので構わないんですが、普通にスキャンラインごと に左端右端を出していって、LINELISTとして描画以外に速い方法があると助かるんですが
DIBに出力したのをそのまま使えば?
ちょっとどう利点があるのか分からないんですが・・・あまり、詳しくないんで処理の簡単な説明お願いします。
>>990 多角形を三角形に分割すればいい。
まず交差している辺があれば、交点で分割する。
180度以下の角に隣接する2つの頂点に線を引いてみて、多角形を構成する
他の辺と交差していなければ、そこを三角形として分割する。
これを頂点が3つになるまで繰り返すだけ。
994 :
990 :2009/03/01(日) 00:42:26
うー・・・ダメだ。いい方法が見つからない。どこかにGDIのPolygonの実装落ちてないですか? 毎フレームたくさん多角形を描くので軽い物じゃないとダメなんですが・・・
三角形分割は十分軽い処理だが。
そもそもDirectXの描画を理解してない悪寒
>>995 うーん、やってみます。描画以外の処理が重いので、できるだけ軽い方がいいのですが・・・
>>996 流石にそれは無い。
うめ
1000
1000000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。