トップページ⇒tech
84コメント24KB

OpenGL vs Direct3D

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
3Dのプログラムをするとき、
速度・書きやすさの面でどっちが良いのでしょうか?
0002 NGNG
書きやすさは大差ない

最新の機能を使いたいならDX
汎用性ならOpenGL

ラッパー作って両方対応しとけ
0003デフォルトの名無しさんNGNG
vs系ってスレは育ちそうだけど、意味的になあ・・
0004ラッパのマークの正露丸NGNG
てってけてって、てってけてって、てーれれれ、てってって。
てってけてって、てってけてって、てーれれれ、てってって。
0005デフォルトの名無しさんNGNG
Direct3Dってゲーム用?
ゲーム以外の3D作るならOpenGLの方が良い?

>>2の言う汎用性って?
0006デフォルトの名無しさんNGNG
>>5
DirectXは基本的にWindowsのみだからねぇ。
OpenGLはUnix環境などでも使える。

Direct3DとOpenGLは大差ないけど、DirectXは
サウンド、入力、ネットワークもサポートしているので
ゲーム作るならDirectXが無難かも。
0007デフォルトの名無しさんNGNG
>6
あれ、DirectX じゃなくて、Direct3Dの話をしているんじゃないの?
0008デフォルトの名無しさんNGNG
思うんだけどさ、自分のライブラリでハード代えてまで
汎用性を持たせるのって無駄なんじゃないか?
パフォーマンスでないし。疲れるし。くたびれるし。
まあ、そういうのが求められる仕事があるのはわかるけど。
0009デフォルトの名無しさんNGNG
OpenGLは情報量少ないよね。
その点は、Direct3Dの方がいいかな。

OpenGLの豊富なサンプルが、
日本語コメント付きで有るといいなぁ〜
0010デフォルトの名無しさんNGNG
OpenGLの方がプログラミングはしやすいと聞いたけど…
Direct3Dの情報はゲーム関係ばっかりでちょっと萎える。
0011デフォルトの名無しさんNGNG
>>10
まあ、元々DirectXがゲームの為の物でしたからね。
0012デフォルトの名無しさんNGNG
OpenGLものは重くて萎える
0013デフォルトの名無しさんNGNG
OpenGLだと遅いの?
0014デフォルトの名無しさんNGNG
MFCのDOC/VIEWで使うにはどっちがいいですか?
0015デフォルトの名無しさんNGNG
OpenGLで組んだことないけど色んな人の見た感じじゃたしかに遅い。
まあ、汎用性をもたせるってそーゆーことなのかもしれんね。
0016デフォルトの名無しさんNGNG
OpenGLが重いと言うより、ドライバの対応率が低いだけ。
最近のビデオカードなら、まともに対応しているものが多いので、
一概には比較できないけど、動作速度はDirect3Dとたいして変わりません。
0017デフォルトの名無しさんNGNG
ま、そりゃそうだよな。同じハード使ってんだから。
なんで遅かったのかひたすら疑問だったけどね。
0018デフォルトの名無しさんNGNG
OpenGLはメーカーの対応がなってなさすぎ。重くてかなわんわ・・・。
0019デフォルトの名無しさんNGNG
部屋に篭ってオナニーするならOpenGL
野外露出オナニーショーするならDirect3D
0020デフォルトの名無しさんNGNG
kilgard派ならgl
dietrich派ならd3d
0021デフォルトの名無しさんNGNG
cass派なのでOpenGLにします。
0022デフォルトの名無しさんNGNG
DirectX8は簡単になったという噂は本当ですか?
0023デフォルトの名無しさんNGNG
本当です。
00241NGNG
両方を少しだけかじってみました。
なんかDirectXはすごっくめんどくさいのですが、
あれって生産性の面でどうなのでしょうか?
自分はゲームプログラマじゃない、
普通のサラリーマンプログラマなので、
GLにしようかなと思ってます。
GLの方がとっつき易いです。
0025デフォルトの名無しさんNGNG
GLで決まりでしょ。

8になって簡単になった、と言っても敷居は高いよ。
0026yuheiNGNG
やっぱOpenGLは海外では主流なんで、海外の本ではOpenGLの事について
深くかいてるし、DirectXは、やばいね、
OpenGLの真似してきてるけど、スマートじゃないね。
0027デフォルトの名無しさんNGNG
ハードウェアアクセラレーションの事考えたらD3Dのほうが楽、ってな事ない?
GL触ったことないから聞きかじっただけなんだけど、GLってハードウェア
アクセラレーション使いたかったらそれ専用の関数を呼ばなきゃ逝けないんでしょ?
0028デフォルトの名無しさんNGNG
GLのは基本的にHELってことですか?
0029デフォルトの名無しさんNGNG
それは俺も疑問。
あの果てしなく遅いところは本当にドライバ云々か?
0030デフォルトの名無しさんNGNG
ドライバ次第だよ。

G400を使ってた時は、ドライバの問題でダメダメだった
けど、GeForce系に変えてかなり快適。

ビデオカードが古くなければ、基本的にHALだと思っていいです。

MFCを使ってウィンドウを表示するサンプルをカスタムアップ
ウィザードを使って、何度も再利用すると便利だよ。

ちょっとしたテスト用のプログラムを書く時に便利。
0031デフォルトの名無しさんNGNG
でもそれってそのマシンがジーエルの遅さも気にならないくらい速いだけで
ジーエルが遅いことには変わらないんじゃないか?
組むのが楽とか云々は始めにライブラリを作ってしまえば問題ないでしょ。
0032デフォルトの名無しさんNGNG
>>31
性能は本当にドライバの実装次第、としかいいようが無いん
ですよ。決してOpenGLだから遅いというわけでは決して無い。
ドライバがよければDirectXでいうところのVertexBufferを
使ってDraw*Primitiveを発行するのとほぼ等価な処理ができ
ますし、拡張命令を使えばDirectXより便利な(ただし機種
依存性が高い)機能を使うことが出来る。NVなOpenGLは
このあたりの命令が充実してますね。
#個人的にはどっちでもいーじゃん、って感じですが。
0033デフォルトの名無しさんNGNG
 昔は座標変換とかを最適化して自前でやらなくちゃならなかったから、
TLVERTEXのような使い方ができるD3Dじゃないとスピード的につらかった。
 ところが、GeForceのようなハードウェアT&Lが出てきて、状況が一転した。
OGLは、座標変換も必ず隠蔽されていたから、OGLで作られた古いゲームまで速くなる。
いまはD3DでもOGLでもあまり変わらんと思う。nVidiaの最新の機能を使いたければ、
OpenGL SDK使えばよいわけだし。
0034デフォルトの名無しさんNGNG
OGLでもtlvertexみたいな使い方は昔からできるでそ。
003533NGNG
>>34
それって、OpenGLの行列演算飛ばせる? 飛ばせないと、余計遅くなってしまう。
0036デフォルトの名無しさんNGNG
DirectXはね、バージョンによって仕様がコロコロ変わるから
OpenGLの方がいいんでない?
0037デフォルトの名無しさんNGNG
最新の機能を使うのならDirect3Dしかないと思う。
みょうちきりんなgl_EXT_XXXXでハマりたいマゾ嗜好ならGLでもいいけどね。
0038デフォルトの名無しさんNGNG
GeForceのHWT&Lをジオメトリエンジンと思わせる宣伝は詐欺
0039デフォルトの名無しさんNGNG
>>37
NVの場合は逆にOpenGLがネイティブですよ。
D3Dだと仕様でかなりハードの機能が制限されます。
特にレジスタコンバイナは能力が半分くらいに。。。

>>35
>それって、OpenGLの行列演算飛ばせる?
昔ながらのやり方では無理ですよね。
今なら頂点シェーダ使えば可能かと。
004030NGNG
>>31

組むのが・・・ていう話だけど、
DXだとちょっとしたポリゴン出すにも、
頂点バッファを作らないといけなかったり
するのがねぇ・・・と思うんだけど、
これも、自作ライブラリでラップしたり
する?

GLだったら、数行で書けるし、ちょっとした
マクロを使えば、2回目以降はディスプレリスト
で描画するようにもできるしね。
004130NGNG
あ〜、でも、慣れたらそんなに苦にもならないかなぁ・・・

スマソ、気にしないで。
0042デフォルトの名無しさんNGNG
DrawPrimitiveUPつかえばVertexBuffer作らなくても済みます
0043デフォルトの名無しさんNGNG
OpenGLでは2つの行列を単位行列に設定すると
行列の積は行わない。
0044デフォルトの名無しさんNGNG
プログラマがどうこう言おうが、ユーザーから見たらOpenGLは重いの一言なんだよなあ。
まともなドライバ配ってくれよ。えーん。
004533NGNG
>>43
がーん。そこまで良くできていたとは・・・
知らなかったからIMとVoodooで作ったよ。何年も昔の話だ(藁
0046デフォルトの名無しさんNGNG
OpenGLが重いってことはQ3AもDirectX使っていたらもっと
高速に動作していたってこと?
0047デフォルトの名無しさんNGNG
39>NVの場合は逆にOpenGLがネイティブですよ。

GLが?嘘はやめて・・・
0048デフォルトの名無しさんNGNG
>>43
また嘘が・・・
0049デフォルトの名無しさんNGNG
Q3Aとかはすでにビデオカードがボトルネックになっていると思われ

それはさておき、普通の人が普通にプログラムすると、GLのほうが遅くなりますね。
パフォーマンスを追求すればD3Dと同じになります。
ただしそのヒントとなる情報が想像以上に少ないので、苦労することでしょう。
っていうかそんなつまらんことに時間を費やすくらいなら、
最初からD3Dでやればいいんだけどね・・・
0050デフォルトの名無しさんNGNG
>>47
#39じゃないんですけど、
NVなチップならGLのほうがよりネィティブな機能に触れられますよ。
NV_fenceを使えば、CPUとの非同期な頂点データのGPUへのセットアップ
も出来るし、ピクセルのブレンディングなんかはDirectXのピクセル
シェーダより(NVIDIAの)OpenGLのテクスチャシェーダ+レジスタコンビナ
の方がネィティブハードに近い。と思う。

>>43
それってOpenGLの規格で決まってるんですか?知らなかったヨ。
005130NGNG
>>42

サンクス。週末にでも試してみます。


>>48
mesaのソースを読んでみたんだけど、glLoadIdentity
を呼ばれた時は、IDENTITYなるフラグを立ててる・・・

RotateやMultが呼ばれると、DIRTYなるフラグを立てて
たりしてる・・・

あながちウソとも言えないっぽいよ。
005250NGNG
もっとも、NVな機能を使えば移植性はなくなるし、それをOpenGLと呼んで
いいのかどうか。
本当に、用途に合わせて使えばいいし、どっちでもいいときは好みの
方を使えばイインジャネーノ?
0053デフォルトの名無しさんNGNG
仕様はOpenなんだろうけど、特許によりハードウェア実装不可能っていうオチ。
0054デフォルトの名無しさんNGNG
俺は別に急いでないからGLでいいや。
0055デフォルトの名無しさんNGNG
単位行列設定すると行列乗算しないのはFAQなので検索してみて。
0056デフォルトの名無しさんNGNG
そういえば昔、DirectXとOpenGLを統合するって話なかったけ?
0057デフォルトの名無しさんNGNG
カムバック、ファーーーーーーーーーレンハイト!!
0058デフォルトの名無しさんNGNG
カーマックとキルガードの目の黒いうちはOpenGLは不滅です。
0059デフォルトの名無しさんNGNG
>>55
http://www.opengl.org/developers/faqs/technical/transformations.htm#tran0040
の事ですか?
#シラナカッタヨ…。
0060デフォルトの名無しさんNGNG
でもOpenGLってもうアップデートしてないでしょ?
0061デフォルトの名無しさんNGNG
3年に0.1バージョンくらいずつ上がってますわ。
あまりにも慎重で遅すぎだけど、
アップデートは確実にされているよ。

>OpenGLのテクスチャシェーダ+レジスタコンビナ
>の方がネィティブハードに近い。と思う。

つかハードウェアの機能そのまんまです。
OpenGLでもD3Dでも使えないハードウェア機能なんて今じゃ無意味だしね。
現状、X-Boxを除けばD3DでNVハード機能を全て使うことはできません。
0062デフォルトの名無しさんNGNG
少しはちゃんと使ってるやつが意見いえよ

さすが2chだな
0063デフォルトの名無しさんNGNG
>>62
実際使ってるけど…使い出せばどっちも特殊な目的が無い限り
代わり映えしないと思うんですけどねぇ。
#つ〜か、これネタスレでしょ?
0064デフォルトの名無しさんNGNG
OpenGLソフトはビデオカードによってレンダリング結果がかなり違ったりする。
市販ソフトには使えん。
0065デフォルトの名無しさんNGNG
>>64
Lightwave, Softimage, MAYAなんかはOpenGL使ってますが?
もうどうでもいいじゃん。
0066デフォルトの名無しさんNGNG
>>55
59が指していたURLには "typical OpenGL implementations ..."
と書いてあるね。
素人はどこで変な知識(しかも嘘)を刷り込まれているか分かったもんじゃないね。
0067デフォルトの名無しさんNGNG
ハードが同じなら、いくらがんばっても差が出ない気がするんだけど...

>>64
ハードとセットで売るんです。そうやって儲けるんです。
0068デフォルトの名無しさんNGNG
>>67
>ハードが同じなら、いくらがんばっても差が出ない気がするんだけど...

だから
>D3Dだと仕様でかなりハードの機能が制限されます。
>特にレジスタコンバイナは能力が半分くらいに。。。
なんでしょ?

NV_register_combiners を使いこなしたのと同じことしようとすると、
Direct3D ではテクスチャステージ倍は必要です。
使えない機能もありますし。
0069デフォルトの名無しさんNGNG
>>66
どこがウソなの?
誰もそれが仕様だとは言ってないし。
0070デフォルトの名無しさんNGNG
>>69
は?OpenGLは仕様でしかありませんが?
何を言いたいのかよくわかりません。
0071デフォルトの名無しさんNGNG
>>68
それが必要になるほどのプログラムを作るオタク(藁 であれば、
D3DだろうがOpenGLだろうが同じように使えるでしょう。

そうでない人にとっては、それは些細な違いではないでしょうか。
いまここで、どっち使うかなあ、と考えている人が、
そこまで到達するのにどれくらいかかることやら・・・

もうすこし大局的に見られないものかなあ。必要とされているのは
ハードの限界を垣間見るようなオタッキーな使い方ではない、
と思うんだけどね。
機能とはそれだけじゃないんだし・・・
0072デフォルトの名無しさんNGNG
>>71
>D3DだろうがOpenGLだろうが同じように使えるでしょう。
だから。。。
D3Dだとハードの機能がかなり制限される。
使えない機能があるって何度も言ってるんですが?

他は全くもって同感ですよ。
誰も普通に使うのに差が出るとは言ってませんて。
0073デフォルトの名無しさんNGNG
>>72
ハードの機能を制限することが場合によっては長所にもなり、短所にも
なると思う。より広いターゲットで動かしたい場合はD3Dがいい妥協点に
なる場合もあるわけで。
#現時点ではD3D8もGeforce3しかネイティブには動かせないですが(汗

そもそもレジスタコンビナとかはNVIDIAのベンダ拡張による利点な
わけで、OpenGLそのものの長所でもありますまい。そういう拡張を
許すユルさが長所になるときもあるというだけで。
0074デフォルトの名無しさんNGNG
なんでDirectXのサンプルってCばっかりなの?
ゲームプログラマはオブジェクト指向が理解できないドキュソばっかりなの?
0075デフォルトの名無しさんNGNG
>>72
>D3Dだとハードの機能がかなり制限される。
>使えない機能があるって何度も言ってるんですが?

白痴ですか?
特定ハードの特定機能が使えないこともある、と言った方がいいですよ。

これだとOpenGLのほうが制限がきついですが、
それに利点があるかもしれないのは73さんのおっしゃるとおり。
0076デフォルトの名無しさんNGNG
え?C++のほーがおーくなかったっけ?
0077デフォルトの名無しさんNGNG
sampleディレクトリ以下の拡張子.cのファイル2つしかないぞ。
0078デフォルトの名無しさんNGNG
>>75
>白痴ですか?
72じゃないのですが、それぐらいは文章から読み取れると思いますけど。
72さんの言っている事と、貴方が言っている事は同じだと思いますよ。
0079デフォルトの名無しさんNGNG
CreateDeviceに失敗しちゃうのはなぜですか?
さっぱりわかりません。

LPDIRECT3D8 g_pd3d = NULL;
LPDIRECT3DDEVICE8 g_pd3dDev = NULL;
LPDIRECT3DVERTEXBUFFER8 g_pVB = NULL;

g_pd3d = Direct3DCreate8(D3D_SDK_VERSION);
if( g_pd3d == NULL ) return E_FAIL;

D3DDISPLAYMODE disp_mode;
HRESULT hr;

hr = g_pd3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&disp_mode);
if( FAILED(hr) )
return hr;

D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp,sizeof(D3DPRESENT_PARAMETERS));
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = disp_mode.Format;
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;


hr = g_pd3d->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,
&g_pd3dDev);
0080デフォルトの名無しさんNGNG
IDirect3D8::CheckDepthStencilMatch
0081デフォルトの名無しさんNGNG
お遊びで3Dやりたい人はOpenGL。
仕事にしたい人はDirect3D。
0082デフォルトの名無しさんNGNG
81に噛み付くのはご遠慮ください。
0083デフォルトの名無しさんNGNG
81に噛み付くのはご遠慮ください。
0084デフォルトの名無しさんNGNG
You idiot!!
■ このスレッドは過去ログ倉庫に格納されています