【C++】 DirectX初心者質問スレ Part27 【C】
902 :
896:
>>897 >マテリアルカラーと頂点カラーをごっちゃにしてないか?
その通りでした、orz
VertexColorはそもそも頂点の数(300弱)定義されているのにマテリアルは1個ですよね;
>とりあえず読み込んだメッシュの頂点フォーマットを調べて
LockVertexBufferして中を見たのですが、FVFのフラグ数値の意味が解らず、とりあえず中を見ると
1頂点36バイトで 頂点座標xyz 法線xyz 謎の4バイト U座標V座標 順に並んでおり、
謎の4バイトがRGBAかと思ってVertexColorの数値をいじってみたものの変化がありませんでした。
しかしCloneFVFというのが気になり、一部にしか設定してなかった頂点カラーを全ポリゴンに設定した所、
ポリゴン単位での頂点カラーが、正しく適応されて描画されるようになりました;
しかし、同じ仮想関数を通して生成した別のモデル(階層構造が無いモデル)は相変わらず頂点カラーは描画されず・・。
これは一体、何が起きているのでしょうか?;
また、処理中に頂点カラーを書き換える為にも所在を知りたいのですが、何か手はないでしょうか・・orz
>>902 固定機能ならある程度自動でやってくれたけど
シェーダーは自分で書いたようにしか動かないんだから
何が起きてるもなにもそうなるように書いてるんだろう
ソースを全部うpするか頂点シェーダ部分だけでも書いてみ?
904 :
902:2010/03/09(火) 23:01:54
Effect FileをUPしてみました。
ttp://www1.axfc.net/uploader/Sc/so/90811 マテリアルのDiffuseを送る為に変数(?)CCC_DIFを作って送ってる以外、
ほぼSDKサンプルのままです; 使いたい機能が有るものの理解がまだぜんぜんで orz
頂点カラーがちゃんと描画されるモデルが有るという事は
VertexBuffer内にデータは有るハズなんですよね・・何か勘違いしてるはず・・orz
>>904 頂点シェーダー入力情報に色情報を追加して
シェーダー内でブレンドするなりなんなりと
struct VS_INPUT
{
float4 Pos : POSITION;
float4 BlendWeights : BLENDWEIGHT;
float4 BlendIndices : BLENDINDICES;
float3 Normal : NORMAL;
float3 Tex0 : TEXCOORD0;
float4 Color : COLOR0;// これ
};
907 :
904:2010/03/10(水) 19:10:31
>>905-906 ありがとうございます。色々とテストし続けた結果、頂点カラーの確認ができ、
RGB値が0か255以外の値は全て255になって読み込まれている事が解りました。
変に微調整した色を使うとなぜか全て255,255,255へ。。
何か読み込む段階で問題が有りそうな事に・・色々ご助言ありがとうございました。
英文・・苦手ですが、いつか目を通せればと思います。HLSLも勉強しなければ。。
ありがとうございました。
0.0〜1.0じゃないのか?
シェーダープログラム内でprintデバッグみたいなことって出来ないよね
PIX使うとか、エフェクトファイルの呼び出し元から変数を与えてもらってそこに書くのも1つの手ではあるかも。
directdrowはいずれ消える予定なのでしょうか?
2Dゲームを作ろうと思うのですが、3D関係を習得して2Dを作ったほうが良いのでしょうか
>directdrow
消えるも何もそんなモノはない
drawだろw
当分消えないと思うけど、バージョンアップの見込みが低いと思う
両方覚えた方がいい
半透明処理がやりたいとか回転がやりたいとか要望に対応できないので
Direct3Dに慣れといた方がいいと思うの
デバイスロストとか面倒くさいからDX11から始めるのお勧め
10以降はメモリ使用量意識しなくていいのはすごく助かる
スワップしないように意識した方がいいのはもちろんだけど確保失敗しないところがいい
2Dか3Dかという話の中でDirect3Dのバージョンの話を始める奴は、
リアルでも会話の流れを無理矢理自分の進めたい話に持って行こうとして、
空気の読めない奴だと周りから思われているんだろうね。
別にその話はもう終わってるからいいだろ
MSDNにDX11の資料が無いのは何故ですか?
英語であるじゃん
英語ではある。しかしながら、日本語では無い。
ということでよろしいのですね?
August 2008の日本語訳が来たのがほぼ1年前
今の英語サイトがAugust 2009だからそろそろ来てもいい気がするが…
Direct2DやらDirectWriteやら項目が増えてるからまだ放置されるかもな
D3DXVECTOR3 mypos(1.0f,8.0f,-0.5f),myangle(0.0f,0.0f,0.0f),myvec(0.0f,0.0f,0.0f);
--------------------------------------------------------------------------------------------------------------------------------
if(keyState['F']&0x80) myangle.y-=D3DX_PI/72;
if(keyState['G']&0x80) myangle.y+=D3DX_PI/72;
if(keyState['T']&0x80) myvec.z=+0.15f;
if(keyState['V']&0x80) myvec.z=-0.15f;
--------------------------------------------------------------------------------------------------------------------------------
D3DXMATRIXA16 matWorld1,matWorld2,matWorld3;
D3DXMatrixRotationYawPitchRoll(&matWorld2,myangle.y,myangle.x,myangle.z);
D3DXVECTOR3 myvec2;
D3DXVec3TransformCoord(&myvec2,&myvec,&matWorld2);
mypos+=myvec2;
D3DXMatrixTranslation(&matWorld1,mypos.x,mypos.y,mypos.z);
matWorld3=matWorld2*matWorld1;
pDevice->SetTransform(D3DTS_WORLD,&matWorld3);//―*
D3DXVECTOR3 viewvecE(1.0f,8.0f,-0.5f),viewvecL(1.0f,8.0f,0.0f);
D3DXVECTOR3 viewvec;
D3DXVec3TransformCoord(&viewvec,&viewvecE,&matWorld2);
D3DXVECTOR3 vEyePt(mypos.x+viewvec.x,mypos.y+viewvec.y,mypos.z+viewvec.z);
D3DXVec3TransformCoord(&viewvec ,&viewvecL,&matWorld2);
D3DXVECTOR3 vLookatPt(mypos.x+viewvec.x,mypos.y+viewvec.y , mypos.z+viewvec.z);
D3DXVECTOR3 vUpVec(0.0f,1.0f,0.0f);
D3DXMATRIXA16 matView;
D3DXMatrixLookAtLH(&matView,&vEyePt,&vLookatPt,&vUpVec);
pDevice->SetTransform(D3DTS_VIEW,&matView);
C++でVS2008EEを使用しています。上のようにするとキーボードで回転角を変化させても三角の面を描画した画面上には変化が起こりません。試しに*のコメントがある行のmatWorld3を
matWorld1、matWorld2に変えてみるとmatWorld1のときはカメラが前後移動・円移動をし、matWorld2では回転が出来ていました。どなたかご教授願います。
D3DFMT_A8R8G8B8で半透明にしてたテクスチャが、
デバイスロスト復帰後は透明じゃなくなりました。
D3DPOOL_MANAGEDは復元で元のフォーマットを考慮してくれないんでしょうか?
DirectX9です
926 :
925:2010/03/12(金) 21:38:05
ごめんなさい原因が分かりました。
レンダリングステートの関係でした。
>>924 何がやりたいのか良く分からんが
三角の面とカメラが同時に回ってるから
いくら回しても同じ面しか映らないぞ
928 :
924:2010/03/12(金) 22:12:29
>>927 一人称視点・三人称視点が切り替え可能なガンシューティングを作ろうと思っていました。
自キャラを表示した後
D3DXMatrixTranslation(&matWorldm,0,0,0);
pDevice->SetTransform(D3DTS_WORLD,&matWorldm);
とさっきのコードの下に書き加え三角形を表示したところうまくいきました。
キャラ表示用の設定のまま三角形を描画していたのですね。
非常にお早い返答ありがとうございました。また、説明不足で申し訳ありませんでした。
DirectXでゲーム開発を行うにはどの程度のPCがひつようですか?
>>916 え!?DX11はデバイスロスト対策いらないの!?
これはでかい・・・!
しかし奴らはXPを使っている
質問させて頂きます。
オンラインゲームや一般のゲーム(DirectXで開発をしているもの)で
ゲーム内ウィンドウをどうやって実装しているのか分かりません。
WIN32APIなどの関数が使えるわけでもないので、どうすればいいでしょうか?
一番単純なのはふち無しウインドウでやること。
手間かがかかるのは、APIでインプットを取ってきて自前実装すること。
当たり判定とかは得意でしょ?
>>933 実際に作ってみれば分かるが、ゲームで使うウインドウシステムなんて
自分で作ってもそんなに難しくない。
>>933 マウスで「つまむ」、「ドラッグする」という動作を実装するだけ。
あとはマウスの状態によって「ウィンドウ」の描画状態を変更するだけだからそれほど難しいことではない。
ウィンドウに関しては、お決まりの書き方があって、訳が分からなくても、
とりあえず、こう書きゃ動くくらいに考えたら簡単だよ。
SteamのオーバーレイのGUIだと、WindowsのGUIをそのまんまリダイレクトして実装しているみたいだけど、やり方は知らん。
939 :
933:2010/03/13(土) 00:12:25
なるほどー
作り始めているんですけど、なかなか私の能力だけじゃ難しくて…
各イベントのメッセージなど、どうすればいいのか全く検討がつかないです。
普通にそれぞれが独立して順次1フレームに一回処理をするオブジェクトを
複数走らせられるようなシステムにしとけばいい気がするけどな
変にマルチに動かれると複数のウィンドウから同時に同一の情報にアクセスしたときに起こる、
みたいな再現性の無い変なバグ引き起こすことあるし
いまさらながらDirectX7で作りたいのですが
DX7の最新のsdk(ver7.1?)ってもう手に入らないのですかね?
せめてヘッダやライブラリがあればいいのですが、最新のDirectX SDKには含まれていませんでした
古本なり専門書店で7時代の本買ってきて
付属のCD-ROMから入れるしかないんじゃないか?
もう公式はもちろんアングラな場所からも消えてから大分経つよ
いや、そこまでさかのぼらなくても
8以前とかmusicとかの過去のコンポーネントが削除されたのはNovember2007だから
サンプルとか抜きにして作りたいだけならAugust2007でいける
August2007が今DL出来るかどうかは知らんが
DX7というと、機種依存が入りそうな微妙なバージョンだな。
ヘッダは最新のSDKにも入ってるだろ。
消えたのはDX8関係。これは2007 August辺りが最後だと思う。
質問おねがいします
拡張したマテリアル情報を含んだXファイルを保存しようとしているのですが
D3DXSaveMeshHierarchyToFile()関数に
ID3DXSaveUserDataに実装したものを渡して処理しているのですが
デフォルトのMaterialのテンプレートと同名のGUIDを持つカスタムテンプレートを
登録して保存してみても、デフォルトテンプレートのMaterialと
カスタムテンプレートのMaterial情報が保存されてしまい思った用に処理できません
デフォルトテンプレートでの処理を上書き処理についてご教授おねがいします
>>942 >>943 ありがとうございます
August2007探してみます
>>944 ddraw.hはあるのですが、d3d.hやd3dx〜.hが無いんです
同様にライブラリもddraw.libはあってもd3d関連のが…
今更dx7やるくらいならGDI叩くかdx9以降を触った方がいい気がしなくも無い
dx7やdx8世代のビデオカードでもdx9で固定機能パイプラインだけを使うなら動作するんでしょうか?
dx7のHwTnLもどういう扱いになるのか気になります
動くよ
>>945 テンプレートの登録はちゃんとカスタムのMaterialにしてるの?
RegisterTemplatesあたりだと思うが
>デフォルトのMaterialのテンプレートと同名のGUIDを持つカスタムテンプレートを
デフォルトMaterialのGUIDは、デフォルトMaterialだけのものだから
こういうことはやっちゃいけない気がするが・・
というか、今更「dx7やdx8世代のビデオカード」みたいなブツをどうやって入手するかの方が謎だぜ。
俺のPCにささってるぜ
ワールド座標のレイをワールド座標(回転拡大縮小平行移動後)のメッシュと交差判定させるにはどう変換したらいいんでしょうか?
無変換だとワールド座標の原点(メッシュのローカル座標?)を中心としたメッシュの空間にヒットします。
レイの座標やベクトルにワールド(逆)変換をかけても原点を中心とした空間にしかヒットしません。
その後にヒットした座標を座標変換
Aug09からFeb10に差し替えたところソフトウェアですら初期化できなくなりました。
2000年頃のRadeonです
957 :
953:2010/03/13(土) 22:03:29
meshに適用してる行列の逆行列をrayに掛けて
rayをmeshのローカル空間にもってくる
交差判定、交点を求める
交点にmeshに適用してる行列を掛ける
>>950 はい、ID3DXFile::RegisterTemplatesを使ってテンプレートを登録しています
マテリアル保存の処理を置き換えた処理をしたくて
カスタムマテリアルテンプレートをオリジナルのGUIDで登録
↓
デフォルトのマテリアル情報とカスタムのマテリアル情報が保存される
カスタムのマテリアルテンプレートをデフォルトのGUIDで登録
↓
デフォルトのマテリアル情報とカスタムのマテリアル情報が保存される
といった動作になってしまうので悩んでいます
ID3DXSaveUserDataは新たな要素を保存するメソッドを追加するだけで
既存の処理を置き換えるってことは出来ないんでしょうか?
Feb10でd3dref9.dll削除されたんですか?
962 :
953:2010/03/14(日) 10:16:09
>>958 なんとか出来ました。ありがとうございました。
>>923 August 2008に更新される前は、April 2006のまま超長期放置されていた事を忘れていないか?
April 2006どころじゃねーや、October 2004だった
それは英語版も一緒だから
英語版はSDK付属のヘルプが毎回更新されてるだろうが
前提条件が違う
2008のヘルプファイルって無いの?WEBだと重くて、、、
最新の機能を使う必要がある人は嫌でも英語読めるようになるし
使わない人はoct2004使っとけばいい
何も問題ないな
マイクロソフトもソフトウェア業界もそーやって自助努力100%で放置した結果、
日本の開発力はガタガタに落ちたというか英語圏に引き離される一方
日本のゲーム会社はなーんにもやらないのな
単に英語読めるようになればいいだけの話では
その単にが大多数の日本人には思いの他でかい壁になっていて、現実に深刻な影響が出ているってことだろ
深刻な影響ねぇ
英語読めなきゃ最新情報追えないのはDirectXに限らず当たり前の話だと思うが
ゲーム会社の英語力はそんなにズバ抜けてヤバいのか?
ミドルウエアより上のレイヤーしか触たことないひとでも、ゲームは作れるんじゃね?
だから、英語力なんかつくわけない。
英語読めなくても英語できる優秀な人が厳選された良質な情報だけを日本語に訳して提供してくれればOK
ぶっちゃけ大手のゲーム会社のプログラマーの試験で英語が出て来た記憶が無い。
中学生レベルの一般常識+高卒レベルの数学と物理、
入社してから英語を学ぶ機会があるのはリーダー以上や社外の人と会うプランナーぐらい。
PS3なんかツールやライブラリがSCEE頼みで、SCEJは何もしてくれないから困る。
それに比べればMSはかなり親切なほうだと思う。
ソニー系の開発環境がタコなのはもはや病気のレベルだよね……。
VGA(4:3)で開発しているゲームをFWVGA(16:9)でフルスクリーン表示にした場合どの用に表示されるのでしょうか?
横に伸びてしまう?
GeForceだとこんな設定がある
・ドットバイドット
・アス比保ったまま引き伸ばす
・保たず引き伸ばす
・モニターに任せる
開発者側が気にすることはないということですかね?
>>982 ビデオカードのスケーリング機能は、NVIDIAのドライバがポンコツなせいで
動かないことが多いので、気にする余裕があるならした方がいい。
とりあえず、ウインドウモードでウインドウサイズを変えれるようにしてあれば
苦情は来ないと思う。
ポインティングデバイスを使うソフトだと面倒だけどね。
このスレにはプロが居るんですね
ありがたや
失礼な奴だな。
>>908 アクセス規制に巻き込まれて返事遅れましたが、その通りでした。ありがとうございます。
SCEIのツール&ライブライに不満があるなら自分で作ってSCEIに
これをフリーで提供しますのでPS系の標準にしてくれませんか、
という提案をすべき。
ナムコかよ
ゲーム会社でもDirectXのヘルプファイル見るの?
見てますん
>>987 ツールやライブラリ以前に開発機材の管理からSCEE頼みだから提案するにも根本的にだな・・
>>989 むしろ全て頭に入っているプログラマがいたら教えてくれ、歩く辞書と名づけるわw