OpenGL vs Direct3D

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
3Dのプログラムをするとき、
速度・書きやすさの面でどっちが良いのでしょうか?
2 :2001/05/03(木) 19:55
書きやすさは大差ない

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

ラッパー作って両方対応しとけ
3デフォルトの名無しさん:2001/05/03(木) 19:58
vs系ってスレは育ちそうだけど、意味的になあ・・
4ラッパのマークの正露丸:2001/05/03(木) 20:02
てってけてって、てってけてって、てーれれれ、てってって。
てってけてって、てってけてって、てーれれれ、てってって。
5デフォルトの名無しさん:2001/05/03(木) 21:48
Direct3Dってゲーム用?
ゲーム以外の3D作るならOpenGLの方が良い?

>>2の言う汎用性って?
6デフォルトの名無しさん:2001/05/03(木) 21:54
>>5
DirectXは基本的にWindowsのみだからねぇ。
OpenGLはUnix環境などでも使える。

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

OpenGLの豊富なサンプルが、
日本語コメント付きで有るといいなぁ〜
10デフォルトの名無しさん:2001/05/04(金) 13:05
OpenGLの方がプログラミングはしやすいと聞いたけど…
Direct3Dの情報はゲーム関係ばっかりでちょっと萎える。
11デフォルトの名無しさん:2001/05/04(金) 17:27
>>10
まあ、元々DirectXがゲームの為の物でしたからね。
12デフォルトの名無しさん:2001/05/04(金) 18:13
OpenGLものは重くて萎える
13デフォルトの名無しさん:2001/05/26(土) 08:44
OpenGLだと遅いの?
14デフォルトの名無しさん:2001/05/26(土) 09:03
MFCのDOC/VIEWで使うにはどっちがいいですか?
15デフォルトの名無しさん:2001/05/26(土) 11:10
OpenGLで組んだことないけど色んな人の見た感じじゃたしかに遅い。
まあ、汎用性をもたせるってそーゆーことなのかもしれんね。
16デフォルトの名無しさん:2001/05/26(土) 13:47
OpenGLが重いと言うより、ドライバの対応率が低いだけ。
最近のビデオカードなら、まともに対応しているものが多いので、
一概には比較できないけど、動作速度はDirect3Dとたいして変わりません。
17デフォルトの名無しさん:2001/05/26(土) 18:27
ま、そりゃそうだよな。同じハード使ってんだから。
なんで遅かったのかひたすら疑問だったけどね。
18デフォルトの名無しさん:2001/05/26(土) 20:59
OpenGLはメーカーの対応がなってなさすぎ。重くてかなわんわ・・・。
19デフォルトの名無しさん:2001/05/27(日) 15:06
部屋に篭ってオナニーするならOpenGL
野外露出オナニーショーするならDirect3D
20デフォルトの名無しさん:2001/05/27(日) 16:36
kilgard派ならgl
dietrich派ならd3d
21デフォルトの名無しさん:2001/05/27(日) 21:28
cass派なのでOpenGLにします。
22デフォルトの名無しさん:2001/05/27(日) 22:40
DirectX8は簡単になったという噂は本当ですか?
23デフォルトの名無しさん:2001/05/27(日) 22:41
本当です。
241:2001/05/27(日) 22:42
両方を少しだけかじってみました。
なんかDirectXはすごっくめんどくさいのですが、
あれって生産性の面でどうなのでしょうか?
自分はゲームプログラマじゃない、
普通のサラリーマンプログラマなので、
GLにしようかなと思ってます。
GLの方がとっつき易いです。
25デフォルトの名無しさん:2001/05/28(月) 01:26
GLで決まりでしょ。

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

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

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

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

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

>>35
>それって、OpenGLの行列演算飛ばせる?
昔ながらのやり方では無理ですよね。
今なら頂点シェーダ使えば可能かと。
4030:2001/05/30(水) 01:14
>>31

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

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

スマソ、気にしないで。
42デフォルトの名無しさん:2001/05/30(水) 02:11
DrawPrimitiveUPつかえばVertexBuffer作らなくても済みます
43デフォルトの名無しさん:2001/05/30(水) 02:13
OpenGLでは2つの行列を単位行列に設定すると
行列の積は行わない。
44デフォルトの名無しさん:2001/05/30(水) 10:37
プログラマがどうこう言おうが、ユーザーから見たらOpenGLは重いの一言なんだよなあ。
まともなドライバ配ってくれよ。えーん。
4533:2001/05/30(水) 14:01
>>43
がーん。そこまで良くできていたとは・・・
知らなかったからIMとVoodooで作ったよ。何年も昔の話だ(藁
46デフォルトの名無しさん:2001/05/30(水) 14:40
OpenGLが重いってことはQ3AもDirectX使っていたらもっと
高速に動作していたってこと?
47デフォルトの名無しさん:2001/05/30(水) 19:52
39>NVの場合は逆にOpenGLがネイティブですよ。

GLが?嘘はやめて・・・
48デフォルトの名無しさん:2001/05/30(水) 19:53
>>43
また嘘が・・・
49デフォルトの名無しさん:2001/05/30(水) 20:01
Q3Aとかはすでにビデオカードがボトルネックになっていると思われ

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

>>43
それってOpenGLの規格で決まってるんですか?知らなかったヨ。
5130:2001/05/30(水) 23:08
>>42

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


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

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

あながちウソとも言えないっぽいよ。
5250:2001/05/30(水) 23:12
もっとも、NVな機能を使えば移植性はなくなるし、それをOpenGLと呼んで
いいのかどうか。
本当に、用途に合わせて使えばいいし、どっちでもいいときは好みの
方を使えばイインジャネーノ?
53デフォルトの名無しさん:2001/05/30(水) 23:20
仕様はOpenなんだろうけど、特許によりハードウェア実装不可能っていうオチ。
54デフォルトの名無しさん:2001/05/31(木) 00:27
俺は別に急いでないからGLでいいや。
55デフォルトの名無しさん:2001/05/31(木) 00:34
単位行列設定すると行列乗算しないのはFAQなので検索してみて。
56デフォルトの名無しさん:2001/05/31(木) 00:37
そういえば昔、DirectXとOpenGLを統合するって話なかったけ?
57デフォルトの名無しさん:2001/05/31(木) 00:37
カムバック、ファーーーーーーーーーレンハイト!!
58デフォルトの名無しさん:2001/05/31(木) 00:39
カーマックとキルガードの目の黒いうちはOpenGLは不滅です。
59デフォルトの名無しさん:2001/05/31(木) 01:08
60デフォルトの名無しさん:2001/05/31(木) 01:23
でもOpenGLってもうアップデートしてないでしょ?
61デフォルトの名無しさん:2001/05/31(木) 02:03
3年に0.1バージョンくらいずつ上がってますわ。
あまりにも慎重で遅すぎだけど、
アップデートは確実にされているよ。

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

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

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

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

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

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

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

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

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

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

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

これだとOpenGLのほうが制限がきついですが、
それに利点があるかもしれないのは73さんのおっしゃるとおり。
76デフォルトの名無しさん:2001/06/07(木) 22:08
え?C++のほーがおーくなかったっけ?
77デフォルトの名無しさん:2001/06/07(木) 22:14
sampleディレクトリ以下の拡張子.cのファイル2つしかないぞ。
78デフォルトの名無しさん:2001/06/07(木) 22:23
>>75
>白痴ですか?
72じゃないのですが、それぐらいは文章から読み取れると思いますけど。
72さんの言っている事と、貴方が言っている事は同じだと思いますよ。
79デフォルトの名無しさん:2001/06/07(木) 23:23
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);
80デフォルトの名無しさん:2001/06/08(金) 01:09
IDirect3D8::CheckDepthStencilMatch
81デフォルトの名無しさん:2001/06/08(金) 02:35
お遊びで3Dやりたい人はOpenGL。
仕事にしたい人はDirect3D。
82デフォルトの名無しさん:2001/06/08(金) 02:53
81に噛み付くのはご遠慮ください。
83デフォルトの名無しさん:2001/06/08(金) 02:53
81に噛み付くのはご遠慮ください。
84デフォルトの名無しさん
You idiot!!