【C++】 DirectX初心者質問スレ Part38 【C】
回答する人も、質問する人も必ず読んでください
これらに当てはまる人のための質問スレです。
1.C/C++は多少理解している。
2.最近DirectXを始めたばかり
3.SDKを見ても、Googleで検索しても、いまいち理解できない人
4.余計な雑談は不要ですよ
【 回答してくださる方 】
・ できるだけ優しく質問に答えてあげてください。
・ 優しく教えるのが嫌でしたら、解決するためのヒントだけでも結構です。
「ググれ」「SDK見れ」以外の回答でおながいします。
・ 神ですら理解不能な質問は無視して下さい。
【 質問する方 】
・ どんな事で躓いているのか明確にしよう。
・ 長くならないなら躓いている部分のコードを晒してみれ。
・ 解決した場合、お礼を言うのは当然だが、何をどうしたら解決したかを明確に書こう。
・ 回答して貰ったら、出来るだけお礼もしよう。
>>2リンク
4 :
デフォルトの名無しさん:2013/06/01(土) 03:22:18.32
windowsプログラミングはテンプレでいいよね
.obj形式のファイルに複数のマテリアルが設定されている場合、どうやって関連づければいいか教えてください。
マテリアルごとにメッシュのグループを形成するだけで、
関連づけとか意味不明。
7 :
デフォルトの名無しさん:2013/06/03(月) 04:29:09.56
ノ ゚.ノヽ , /} ...
,,イ`" 、-' `;_' ' ..::::::::::::::...
,-、 _.._ ( (,(~ヽ'~ ..:::::::::::::::::::::::
)'~ レー' 〉 ヽ i`'} .:::::::::::::::::::::::
~つ '-ー、 i | i' ...:::::::::::::::::::::::
/ < / 。/ ! ......::::::::::::::::::::::::: これは
>>1乙じゃなくて
/ ~^´ /},-'' ,●::::::::::::::::::::::::::::::::::::
i、 ,i' _,,...,-‐-、/ i :::::::: .:::::::::::::
..ゝ <,,-==、 ,,-,/ .::::::::::: 放射能がうんたら
) {~''~>`v-''`ー゙`'~ ..::::::::: ........::.
{ レ_ノ ..::::::::. ......:::::::::
ノ '' ..::::::: ...::.:...:::::::::
.::::::::: ...:......:::::::::::: .
.:::::::::::. ..... .. ..:::::::::::::::::::::::: :::.
::::::::::::::::.::::::....:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.. :: ::..
.:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::: ::.
::::::::::::::::: :::::::::::::::::::::::::::::: :::::
.:: ::. :::
質問させてください
C言語とDXライブラリの組み合わせでプログラミングする際に
必須となるマシンスペックはどのくらいでしょうか?
14歳からはじめるC言語入門
についてくるサンプルが動くマシンと動かないマシンがあるので。
9 :
デフォルトの名無しさん:2013/06/04(火) 08:05:41.71
Pen4
1GHz
Windows2000
くらいで大丈夫
ありがとうございます。
Pen2
128MB
266Mhz
WindowsXP
だと動きませんでした
Pen3
256Mhz
500Mhz
WindowsXP
だと動きました
11 :
デフォルトの名無しさん:2013/06/04(火) 18:12:28.01
DWORDの宣言を見ると
typedef unsigned long DWORD
となっているが
なぜlongの名前をかえてDWORDにしてるの?
longのままじゃ不都合があるの?
ああ、不都合があるよ。32bitから64bitとかに移った時とかな
てかそれをここで聞くか?
算術シフトしたら面倒だし。
開発中のアプリでフルスクリーンモード的なのを搭載したいのですが、
モニタの縦横比の違いで画面が歪むことが予想されます
最新のエロゲとかですらそんなのばっかりです
そこでウィンドウモードでウィンドウの大きさを変えるだけの方が
楽でほぼ同等の効果が得られるのでいいかなと思っているのですが、変なやり方じゃないでしょうか?
変です
ウィンドウモードのままウィンドウを全(前)面にするって意味?
ネトゲあたりはよく搭載してる方式だし別に変じゃないと思うよ
ちゅーかアスペクト比が狂うなら、そこ直すんじゃなくて
オフスクリーンにシーン全体描いて、バックバッファに転送する時に
自前でボックス挟むようにするのが先だと思うが
極まれだが、フルスクリーンで縦横比ディスプレイが原因の時がある
多くのゲームでその現象が起こるのなら可能性は跳ね上がるぞ
途中で書き込んでしまった・・・
フルスクリーンで縦横比がおかしくなる現象はディスプレイが原因になる場合があるって意味だ(´・ω・`)
まあ大昔と違って、GPU自体にアスペクト比を保てるようなスケーリング機能があるはずなんだが
ドライバのバージョンやモニタの相性によって有効にならん時も多いからなあ
そういう場合はアプリ側に仮想スクリーンの機能があると印象が良いだわね
20 :
11:2013/06/05(水) 02:23:15.57
ごめん
詳しく教えてほしい
C(C++)のルールでlongはint以上としか定義されてない
環境によってlongは16bitだったり64bitだったりする可能性もある。
windowsSDKではDWORDは符号なし32bit固定で使いたいので
環境ごとの符号なし32bitに対応させてtypedefしてる。
コンパイラとかマシンが変わってもコードをなるべく書き換えなくていいようにする仕組みだと思えば良い
22 :
デフォルトの名無しさん:2013/06/05(水) 05:05:42.28
DirectX11でのレイピックのしかたが分からんちん
ぷりぃずへるぷみぅ
レイピックにDirectXのバージョンは関係ない。
24 :
デフォルトの名無しさん:2013/06/05(水) 08:54:23.63
25 :
デフォルトの名無しさん:2013/06/05(水) 09:10:52.67
>>23 D3DXIntersectに相当するものが見つからなくてさ
自前で判定しなきゃダメかー、諦めて算数勉強しなおしてくる
DirectXMathならDirectX::TriangleTests::Intersectsてのがあるべ
メッシュライブラリを何使ってるかによるだろうが
三角形の頂点座標が取得できてるならこれでいけるべ
27 :
デフォルトの名無しさん:2013/06/05(水) 18:34:22.08
>>26 うほっ!あったw
さんくす愛してる、ちゅっちゅっ
今度はDirectX11.1縛りだとCModelViewerCameraのGetぼげほげMatrixが使えんとな
11は見通しが悪いわ検索しても引っ掛からんわでお手上げ
目的はリアルの座標をワールド座標に変換する事によって俺が二次元の世界の住人にげふんげふん
マウス座標の一番出前でぶち当たった平面を判定するまでに必要になる
ワールドプロジェクトビューポート辺りの行列かそれに準ずるモノを取得するメソッド名だけでも知りたい
誰か知ってたらおすえてけんろ;
29 :
22:2013/06/07(金) 11:25:44.14
書いてから思った
9の頃から最初は初期化とかとか本とか転がってるコードに頼りっぱなしで
そもそも設定の仕方とか全然理解してないんだな俺
出直してくる
λ......
少年はかくして大人への階段を一歩のぼった
31 :
デフォルトの名無しさん:2013/06/07(金) 21:08:26.76
解ってきたかも
どう射影するかはバーテクスシェーダ次第だからDirectXとかライブラリの類じゃどうしようもないのか
くっそめんどくせぇぇええぇぉぇいぅははははだめだこりゃ
また行列から勉強し直してくる orz=3
32 :
デフォルトの名無しさん:2013/06/08(土) 01:29:37.60
ブログに書いてろゴミ
d3dx11d.lib がinclude出来ないとエラーが出るのですが、どうすればいいのでしょうか?
環境はwindows8の64bitでvisual studio 2012 for windows desktopです。
追加のインクルードディレクトリにはIncludeと\Lib\x86を追加しています。
d3dx11d.libってことはWindows 8 SDK以前のプロジェクトをビルドしようとしてるんだろうけど
>Includeと\Lib\x86
これどこのよ。自分でインストールしたDirectX SDK?
書き間違えなだけかもしれんが一応突っ込んでおくと
Lib\x86を追加するのはインクルードじゃなくて「ライブラリ」ディレクトリな
>d3dx11d.lib がinclude出来ない
SDKをインストールしたとは一度も言っていない
たぶんサンプルのソースか何かで
どのバージョンを使ってるかも意識してないんだろうな
>>33 インクルードディレクトリにInclude
ライブラリディレクトリにLib\x86を追加するんだ
windows8でvisual studio 2012なんだろ・・・?
そんな面倒なことしなくてもdirectXは動くんだぜ
ところがね、Windows 8 SDKだとD3DXが付属してないので
例えばDirectX SDKのサンプルのような2010以前のプロジェクトを
%DXSDK_DIR%にパスを通さずビルドしようとすると、この手のエラーが出るのよね
キャラクタ画像を用意してビルボードで表示しているんだけど
画像のα値> 0 に設定している部分は深度バッファに書き込んで
画像のα値= 0 に設定している部分は深度バッファに書き込みたくないんだ
どうすればいいかな?
書き込みたくないときだけ深度バッファをNULLにすればいいだろ
後出し情報すみません、DirectX11 です
ステンシルバッファを使う方法は確か無理だったはずです
ステンシルテスト → 深度テスト → ピクセル描画
の流れだったと思うのですが、ピクセル描画の際にα値が 0 であるならば
ステンシル・深度テスト通過時に書き込んだ情報をなかったことにする
ということがやりたいことです
アルファトゥカバレッジで代替できんか?
んじゃピクセルシェーダのコードにアルファ値が0ならdiscardするようにすればいいんじゃないか?
確か深度バッファにも出力しなくなるハズだが
if(Color.w == 0)
discard;
こんな感じだ
できました!! ありがとうございます
ん?アルファトゥカバレッジの方で解決したのか?
アルファトゥカバレッジの方でできました!! はずでした・・・
閾値が 0.5 と思ったより高かったので、思った動作になりませんでした
軽くググってみたのですが、閾値を設定する方法はないみたいですね
discard ってステンシルバッファへの書き込みはしないんですね
MSDN の説明をみるとてっきり書き込みされるものかと思ってました
discard のほうでやりたいことを実装出来ました
いろいろな方法を教えていただき、ありがとうございます
49 :
デフォルトの名無しさん:2013/06/13(木) 20:57:41.79
#define VERTEX_T_FVF ( D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1 )
の FVF ( の隙間を消すとエラーになるんだけどなんで?
マクロだから
>>49 DirectXに関係ない文法の話を書くなクズ
>>49 初心者とかそういうのをぬきにして向いてないというほかない
directx11.2対応のビデオカードってgeforce8xx/radeonHD9xxxからかな?
win8.1と新Xbox専用というからにはJaguarのiGPUは対応するはず。
intelのiGPUはbroadwellで対応するのだろうか。
Haswellって一応仕様は11.1になってるんだな
持ってないから実際には調べられないけど
どうもそうっぽいね。
SDKのサンプルしか実行出来ないのだが…何故?
なんの話だよ
Directx9で、リアルタイムで色が変化するタイルマップを作りたいです
頂点色をリアルタイムに変更して描画したいですが、方法が分かりません
初心者の私に知恵を授けて頂けないでしょうか?
>>60 動的頂点更新だね。
Lock、Unlockで検索してみて。
ありがてぇ!
65 :
デフォルトの名無しさん:2013/08/24(土) NY:AN:NY.AN
DirectXのD3DXCreateTextureFromFileEx関数で画像の縦横サイズ指定しても、
反映されない(スプライトいっぱいに引き伸ばされる)んですがどうしたらいいですか?
IDirect3DTexture9* pTexture = NULL;
D3DXCreateTextureFromFileEx(pDevice3D,_T("unko.bmp"),32,32,0,0,D3DFMT_UNKNOWN,D3DPOOL_MANAGED,D3DX_FILTER_POINT,0,0,0,0,&pTexture);
パラメータで引き延ばすように自分で設定しているからだ。
アホか。
67 :
デフォルトの名無しさん:2013/08/24(土) NY:AN:NY.AN
>>66 すみません、具体的にはどういう設定なんでしょうか?
使っている関数のヘルプぐらい読めよ。
DirectX11でのシェーダの質問です
単色ポリゴンとスプライト(ポリゴン+テクスチャ)を描画するためのシェーダは切り替えずに描画できますか?
Direct3D11(SM5.0)なのですが
ポストプロセスをしたいので、ピクセルシェーダからUAVに出力して、
何らかの処理をしてから、それをスワップチェーン内のバックバッハに描画したいのですが、
最後にバックバッハに描画する時、やっぱりRTVの使えるピクセルシェーダを通す必要があるのですか?
それだと、バックバッハ全体を占めるクアッドを用意する必要がありませんか?
>>71 どこに問題がありますか?
最後にピクセルシェーダを通して描画をするとすると、頂点シェーダが必要だから、
ポストプロセス済リソースをマップした四角形ポリゴンを用意する必要があるのではないですか?
大変な無駄だと思うのですが…。
ポストプロセスを実行するまでは良いのですが、その結果をどのようにして画面に描画するべきかわからないです。
失礼致しました。これは自分でどうにかするべき問題であるようです。お騒がせして申し訳ありませんでした.
>>72 四角形ポリゴンを用意する必要があるに決まっています
>>74 なんと、、、やはりそうなのですね。
どうにかしてバックバッハのUAVを作成しようとしたのですが…むづかしいみたいですね。
勉強になります。ありがとうございました!
>>69 頂点色(あるいは定数バッファで設定した色)×テクスチャのシェーダーにしておけば、
頂点色のみで描画したい場合 → 頂点色×白テクスチャ
テクスチャを描画したい場合 → 頂点色(白)×チェクチャ色
で統一できる。
UAV作るのにバッファを用意してるだろ?
だったらバックバッファにUAVに使ってるバッファをコピーすればいいだけの話
もちろん同じサイズじゃないとだめだけどな
>>77 できました!
バックバッファ(スワップチェーン)とUAVのリソースを DXGI_FORMAT_R8G8B8A8_UNORM で、
HLSL側のUAVリソース宣言を RWTexture2D<float4> で ID3D11DeviceContext::CopyResource() を呼んだら、何も問題なく動きました。
本当に助かりました! すごい
80 :
74:2013/09/05(木) 21:42:13.38
普通バックバッファと描画バッファの大きさ同じだよな… スマソ
DirectX、面白そうだなと本を買ってサンプルを実行したが、
いきなり「fatal error LNK1104:」というものにぶち当たっている
ググっても「パスの指定が間違っている」としか出てこないし
それ以外に見直すべき設定とかありますか?
82 :
デフォルトの名無しさん:2013/09/08(日) 07:07:36.59
はい
もちろん
初学者にとってはコンパイルに成功するまでが試練。
本で使っている DX と インストールしてるDXのバージョンが違うという罠ではないか
なんかのサンプルを適当に実行しようと思うのが間違いだと思う。
helloWorld的なdirectXを初期化するためのプログラムをまず組むべき
なんかのサンプルを適当に実行してみようと思うのは別に間違いじゃないと思うよ。
81は本のサンプルじゃなくてMSのDirectX SDK(つまり11以下)のサンプルのビルドはできるくらいなの?
おまえらSDKインストールしたことないの?
サンプルブラウザとか立ち上げたこともないの?
DXSDKはサンプルのバイナリ入ってるだろ
それはそれとして、インストールしたのにサンプルが実行できないならほかに原因があるな
インストールしたSDKとは別のサンプルなんじゃねぇの?
馬鹿丸出し?
VC2012に入っているSDKだけでコンパイルが通るように、
D3DXとか必要性のないものは全て切り離した。
おかげでいちいちDirectXのSDKを気にする必要がなくなってさっぱりしたよ。
同感。
D3DX切り捨ては英断だよ。
D3DXとかDirectXTKとか気持ち悪い気がして使う気になれない
テクスチャ作りかたが分からないからそこだけ利用してる
テクスチャの読み出し部分はGDI+で簡単に代用できる。
シェーダはバイナリ用意して突っ込むの?
VS2012なら統合環境にシェーダコンパイラ標準装備。
それとDirect3D10とVista以降ならOS側にコンパイラ標準装備。
95 :
デフォルトの名無しさん:2013/09/11(水) 07:32:59.94
(*´・∀・)(・∀・`*)ヘー
D3DXと違ってDirectXTKやTexみたいにみたいにオープンで
随時更新していくってのはいいと思う
D3DXVECTOR3ってどこのヘッダファイルで定義されてますか?
d3d9.hとd3dx9.hをインクルードしているんですが、定義されていないと出てしまいます
3D空間上のZ=0の位置に平面マップを表示してます
マップを回転する機能を追加するときに
ピコーン!マップじゃなくてカメラを回転すればいいんだ!
と思いカメラをz軸中心に回転させてみました
所が、90度回転させた状態でカメラを左右に移動(カメラのx座標値を変化)させようとすると上下に移動しちゃいます
マップを回転する時はマップ全体を回転するのが一般的なんでしょうか?
そりゃまぁ、z軸に回して単純に移動行列にをかければな・・・
>>100 左右移動のベクトルに回転をかけておけばいいだけの話
Windows8.1で新設されるDirectX11.2ってDX11までの機能しか使わなければ
DX11のVistaやDX11.1一部対応のWin7でも動くと考えて良いのですかね?
流石に古いOS全滅だとシャレにならないので…
(DX9cとかだとSDKの更新とかでDX9cを使ってても
Win2kやWin9xでは動かないプログラムになったりしたはずだけど…)
106 :
デフォルトの名無しさん:2013/09/19(木) 16:16:35.62
uni糞code
108 :
デフォルトの名無しさん:2013/09/27(金) 09:19:13.10
Windows SDK for Windows 8 を
スタンドアロンマシンにインストールする方法はありますか?
VisualStudioをメディアに焼いてインストールするってのは駄目なの?
イメージのダウンロードが見つからんな 探し方が悪いんだろうけど
112 :
デフォルトの名無しさん:2013/09/30(月) 15:23:52.64
質問です。
D3D11のD3D11_PRIMITIVE_TOPOLOGY_POINTLISTで描かれる頂点の大きさを変更するにはどうしたら良いですか?
ググってみても全然引っかかりません。
ジオメトリシェーダでなければ出来ないとかありますか?
まあ、pointは大きさ変えられんしな
115 :
112:2013/10/01(火) 15:05:01.86
>>114 まじすかorz
でもそれが分かっただけでも大収穫です!!
常に1pxでマルチサンプルを有効にするとちかちかする。これが仕様なんですね。
ジオメトリシェーダに頂点渡して四角ポリゴンを返すようにします。
さんくす!!
ちなみにLineの太さも変えられないからな
思いっきりLineとwidthでググってましたw
ポリゴンとLineを同時に表示すると前後関係が曖昧になってLineが欠けたりするんですよね。
シェーダで何とかしてみます。
今から勉強するとしたらDirectX9.0がいいの?それともやっぱりDirectX11.0を勉強したほうがいいの?
>>118 それを自分で判断できるように頭を鍛えろ
>>119 個人的にDirectX9.0のが無難かなとは思って売るんだけど、来年XPのサービスきれたら9.0は居場所なくなるんじゃないかとおもって迷ってた
D3DXと決別するのなら、シェーダコンパイラがOS側に実装されている、
Direct3D11を使うのをおすすめする。
自分も11をオススメする。
11で9のハードウェアをターゲットに出来るって最近しった
>>123 まじかよ俺のXP搭載化石PCちゃんまだしばらく息できる?
DirectX11のエンドユーザーランタイムはもちろん必要
つまりOSはVista以降
D3D10以降のモデルデータ読み込みってどのようにしていますか?
D3DXLoadMeshFromXと同等のものを作りたいです。
>>127 作ればいいだろ
OpenGLと共通のフォーマット決めて、ライブラリ化して使ってる
iOS、Androidでも使うからな
最初はFBXでも使っとけ
流石にxファイルはコンバートしちゃった方がいいような気がする
極論すれば、保存用のデータフォーマットなんてどうでもいいんだよ
メモリ上で保持するフォーマットをしっかり決めて、そのデータを操作する処理をライブラリ化する
コンバートなんていくらでもできるだろ?
D3DXはUserDataを処理できて便利だったけど、D3DXが廃止なので現状は自作が妥当
自分が使っているモデリングソフトのプラグインを作って、
好きな形式で吐き出せばいいだけの話。
TiledResources怖い
即ブルースクリーン
そうなの?w
DirectX11を使用していて、あるシーンのデプスマップ(Z値を画像化したもの)を出力したいのですが
深度ステンシルテクスチャをD3DX11SaveTextureToFileを利用して出力しようとしたところ、上手くいきませんでした(画像が生成されない)
どのような方針でプログラミングを行えば、デプスマップを画像として出力できるのか、ご教授お願いします
色じゃなくてZ値書き込むシェーダでも書けばいいんでないかい?
DirectXMath.hのXMMATRIXをd3dx9のLPD3DXEFFECTのSetMatrix関数で使う方法と
DirectXMathとd3dx9mathを物理演算の為に倍精度で使用する方法があれば教えてください。
>DirectXMath.hのXMMATRIXをd3dx9のLPD3DXEFFECTのSetMatrix関数で使う方法
XMMATRIXのメンバをD3DXMATRIXにコピーするしかないんでねーの?
>DirectXMathとd3dx9mathを物理演算の為に倍精度で使用する方法
ムリなんじゃないかな・・・
device.SetRenderTargetで約16msかかるけど、こんなもん?
ってまさかPresentで止まってるのか
140 :
139:2013/10/27(日) 17:36:10.70
あー
present中はlockされるんだな
directx june 2010sdkで作成した自作ゲーム(32bit)が
起動させると、偶に動作が全体的に重たくなる現象が発生します
効果音、BGMは正常に再生されます
PC環境は CPU i7、メモリ8G、HDD 700G、windows8(64bit)、Directx11runtimesのノートです
そういう時その自作ゲームを終了して
他のゲームを動作させてみたら問題なくプレイできました
こういう場合、PCを再起動すると、自作ゲームの速度は正常になります
以前使っていたノートではそういう現象は全くありませんでした
どなたか原因がわかる方、ご教授願えないでしょうか
142 :
141:2013/10/27(日) 18:09:05.30
追記
自作ゲームは内部で特別な事をしているわけではなく
強いて挙げれば
BGMに2〜3個の10メガ以上のWAVをメモリに全て読み込んで
ストリーミングではなく、そのまま再生しています
ゲームではd3dx9_43.dllを使っています
エスパーレスしろとな?
145 :
141:2013/10/27(日) 19:58:28.94
自己解決しました
diectxとは全然関係ない部分が原因と判明
wait処理のコードがおかしかった模様
スレ汚し申し訳なかった
D3DPRESENT_INTERVAL_DEFAULTで同期を取ると
Present()は一般的に16msになると思ったが
QueryPerformanceCounterを使い、空ループ測定したら、不定期に30msなるフレームを発見した。
自分環境が原因?
空ループ
while(true)
{
QueryPerformanceCounter終わり
QueryPerformanceCounter開始
device->Present()
}
間に合わなかったから次の同期待ちに回されただけだろ。
だからなんだよ、頭悪いな。
>間に合わなかったから次の同期待ちに回されただけ
それは誰でもわかるだろ
ほぼ空のループでなぜ発生するか知りたいんだよ
>>150 お前は自分本位で他人に気が回せない奴だから、
プログラムでも状況が理解できないんだよ。
てめえだけで世界が動いているわけじゃ無いのを理解しろ。
>>152 せめてプログラムの観点から煽ってくれないか
何それカッコイイ
>>153 もろにプログラムの指摘なのに、気がつかないのか?
>>155 あなたが言うプログラムの指摘の部分を教えてくれないか?
どれだけ馬鹿なんだよ。
他人を「他のプログラム」、世界を「OS」に置き換えてみろ。
くっさ
>>157 「他のプログラム」が原因だと言いたいのか?
頭が悪いと生きていくのが大変だよね。
>>160 お前の説明力が低いという認識は持ってるか?
間違った記憶で害悪を撒き散らすしね
理解力が足りない奴はそれを他人のせいにするから、
TVなんかも馬鹿でも分かる大衆番組ばっかりになってるんだよね。
ごくごく一般的な知能を持った奴をうならせるようなもっと面白いものを作りたくても、アホが理解できないから作れない。
本当にお荷物だよな。
余計な雑談は不要ですよ
表現力が足りない奴はそれを他人の(ry
傲慢な合理主義さまの乱入だ
結局
>>146の原因分かる人いる?
わずかなコマ落ちは気にしない人が多いのか
原因わかるかと聞くより
お前らの環境でも発生する?のほうが適切だな
うむ
ついでにその原因を調べられるぐらいのスキルは身につけろ
使ってるエディションは知らんが、VSまじ便利
自分の環境で発生するものは他人の環境でも絶対発生する、
それがアスペの発想だから聞く必要など無いという判断だ。
まじめすぎんだよな。
だから、発生するか?
という質問に言い直してるのだが
ソースを自分で書いて、検証した結果を報告せよというご命令ですね。
だから最初から言っているだろう。
なんでも自分中心で、人のことなど考えずに生きているのが原因だって。
全てにそういう態度が表れているよな。
>>174 極論だとそうなるが、ただの空のループのソースが
必要なレベルの人がここに居るのか?
DirectXのバージョンも不明、どう初期化しているのかも不明、フルスクリーンかどうかも不明、
他人が作ったら条件の違う別のコードにしかならないことすら理解できないアホは、
プログラムなんてやめた方がいい。
ユーザーから情報が得られたので解決した
>>177とか見ると、ここで質問した自分がアホだったことを理解した
結局自分の馬鹿さ加減が原因だっただろう。
最初から言われていたのに今頃気がつくとは遅すぎる。
しょーもない奴に噛み付いている奴も
馬鹿だってことに気づいとけよ
そもそもDirect2Dを使わなければ表示できているのか?
>>182 はい。WPFのDrawingContextでの描画は表示できています。
いったんDirect2Dで書いたデータをファイルへ出力
α値などが狂っていないか確認
>>184 α値ですか。調べてみます。ありがとうございます。
186 :
デフォルトの名無しさん:2013/11/05(火) 15:43:03.58
Direct 3D 9です
ゲームに手書き系のフォントを使いたいのですがwindows に同梱されていないので困ってます
.ttf などフォントファイルを同梱して使いたいのですが方法は無いでしょうか
あらかじめ画像として書き出す、ユーザにインストールしてもらうなどの方法は検討した上で質問しています
>>186 その前に、フォント関係のライセンスを調べて絶望しろ
188 :
デフォルトの名無しさん:2013/11/05(火) 15:50:18.96
>>187 理解済みです
やり方としては可能なのでしょうか
ゲーム内でのレンダリング方法とフォント自体のライセンスから自ずと決まるもんだと思うが
選択肢としてはlibfreetype等のttfファイルを直接読み込めるライブラリで実行時にラスタを生成するのが普通じゃね
質問させてください。
NVIDIA SDK 9.52のDirect3DのサンプルをVisual Studio 2003でビルドしたのですが、
ビルドはできたものの実行に失敗してしまいます。
リリースビルドの場合だと、
「incorrect ersion of direct3d and/or d3dx」
というエラー文が出ます。
原因が分からず、困っております。
誰かお分かりの方はいらっしゃいませんか?
ちなみにDirectX SDKはSummer 2004を使っています。
OSはWindows7です(Visual Studio 2003は非サポートを承知で無理矢理インストールしました)
GPUはGeforce GT 520です。
191 :
190:2013/11/06(水) 08:35:01.12
ちなみに、SDKのサンプルに始めから入っているデモのexeは正常に実行できます。
Visual Studio 2003でビルドしたexeだと失敗してしまう感じです。
一方、OpenGLを使ったサンプルの方は、Visual Studio 2003でビルドして正常実行できています。
Direct3Dのデモだとダメな感じです。
manifest
DirectX SDK が古いだけでは?
194 :
デフォルトの名無しさん:2013/11/06(水) 18:24:29.96
>>190 build した exe を
おまいの Windows 7 じゃなくて
Windows 2000 とかで動かしたらどうなる?
馬鹿にかまうな
いまどき2003とか使ってるあたり、研究室で課題をやろうとした馬鹿学生なんじゃないの
構うとつけあがるから放置推奨
数年前のレスコピペしてるのかと思ったよ
197 :
190:2013/11/06(水) 22:05:58.20
皆様レスありがとうございます。
>>194 XPマシンで動くか試してみようと思います。
>>195 すみません。学生ではなく、社会人です。
2003を使っているのは、NVIDIA SDK 9.52の多くのプロジェクトが2005以降だと
すんなりビルドできないためです。手直ししてもよいのですが、
2003でいけるならそれが早いと思いましたので。
少なくとも、Visual Studioのバージョンの差に起因する問題ではないような気がしています。
もう少し、自分で模索してみます。
198 :
190:2013/11/07(木) 07:06:27.31
自己解決しました。
http://www.nvidia.co.jp/object/sdk-9.html によると、DirectX SDKのバージョンはFebruary 2006ベースとあるようなので、
某所でFebruary 2006を入手して、February 2006でビルドしてみました。
すると相変わらず「incorrect version of direct3d and/or d3dx」と出るので、次にDXUTの互換性を疑いました。
サンプルで使っているDXUTを使わずに、February 2006にあるDXUTを使うようにしてビルドしてみました。
そうしたら、上手く動作しました。
February 2006ベースとあるのに、使っているDXUTのバージョンが違うってどういうこと?
という疑問はあるのですが、とりあえず動作するようになったのでよしとします。
同じ問題にはまった方がいらっしゃったら少しでも参考になればと思います。
で、
>>146の原因は?
バカだアホだはもういいので
「○○が示すように△△が原因だ」で答えてよ
>>199 素直に教えてくださいって言えよ、低脳
煽れば勢いで答えてもらえるとでも思ってんのか、ゴミしか組めない低スキルPGが
こういうパターンで、「教えてください」と頼んで教えてもらえた例はとんと見ないな。
いや別に16msがどーのこーのそんな話に興味は無いけど
>>151とかあまりに幼稚な返答だったので、どんな人間かと思って
で、
>>146の原因は?
バカだアホだはもういいので
「○○が示すように△△が原因だ」で答えてよ
環境とか教えてくれないとわかんない
あとソースください
自前で画面座標からワールド座標に変換ってどうやるの?
DXライブラリだとConvWorldPosToScreenPos関数があるんだけど
まずはスクリーンの奥行きをどう定義するのかを明確にしろ。
レイトレーシングでググるといい。よくわかんなかったらdirectxmathのXMVector3Unprojectを黙って使うといい
207 :
デフォルトの名無しさん:2013/11/11(月) 09:31:37.43
Direct3D9/Win7だが、
DXコントロールパネルから
リテール/デバッグのランタイム切り替えが
効かなくなっているような・・
皆さんはどう?
そもそもデバッグを使うことがない。
聞かれたことに答えられない馬鹿は黙ってろよ
Win7 64bitだけどうちもD3D9のDebugランタイムは使えないぽい
以前調べたときに海外のプログラミング系フォーラムで同じ症状を数人見かけたけどどれも解決には至ってなかった
Retailオンリーでいくしかないのかも
Windows7自身DirectX9おまけで動かしてるからな
XPなくなると9で書く必要性もないしもういいかな
DX9と心中しようと思ってたのに
それは困る。
引退時なんじゃないか
WebGLの時代が来る
DirectXは細々と残るだけ
へーそうなんだー
エロ中尉
D3DX9のID3DXSpriteは頂点カラーでグラデーション掛けたりプログラマブルシェーダで描画出来ますか?
ゲーム会社を受けるのに、DXライブラリを使って製作しても大丈夫ですかね?
>>220 同じ内容のゲームでも
DxLibを使っている方とライブラリを自作してる方だったらどっちを採用すると思う?
>>222 どっちがいいかって言うと後者だけどそこまで求めて無いと思うぞw
DxLibで制作したゲームで採用する会社なんて
…あとは言わなくても分かるな
gameは技術よりアイディア
3Dのスキルがあれば、普通に作れるだろ
特別に難しいことしてるわけでなし、エフェクト等を削除して、
単純なプリミティブで同じようなものを作るだけなら難しくはない
これが難しいと感じるのは、スキンメッシュすら操作できない低スキルだけゃないか?
モデルを作るのが大変
おまいらすげー
DXライブラリを使うのはかまわんが、それを利用して、
シェーダで非常にコストパフォーマンスの高い表現をした、とかだと普通に評価されるだろう。
コンピュータのアーキテクチャや数学をよく理解していることが伝わるようなものならなおよし。
プログラマーとしてなら
ライブラリ使ってでも物作れるタイプはゲーム製作側に
描画エンジンやツール等きちんと作れるタイプはライブラリ製作側に
あてられるのでどっちでもいいと思うよ。
そのかわりちゃんと作ってね。
結局会社入るとDxLibじゃないけど社内のライブラリで作ることになるし、
他人の作ったものを組み込める能力も必要だと思うよ
ゲームバランスとかはあんま求めてないよ
あと、大手は入社してからきちんと勉強させるので
学生レベルの作品なんてあんまり重視してなかったりする
結局コミュ力とやる気
あー新卒の話な中途や院みたいな年寄りはレベル見るよ実用重視
ぐぐればたくさん資料が出てくるこの時代に
DirectX程度も自前で記述できないんじゃやる気無いね
ゲーム会社は休みなしで24時間元気に働ける奴を取るんだよ
絞るだけ絞って
いらなくなったら
使えなくなったらぽい
そいつが勉強してないで時代についていけずに使えなくなっただけ
>>220 はあちこちのスレで同じ質問をしてるが
スレごとに答えが様々で面白い
239 :
デフォルトの名無しさん:2013/11/18(月) 16:12:59.47
実は回答者は一緒なんだぜ
240 :
デフォルトの名無しさん:2013/11/18(月) 18:55:14.60
質問者も回答してるんだぜ
24時間元気に働いていたら、勉強する時間が無いな
>>226 スゴイなー
今夜間専門通ってて、独学で頑張ってるけどまだまだだな〜
でも同人でもここまで出来る、っていう希望にはなるよ
244 :
デフォルトの名無しさん:2013/11/21(木) 21:49:24.40
>>226 1:35くらいのっところの音楽の曲名ってなんだっけ
>>226 みたいなゲームを作るのに必要な知識ってどんなのがある?
三角比とベクトルくらいは分かるんだけど、ホーミング系ってどう実装してるんかな
249 :
245:2013/11/22(金) 18:36:44.75
参考になりそうなリンクありがとう
動画みたいなの作れたら楽しそうだな(´・ω・`)
>>226 一から作るとしたら、一ヶ月で作れって言われても(素材が揃ってても) 出来そうにないな
地面との衝突判定って、地形データから高さデータ作って、それと比べてるの?
それとも地形と直に判定してるの?
物理演算があるなら空間分割して直じゃない?
横からの質問ですけど
その場合はレイをy座標に飛ばす感じが基本なんですかね・・
>>226 コメントにあったけどマジで専門学生なのかな?
だとしたら、このレベルを相手に就活しないといけないのか・・
>>255 全員がこのレベルってことはないから、心配する必要は無いと思うよ
もちろん対抗できるくらいのスキルがあれば就活で有利とは思うけど
演出のセンスは優れているけど技術としては特に
PGならジョブズではなくゲイツを目指せ
>>255 マジだよ、そいつ一人超絶飛び抜けてデキる奴
地面との衝突判定は物理演算に丸投げするのが楽だよ
BulletPhysicsにあるキャラクターが動くサンプルを参考に
適当に平面方程式に投げて高さで判定取るかな
地面の判定はそれしかやったこと無ェ
>>260 まあ、デコボコさせたりしない限りそれが安全かもですね
水面に石投げするときみたいに
一定の入射角以下なら飛び続けるとか
やっぱゲームプログラマは頭良くないとできないな。
他のプログラマはアホでもできるけど
ゲームの内容によりけり
手の抜き方とか
計算量の減らし方は
工夫と地頭がいるね
ゲームプログラマ最強。
そんなふうに考えていた時期が俺にもありました。
他のプログラムも別ベクトルで賢くないといけないのを知ったよ。
世界中の人を一斉に相手するシステムとか
267 :
デフォルトの名無しさん:2013/11/26(火) 22:41:26.77
Direct3D10のCubeMapGSサンプルには
HLSLのセマンティクスに「RTARRAYINDEX」という値が
使われているが、この定義が書かれているマニュアルって
ありますか?
struct GS_INSTCUBEMAP_IN
{
float4 Pos : SV_POSITION; // Projection coord
float2 Tex : TEXCOORD0; // Texture coord
uint RTIndex : RTARRAYINDEX; // コレ
};
ああ自己解決しますた
単なるサンプルの独自定義なのね
まんまだろうが
馬鹿スw
初心者にありがちな発言
これはOSのバグです
これはコンパイラのバグです
これはライブラリのバグです
9.0cをインストールしたつもりが意味不なんだけど11があれば
9.0c入れても意味ない?
>>270 その3つを使い分けられるなら初心者じゃないぞ
使い分けてるとはどこにも書いてないが
掛かれてないものが見えるとは
おぬしも相当アスペやのう
>>271 そもそもXP以降はOS標準+SPにDirectXが付属する形なので、
インストールも糞もない。
書かれてないけどたぶんSDKのことだと思うぞ
書かれていないも何もSDKに11なんてバージョンはない。
9.0cとはっきり言ってるわけで。
11があればともはっきり言っているぞ。
3Dグラフを描く場合、9と11どっちがお勧め?
>>279 3Dグラフごときに普通はDirect3Dは使わない。
GDIで描画する方が遥かに簡単。
どうしても使うなら9の方が簡単。
いや9はやめたほうが・・
デバイスロスト対策の有無は大きいよ
11は何も考えなくていいから楽だ
GPUリセットするとロストするよね(´・ω・`)
11はデバイスロストは何も考えなくてもいいけど
作るまでの設定が大変。デフォルトとか無いから
描画もシェーダいるし
エクセルでやりなよ
デバイスロストがない9exのことも忘れないであげてください。
自分はどちらかというと11のほうがいいな。
9のデバロス対策はプログラム構造を一気に汚くする。
11は設定が多かったりシェーダ必須だったりするけど、
構造がシンプルだし、色々なことを試すときの自由度の高さがある。
凝ったことするほど有難味がある設計だね。
だから断然、11を推すよ。
3Dグラフでデバイスロストは問題にならないでしょ。
マネージドリソースしか使わないだろうし。
Excelと同程度の3DグラフならDirect3Dを使って得をすることは
1つも無いので、GDIなりWPFで描く方が遥かに楽。
グラフにテクスチャを貼りたいとかならDirect3Dの使用も考えるが。
>マネージドリソースしか使わないだろうし。
そうなの?
3Dグラフをマウスでグリグリ視点を動かしたいです。
289 :
デフォルトの名無しさん:2013/12/06(金) 08:36:11.88
ベタ塗り3D画像でグリグリ程度ならGDI+で充分って話だろ
問題はテクスチャだよテクスチャ
291 :
デフォルトの名無しさん:2013/12/08(日) 04:37:29.15
D3D11からエフェクトプールは撤廃されて
代わりにエフェクトグループを使えとヘルプに書いてるが
グループで複数のエフェクトオブジェクト間で変数共有出来るようには
見えないんだが、どー考えればいいの?
292 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/12/10(火) 22:33:56.51
directmusicってもう使えないんですか?
ありがと。XAudio2サポートに挑戦してみる
D3DXComputeNormalsを真似て自作したいのですが、メッシュの頂点データとインデックスデータから
どの様に計算したらいいのですか?
>>295 頂点データと同じサイズの法線の配列を用意して、零ベクトルで初期化しておく。
インデックスと頂点座標から面の法線を求めて、法線配列の
各インデックスの位置に足していく。
法線配列を全て正規化する。
頂点バッファを法線入りのフォーマットで作り直してコピーする。
D3DXは単純に法線を足して正規化しているだけだが、俺としては2辺のなす角で
重み付けしたい。
297 :
295:2013/12/12(木) 17:39:12.27
>>296 ありがとうございます、その内容で試してみます。
295じゃないけどやっと
>>296の「2辺のなす角で重み付け」の意味がわかった。
ある頂点を取り囲む面の、1周(360度とは限らない)のうちの何度を占めているかで
重みづけすれば、たとえば立方体で三角ポリゴン化の分割に癖があってもうまくいくわけか。
数学できないヤツばかりでワロタ
言ってる通りに実装すればいいだけやん
しかも動的に頂点変更しない限り、計算しておけば済む話だろ?
XNAで言うなら、パイプライン通すときにやっておけって話だ
その横槍はなんかちがくね?
301 :
298:2013/12/12(木) 19:20:29.74
わかってないのは
>>299だけみたいなんで放っときますね
文系でゲームプログラム初心者の俺には難しすぎる話題だな
正直、ここで質問するレベルにすら至ってないのだと確信したよ
2Dゲームならある程度までなら算数程度でぜんぜん大丈夫
304 :
デフォルトの名無しさん:2013/12/14(土) 12:33:57.57
質問です。
directx11のサンプル「DXUT Tutorial Win32 Sample」のTutorial10でメモリリークが
発生しているのですが、何が原因なのでしょうか?
メモリーリークを修正するためにはどこを修正すればいいのでしょうか?
2010くらいのDirectX SDKじゃなくてブラウザやVSでダウンロードするタイプのサンプルだよね。
「DXUT+DirectXTK simple win32」サンプルでもメモリリーク発生するね。
俺もわからん。
ソースちゃんと読むか1個1個オブジェクト削っていって試せば特定できるのかな。
Managed DirectSoundで質問です。
量子化ビット16、モノラル、適当なサンプリングレートで
音声をキャプチャをしようと思っています。
1秒のバッファを確保し、BufferPositionNotifyで
一定間隔でキャプチャをしています。
続く
続き
ここからが質問です。
Int16[] data = (Int16[])captureBuffer.Read(rPos, typeof(Int16), LockFlag.None, size);
と書いた場合と、
byte[] data = (byte[])captureBuffer.Read(rPos, typeof(byte), LockFlag.None, size);
と書いた場合で、dataの配列長が同じになるんですが、なぜなんでしょう?
byteのほうがサイズが2倍になるなら納得なんですが、、、。
どっちのdataも、secondaryBuffer.Write(pos, data, LockFlag.None);
で正常に再生できるのですが、腑に落ちません。
確かに残念なんです。教えて頂ければ幸いです。
質問を言い換えると、
quickprogram.blogspot.jp/2008_07_01_archive.html?m=1
によると、shortで読むなら2で割れって書いてあるんですけど、
割らなくても特にエラーにならないし再生も正常な感じなのが疑問です。
テスト
Readメソッドの定義はどうなってるの?
俺んとこだとMicrosoft.DirectX.DirectSoudが参照の追加に
リストアップされなくて見えないんだよねー何でだろ?
312 :
デフォルトの名無しさん:2013/12/30(月) 13:56:53.34
ID3DX11EffectPass::ComputeStateBlockMask()の使い方がわかんねー
ぐぐってもゼロHitだし
世の中で使ってる人間は俺ひとりか??
聞いたこともねぇ関数だなw
詳しく解説して教祖となるがよい
315 :
デフォルトの名無しさん:2013/12/30(月) 15:43:15.31
もっと詳しく書くと
目的は、Effect11でComputeShaderを使うことなんだが、
@fxファイル内でStructuredBufferやRWStructuredBuffer変数を宣言しても
インスタンスは生成されないっぽい。自分でBuffer作ってView作ってアタッチしないとダメ。
こりゃこういうもの?
AID3DX11EffectPass::Apply()を実行すると、自動的に
StructuredBufferやRWStructuredBufferがセットされるが
Draw()やDispatch()後にリセットされる訳じゃないので
以降セットされっぱなしになる。
自前でNULLをセットするしかないの?
ComputeStateBlockMask()あたりが救済手段に見えるんだが・・
とりあえずNVIDIA SDKとかでも検索してみるとかかな
317 :
315:2014/01/02(木) 13:02:48.84
@に関してはテクスチャもそうで、元々そういうもののよう。
Aに関してはnVidiaやATiの資料を見てみる。
ありがとうございます。
318 :
デフォルトの名無しさん:2014/01/02(木) 17:13:25.15
>Return Value
>If the function succeeds, the return value is DI_OK. If the function fails,
> the return value can be one of the following error values:
> DIERR_BETADIRECTINPUTVERSION, DIERR_INVALIDPARAM, DIERR_OLDDIRECTINPUTVERSION, DIERR_OUTOFMEMORY.
と書いてあるがどの値も返ってこないから詰んだ。
hr = DirectInput8Create( hInst , DIRECTINPUT_VERSION , IID_IDirectInput8 , (void**)test , NULL );
if ( FAILED( hr ) ){
MessageBox( hWnd , "error in DirectInput8Create" , "error" , MB_OK );
if ( hr == DIERR_BETADIRECTINPUTVERSION ) MessageBox( hWnd , "DIERR_BETADIRECTINPUTVERSION" , "error" , MB_OK );
if ( hr == DIERR_INVALIDPARAM ) MessageBox( hWnd , "DIERR_INVALIDPARAM" , "error" , MB_OK );
if ( hr == DIERR_OLDDIRECTINPUTVERSION ) MessageBox( hWnd , "DIERR_OLDDIRECTINPUTVERSION" , "error" , MB_OK );
if ( hr == DIERR_OUTOFMEMORY ) MessageBox( hWnd , "DIERR_OUTOFMEMORY" , "error" , MB_OK );
return -1;
}
ちなみに
DXGetErrorDescription( hr );
DXGetErrorString( hr );
は未解決と言われてコンパイルできないから他の方法があれば教えてくれ。
これが解決しないとまた今日も徹夜で残業だ。
土日返上で1週間ほどデスマやってるがこれだけは難易度が高すぎる。
>>318 おまえが根本的に無能なのは分かった
外部参照が未解決で解決できないとか、マジでアホの子だな
D3DXCreateTextureFromFileEx()
が返したテクスチャのサイズって必ず正方形?
正方形以外のテクスチャをサポートするデバイスではどうなるのさ
というかテクスチャサイズを動的に知る方法教えて下さいお願いします
>>321 前世紀のVGAならともかく正方形限定ってことはないはずだが…
サイズ指定がD3DX_DEFAULTまかせだと二の乗数に丸められるからそれじゃねえの(ex. 500x260 -> 512x512)
基本はサイズを画像ファイルから取得して直接指定するか
テクスチャサイズは丸めにまかせてUV座標で描写時に調整する(必ずD3DX_FILTER_NONEを指定すること)
あと、テクスチャは動的にサイズの変更はされないからGetLevelDescで十分なはずだぞ?
画像ファイルの実際のサイズならD3DXGetImageInfoFromFile
実行されるシステムのサポートできるテクスチャサイズを知りたいならD3DXCheckTextureRequirementsが楽っちゃ楽
>>322 GetLevelDesc()
これや!こんなんあったんか!見落としてた!
ありがとう!
いや、画像読み込んで開いてサイズ取得してまた開かせるのが気に入らなくてな
とにかく解決した!ありがとう!
DirectX11で登場した構造化バッファの「構造化」ってどういう意味??
StructuredBufferのことけ?
構造体みたいに使える書ける、ぐらいに受け取っていたけど
即レスd。
自分も構造体のことかなぁ、と思ったんだけど、
RGBAデータもまぁ、構造体みたいなもんだしなぁ・・・。
まぁ、RGBAやXYZWに限らず、任意の構造体を扱えるようになった=より一般化した、
という意味でそう名付けたのなら分からなくもないんだけど。
何か他の意味があるなら知りたいなぁ。
RGBAやXYZWはGPUにとっては組込型であり基本型なのよ
メモリーインタリーブでしょ
329 :
325:2014/01/07(火) 21:12:57.83
構造体メンバのアライメントを発展させたようなもんか
331 :
デフォルトの名無しさん:2014/01/16(木) 10:49:02.29
IDirect3DDevice9::SetTexture関数は重いので必要最低限だけ呼び出すべき と言うのをググっててよく見るのですが、
具体的に1フレームで呼び出しても影響のない回数はどのくらいでしょうか
目安でいいので教えてください
334 :
デフォルトの名無しさん:2014/01/17(金) 23:50:26.72
DirextX11使ってるんだけどエンディアン問題ってどうなってるんだろ?
DirextX側が処理してくれてるのか、自分で処理しなければいけないのか
そもそもリトルエンディアンしか考慮してないのか
どのリソースの話をしているんだ?
そんなこと気にする場面なんて皆無・・・
337 :
334:2014/01/18(土) 21:51:08.85
ID3D11DeviceContextのUnmapを使ってCPUメモリ上のデータをGPUメモリに送るときに
エンディアンって大丈夫なのかなって感じです
Mapで割り当てられたメモリに値をコピーするときに
自分でリトルエンディアンの配置にしないといけないのか、それとも気にせずmemcpyなどでコピーしてしまっていいのか
そんな感じのことで悩んでます
>>337 馬鹿なんだな
自分が扱ってるデータについてよく考えろ
逆ならまだしも、337の書き方から察するにGPU側はリトルエンディアンだと
思っているなら何を気にしているのだろう
エンディアン問題って言いたかっただけちゃうんかと…
どんな状況を想定してるのかよくわからんな
そもそもWindows PhoneやWindows RTもCPU側はリトルエンディアンだし
Direct3Dを使う上では杞憂としか思えんが
ビッグエンディアンのXBox360も9世代だしなー
XBox360ってインテルじゃなかったのか 初めて知ったわ
XenonとXeon間違えてさらに混乱したわw
ははw
たしかに名前は似てるなw
しかしアプリを作るうえでエンディアンを意識するケースなんてあるんだろうか
まあデバッグではバイナリ列見たりあるんだろうけど。
具体的に何のデータを扱っているときに何が心配なのかを明確にしないと全く意味が無い。
幽霊が出るかもしれない怖いっていわれたところで、だからどうしろと?
具体的な話にまとめられない時点で、はっきり言って適性が無いからプログラムなどやめた方がいい。
Q.エンディアン気にする必要ありますか?
A.いいえありません
でいいだろ。初心者質問スレですよここは
人の進む道にまで口出すなよ。面倒くさい奴だな
昔は3Dの色々な技術も含めて質問や議論が盛んだったけど、
最近はすっかり寂れちまったね・・・。
>>344 あるに決まってるだろ
360のモデルデータをぶっこ抜いて表示するのに変換したわ
DX11の質問おなしゃす
UpdateSubresource等でVRAMを書き換えを実行した直後に
その結果をMapで取得するのはどうしたらいいんでしょうか?
そのまま実行した時はGPUコマンドが実行されていないのか
古い値が取得されてしまいます
FlushやQUERY_EVENTを確認してみたものの即時値をとれないので困っています
Flushでもダメなのか・・・。
もうDrawコールするしかないんじゃね?
意図がわからんな・・・
UpdateSubresourceでデータを渡してるなら。その渡したデータこそが取得したいデータだろう
ちゃんと書き換えられているか知りたいとかなのか?
352 :
349:2014/01/25(土) 17:52:02.45
>>350 Drawは表示する物がないので試してみてないですが
Dispatch、Presentも試してみても駄目で
sleepで一秒ぐらい待てば思った通りの挙動にるんですが、さすがに実用に問題があるので
>>351 目的はコンピュートシェーダの結果を取得したく
UpdateSubresource(バッファのリセット)
↓
CSでバッファ書き換え
↓
Map(バッファのメインメモリ上への取得)
この流れを作成したく、CSを実行しなくても正常な値が取れなかったので
質問からCSの処理を省きました
まさかとは思うがUSAGE_DEFAULTで作ったリソースを読むなんて馬鹿なことはしていないよな?
聞くだけばかばかしいことだとは思うが。
354 :
349:2014/01/25(土) 18:40:50.44
>>353 Default→Stagingに複製してからMapしてます
書き換えてから数フレーム待ったり、Map前にSleepして待った後
結果が取得出来るのは確認しています
即時に結果を取得が出来なくて困ってます
GPUとCPUの同期のズレが原因かと目星をつけて
同期するような処理を挟んでみても上手くいかずお手上げな感じです
GetDataで出力が完了しているのかは確認した?
そういや、コンピュートでうまく実行されなくて悩んだことあったな・・・俺も
Dispatchした後に以下のコードを追加して試してみたらどうだ?
ID3D11DeviceContext->CSSetUnorderedAccessViews( 0, 0, NULL, NULL );
ID3D11DeviceContext->CSSetShaderResources( 0, 0, NULL );
ID3D11DeviceContext->CSSetConstantBuffers( 0, 0, NULL );
ID3D11DeviceContext->CSSetShader( NULL, NULL, 0 );
357 :
349:2014/01/25(土) 19:55:42.14
解決しました
Unmapしてなかったっていうアホな理由でした
そのせいで値がふわふわ変化して怪しい挙動していたみたいです
助力ありがとうございました
なぜかUnmapしなくていいっていう謎の思い込みがあったのが原因です
Dx9時代はちゃんとUnLockしてたのに、、
・・・ねぇわ
ちょwww
まぁ、よかったけどw
まぁ、何事も経験ではあるが、ここで聞く前に解決できる間抜けな失敗だよな
阿保杉ワロタ
つまりここに居るのは「ここで聞く前に解決できる間抜けな失敗」すら解決出来ない人達なのか悲しいな
まぁ、経験がなければ回答できないから仕方ない
むしろUnmapしなくてもそれっぽく動作しちゃうのが驚きだ
内訳とだけ言われてもな・・・
処理時間を測定したいならtimeGetTimeかQueryPerformanceCounteで自前で実装してリスト化すればいい
364 :
362:2014/01/26(日) 15:50:58.28
>>363 あ、CPUの時間計測でできるんですか。
ありがとうございました。
>>362 この画面ってNSightだと思う
おれはCudaでしか使ったことないけど
367 :
デフォルトの名無しさん:2014/01/27(月) 14:03:54.68
マップ間移動をしたときにマップの配列に移動先のマップ情報を読み込ませたいのですが、
本来なら控えるgoto文をつかって
int WINAPI WinMain(略){
DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );
_FirstLoad :
/* 初回に必要な読み込み */
goto _GAMELOOP;
_Load :
/* 読み込み */
if(読み込みが完了したら){
goto _GAMELOOP;
}
else{
/* 読み込みが失敗したときの処理*/
}
_GAMELOOP :
while(条件(略)){
if(プレイヤーが別のマップに移動したら){
goto _Load;
}
}
DxLib_End();
return 0;
}
などとしても、大丈夫でしょうか?
馬鹿には無理
369 :
デフォルトの名無しさん:2014/01/27(月) 14:10:01.32
>>368 一気にロードしても良いのですがメモリを食うので
随時配列にロードする形をとりたいのですが
具体的な回答を希望します
当人がgoto文使わないと随時配列にロードできないって言うんならそれでいいんじゃね
371 :
デフォルトの名無しさん:2014/01/27(月) 14:23:08.33
>>370 やはり、ループの中で処理を済ませてしまった方が良いでしょうか
本来なら控えるgoto文を使ってまでやりたい理由があるんでしょ?
なら使えば良いしないならやめとけば
373 :
デフォルトの名無しさん:2014/01/27(月) 14:30:34.89
>>372 ふと思いついたので...
不安要素の方が大きかったので質問させてもらいました
無理に使う事も無いので方針的にはやめとく方にしますが、参考意見が聞きたかったので
別に絶対gotoを使うな!なんて話はないぞ
あれも一種の宗教だ
375 :
デフォルトの名無しさん:2014/01/27(月) 14:38:12.38
>>374 まさに 毒にも薬にもなりますからね
上手に使えればいいのですが
376 :
デフォルトの名無しさん:2014/01/27(月) 14:45:56.59
別のパソコンで実行しようとしたらD3DX9_42.DLLがないと言われた
このパソコンにインストールできる権限はない
コンパイルしたパソコンにわざわざ古いDirectXSDKを入れてコンパイルしなおすのもダルい
他に解決方法は?
せめて前方移動と後方移動でキーワードが分かれていれば
ずっとマシな評価だったのではないか
>>376 SDKのRedistフォルダにファイルあるから実行ファイルと同じパスに置けば動くよ
ただ、そのファイルは再配布用インストーラを通して入れないというルールがあるので(DirectSetupで調べて)
運用は自己責任でな
そういや、PCを自己責任で使うのって、わりと当たり前じゃね?
380 :
362:2014/01/27(月) 23:06:54.60
>>365 >>362の画像はPSVitaの開発関連のものなのですが、
NSightはNVidia以外でも使えたりするんでしょうか?
まぁ、使えなかったとしても、NSight的なものがあるんでしょうね。
>>366 ありがとうございます。
MicrosoftはVisualStudioにこの機能を統合してほしいですね。
381 :
デフォルトの名無しさん:2014/02/11(火) 16:13:20.60
今MMDのPMXビューワを作っていて、頂点モーフィングを実装したいんだが、
どう作れば良いかアドバイス頂戴。
例えばPMXの亜北ネルは頂点数10399のモデルだが、
モデルに含まれている頂点モーフパッケージは、
どれも高々200頂点程度しか移動させない。
10399頂点のモデルの高々200頂点をモーフィングさせる為のシェーダは
どういう設計で組めば効率が良いだろうか?
>>381 面積が10399以上のfloat4テクスチャ作ってそれに移動量をモーフ数だけ加算してVSで足すとか
>>381 微妙にモーフを理解してないような気がするんだが、気のせいか?
メモリの効率よくいくにはこいつを使うしかない
↓
コンピュートシェーダ「・・・興味があるならやり方を教えてやる(´・ω・`)」
>>382 そうするなら、単純に移動量だけ収めた頂点バッファを作って
バインドした方が自然かも。1モーフ166KBか、
まずこの形で実装してみるのはありか。
>>383 端的に言うと、モーフ適用前メッシュと適用後メッシュを用意して
アルファ値でブレンドするのを頂点モーフィングだと思ってる。
>>384 CS・・
テッセレーション係数って最大64なんだな。
地形表現のために、もっと分割したかったのに・・・。
>>383 Dx9でも行ける(VTF使うけど)
モーフターゲット頂点の移動をテクスチャに1ドットずつ加算で打っていって
VertexShaderでそのテクスチャを読みつつ元の頂点に足せばモーフる
オフセットを記述したテクスチャじゃなくて最初の頂点位置入れても別にいいけども
>>385 テクスチャだと全部GPU処理にできそうだっていう提案なんでそっちでやるほうが色々良さそう
ポイントリストは意外と重いんだっけか
VS2012でシェーダーファイルHLSLコンパイルできるようになってたけど
main無いって怒られる
DirectX11だからテクニック使わないの
PSとVSあるので設定も複数いるような気がするし
よくわからないです
VS2012+DirectX11は、
定番はどうしたらいいの?
シェーダーの種類ってのがあってピクセルシェーダーとか指定できた。
一つのファイルでps,vs両方コンパイルしたい場合はどうしたらいいですか?
D3DCompileFromFile使ってプログラム内でコンパイルすればいい
それはわかっております。せっかくある機能を使いたかったん…
VSとPSでファイル分けるしかないのかな
>>388 プロパティのHLSLコンパイラ-エントリポイント名をmainから
正しい名前に変えたらどうか?
>>391 コンパイル毎にエントリポイント名を変えればファイルを分ける必要はないだろ。
コンパイルは関数の数分やる必要があるけど。
または
VertexShader g_VS_main = CompileShader(vs_5_0, VS_main());
GeometryShader g_GS_main = CompileShader(gs_5_0, GS_main());
PixelShader g_PS_main = CompileShader(ps_5_0, PS_main());
これを入れてエフェクトIFで取り出す。
>>392 VS2012登録でやるとコンパイルは1ファイル1関数(エントリポイント名)だけなんよ
MSのサンプルでは
test.fx( VSやPS入ってる。これはビルド除外 )
test_PS.hlsl( #include "test.fx" のみ記載で エントリポイントPS )
test_VS.hlsl( #include "test.fx" のみ記載で エントリポイントVS )
ってなってた
HLSLをプロジェクトの設定でコンパイルは、俺も折角だから使おうと色々頑張ってみたけど使い勝手悪くて、
結局バッチとかスクリプト書いてコンパイルに戻しちゃったな。
初歩的すぎてこんなこと聞くのも恥ずかしい事かもしれんけど質問させてくれ
シェーダに行列渡すとき転置するじゃない?あれってレジスタに列優先でバインドされるから
って理由だったと思うんだけど、じゃあシェーダ側でmulするときにベクトルを右辺にしたらいいんじゃないのか
って思うんだけどそれじゃダメなの?PC壊れててテスト出来ないんだけど気になってしょうがない
ネットで探してもそういうもんだで完結してるとこ多すぎて悶々とする
仮にmulで右辺にベクトルでも問題ないなら何故転置が必要ってのが当たり前なのかも気になる
昔は左辺掛けしか出来なかったとかそういう制限あったんだろうか
右にベクトルで転置しなくても問題ないできるよ
計算が列ベクトルの方が早いとかなんとかだったような気がするが、理由は答えれるやつは少ないと思う。
書き方を統一する意味もあるんじゃないの?
>>396 やっぱりそうなんだ、ありがとう
詳しい説明ってほとんどないよね、確かに列の方が早いってのは聞いたことあるような気がする
列優先でバインドされるからデータ取得が行優先より早いんだろうねきっと、微々たる差だろうけど
しっかし本とかネットでは転置するものとしか書かれてないんだよなぁ、そういうもんと納得してね(キリッ)みたいな
おお、あれってmulの左右入替えだけでできたのか。
変換が入るとややこしくなるから、行優先のデータ形式で十分っぽいな。
400 :
デフォルトの名無しさん:2014/02/23(日) 12:00:47.34
テクスチャ用画像が半透明を含むかどうか(アルファが1.0以外あるか)
知りたい。
DirectXTexではScratchImage::IsAlphaAllOpaque()でわかるようだが、
DirectXTexではなくD3DX11を使用した場合、同等の機能はあるだろうか?
一発でやってくれる関数っぽいのはなかった気がしたが
mapでテクスチャにアクセスして読み取れば簡単にわかるだろ
行優先だからHLSLに送るとき列に転置させてるんだろ
何言っての???
>>402 何いってるの?お前がまず先に文章ちゃんと読めよ
未だにD3DX 構造体使ってる時点で底が知れるけど
>>396
ベクトルって4x1として扱われるんじゃないの? と思って調べたら
http://msdn.microsoft.com/ja-jp/library/ee418342(v=vs.85).aspx
>{
> float4 val;
> return mul(val,val); // dot(val, val)と同じ
>}
>この乗算結果は、1x4 * 4x1 = 1x1 ベクトルです。
状況に応じて4x1と1x4で解釈変えてくれるってことなのかな
406 :
405:2014/02/23(日) 19:35:54.52
column-majorとは列優先のこと。
昔のSSEは内積命令がなかった為
ベクトルと行列の乗算には
列優先の方が効率が良かった。
今はどっちでもいい。
408 :
デフォルトの名無しさん:2014/02/24(月) 23:42:19.43
列優先はFORTRAN、C言語は行優先、それでDirectXも行優先にしたのでは?
ところでDirectX11も左手座標系を基準にしているの?
それと、DirectX9の行ベクトル*転置行列をやっぱり踏襲してるの?
開発者が自分で決めることを、DirectX云々はとかいう意味が分からない。
410 :
デフォルトの名無しさん:2014/02/25(火) 00:56:02.20
開発者って誰なんだよ。DirectX使ってソフト作っている奴かよ。
お前はDirectX云々も知らんで、サンプルプログラム動かして
なんとなく納得している阿呆かよ
>>410 Direct3Dの座標系は開発者が決められる
そんなことも知らない馬鹿は氏んでろよ
だからといってX座標の変数にyと定義しないし、Y座標にxと定義しない。
XとYなんてビューの設定を開発者が変更した時点で、いかようにも変化する。
自分で決めることであって、あらかじめ定まっていることじゃない。
座標系も自分で決定することであって、DirectXに依存するようなことじゃない。
そんな簡単なことも分かっていない時点で勉強不足。
414 :
デフォルトの名無しさん:2014/02/25(火) 10:10:28.99
>>413 突き詰めれば、左手系と右手系どっちなのかはプログラマの解釈の問題というのは
そうかもしれない。
しかし、数学では右手系が普通、DirectX9が左手系がデフォルトだったから、
正の回転方向が右手系と逆なのに初心者はとまどってしまう。
メッシュモデルの読み込み(メタセコイアでは左手系、右手系に切り替え
られるとお前は言うだろうが)やカーリングの問題もある。
それにD3DX9の算術関数は行ベクトル×転置行列になっている。数学では
行列×列ベクトルの演算が普通だから、この癖も知らないと初心者は混乱する。
だから、DirectX11はデフォルトで右手系になってるか、行列×列ベクトルに
なってるのかと聞いてるのに「そんなの自分で決められる」かよ。そして、
最後は「自分で調べろ」と言うんだろ?
お前みたいなのを融通のきかない、ピントはずれのボケナスと言うんだ。そして
職場で「テクハラ」をやって上司や同僚から嫌われてるだろ。
その程度のレスしかできないなら黙ってろ。おまえはどっかの掲示板の「あ」か?
>>414 そもそも固定機能が無くなって頂点処理を自分で書かないといけないんだから
自分で書いたシェーダー次第。
>>414 >しかし、数学では右手系が普通、DirectX9が左手系がデフォルトだったから、
いったい何を言っているんだ?
そもそもそんなデフォルトは存在しない。
お前は頭が悪すぎる上に、思い込みがひどすぎる。
なんでDirectX9が左手なんて勝手に思い込んじゃったんだろう?
馬鹿の考えることは常人には理解できない。
左手だから思い込みじゃなくて確信だろう。
ん?でもHLSLの組み込み関数は左手なんだから、そちらに合わせたほうがシンプルで良くね?
crossとか使ったことない?
そもそもDirect3DもOpenGLも、同じ行列をセットして、
同じ頂点座標を描画すれば、同じ出力結果になるんだよ。
RM時代のX-Fileが左手でデータを格納していたから、
左手でやっているサンプルが多いと言うだけの話。
D3DXにべったり頼っている人間が、
疑いもせずそういうものだと思い込んでいる。
hlslとglslなら、APIが違うから呼び出すまでの手続きは違えど、計算部分は完全に同じ内容になる。
両対応のプログラムを実際に作っているが、座標系の変換なんて意味不明な作業はしていない。
まあ全部ただの行列の計算結果だしねぇ、唯一決まってるのはスクリーンの座標くらいか
>>419 入力されるプリミティブの頂点が逆順になるだけで
cross自体に右手左手なんてないでしょ?
>>419 crossに座標系関係ないだろw
アホ晒しもたいがいにしろ
アセンブリレベルで考えればどちらかが最適だったような気がするけど。
426 :
デフォルトの名無しさん:2014/02/25(火) 23:15:08.76
自分では何も言えないくせに、弱い犬ほどキャンキャン吠えるわ
ぺぇっ! はずかしくないのかよ。糞どもw
427 :
デフォルトの名無しさん:2014/02/25(火) 23:16:29.81
ほんと見栄っ張りのこいつら見てると吐き気がするわ。 馬鹿の癖に
VertexBufferからUnorderedAccessView作れないもんかね
まあ試してみてダメだったんだが
426=427が自分の馬鹿さ加減に気が付いたようです
>>429 君は相変わらずだな
毎度毎度バカだのアホだの
もうちょっと成長したらどうなの?
>>430 その無駄レスする電力を何かに活かせなかったのか
と無駄レス
>>428 コンピュートシェーダで頂点バッファ使いたいってことか?
もしそうなら作ることは可能。
RWByteAddressBufferを使用する
あとサイズが不変で複数バッファ作ってもいいってんなら
頂点バッファと全く同じサイズのD3D11_BIND_VERTEX_BUFFERを外したバッファを作ればいい
そいつをUAVに使って、頂点バッファのデータをコピー。
そのあとコンピュートなりピクセルなりを実行した後、結果を頂点バッファの方にコピーする
>>433 そのドキュメントが間違っているんだが、それが分からない時点で勉強が足りていない。
そこの解説にあるようなD3DXの数学ライブラリをOpenGLやDirect3Dに使った場合、
LH系で生成した行列を使えば左手になるし、RH系を使えば右手になる。
座標系を制御するのは上位層の話で、OpenGLやDirect3D自体に存在する話では無い。
X-Fileは左手で格納されているが、完全にデータフォーマットの話だ。
OpenGLやDirect3Dに座標系が存在するという意味不明な状態になるのなら、
それぞれに出力するデータを変えなければいけないということになるが、
実際に同じ行列と同じ頂点で動くのに、
じゃあ具体的に何のデータを変えると言うんだ?
Microsoftが右手標準の3D業界に、RMという高レベルライブラリで対抗しようとして左手を押していた名残。
左手右手なんかZのスケール値の問題やろ
左手にZスケール-1で右手やん
判り易く言うと右手座標とか左手座標の問題というより
右回りの円と左回りの円で表裏が違うんだけど
どっちを表裏にするかがDirectXとOpenGLでは逆ってこと
これが物体の前後関係や陰面処理を可笑しくする
>>440 カリングは自分で設定するものであって、
Direct3DやOpenGLに依存するものではない。
右左言っている奴は、
OpenGLとDirect3Dに設定する計算内容で、
いったい何を変えなければいけないのか具体的に言ってみろ。
左・右座標系「「私をめぐって争わないで・・・っ!」」
>>433を持ちだしてきて「DirectXは左手座標系!」とか言ってる人や
>>439に
わざわざ本当のこと説明してあげる必要ないのに。
いいじゃん彼らの中では左手座標系ってことにしとこうよ。
そういうコメントをすると自作自演とか言われるからやめてくれ。
DirectXを開発したMSが左手だと言ってるんだから左手。
>>420 はまわりが見えないアホ。
ドキュメントが間違っていても、自分で検証しようともせず、
盲目に信じ込む人間は開発には向かない。
下位レイヤーに座標系に違いがないなんて、
今回のやり取りで十分に分かっただろう。
自分で演算部分を組んで両方のプログラムを作っている人間なら、
そもそもそんな勘違いはしないんだよ。
同じ組み方で動くんだから。
自分で考えもせずにサンプルをマネするだけで既存の演算ライブラリに頼るから、
間違った情報をそのまま信じ込んでしまうんだよ。
DirectXはふつうに左手だが、この人、そもそも座標系の意味を勘違いしてるっぽい。
>そもそもDirect3DもOpenGLも、同じ行列をセットして、
>同じ頂点座標を描画すれば、同じ出力結果になるんだよ。
ならぬことはならぬものです
なんか間抜けが1匹まじってるような
・Direct3Dのデフォルト座標系は左手系
・ただし、右手系に設定可能
これだけの話しなんじゃないの?
自分で設定しないと機能しない物に、
デフォルトなど存在しない。
右だ左だデフォルト云々行っている奴は、具体的に何がデフォルトで、
Direct3DとOpenGLで何の計算に影響するか答えてみろ。
それだけで決着がつく話だろ。
438が全てだろ、何ごちゃごちゃ言ってんの?結論出てるじゃん
座標系は高レベルのレイヤの話。
だからたとえば左手が前提になっているX-Fileを使おうとした場合、
左手ならストレートに使えるが、右手でやるならデータの変換が必要になる。
しかしそれはデータ形式の問題であって、下位レイヤーの問題では無い。
今回の話をネットワークに例えると、
物理層でIPアドレスの話をしているような状態。
突き詰めれば一応、クォータニオンにもかかわってくるけどな・・・
>>455 それはクォータニオンと言いたかっただけだろ。
ああ、なんか響きがかっこいいだろう(´・ω・`)
クォータニオン星人とかアニメとかに出てきそうな感じの名前
それはともかく戦闘機の姿勢制御の為に編み出されたっていう出自がカッコイイ
俺は四元数派
球面調和関数とか名前カッコいいよな
>>454 ネットワークで言ったら座標系はプレゼンテーション層かな。
ああ、このスレがこんなに盛り上がるなんて・・・。
おじさん、うれしいよw
DirectX関係無い、というか関係無いことを主張するって流れなのが悲しいところだけどな
直交化法グラム・シュミットォ!(技名)
今DirectX使ってあれこれやってる人って少ないんかねぇ。
msdnのサンプルのダウンロード数見てもこのサンプルがこんだけ?ってなったりする。
あれにvisual studioからのダウンロード数が含まれてるかどうかは知らないけど。
右手系左手系の話についてまとめると、、
1、Z軸の方向
これはViewProj行列で使用者が制御するのでD3D11は関係なし
2、3角形の頂点の順番(時計回りか否か)
D3D11ではD3D11_RASTERIZER_DESC::FrontCounterClockwiseで制御され
デフォルト値は右回り(時計まわり)。
時計回り=左手系であるから、D3D11は関係がありデフォルト左手系と言える。
元々の質問内容が
>>414の
>だから、DirectX11はデフォルトで右手系になってるか、行列×列ベクトルに
>なってるのかと聞いてるのに「そんなの自分で決められる」かよ。そして、
だから、その答えはDirect3D11はデフォルトで左手系です、になるんじゃないの?
反論があるならプリーズ
>>465 反論じゃないけどわからんから質問
時計回り=左手系って決まりあるの?
>>466 さあ?わからん
ただし、座標系と3角形頂点の順は関係無いだろうな
別にどっちがどうであれ、そもそも別の処理の話なんで。
ここでグダグダ続いている話のなんと中身のないことよ。
じゃあ
>だから、その答えはDirect3D11はデフォルトで左手系です、になるんじゃないの?
にはならないじゃん。少なくともその論法では。
DirectXってよりただのCG基礎知識になっちゃったな
470 :
デフォルトの名無しさん:2014/02/26(水) 23:22:24.88
>>432 その方法でUAVを作ることが出来ました。
情報ありがとうございました。
お、おう・・・。
質問させてください。
DirectX9ExのSetMaximumFrameLatency(1)が使いたく、
DirectX9をDirectX9Exに書き換えたところ
D3DXLoadMeshFromXでエラーが発生するようになってしまいました。
どうすればよいのか検討がつかず困っております。
開発環境はWindows7HomePremium VisualStudio2008Pro、DirectX SDK (June 2010)です。
以下に、該当箇所のコードを書きますので、
よろしくお願いいたします。
hr = Direct3DCreate9Ex( D3D_SDK_VERSION, &g_pD3DEx );
D3DPRESENT_PARAMETERS d3dpp = { 800, 600, D3DFMT_UNKNOWN, 0, D3DMULTISAMPLE_NONE, 0, D3DSWAPEFFECT_DISCARD, NULL, TRUE, TRUE, D3DFMT_D16, 0, D3DPRESENT_RATE_DEFAULT, D3DPRESENT_INTERVAL_ONE };
D3DDISPLAYMODEEX *pFullscreenDisplayMode = NULL;
hr = g_pD3DEx->CreateDeviceEx( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, pFullscreenDisplayMode, &g_pD3DDevEx );
hr = D3DXLoadMeshFromX(L"tiger.x", D3DXMESH_MANAGED, g_pD3DDevEx, &pAdjacency, &pMtrlBuf, &pEffectInstances, &numMaterials, &pMesh);
if(FAILED(hr)) {
MessageBox(hWnd, L"D3DXLoadMeshFromX NG", L"CreateD3D", MB_OK);
return FALSE;
}
MessageBox(hWnd, L"D3DXLoadMeshFromX OK", L"CreateD3D", MB_OK);
以上です。
D3D9のランタイムをデバッグモードにしてVisualStudioの出力にエラーメッセージが記録されるか確認
またエラーの際のHRESULTの内容も
D3D9ExはD3DPOOL_MANAGEDのリソース作れないので
D3DXMESH_MANAGEDを外してみたらどうかしら
477 :
472:2014/02/28(金) 02:26:33.59
>>475 DirectXコントロールパネルから、Debugに設定したところ、
VisualStudioの出力に
D3DX: D3DPOOL_MANAGED is not supported on D3D9Ex devices
と表示されました。
HRESULTの値は E_INVALIDARG(無効なパラメータが関数に渡されました。) でした。
D3DXMESH_MANAGEDは使えなそうなので、
D3DXMESH_DYNAMICに変更したところ、うまくいきました。
素早いご助言で非常に助かりました。
ありがとうございます。大変感謝です。
478 :
472:2014/02/28(金) 02:29:08.45
>>476 そういう事だったのですか。勉強になります。
テクスチャの読み込みでもエラーが発生したので、
D3DPOOL_MANAGED
から
D3DPOOL_DEFAULT
へ変更でOKでした。
ありがとうございました。
質問させてください
DirectX11でピクセルシェーダへの入力は標準で補間されるんですよね
つまりスムーズシェーディングはフォンシェーディングならPSに入力される法線を使えば勝手にできると理解したのですが
どうしてもフラットシェーディングでしか表示できません
そもそも法線の補間が効いてないようなのですが何か設定が必要なのでしょうか
初めて間もないド素人なので見当違いの質問だったらすjみません
全部の法線が同じ方向だったり
>>480 どうやらそのようです
本を参考にGSで面の法線を計算させていたのですがそのまま頂点の法線にしても同じ方向ですよね
あまりに基本的なこと過ぎてお恥ずかしい限りです
ちょっとどつぼににはまっていたのですがあっさり解決しそうです
ありがとうございました
482 :
デフォルトの名無しさん:2014/03/04(火) 21:12:26.88
DirectX11で背景に画像を表示しようと思ったらどうしたらいい?
何が聞きたいのかさっぱり分からない。
画面クリアをテクスチャでやりたいってことなんじゃないの
色々方法あると思うけど、まず自分でやってみてから質問しろよ
どうすればいい?ってんなら好きにすればいいとしか言えない
とりあえずテクスチャ張った画面サイズの板ポリゴンを平行投影で描いてその後デプスバッファのクリアをしたらやりたいことはできた
レンダビューを単色クリアするみたいに直接画素値を書き込むとかはできないのかな
全然機能を把握できてないからなんて調べたら良いかも分からん
おまえは基礎知識がなさすぎなんだよ
基礎知識が無いから聞いてるんだけどな
まあいいやもっと独学積んでからくるわ
正論
Direct2D「・・・呼ばれた気がした」
>>485 画像でクリアしたいなら、CopySubresourceRegionが多分使える。
単純コピーだからこっちのが早いだろうけど、基本的にリソースの初期化とか更新用なので、
フォーマット揃ってないとダメとか、矩形転送(回転は不可)だとか、はみ出してちゃダメとか、かなり厳しい制限が色々あるから、
背景を描画するのが目的ならシェーダ経由で描画するのが普通だと思う。
ホントに画像でクリアしたいんならこっちの方がいいだろうけど、
後で背景スクロールとかしたいなーとかなったら、結局シェーダー経由の実装に泣きながら書き換えるハメになるだろうし。
CopySubresourceRegionは単純コピーじゃないぞ
毎フレームに使うのを躊躇するほど超絶重いから
軽いのはCopyResourceの方な
>>485 そもそも描く時点でデプスバッファを更新しないようにする。
>>489 ID2D1DeviceContext以降のお前なら歓迎するよ^^
DirectShowについてってここでいいでしょうか?
動画ファイルに文字や絵を合成してまた動画ファイルにしたいのですが
こういうのは自分でフィルタを書かないと
ダメなものでしょうか?
つ AviUtl
DirectShowのストリームはアプリから触れないからねぇ。そういうぴったりのフィルタが
なければ自分でフィルタを書くしかない。
Windows7以降ならDirectShowじゃなくてMediaFoundation使えば?
>>495 プログラムでいじってみたいです。
>>496 自分でフィルタを書くものなのですね。
そうとわかればチャレンジしてみます。
MediaFoundationはDirectShow以上に情報が見つからないみたいなので
普及したら勉強してみます。
498 :
381:2014/03/06(木) 01:12:09.17
やっと頂点モーフィングを実装出来たぜ・・(結局CSで実装)
約1月、時間かけ過ぎたぜ
残るは剛体だけだぜ・・
早速Mantle要らない子になるん?
Mantleは既に使える技術
DirectX12は早くても来年
対応するハードウェアはいつになるか未定
パートナーにQualcommがおる
来年なのか、じゃ11使っとくしかないか…
またOSに制約つけそう
もうDirectX自体がおわこん・・
当然8以降じゃないの?
どんなフィーチャーが付くのかなワクテカ
507 :
デフォルトの名無しさん:2014/03/07(金) 00:21:27.14
ここの馬鹿どもはベクトルの回転行列と座標変換行列の区別も知らんだろ。
期待するだけ無駄だ。なにせ両者の要素は全く同じだし。
おじいちゃんもう寝る時間よ
よくわからん煽り入れる場所を間違ってるつーの
次のDirectXは初期化が簡単になってると良いな。
逆にシェーダーがほとんどコンピュートシェーダ化して、
SMなんかのユニットを意識して書かなきゃならなくなるとか、そんなのになりそうだけど。
またちゃぶ台返しするんだろうな
XNAMathは廃止しまーす、代わりに○○を使ってね
DirectXTexはサポートしませーん、変わりに○○使ってね
D3DXEffectは廃止しまーす、代わり?いや無いけど?
512 :
デフォルトの名無しさん:2014/03/07(金) 19:50:53.57
また、ガラクタどもがしょうもないことをw
とりあえず知ってる単語並べてディスってみました感
514 :
デフォルトの名無しさん:2014/03/07(金) 20:16:31.56
DirectXの初期化で無事死亡した
>>511 わざと言ってるのか?w
すごい外し方だな
11でだいぶ良くなった。
もう一息ってとこだね。
どっちかって言うと
10でかなりまともになったが
11でまたおかしくなってきた
10のパワーアップ版が11なのにどこがおかしくなったんだよ
519 :
デフォルトの名無しさん:2014/03/08(土) 01:28:23.30
おかしいのはお前らのドタマ
使い物にならないテッセレーションの為に、節操なくシェーダステージを量産
ID3D11DeviceとID3D11DeviceContextの分離(性能の為に簡素さを犠牲)
CAPS的要素の復活(正しくは10.1からだが)
RWStructuredBufferやRWByteAddressBuffer、AppendStructuredBufferなど、非汎用的な拡張(例えばvector< struct >1本では無理だったのか)
全体的に10で洗練されてかなりシンプルなデザインになったのに
11でまた複雑化する方向に舵を取った印象
おかしくなってるとはそういうこと
うーん、そう言われると、たしかにもっと洗練された構造にできなかったのかな、と思う。
C++AMPなんかは裏でDirectCompute使ってるけど、
あれはかなり洗練されてる印象がある。
シェーダステージはハードのアーキテクチャに合わせてるだけだから別によくね?
無理矢理使わないとダメなものでもないし
複雑化はしてると思うけど、それだけ出来ることが増えてるとも言えるし
11>10
これは間違いない
ID3D11DeviceとID3D11DeviceContextの分離の部分は
個人的には便利だがな
DeviceContextとの分離はマルチスレッドのための設計だからじゃないのかな
ID3D11DeviceContextの分離は目的に対して素直な変更だし
Capsについても広いハードウェアをサポートしつつ先進的な機能をAPIに取り込むスタンスにおいて
最初っからただの幻想だと思ってたから、まあそうなるよねって感想しかないな
シェーダまわりがとっ散らかってるの完全に同意
DifferedContextの利点がいまいち分からんw
DirectX9の Presentには、 更新元、更新先矩形指定できたけど、
HRESULT Present( CONST RECT *pSourceRect,
CONST RECT *pDestRect,
HWND hDestWindowOverride,
CONST RGNDATA *pDirtyRegion
);
11のPresentには、矩形指定が無いのです。
別に指定方法ってありますか?
>>528 ドキュメントを読まない馬鹿は救いようがないな
もう一度リファレンスをよく読め
Present1
DirectX 9.0 SDK Update - (October 2004)を
探しているのですが、microsoftのダウンロードセンターを
探しても見つからないです。どこかに置いてあるものなのでしょうか。
ちなみに、中に入っているdinput.libが欲しいのですが。
533 :
531:2014/03/13(木) 18:09:04.93 ID:sXBITfll
>>532 ありがとうございます。
結局、Microsoft内を探しても見つけられなかったので
仕方が無いので、怪しげなサイトに置いてある
dxsdk_oct2004.exeを見つけ、ダウンロードすることにしました。
SHA-1は8097bb69676a20e55a98a67d960a8b6edc89dff9のようなので
これが一致していれば大丈夫なはず、、、はず。。。
Microsoft内で簡単に見つかれば、こんな恐ろしい目に合わなくて済むのですが。。。
>>533 「DirectX SDK October 2004」でググるという発想はないのか…
536 :
531:2014/03/13(木) 19:24:20.97 ID:sXBITfll
>>535 うちだけMicrosoftからブロックされたのかな?とか
訳のわからないことを考えてしまっていましたw
怪しい韓国サイトからDLしたものは、chromeさんに
「これ、危ないファイルだよ」と言われた上に、SHA-1も
異なっていたので、0と1に還元してあげました。
仕方がないのでしばらく様子見することにします。
ありがとうございました。
純正品ならMSの署名ついてるだろ
つかdinputって推奨されてないんじゃなかったっけ。
古いDirectX本のCDに付いてると思う。
正規に入手するならそれ位しかないんじゃない?
いちいち口の悪い奴だ。
544 :
デフォルトの名無しさん:2014/03/15(土) 14:37:10.27 ID:ZPMHjx2K
DrawInstancedIndirect()などIndirect系の利点がいまいちわからん。
DrawInstanced()の引数「uint x 4」がシェーダリソースになってるってことだが
描画がGPUで勝手にやってくれる訳でもなく、
CPUからのDrawInstancedIndirect()コールは必要な訳で、
それじゃDrawInstanced()コールしてんのと殆ど違いが無いよね。
引数「uint x 4」の転送がそんなに重いの?
コンピュートシェーダ「俺が並列計算してインスタンス数をはじき出す、待ってろ!」
DrawInstancedIndirect「さすが、コンピュート先輩!」
ワロタw
>>544 CPUとGPUは非同期で動いてるから、普通のDrawInstanced()だとコンピュート先輩が結果出すまでCPUは待ちぼうけくらうっしょ?
でもコンピュート先輩がシェーダーリソースに結果を書き出して、後続のDrawCallがそこからパラメータを読み取って動作するって命令があればGPUの中で完結するからCPUを止めずに済む。
それがIndirect系の命令。
d3dx9.h:No such file or directoryと出たのでヘッダーファイルズにd3dx9.hとd3dx9.hでインクルードされているヘッダーファイルを入れたのですが結果は変わりませんでした。
何が問題なのでしょうか?よろしくお願いします
>>548 おまえが環境構築の何たるかを理解してないのが問題なんだよ
FAQだからエラーメッセージやらファイル名やらでぐぐれ
あと勝手にコピーしたファイルは必ず戻しておくこと
もうDirectXでもなんでもないやんけそれ
プログラミングの基礎から勉強し直せ
今そういえばVS2013とかにd3dx9.hって入ってないのか
sdk探して下ろしたり知ってる人間でも割と面倒かもしれない
と思った
もう最新のDirectX11でイイよ。
NVIDIA will support DX12 on Fermi, Kepler, Maxwell and forward!
古いハードウェアでも行けるのか
Developers already have DX12 drivers. The Forza demo was running on NVIDIA!!!
つまりデモの映像はPCで動いてたのかよw
>>552 今までVSにD3DXのヘッダなんて入ってたことあったか?
Directxに興味を持って2年くらい前から本を持っているのに
相変わらずサンプルのビルドすらできない
ライブラリとか指定済みのSampleBrowserのものすら動かないのは何が悪いのやら
Hello worldがコンパイル出来てるか心配になるレベル
定数バッファを作ろうと思って
struct TEST
{
float test;
};
というストラクチャを作り、
D3D11_BUFFER_DESC cb;
cb.ByteWidth = sizeof( TEST );
cb.Usage = D3D11_USAGE_DYNAMIC;
cb.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
cb.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
cb.MiscFlags = 0;
cb.StructureByteStride = 0;
ID3D11Buffer* ConstBuffer;
m_pD3DDevice->CreateBuffer(&cb, NULL, &ConstBuffer);
という風に書いたんですが、このCreateBuffer()で失敗します。
HLSLの方は
cbuffer cbBuffer0 : register(b0)
{
float test;
};
何が問題なんでしょう?
>>563 おいおい、買った本教えてみ。
非常に大事なお約束が抜けてるぞw
自分も最初に躓いたな、そこw
>>563 D3D11が失敗するときは、エラーメッセージを吐くのでそれを参考に。
Bufferまわりはマニュアルにない制約が多いので注意。
D3D11 ERROR: ID3D11Device::CreateBuffer:
The Dimensions are invalid. For ConstantBuffers,
marked with the D3D11_BIND_CONSTANT_BUFFER BindFlag, the ByteWidth (value = 4) must be a multiple of 16.
ByteWidth must also be less than or equal to 65536 on the current driver.
[ STATE_CREATION ERROR #66: CREATEBUFFER_INVALIDDIMENSIONS]
まあ、簡単に言うとだな・・・
struct TEST
{
float test;
float test2;
float test3;
float test4;
};
にしとけってことだ
568 :
563:2014/03/23(日) 20:17:38.70 ID:YAORAhKQ
>>564-566 回答ありがとうございます。
sizeof(TEST) + ( 16 - (sizeof(TEST) % 16));
としたら通りました。
考えてみれば実用上はほとんどの場合、float4の型しか使いませんね。
>>564 今のところネット情報だけでやってます。良ければオススメの本教えてください。
なんだ、二年前の本の人とは別人なのか
DXVAで動画エンコしようと思っているんだけど、IDirect3DSurface9を使う場合って
やっぱりデバイスロスト対策は要るんだろうか?
もし要るとした場合、随時TestCooperativeLevel()でチェックすればいいのかな?
>>560と同じ状況ですが
サンプルを動かすのに設定済み項目以外で変更すべき項目などありますか
ビルドに失敗するならビルド時のエラーメッセージを無視せず必ず読め
そこに何が問題なのか8割方書いてある
#includeは、おまじないじゃないんやで
せやな。
プログラミングは宗教です
ならプログラマは神の奇跡を呼び起こす僧侶だな
アップルという名の宗教に入っています
DX12はWindowsPhoneも対応だけど、.NETには対応しないの?
何を言ってるんだ君は
SharpDXあたりが対応してくるんじゃね
開発者さんやる気満々だったよ
ゲイツが抜けてから迷走してるなぁ。
マカーなんか採用するからこんなことになるんだよ。
ゲイツまだいるし
ビル&メリンダ・ゲイツ財団にいるんじゃね
587 :
デフォルトの名無しさん:2014/04/12(土) 01:09:50.13 ID:22hvsUpn
C#とSlimDXの質問ってここで良いの?
内容によっては↓
C# C# C♯ でゲームを作ろう Part2
toro.2ch.net/test/read.cgi/gamedev/1290300779/
589 :
デフォルトの名無しさん:2014/04/12(土) 01:13:05.66 ID:22hvsUpn
Direct2D&DirectWriteは文字の表示のみなんでしょうか?
入力が必要になった場合コントロールの貼り付けで対応するんでしょうか?
590 :
デフォルトの名無しさん:2014/04/12(土) 01:18:26.13 ID:22hvsUpn
SlimDXのDirect2Dでオブジェクトをアフィン変換する時に回転して拡大縮小を同時にするには
変換行列を使うとどう行列を設定すればいいんでしょうか?
VC++2010でDirectX系のlibファイルをデフォルトで追加されてるようにするには
どうすればいいでしょうか?
2010でデフォルトで追加されるようにって意味がよくわからんぞ
2010とdirectxインストールしろとしか言えんわ
・・・2012じゃだめなん?こっちは最初からdirectxが入ってるぞ
新規プロジェクトを作成したときに
追加の依存ファイルとしてd3d10.libとかが既に設定されている状態にしたいってことかね
プロパティシートでも自前で書けば?
DirectX11のブレンドステートって加算用とか乗算用に変更しようとして
毎回CreateBlendStateとOMSetBlendState呼ぶのは間違ってる?
速度的に問題ないと思ったら毎回呼んでもいいんじゃない?
同じステートがすでに制作済みならそのポインタを返すらしいぞ、CreateBlendStateは
・・・俺は毎回CreateBlendStateは呼ばんけどな
さすがにCreate系は立ち上げの際に1回呼び出すだけだな。
Set系は毎フレームコールしてるわ。
>>597、
>>598 じゃあ初期化の段階で加算用、乗算用とかのブレンドステート作っておいて、
いざ使う時にどれかを選んでSetする感じか
サンクス
>>599 DirectXTKってのにシングルトンのステートオブジェクトを返す丁度良い実装があるよ
DirectXTKは使わないし、それほど素晴らしいとは思えないけど、
参考にはなると思う
実用的なモノのソースがぜんぶ見られるんだから、見て損はないよね
それはどうでもイイけど、
>>596それは無いと思う
Direct3Dに限った話じゃないけど、C/C++的に、とても忙しいときに
リソース確保とかない
DirectX+C++でプログラムを作りたいと思っています。
PS4でソフトを出す人が言っていたのですが、今でもDirectX9使ってて、11は触ったこともないよと言っていました。
(DirectX9のプログラムをPS4でリリースするそうです)
11は9にあった機能がガンガン削られたというのも気になってて、9から勉強すれば大丈夫でしょうか?
今さら9はないかな
機能が削られたといってもよりハードウェアよりになってパフォーマンスを重視するようになったってだけだし
9は参考書籍に良書が多いから、9スタートでもいいとは思うけど、
やる気の持続する人はこの質問する前にすでに両方試してると思う。つまり才能がな(ry
触ったことも無い人間が語る内容を信じる意味が分からない。
9をかんだ程度で11に行きたいならやめておいた方がいい。混乱するだけだ
9を極めて11に行こうってんなら、移行は簡単だろうが時間の無駄すぎるだけだ
0から始めるのに今更9は流石に無意味
DX11ってOpenGLみたいに描画がプリミティブになったんだっけ?
意味不明
俺、次のDX12に期待するわ
じゃあ僕はDirextX15ぐらいで。
12はまた大幅な変更なのかな
情報量は9が多いし、参考にしたらいいと思うけど、
今からプログラミングするなら断然11をオススメする。
9までのAPI増改築による複雑さが整理されているし、色々なアルゴリズムを適用し易い柔軟性もある。
骨まで理解するPCアーキテクチャ(GPU編) 第4回
http://pc.watch.impress.co.jp/docs/column/1month-kouza/20140425_646073.html >CPUはどちらにもアクセスできるが、GPUの方はI/O空間のみにしかアクセスできないという問題がある。
>「ではプロセスもI/O空間だけを使ってプログラムを走らせれば?」というのは無理な相談で、
>元々この領域はI/Oデバイスとの通信用に設けられた特殊な領域なので、
>プロセスからアクセスはできるといっても、本来のメモリ空間と同じように扱えるわけではない。
>よって、旧来の方式では、
>
>1.CPUが元データをメモリ空間からI/O空間にコピー
>2.I/O空間にGPUがアクセスして処理を行ない、I/O空間に結果を書き戻す
>3.CPUが結果をI/O空間からメモリ空間にコピー
>
>という面倒な手順になっていた。
DirectX11でステージングバッファっていうのを介してGPU転送してるみたいだけど、
あれって上記記事のI/O空間のメモリ領域のことなの?
DirectX11でテクスチャの設定された面とされてない面があるオブジェクトを描画する時はシェーダを切り替えなくてはいけないんでしょうか
シェーダ側からテクスチャが設定されているか調べる方法があると良い気がするのですが
頂点情報に埋め込んどけばいいだけの話
シェーダ内でif分岐するよりはシェーダを切り替えたり、
テクスチャなしの場合は白のテクスチャを張る、
とかにしたほうがパフォーマンス的にいいと思う。
実際に測定してないけど
DynamicShaderLinkageってのがあってだな・・・
まぁ白テクスチャの方がお手軽だけどな
619 :
615:2014/05/01(木) 23:00:51.16 ID:eDhN40up
DynamicShaderLinkageを勉強しつつまずは白テクスチャの方法をとろうと思います
ご指導ありがとうございます
620 :
615:2014/05/01(木) 23:43:52.59 ID:eDhN40up
と思ったのですがテクスチャのない面では頂点色を使いたいときは白テクスチャだと対応しづらい気もします
頂点情報に埋め込むかDynamicShaderLinkageを使った方が良い気がしてきました
何はともあれ実践不足なので色々試してみたいと思います
なんで?
頂点色って基本乗算だろ。白テクスチャと乗算しても変化ねーよ
622 :
615:2014/05/02(金) 02:05:57.87 ID:F8VRsAqW
最初は白テクスチャなら乗算しても同じだから大丈夫と思ったんですけど
そうなると普通のテクスチャでも頂点色との乗算を行うってことでそれって大丈夫かなと思った次第です
なんか思考が迷走してる気もするので変なこと言ってたらすみません
頂点色ってのはそういうものだ。最終的にテクスチャと合成される
テクスチャが頂点色で変わるのがいやなら普通は頂点色も白にするもんだ
624 :
615:2014/05/02(金) 02:15:36.51 ID:F8VRsAqW
なるほど勉強になりました
では白テクスチャの方針で進めていきたいと思います
ご助言ありがとうございます
まさか、頂点色だけでオブジェクトの色を決定してるってわけじゃないんだろ?
場合によってはありかもしれんが・・・
626 :
615:2014/05/02(金) 02:36:59.87 ID:F8VRsAqW
今まで頂点色を設定したobjファイルを元に色々シェーダで遊んでいたのを
テクスチャに対応させようと思って色々混乱してしまった感じです
普通は頂点色じゃなくて材質の減衰色とか拡散色を1描画命令ごとに変更するんよ
628 :
デフォルトの名無しさん:2014/05/17(土) 18:42:02.76 ID:8IJQqYsm
CとC++の入門書を終えた程度の貧乏学生です。
DirectX 7〜9の本を親戚から何冊か貰ってきたので、
これから勉強していくのですが、
現在のバージョンからすると古いと思います。
勉強する上で注意する点とかありますか?
コンパイラーも古くライセンス毎もらったVC++2005で、
OSはWindows Vista(ノート)か7(デスクトップ)です。
>>628 こんなとこで聞くんじゃなくて、勉強の方法から学習しなおせ
ググればいくらでも情報は手に入る
注意する点ではないと思うが、7があるんだろ
directx11と2012を使おうとは思わんのか?
631 :
デフォルトの名無しさん:2014/05/17(土) 20:15:11.81 ID:OQzb2Hc/
>>628 DirectX7〜9はもう古いからDirectX11を勧める。
本は『DirectX11 3Dプログラミング』がオススメ。
環境は学生ならDreamSparkの登録をしてVisualStudio2012もしくは2013のPro版を入手。
あと趣味でなく研究用途ならOpenGLも検討すべき
研究は何故OpenGL?
Windows以外の環境があるから?
XPが消えた今DX9を今更勉強するのもアレだしね
モバイルもDX10〜11相当のGLES3.xに移行中だし
vc expressつかってると、デバッグができないので、pix復活希望なんだけど。
ストア版の2013Expressではグラフィクス診断使えたり
D3D9ならDirectX SDKのPIXがまだ使えたりするんだけどねえ
>>629 貴方のような意見を最近良く目にしますが、
学習するプロセスと調査するプロセスではメカニズムが相違します。
初めの学習においては、ネットで有益な情報を見極めるだけの知識が存在せず、
無知な状態でそれらを見極めようとする時間は無駄な時間と労力です。
>>628 とりあえずVistaや7にDirectX 9 SDKのインストールする方法はネットを参考にし、
DirectX 7の本はさて置き、
9の入門書を所持されているようであれば、そこから始め、
問題に陥った時に聞けば良いと思います。
ぼくはゲーム業界を退きましたが、ゲーム開発は楽しいので是非頑張ってください。
DX9はそれまでのDXの集大成みたいなもんだから覚えておくべき。
DX10とかDX11はDX9に追加のAPIをつけたようなもんだから。
>>640 それプラス、増改築で継ぎ接ぎだらけの状態をキレイに体系化して再構築した、だね。
DX11、初期化とか量がけっこうあったり、面倒に感じるところもあるかもしれないけど、
従来の複雑さ、ややこしさはだいぶマシになったし、色んなシェーディングを試しやすい柔軟性もある。
柔軟性については統合シェーダのおかげもあるけどね。
情報量はDX9。
実際のコーディングはDX11って感じかな。
柔軟すぎると初心者は手をつけれなくなるんだよね。
javascriptのことですね
スレが間違っていたら申し訳ありません。
質問なのですが、現在DirectXでpmdファイルを読み込むプログラムを作成しているのですが
サンプルプログラムで使用されていたpmdファイルを読み込むことには成功したのですが、
自分が使いたいLat式ミクを表示しようとするとフォルダの中に存在しているテクスチャが見つからないと
表示されアクセス違反が発生してしまいます。
なぜ指定されたデータは存在するのにプログラム側で指定されたファイルが見つかりません。
と表示されるのか原因がわからず困っております。
読み込みのプログラムはこちらのサイトのpmdモデルを表示を参考にしました。
http://www2.ocn.ne.jp/~mhage/PIC_Trap/ データはソースコードが置いてある場所にモデル用のフォルダを作成しその中にすべて
データを入れてあります。
パスの指定の方法は"フォルダ名/モデル名.pmd"で指定しております。
環境
Windows7
VisualStudio2008
DirectXSDK November2007を使用しております
ちなみにフォルダ内のデータをすべてソースコードが置いてるフォルダ直下に移した場合は表示されております
いきなりプログラミング始めると、パスの概念なかったりするのかね
単純に馬鹿なんじゃと言いたくなるが、最近の学習環境ってどうなんだろう
Direct2Dでテクスチャ描画するときに
特定の色だけ透過(色抜き)って出来ますか?
ああ、出来るよ
なんだ、D3Dマンセー記事?
Valveの人の不満が書いてあるだけじゃね?
俺に使えないもの作るんじゃね
といってるように読めますが
思考停止してる人間はそう読めるのかもしれない
ハード屋はとりあえず自分の環境だけで動けばいいやってところが多い
ゲームプログラミングのために勉強し始めたばかりなんですが例えば2Dなら2D、3Dなら3D、あるいはジャンル毎とかにDirectXの土台のコードの部分って似たり寄ったりになるものですか...?
今の時代は2Dでも3DAPIをベースに作るほうが却って楽だよ。
2Dゲームしか作らないんですが9から11に移行する意味ありますか?
過去にDirectX9使って同人ゲームを2作作ったことがあるんですが
11ではSpriteとか2D関係の一部がなくなってると聞いているので代替えがあるんですよね?
>>657 DirectX9でそこまで経験があるなら別にどちらでもかまわないと思うが、
高度なシェーダやGPUコンピューティングを行うなら11への移行を検討したほうがイイ。
いずれにせよほぼ作り直しになるようなら、継ぎ接ぎの多い9に対して
体系的に整理されている11のほうが美しいコードにできる。
個人的にはデバイスロストの面倒が緩和されただけでも11に移行する価値があると思う。
情報量的には9のほうが多いので、そのあたりを考慮しながら決定したらイイと思うよ。
行列理解してれば3Dで2Dを表現するなんて楽勝なハズなんだけどな・・・
660 :
658:2014/06/08(日) 16:48:41.24 ID:2dlEo4xC
>>657 ああ、あとSprite関係はD3DX11を使うなら同じようにできるが、MicrosoftはD3DX11の廃止を決定。
代わりにDirectXMathやDirectXTex、DirectXTKが作られた。
SpriteはDirectXTK。
乗算済みアルファフォーマットになっているなど多少注意は必要だけど、割と使い易かったよ。
っつーか3Dなら行列、ってのも
行列が座標計算に便利だから使われてるだけであって
普通に手計算で拡縮・回転・移動させたって別に問題ない気がする
DirectX10以降でシェーダを自前で用意するようになった今では尚更
なるほど
代替えがあって使い辛くもないなら移行しても問題なさそうですね
とりあえず書籍やらサイトやらの情報漁って勉強してみようと思います
ありがとうございました
>>659 シェーダを理解していれば2Dやるのに行列が必要なんて思わないんだけどね。
必要なパラメータを渡して頂点シェーダ側で計算すればいいだけなんだから。
2Dをやるのにいちいち行列なんて渡していたら、
不必要なデータが発生する上に柔軟性が失われるだけ。
DirectX12ではシェーダステージ全廃されて
パイプラインを自前で好きなように組めると風の噂で聞いたんですが本当ですか?
だとしたら凄くワクワクするんですが
>>660 廃止されるのはD3DX(Direct3D 9)だろう?
誤読した、すまん。
これから2Dゲームを作ろうとしている者ですが、
APIを何にしようか悩んでいます。
>>660では、SpriteはDirectXTKとのことですが、
Direct2Dはどうなのでしょうか。
>>664 テキスト通りの知識で3Dを学んで、それをそのまま何も考えずに2Dに適用しようとするから、行列って発想になるんだよ。
で、自分が無知なのに気がつかずに、初心者相手に「行列理解してれば」とか、
頭の悪い発言になっちゃんだよ。
行列を使うのが当たり前で、行列のせいで計算量が無駄に増えるだけなんて発想、全く持ってなかっただろう?
結局、中身の理解が出来ていないから、本当に必要なところに必要なものを持ってくることが出来ないんだよ。
GPU側の計算量なんて無視できるが何か
中身の理解ができていないから行列のせいで計算量が無駄に増えるだけって発想を持つのでは
>>668 Direct2Dはゲームに使うようなもんじゃない
>>671 3Dデバイスのせいで思考停止になっているようだけど、
例えばGPUは無関係に4頂点の回転をするとして、
いちいち回転行列を出してから計算するか考えてみるといい。
相当な馬鹿で無ければ、そんな無駄なことしないだろ。
いやまぁ、なんだ。俺の書き方が癇に障ったんなら謝るよ
すまんな。別に馬鹿にしたわけじゃないんだ
ただ、どうやんの?って聞かれたら教えようと思っただけだ
あとGPUは行列とかの計算に特化してるからな
なぜGPUを無視して考えようとするのかわからないんだが
3Dデバイスのせいで思考停止している相当な馬鹿でなければそんな無駄なことしないのでは
>>673 ん、回転させるのに回転行列とかクォータニオン使わないなら、何で計算してるんだ?
サインコサイン使ってんの?
>>676 三角関数は回転行列だろうがクオータニオンだろうが必要なんだけど、
いったい何を言っているんだ?
こういうレベルの人間が混じっているから、なんでもすぐ行列というのが不味いんだよ。
行列をどうしても使いたいのならそれでもいいけど、
意味も分からず2Dの計算に無駄に4*4行列を渡しているコードとか、
少しは自分でおかしいかどうか判断しろと言いたい。
オレは行列を使わない方がありえんな
頂点データが極座標だとすればあるいは
>>676 >クォータニオン
いい教科書ないですか、ハミルトンの伝記もついているとうれしい
俺頭悪いんでいきなりC++でDirectXとか無理なんだけど
そんなやつがDirectXなれるにはなにがいいかな
いきなりは高確率で挫折するからC をざっくり理解してからDXライブラリなりでゲームプログラミング自体に慣れた方がいい
平行移動の行列と投影用の行列の計2個突っ込んで任せるのだと、気にするほど効率悪いか?
そうだね。2Dやるときに頂点シェーダが動く回数とピクセルシェーダのそれを考えると
行列を使うかどうかでパフォーマンスが大きく変わるケースは多くないと思う。ゼロとは言わんが。
計算が少々冗長でも問題ない。
ほとんどの場合、テクスチャなどのメモリアクセスで律速される。
ショボい内蔵GPUならなおさらだ。
ちゃんと計測した上でならいいが、そうでもないなら素直に行列使っとくほうがいい。
最近本買って流し読みしてるけどちょっとさすがに難しすぎない?こんなのみんなどうやって習得したの...??
パッと見てそう思ったなら浅はかすぎだろう
とにかく沢山コード書いて、ちょっとずつ覚えていくもんなんだよ
決して難しいのではない
複雑なだけだ
入門向けサイトもいっぱいあるからな
あの説明じゃわからなかったけどこの説明なら分かる!ってのもあるからとにかく数見るのも手
本なら「15歳からはじめるDirectX 9 」でだいたいの事が分かった
>>687 たしかに何の予備知識もなく読めば面食らうだろう。
とにかく広範な知識が求められるので、手探りながらも一通りやって、
徐々に細部の理解を深めていくというスタンスでもよかろう。
覚えるのにも時間が必要だが、覚えた後もゲームを作るのは一朝一夕では出来ない
結局は長い目でやっていくしかないよ
いかにモチベーションを維持するかだから焦っても仕方ない
dirextxをいじってみたくてVS2010express環境にDXSDK_Jun10を入れてみたのですが
directxのsamplesにあるプロジェクトを開こうとすると
「このバージョンのアプリケーションではサポートされないプロジェクトの種類(.vcxproj)です。」
となり開くことが出来ません
サンプルプロジェクトはVSの製品版じゃないと開けないのでしょうか?
なぜ今更2010なのかは置いておくとして
2010のExpressは各言語ごとに別々になっている
インストールしたのがC++以外のものなのでは
ストアアプリのDirectXってManagedなの?
ネイティブ
C#等から使いたい場合SharpDX等を利用
こんにちはー。DirectX初心者ですが、
まずサンプルコードが動かなくて困っています・・・。
/////////////////////////////以下環境///////////////////////////////
#include <WindowsXP>
#include <VC2008EE>
#include <DirectXSDKJune2008>
//コピペで使用したサンプルコード
http://k3tec.net/neko_wiki/index.php?DirectX%B9%D6%BA%C210%B2%F3 (
C系のインクルードディレクトリ Include指定済み,
リンカのライブラリディレクトリ x86指定済み,
画像ファイル ソリューションファイルと同じ場所にある
);
//グラボは普通に3Dゲーム等動く環境。
///////////////////////////////////////////////////////////////
以上の状態でデバッグ起動すると、ウィンドゥは正常に表示されますが
スプライトは出来ているがテクスチャが真っ白?
のような状態になってしまいます。
このような結果の場合、どのような原因が考えられるでしょうか?
誰か助けてください・・・、丸一日死んだ・・・。
コードはサンプルコピペなので、環境の問題かと思うのですが・・・。
>>698 サンプルは見てないが、画像ファイルへのパスが通ってないのでは?
カレントディレクトリが実行ファイルと同じと決めつけていないか?
>スプライトは出来ているが
ってのがよくわからんけど
そこのzipそのまま解凍してビルドしたら普通に表示されてたぞ
701 :
698:2014/06/20(金) 08:10:53.62 ID:Ma4Zhsm8
おおう、レスが来てる、ありがたやー。
>>698 「フルパスで指定してみる」
「いっそ実行ファイルから下のフォルダに全部つっこんでみる」
の二つを試みてみましたが、表示されず・・・。でもレスありがとう。
>>700 参考画像と同じ位置に白い四角は生成できてるので、
ポリゴン自体はできているのだと思うのです。
ただ、サンプルにある車の画像が表示されず、真っ白。
なので、「VCやらの環境でテクスチャが読み込めてない」か
「テクスチャは読み込めているがグラボやらの問題で表示が出来ない」
のどちらかだと思うのですが。
ビルドエラーは吐いてないので環境の問題なのでしょうか・・・?
ちなNVDIAでDirectXについてるテストツールでは3D表示正常。
ちょっとコード弄ってみたりしつつ、引き続きアドバイス待ちますー。
データが読めているかどうかなんて戻り値を確認すればいいだけだろう。
いったい何を言ってるんだ?
703 :
698:2014/06/20(金) 08:37:44.58 ID:Ma4Zhsm8
うお、・・・誠に申し訳ない、フルパス入れ直したらいけました。
>>699さん正解です。
>>700もありがとうー。
しかし下のフォルダ全部につっこんでるのに、
相対パスで表示されない意味はわからず。
まあ、もはやスレチなので色々試してみようと思います。
ありがとうございました! ・・・表示の環境依存じゃなくてよかった。
704 :
698:2014/06/20(金) 09:03:13.23 ID:Ma4Zhsm8
>>702 うん、まあその、なんだ、正直アホなので、
どこをどう確認すればいいのかもわからなんだ。
このサンプルだとTextureのcartexにファイル名がはいるんだろうけど、
Textureって名前が汎用性高そうすぎて・・・。
まあ光明は見えてきたので、弄りながら覚えていってみるよ、ありがとうー。
デバッグ実行時のカレントディレクトリは
プロジェクトのプロパティで確認・設定できるぞ
しかdxスレも伸びなくなってきたね
折れ5の出始めからだからもう15年近いよ
さすがに12を追う気にもならんし
dxはオワコンだな
し
折
さ
d
708 :
694:2014/06/20(金) 22:27:21.07 ID:4hFe3D1R
>>695 OSがXPなものでVS2010じゃないとインストールできなかったのです
ちなみにVC++2010 Expressが入ってます
色々やってみてダメだったので仕方なく過去のDirectX SDKを漁ってみました
2007novまで辿って試したところ2003の.vcprojであれば開けたので
それを読み込んでサンプルを色々参照してみることにしました
ちなみに2007novに入ってる2005.vcprojはやはり読み込み出来ませんでした
とりあえずサンプルを見たりいじれるようになったのでこれでやっていきます
お手数をおかけました、どうもありがとうございました
directx11めんどくさすぎ
ポリゴン1つ出すまでに挫折しそうだわ
まぁ、気持ちは分かる。
走り出すまでに数多の操作が必要な車みたいな問題。
でも、一度走り出したら速いし、小回りもよく効くから乗り越えるんだ。
かス
れ
す
これで面倒とか言ってたらプログラムの世界はつらいだけだ
Unityとか使ったほうがいい
PictureBoxに描画するほうが楽だわ。
今はUnityの資料多いし個人開発ならUnityが一番よさげ
Unityのみになっていくのはちょっとあれだけど
うにてぃーなんぞ使わん
ゲーム作るならある程度のめんどくささは受け入れなあかん
難しい方が俺すげー出来ていい
719 :
デフォルトの名無しさん:2014/06/29(日) 14:32:21.72 ID:0/sduyfP
>>718 おお遂にxファイルやsdkmesh以来のMS謹製形式きたか!?
と思ったけど中身ざっと見た感じファイル形式どうこうじゃなさそうだね。
法線計算したりmesh関係の演算をすっきりさせるライブラリかな?
ファイル形式は独自形式でいいけど。
今気づいたけどDirectXTKってVistaもsupportedだったんだ。
FBXのコンバート対応してくれたらうれしいなー
そのへんは色々厄介だから自分でやってちょんまげって書いてあった
DOCUMANTATIONのところ
DirectX11のすっごい初歩的な質問なんだけど、一つのメッシュを複数のエフェクトで描画するとしたら、
それぞれのエフェクトごとに入力レイアウトを用意しないとダメなのかな?
例えば10種類のメッシュをそれぞれ5つのエフェクトで描画するとしたら、50種類の入力レイアウト用意しないとダメ?
メッシュごとでなくエフェクトごとに作るから5個で十分
さらに頂点構造体とセマンティクスが同じなら、同じ入力アセンブラを使いまわせる
>>724 d
DirectXTKのModelクラスでModelMeshPartごとにInputLayout保持してるんで、大量に用意しないとダメなのかなーと。
DirectX9なんだけど、レンダーターゲットの大きさって制限あるの?マルチレンダーターゲットとかじゃなくて。
具体的には、
バックバッファに完全に収まるようなサイズのレンダーターゲットAと、収まらないサイズのレンダーターゲットBの2枚をつくる
Aにはちゃんと描画できて、テクスチャとして使って描画したときも問題ない。ところがBは作成時にも描画時にもなんのエラーも出さないにもかかわらず、レンダーターゲットには描画で傷、
テクスチャとして使って描画しても真っ黒なテクスチャが適用されてしまう
Device::Reset でバックバッファを大きめに再生成すると、AもBも正常病がされる。バックバッファを小さめにリサイズしてみると、AもBも描画されない。でも各種関数の戻り値は常にS_OK
この現象、いまのところ NVIDIAの4年ぐらい前のカードでだけ起こる現象なんだけど、心当たりある?
バックバッファより大きいテクスチャが作れないという時代はあったけど
それは4年どころか15年くらい前だな。
大きすぎる問題じゃなくて、2の累乗のサイズじゃないとかじゃないの?
D3DPTEXTURECAPS_NONPOW2CONDITIONALの制限は4年くらい前なら
あったかもしれない。
モバイル系のGPUも今はまだ大体POT縛りあるな。
NONPOTサポートしててもパフォーマンス悪かったりするからまだ使わない方が無難。
というかよく考えたら、レンダーターゲットテクスチャにはn^2縛りなんてないよね?もともと。
>>730 スレチだけどOpenGLESではあるよ。
だから多分DirectXでもあると思う。ハードウェアの縛りだし。
マジか
普通のテクスチャは必ずn^2でつくるようにしてたからCapsはチェックしてなかったし、逆にレンダーターゲットテクスチャはサイズ気にしないでつくってたわ。
ひょっとしたらサイズ縛りがある状態で不正なサイズのレンダーターゲット作ろうとしても IDirect3DDevice9::CreateTexture は成功しちゃうもんなのかなあ。。。?
とりあえずD3DPTEXTURECAPS_POW2とD3DPTEXTURECAPS_NONPOW2CONDITIONALの値は調べてみることにする。
手元のWin8で試してみたら、バックバッファよりを超える大きさのレンダーターゲットは普通に作れて、別に真っ黒な描画になったりはしなかったものの、
バックバッファのサイズを超える部分には一切描画されていなかった。レンダーターゲットに描画する時に、バックバッファの大きさで自動的にクリッピングされている感じ。
ゆえに、利用する最大のレンダーターゲットのサイズか、ゲームで必要な解像度か、どちらか大きな方にあわせてバックバッファを作った方がよさそうだな。
ウィンドウに描画するときはバックバッファのうちウィンドウサイズに一致する部分だけ指定して転送すれば良いんだし。
…という結論に達した
ビューポートがバックバッファのサイズのままとかいうオチじゃないだろかソレ
バックバッファサイズ以上のレンダーターゲットが機能しないとか初耳なんだけど
ビューポート設定の問題ではない?
そんなに古くないNVIDIAのカードで起こるなら対処したいのでどのカードか教えてくれるとありがたい
レンダーターゲットと デプスステンシルのサイズとかAAが違うと無視するドライバとかエラー起こすドライバとかわかれてたりする?
そういえば、バックバッファよりも大きなViewportを設定した状態で IDirect3DDevice9::SetRenderTarget すると、
レンダーターゲットの大きさに合わせてViewportが勝手に変化するって仕様があるよね。
>>733で試した時に起こった現象はそれかも。すまん。
でも
>>726での真っ黒になるとかって現象とは別の気がするんだよなあ。
ちなみに
>>726の現象がおきたのは NVIDIA GeForce GTX 570 ね
訂正。「バックバッファよりも大きなViewportを設定した状態で IDirect3DDevice9::SetRenderTarget すると」ではなく、
「最初に設定していたViewport よりも小さなレンダーターゲットテクスチャを SetRenderTargetすると」ね
これはXNAだけど、Direct3D と同じとみていいんじゃないかと思うけど
http://msdn.microsoft.com/ja-jp/library/ff604997(v=xnagamestudio.40).aspx
> レンダリング ターゲットを作成するときには、幅と高さの選択についても考慮します。
> たとえば、ゲーム ウィンドウのサイズに合わせてバック バッファーの幅と高さを選択する必要があります
> (ただし Windows Phone と Xbox360 では、最終的な結果はユーザーの画面に合わせてサイズが変更されます)。
> これにより、バック バッファーが画面にコピーされるときにサイズ変更が不要になっています。
> ただし、オフスクリーン レンダリング ターゲットは、バック バッファーと同じ幅と高さである必要はありません。
と明確に書いてあるな。