トップページ⇒tech
984コメント341KB

OpenGLスレ Part14

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん2010/01/19(火) 20:46:36
クロスプラットフォームの3D API OpenGLに関する話題を扱うスレッド。
現在のバージョンは3.2
http://www.opengl.org/

== OpenGLと一緒に使われるツール&ライブラリ ==
苦労したくなかったらとりあえず入れとけ。
・glx:    XからOpenGLを使うためのライブラリ。普通は直接は使わず意識する事はない
・glut:   クロスプラットフォームなツールキット。でもさすがに古くさい
・glew:   これを入れないと拡張機能が使えないor使いにくい
・glxgears: 歯車が回るベンチマーク。-infoでOpenGLのバージョンが見られる。OpenGLの動作確認はこれで
・glxinfo:  自分の使っているカードのOpenGLの機能が全てリストアップされる。

== 必読書 ==
・OpenGLプログラミングガイド 原著第5版 (通称赤本)
・OpenGL(R) Reference Manual (通称青本)
・OpenGL Shading Language (通称だいだい本)
・OpenGL(R) SuperBible: Comprehensive Tutorial and Reference
・OpenGL ES 2.0 プログラミングガイド
・GLUTによるOpenGL入門
・GLUTによるOpenGL入門2 テクスチャマッピング
あると便利。
・ゲームプログラミングのための3Dグラフィックス数学

== チュートリアルサイト ==
床井研究室: http://marina.sys.wakayama-u.ac.jp/~tokoi/oglarticles.html
NeHe:    http://nehe.gamedev.net/

== 前スレ ==
Part13: http://pc12.2ch.net/test/read.cgi/tech/1221215309/
0809デフォルトの名無しさん2010/09/29(水) 18:39:55
>>806
ヒント:移動、回転(角度は逆三角関数と、3平方の定理使ったらわかるよね)、拡大(これもベクトルの長さからわかる)
0810デフォルトの名無しさん2010/09/29(水) 18:44:52
普通に回転移動行列作って掛ければいいだけじゃ
0811デフォルトの名無しさん2010/09/29(水) 21:50:36
>>808
線だけじゃないので
平行移動、回転を使った方が楽なんです

>>809
回転ってやっぱり一発じゃ無理ですよね
0812デフォルトの名無しさん2010/09/29(水) 23:00:34
(x,y,z)に適当なベクトルを外積して2本の直行するベクトルを決めれば、変換行列は求まる
0813デフォルトの名無しさん2010/09/30(木) 00:04:34
↓のように書いたのですが
矢印の頭の方向がおかしくなってしまいます

glPushMatrix();
{
glTranslated( i, j, k );

//棒部分
glBegin( GL_LINES );
glVertex3d( -x/4, -y/4, -z/4 );
glVertex3d( x/4, y/4, z/4 );
glEnd();

norm=sqrt(x*x+y*y+z*z);
theta1 = acos(x/norm);
theta1 *= 180/PI;
if(y==0) glRotated( theta1, 0, 1, 0 );
else if(z==0) glRotated( theta1, 0, 0, 1 );
else glRotated( theta1, 0, 1/y, -1/z );

//頭部分
glBegin( GL_TRIANGLE_FAN );
glVertex3d( norm/4, 0.0, 0.0 );
glVertex3d( norm/4-0.2, 0.05, 0.0 );
glVertex3d( norm/4-0.2, 0.0, -0.05 );
glVertex3d( norm/4-0.2, -0.05, 0.0 );
glVertex3d( norm/4-0.2, 0.0, 0.05 );
glVertex3d( norm/4-0.2, 0.05, 0.0 );
glEnd();
}
glPopMatrix();
0814デフォルトの名無しさん2010/09/30(木) 01:57:20
>>813
自己解決しました
acosの返り値の範囲を考慮してませんでした
0815デフォルトの名無しさん2010/10/01(金) 23:02:26
フレームバッファオブジェクトと単精度浮動小数点バッファを用いてSSAOを
実装したいと思っています。
ただ、デプスバッファ、法線バッファとして単精度浮動小数点バッファを
作成するところで上手く出来ていないようで、レンダリングが正常に行えません。

glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA16F,width,height,0,GL_RGBA,GL_UNSIGNED_BYTE,0);

以下の構成でレンダリングに失敗しました。
CPU:C2D E6600
GPU:Radeon X1950XTX

もう一つの開発環境(以下)では正常にレンダリングが行えました。
CPU:C2D T9600
GPU:Nvidia QuadroFX 2700M

X1950XTXが少し古いのに起因しているのかと思ったのですが、
ハードウェア的には浮動小数点バッファを扱えるという記述をいくつか見つけたので、
もしRadeonでOpenGLを浮動小数点バッファを作成している、という方がいましたら
教えていただけないでしょうか?


0816デフォルトの名無しさん2010/10/01(金) 23:11:14
>>815です。追記
RadeonのCatalystドライバのバージョンは2010.0210.2339.42455です。
0817デフォルトの名無しさん2010/10/02(土) 01:58:09
勿論glGetErrorでエラーがないのは確かめたんだよね?
FBOが不完全なんてこともないんだよね?
0818デフォルトの名無しさん2010/10/02(土) 05:45:17
>>815
揚げ足とるわけじゃないが、記述を見かけたなんて言ってないで
glGetString()で自身の環境で機能を確認すれば言いだけの話
その方法を知っていてやらないのは駄目だろ

あとは旧ATIのGLドライバは、GLの規格に厳密すぎる所がある
ちゃんとリファレンス読んで、その通りに実装しないとエラーになる

同じコードで、NVIDIAでは動いて、ATIで動かないなんてザラ
でネット拾ったり、本なんかに載ってるコードを
リファレンス通りに修正するとATIでも動くようになるw

ATIボードの機能が有効なのにNVIDIAでしか動かないなら、この辺りじゃね
0819デフォルトの名無しさん2010/10/02(土) 09:33:48
>>817
レス、ありがとうございます。
glGetErrorではエラーは吐きませんでした。
FBOはCOLOR_ATTACHMENT0_EXT、DEPTH_ATTACHMENT_EXTは設定していますが(共にテクスチャ使用)、
ステンシルに対しては使用しないので設定していません。
一応レンダーバッファのほうで設定してみます。

>>818
レスありがとうございます。
使用可能かどうかはglGetStringは使用していないのですが、
OpenGL Extensions Viewer 3.32のほうで確認を行いました。
(GL_RGBA16,GL_RGBA_FLOAT16に使用可能のチェック有)

確かにATIのドライバは仕様に厳格なところがありますね。
GLSLコードを書くときもよく弾かれてました。
Nvidiaは逆に良くも悪くも柔軟+最適化されていて判断に困ることがw;
厳格なATIで動けばNvidiaはまず動く、というのが自分の考えなので
ATIで動かないコードは書きたくないなぁと思って・・・。なかなか難しいですね。

0820デフォルトの名無しさん2010/10/02(土) 13:51:15
>>819
いや、不完全ってのはglCheckFramebufferStatusで
ちゃんとGL_FRAMEBUFFER_COMPLETEが返ってくるか確かめろってことだろ。
0821デフォルトの名無しさん2010/10/02(土) 15:20:19
すみませんが質問させて下さい…。
glBegin()〜glEnd()の間に行列操作を入れたいのですが、glBegin()〜glEnd()間の
関数制限で実装出来ずに困っています。

そういう事ってOpenGLではどうやっても出来ないのですか?
宜しくお願いします。
0822デフォルトの名無しさん2010/10/02(土) 15:47:15
glEndして改めてbeginするなり、入力する座標を変換して入れるなり幾らでも方法はある。
キミがアホなだけ。
08238212010/10/02(土) 16:29:04
レス有難うございます。

座標変換を外でやって実装する方法はやりました。
(それでコードやデータに問題が無いのを確かめたので…)

今やりたいのは、GL_TRIANGLE_STRIP 等の途中で行列演算が
挟みたい状態ですので、途中でEnd()〜Beginも挟めずに困っています。
0824デフォルトの名無しさん2010/10/02(土) 17:46:05
822の言う、入力する座標を変換して入れるってのは、GLまかせでなく自分で座標変換を計算するってことでしょう
自分で (C言語の + 演 算子や * 演算子や sin 関数、cos 関数等を使って) 行列の計算をするのにEndもBeginも要らない
0825デフォルトの名無しさん2010/10/02(土) 17:47:22
無理だしやるべきではない

0826デフォルトの名無しさん2010/10/02(土) 21:13:45
>>823
glBegin()〜glEnd()の間に実行できるGL命令の種類は極めて限られています。
基本的には、頂点アトリビュートの変更しかできないと思ってください。
行列の変更も無理。

同じ事をやりたいなら、行列を変更したい部分でストリップを切って、
別の行列の元で別のストリップとして描画するしかありません。
(切ったストリップ間は適当なTRIANGLEなりなんなりでつなぐ)

頂点シェーダが使えるなら、頂点ごとに別の行列を参照することで
821さんのやりたいことができますけどね。
0827デフォルトの名無しさん2010/10/03(日) 00:06:50
行列パレットでもできるね。
08288212010/10/03(日) 01:11:35
みなさんご親切にありがとうございました。
基本的にはOpenGLの機能としてはシェーダを使わないと無理という感じなのですね…。

大変参考になりました。有難うございました。m(_ _)m
0829デフォルトの名無しさん2010/10/03(日) 01:26:08
なぜシェーダを使わないと無理とか言う結論になる
0830デフォルトの名無しさん2010/10/03(日) 01:56:47
ごめん行列パレット完全に忘れてたww
0831デフォルトの名無しさん2010/10/03(日) 01:59:53
そういう問題か。
0832デフォルトの名無しさん2010/10/03(日) 02:04:09
じゃぁどういう問題なの?
0833デフォルトの名無しさん2010/10/03(日) 02:38:29
オブジェクトを分割して描画するって言う考えには何故か至らんらしいな。
0834デフォルトの名無しさん2010/10/03(日) 02:57:24
(゚д゚) ・・・。

・・・・・・・えーーーーと・・・・????
0835デフォルトの名無しさん2010/10/03(日) 07:31:50
CPUで計算できる頂点変形モデルを描画するのにシェーダーが必須なわけがないだろ
0836デフォルトの名無しさん2010/10/03(日) 10:31:56
そもそも元発言者が本当は何をやりたいのかがよくわからん。
通常はglBeginを始めた時点で全てのデータは既知(固定)だ。
glBegin~glEndの中でこねくりまわす必要は普通はない。

0837デフォルトの名無しさん2010/10/03(日) 11:26:26
スキニングしたいってことかと思った。
なら頂点シェーダーか行列パレットであってるでしょ。
08388212010/10/03(日) 11:52:24
>830
すみません。
「行列パレット」という機能がシェーダの機能の一部なのだと
勘違いしてしまいました。
「行列パレット」を使えば出来そうなのですか!?

>833
>826さんにも同様のアドバイスを頂きましたが、TRIANGLE_STRPI中の
プリミティブを分割するとなると、結局プリミティブを分割する時点で
一番最後の関連する頂点座標を個別計算しておく必要が出てきてしまい、
処理がとても煩雑になってしまうので…。
0839デフォルトの名無しさん2010/10/03(日) 13:08:20
>>838
行列パレットでできます。というかまさに821さんのやりたいことを実現するための機能です。
もっとも、821さんがお使いの環境で行列パレットが使用可能かどうかは分かりませんが・・・。
08408212010/10/03(日) 13:38:42
>>839
有難うございます!
行列パレット関係でググってみたところ、「ボーンの数だけ行列をあらかじめ計算して
保存しておいて(マトリックスパレット)、あとはこれとデータをGPUにおくってやればOK」
という感じの、自分がやりたい方向性の記事が見つかりました!

ですが、>839さんのいうように、普通に使える機能ではなさそうな感じで、しかも
導入ページみたいなものも無さそうで難しそうですね…。
0841デフォルトの名無しさん2010/10/03(日) 13:47:39
>>840
もしかして拡張機能の取得の仕方が分からないですか?
環境(OS)と、グラフィックスカードは何をお使いで?
0842デフォルトの名無しさん2010/10/03(日) 14:08:34
821が何をしたいかがわからないな。
なぜポリゴン描画中に行列の操作が必要だと思ったのかわからないし、
具体的にどんなモデルを描画しようとして困ってるとかも言った方が答えやすいよ。
08438212010/10/03(日) 14:14:03
>>841
はい、拡張機能関連が正直言って良く分かっていない状態です。
------------------------------------------------------
OS:Windows7
ビデオチップ:(GeForce9400/PCI/SSE2)
OpenGL:Version3.0( OpenGL Extensions Viewer3.32より )
------------------------------------------------------
ここにfreegltとglew-1.5.6-win32.zipを入れた状態です。

ですが、glewは上手く入っていない感じで、

glewInit()が「Missing GL version」で失敗してしまったり、
glewIsSupported("GL_VERSION_1_2")がfalseを返したりしています。

>>842
一般的ではないモデルデータで情報共有できないのですが、そのモデルデータのデータ構造が
そうなっているのです。
(プリミティブの頂点リストの中に行列の差し替えがコマンドとして入っていて、それらにはノードの
計算結果を入れておく構造)
0844デフォルトの名無しさん2010/10/03(日) 15:22:11
>>843
環境的には、行列パレット使えそうですけどね。
僕はGLEWじゃなくてGLeeばっか使ってるので、エラーはよく分からんw
もしできるなら、GLeeの方で試してみるとか?(「glee opengl」でぐぐれ)

ARB_matrix_paletteに関しては、さすがに説明面倒臭いんでリファレンス見てください。

しっかし気持ち悪いモデルデータ使ってますねw
僕が知らないだけで、そういうデータ構造って割と一般的だったりするのかなぁ。
08458212010/10/03(日) 15:44:39
>>844
ご親切に有難うございます!
色々トライしてみます。
本当に有難うございましたm(_ _)m
0846デフォルトの名無しさん2010/10/03(日) 15:49:59
>気持ち悪いモデルデータ
DirectXも昔はそういう感じだったんだけどね
821がなんかの移植をやってるならできれば両方に詳しいような人を捕まえたほうがいいと思う
0847デフォルトの名無しさん2010/10/03(日) 16:16:44
今も頂点シェーダー使えないコンシューマーはそんな感じだから別に気持ち悪いとは思わないな。
0848デフォルトの名無しさん2010/10/03(日) 16:27:10
>>846-847
んー、いや、バッチの中に色々なコマンドが入ってるのは分かるんですよ。
ただ、821さんの話だと、一つのストリップを構成する頂点リストの中に、
行列操作コマンドが入っているような感じを受けたので。(合ってるのかなぁ?)
さすがに、DirectXやコンシューマ機でも、そういう形ではデータ保持しないですよね。多分。
いや、メモリ上でのデータ構造としてはナシとしても、ファイルフォーマットとしてはアリなのかな??
0849デフォルトの名無しさん2010/10/03(日) 16:53:02
821が勘違いしてるに10^10ジンバブエドル
0850デフォルトの名無しさん2010/10/03(日) 22:20:49
>>844
最近のビデオカードでは GL_ARB_matrix_palette や GL_ARB_vertex_blend って本当にサポートされているんでしょうか。
手元の Radeon HD 4850 を OpenGL Extension Viewer で調べてみても
Extensions には GL_ARB_matrix_palette も GL_ARB_vertex_blend の文字がありません。

このサイトで表示されるビデオカードは全部 false (未サポート)ですね…。
http://www.kludx.com/capability.php?capability=463
http://www.kludx.com/capability.php?capability=440

サポートしている PC 用ビデオカードって本当にあったんだろうか…という気がしてきました。


0851デフォルトの名無しさん2010/10/03(日) 22:45:13
いまどきみんなシェーダでやってくださいだと思います
08528212010/10/03(日) 23:05:12
>>850
自分の環境では OpenGL Extention Viwer でチェックがついていたので
運よく使えるみたいです。


折角みなさんに ARB_matrix_palette を教えていただいたのですが、
リファレンスを見てもサッパリ使い方が分かりません。
(↓リファレンスはこれで合っていますか?)
ttp://oss.sgi.com/projects/ogl-sample/registry/ARB/matrix_palette.txt


glCurrentPaletteMatrixARB (GLint index);
glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, GLvoid *pointer);
glMatrixIndexubvARB (GLint size, GLubyte *indices);
glMatrixIndexuivARB (GLint size, GLuint *indices);
glMatrixIndexusvARB (GLint size, GLushort *indices);

これらの概要というか使い方を知っている方がおられたらご教授ねがえませんでしょうか?
お願いばかりで本当にすみません…。
0853デフォルトの名無しさん2010/10/03(日) 23:25:28
ARB_matrix_paletteをサポートしてるハードって一体何使ってるのか気になる
Extension Viewerのデータベースには一個もないよね
0854デフォルトの名無しさん2010/10/03(日) 23:42:03
>>852
有効化は glEnable(GL_MATRIX_PALETTE_ARB);
行列パレットは glMatrixMode(GL_MATRIX_PALETTE_ARB); と glCurrentPaletteMatrixARB(i); で選択して glLoadIdentity 他で設定する
各頂点に glWeight{b,s,i,f,d,ub,us,ui}vARB で1つ以上のウェイト値を指定する (w_0〜w_n)
各頂点に glMatrixIndex{ub,ui,us}vARB で1つ以上のインデックス番号を指定することによって、さっき設定した行列から使うものを選択する (M_0〜M_n)
座標変換は (xe,ye,ze,we) = sum(w_i * M_i * (xo, yo, wo, zo)) のように計算される (i=0〜n)
およそこんな感じじゃないでしょうか? そのリファレンス読む限り
正確なところはもう一度自分で読み直してみてください、必要なことは一通り書いてあるように思います
08558212010/10/04(月) 01:57:41
>>854
有難うございます。さっそく少しいじってみたところ、

glEnable(GL_MATRIX_PALETTE_ARB);
glMatrixMode(GL_MATRIX_PALETTE_ARB);
glCurrentPaletteMatrixARB(0);

と順番に呼んだ時点でアプリケーションエラーで停止してしまいました。
明日、英語をじっくり解読して原因を調べます。
本当にご親切に有難うございました。
0856デフォルトの名無しさん2010/10/04(月) 09:29:35
>>855
glCurrentPaletteMatrixARB()の関数ポインタがNULLになってないかな。
デバッガで(printfでもいいけど)要確認。
0857デフォルトの名無しさん2010/10/04(月) 15:37:19
>>853
組込でよければ PowerVR MBX (OpenGL ES 1.1) にはある模様。

Part2 の339以降を読むと2003年の頃の状況がわかってとても参考になる…。
ttp://pc5.2ch.net/tech/kako/1039/10399/1039984523.html
…読めば読むほど勉強する気が失せてきた ('A`)
0858デフォルトの名無しさん2010/10/04(月) 18:28:06
読んだけど錯綜していて結局よくわからないな。オレの直感が触っちゃダメといっている。
シェーダー使わないスキニングの需要はあると思うんだけどね……
何というかOpenGLにもいろいろ残念な仕様がある。
0859デフォルトの名無しさん2010/10/04(月) 22:12:14
三次元で立方体を描画しているときに二次元の三角形を
画面に表示したい場合はどのようにすればいいのでしょうか?
(三角形をglVertex2fみたいにウィンドウの座標で表示したい、ということです。)

方法を検索しようにも用語がわからず困っています。
0860デフォルトの名無しさん2010/10/04(月) 22:40:26
gluOrtho2D
0861デフォルトの名無しさん2010/10/05(火) 03:15:43
gluUnProject
0862デフォルトの名無しさん2010/10/05(火) 03:44:02
単純にProjectionMatrixをOrthogonalに変えて描画してもいいだろう。
ただこの場合気をつけなければいけないのはz値の処理がPerspectiveとOrthogonalで違うこと。
0863デフォルトの名無しさん2010/10/05(火) 07:55:44
>>860-862
ありがとうございます。検索してみます。
0864デフォルトの名無しさん2010/10/05(火) 18:05:35
glRasterPos2iとglDrawPixelsを使って
画像を表示するプログラムを作ったのですが、
ウインドウの拡大縮小に合わせて
画像の大きさも変わるようにできますか?
0865デフォルトの名無しさん2010/10/05(火) 18:08:33
ウィンドウの拡大縮小に合わせて glPixelZoom を使ってください
0866デフォルトの名無しさん2010/10/05(火) 18:09:04
できます。
0867デフォルトの名無しさん2010/10/05(火) 18:18:48
俺もちょうど同じ事知りたかったところだ!!
ありがとん
0868デフォルトの名無しさん2010/10/05(火) 19:39:31
画面覆うテクスチャ使ったほうがいいんじゃないか?
0869デフォルトの名無しさん2010/10/06(水) 00:05:44
GPUレイトレやるときは画面全体を覆う矩形をレンダリングして
フラグメントシェーダで全ピクセル毎に計算やるのが主流だ。

glDrawPixels、glPixelZoomのようなCore profileに含まれていない関数を使うのはやめて
ポリゴンとテクスチャで2D処理したほうがいいんじゃないかな。
0870デフォルトの名無しさん2010/10/06(水) 11:12:33
GPUレイトレやるときは画面全体を覆う矩形を
glRectf()で描くのが俺のジャスティス!
08718212010/10/06(水) 13:28:27
>>856 有りがとうございます!

printf("func = %x\n", glCurrentPaletteMatrixARB );

でのテスト結果はご指摘の通り0でした。
これってOpenGLが拡張機能に対応していないっていう認識で良いのしょうか?

自分のPC環境ですが、Extention Viewer で全ての機能がチェックになっているのも
何かおかしいのでしょうね…。OSがWindows7だからでしょうか、Extention Viewer自体
何回か起動すると時々アプリケーションエラーで起動できないことがあります。

いずれにしろ、トライがちょっと難航し過ぎているのでFbx等の一般的なフォーマットに
一旦変換してから「普通の」表示方法で出すように方針転換する事にしました。
実機と扱うデータが異なってしまう時点でかなりデメリットは大きいのですが止むをえません。
結局は、シェーダを自分でコントロールできるようになったら改めて実現できるとのことなので、
いずれそちらで対応しようと思います。

MatrixPallete周りで具体的なアドバイスを頂いた方々には本当に感謝しています。
本当にご親切な対応をして頂いて有難うございました。(成果につなげられず済みませんでした…)
0872デフォルトの名無しさん2010/10/06(水) 17:30:26
フラグメントシェーダとは、ピクセルシェーダの別名。
画面全体を覆う矩形(くけい)とは、つまりビルボードの事。

ビルボードをレンダリングした後、テクスチャにエフェクトかけてビルボードのポリゴンさんに貼り付ける仕事をするのがシェーダー言語。
エフェクトとは拡大・縮小に限らず様々な事がGPU様にお願いできる。

>>869の認識としてはこれでおk?
0873デフォルトの名無しさん2010/10/06(水) 19:13:15
テクスチャとかガン無視して、
ソースデータはシェーダのuniformあたりに入れておいて、
画面全体を1ピクセルごとに舐めるように計算しろって話だと思う

gl1.4以前の関数をほぼ使わずシェーダのみで解決という邪道計算は
やったことがある人でないと勘所がつかみづらいと思われ
0874デフォルトの名無しさん2010/10/06(水) 19:49:08
glBitmapの表示を拡大縮小する方法ってないの?
0875デフォルトの名無しさん2010/10/06(水) 22:13:18
ないよ
そもそもglBitmapなんて使うか?
0876デフォルトの名無しさん2010/10/06(水) 23:45:29
>>872
GPUメーカーはよく使われる機能をチューニングしてマイナーな
機能は徐々に廃止していく。その結果、曲面・四角形・ピクセルやビットマップの
直接描画など三角形の描画以外の仕事はハードウェアでネイティブに処理されず
ドライバエミュレーションで処理される等の理由で遅い可能性が高いので
なんでも三角形(とテクスチャ)でやるのが最速、というあたりを
説明しないといきなりレイトレとか出しても混乱させるだけじゃないかと思った
0877デフォルトの名無しさん2010/10/07(木) 00:06:39
>>870
glRectf()はcore profileに入ってないから使うのはヤメタマエ(`・д・´)
でもVBOとか使って矩形レンダリングするよりはglRectを使ったほうが楽なんだよね。

>>872
OpenGL 2.0以降の仕様書を読みなさい。
ピクセルシェーダというのはDirect3Dでの用語
フラグメントシェーダというのはOpenGLでの用語

画面全体を覆う矩形はビルボードとは別物。
ビルボードをレンダリングするときはちゃんとカメラの設定に合わせてレンダリングする必要があるけど
矩形の方はカメラとか無視して, 単に画面を覆うように四角形か三角形2枚をレンダリングするだけ.
このときvertex shaderでは座標変換とかする必要はない.
このサイトを見れば具体的な内容がわかると思う.
ttp://kioku.sys-k.net/4kgfxmon/

>>872
テクスチャはGPUレイトレみないな事をやるときでも役に立つよ。
uniform変数はテクスチャの置き換えになるものではないんだよ。

>>876
deprecatedな機能は遅かったり, 将来使えなくなるんかなと思ったけど
NVIDIAはOpenGLの古い機能もちゃんとチューニングするらしい。
参考サイト
ttp://www.slideshare.net/Mark_Kilgard/gtc-2010-opengl
0878デフォルトの名無しさん2010/10/07(木) 00:12:36
>>877
つーかなんでみんな三角形2枚で画面を覆うの?
三角形1枚で画面を覆う方がcoolじゃね?
0879デフォルトの名無しさん2010/10/07(木) 00:50:00
>>878
テクスチャ座標の計算が面倒になるだろ。

以前CPUとGPUの差を見るために画像処理プログラム書いたら800x600くらいの画像に5x5のガウシアンフィルタかけた場合には
CPU(1 thread) : 16[s]に対し、GPUは0.07[s]とかそんなんだったわwCPU側のはまだ最適化の余地はあるけどそれでも数十倍の違いはあった。
最近はOpenCLとか出てきてるからある程度整備されたらGPUレイトレとか画像処理とかはそれにやらせるべきなんだろうけどね。
0880デフォルトの名無しさん2010/10/07(木) 00:53:41
>>877
> deprecatedな機能は遅かったり, 将来使えなくなるんかなと思ったけど
> NVIDIAはOpenGLの古い機能もちゃんとチューニングするらしい。

限りあるトランジスタをどの機能にどれだけ配分するかの問題だから全部の機能が
時代相応に速くなりますってことはないんじゃないかな
仮にNVIDIAはMarkさんが頑として譲らなかったとしてもIntelとAMDはどうだろうねぇ
0881>>8722010/10/07(木) 09:41:09
>>873
>>876
>>877

うぉー、皆様懇切丁寧にありがとうございました。
何だか意図せず昔やりたかった事柄を勉強しないといけなくなりそうでwktkです。

てか4kGfxMon落としたらトロイ検出された/(^o^)\
0882デフォルトの名無しさん2010/10/07(木) 12:19:04
OpenGLは1990年代ぐらいから互換性を維持しながら機能を追加していった。
↓
プログラマブルなGPUが主流になる
↓
古いOpenGLの機能は今時のGPUにあわなくなる。
同じ事をするのに何通りもの方法があると混乱する。
↓
新しいGPUにあった機能だけが使えるOpenGLをCore profilesを制定
古い機能が必要なときはCompatibility profilesという拡張機能を使おう
↓
俺ら「よし, これからはCore profilesの機能だけを使って新しいGPU時代を謳歌しようぜ!」
「仕様が雑多なCompatibility profilesはわすれようぜ」
↓
ドイツ人・フランス人「Core profilesだけを使った現代的なOpenGLのチュートリアルを書いたぜ!」
↓
nvidia「うちは古い機能も全力でサポートするよ!」

>>881
4kGfxMonはCrinklerっていうプログラム圧縮プログラムが使われている。
そういうプログラムは解凍しないとウィルスかどうか判断できないとかいう理由で
頻繁に誤検出されちゃう。
たぶん実行しても大丈夫だろうけど心配なら4kGfxMonを自作すればいいんでない?
0883デフォルトの名無しさん2010/10/07(木) 12:52:13
誰かOpenGL整理し直してOpenGL Lite作れよ。
冗談抜きに複雑になりすぎて自己崩壊しつつある。
0884デフォルトの名無しさん2010/10/07(木) 13:08:31
専用ハードのOpenGLなら作ったことあるけど
今の複雑な仕様じゃ作る気にならねー
0885>>8722010/10/07(木) 15:29:48
>>882
毎度詳しく説明していただいてありがとうございます。
テンプレとして保存させていただきました。
0886デフォルトの名無しさん2010/10/08(金) 03:10:41
>>883
OpenGL3.0になってから
ライティング, 座標変換, ディスプレイリスト等の固定機能はdeprecatedになって
結構シンプルになった。
その代わり自分でライティング, 座標変換しないといけなくなったけど
アルゴリズムさえ理解していればそんなに大変なことではない。

それでも複雑でいやならOpenSceneGraphとかのライブラリを使えばいいと思う。

>>884
今の仕様だとGLSLコンパイラを作らないといけないのがちょっと大変そう。

日本語のOpenGLのサイトでCore profilesの機能だけに絞った解説ページが無いっぽいけど
そういうサイトの需要はある?
うまくいけば広告で稼げるか?!稼げるわけないか・・・
0887デフォルトの名無しさん2010/10/08(金) 03:56:22
ある!とだけ言っておこう。
0888デフォルトの名無しさん2010/10/08(金) 10:11:47
桃鉄の畑みたいな収入かもしれなが重要な要素ではある筈です
0889デフォルトの名無しさん2010/10/08(金) 11:12:40
NeHe's Tutorial とか続けるのに十分な利益を得ているんだろうか。
単なるボランティア?
0890デフォルトの名無しさん2010/10/09(土) 01:34:09
すいません。質問なのですが、
現在 300x800の画面で作ったアプリを
300x400のサイズのウィンドウに左右分割したいと思っています。
glPerspectiveの値をいじってたりしましたが、左右キッチリと分割できませでした。

もし解決法などをご存知の方がいらっしゃいましたらご回答よろしくおねがいします。
0891デフォルトの名無しさん2010/10/09(土) 01:59:44
>>890
つglViewport()
0892デフォルトの名無しさん2010/10/09(土) 06:00:16
おお・・DirectXで作ったゲームのOpenGL移植ができた・・

つかれたー
0893デフォルトの名無しさん2010/10/09(土) 07:54:17
>>890
glFrustum()は左右非対称の錐台も設定できる
0894デフォルトの名無しさん2010/10/13(水) 10:27:08
テクスチャー関数のGL_BLENDってどういう時に使うのでしょうか。
下地の色と特定のカラーをテクスチャーの色で分配(ブレンド)する(?)、
どう見えるのでしょうか?
0895デフォルトの名無しさん2010/10/13(水) 11:58:45
趣味で3Dのプログラムしてみたいと思った。
OpenGL入れてみた。
DirectXは画面の初期化からして全然理解できなった。
OpenGLの方で趣味として実用化できそうなので
テンプレの参考書求めて本屋さん行ってきます。
0896デフォルトの名無しさん2010/10/13(水) 12:08:50
ここはお前の日記帳じゃねえんだ
0897デフォルトの名無しさん2010/10/13(水) 12:25:35
お前の仕事上のゲロ吹く場所でもねー
0898デフォルトの名無しさん2010/10/13(水) 12:33:17
反論になってませんね
0899デフォルトの名無しさん2010/10/13(水) 13:26:46
まあ、いいよ。
頭の中がコピー&ペーストで成り立っているということだけはわかった。
自律的発想に乏しく、文章構成能力が低いのな。
IT業界にはコミュニケーション能力が必要らしいから、
ちゃんと日本語で物事が考えることができるように努力するんだな。
流行り言葉の反復ばっかりしているんじゃねえ。笑わせんな。噛みつきワニ。
0900デフォルトの名無しさん2010/10/13(水) 13:35:15
笑わせんな。噛みつきワニ。(キリッ
0901デフォルトの名無しさん2010/10/13(水) 13:45:34
分かったのでゲロ吹き合戦はやめてもらえませんか?
とても汚いです。
0902デフォルトの名無しさん2010/10/13(水) 13:57:05
知らんって。OpenGL始めたっつったら、
どこにもあるようなコピペで噛みつくは、人の言葉反復して返してきやがるし。
脳みそが入力情報に決まった値返すだけの単純サブルーチンかなんかなんだろう。
言語の雑談しに来ただけなのによー。
0903デフォルトの名無しさん2010/10/13(水) 14:03:26
>>894
ttp://wisdom.sakura.ne.jp/system/opengl/gl17.html

これ見て色々試してみたら
0904デフォルトの名無しさん2010/10/13(水) 14:07:34
お前の書き込みのどこに雑談に発展する内容があるのか。
>>896は、下らないどうでもいいお前の独り言書くなよカスって言いたいんだろ、言わせんな恥ずかしい。
0905デフォルトの名無しさん2010/10/13(水) 14:41:15
なら俺が真面目な質問を。
透視変換をかけた後のクリッピング空間での視体積はz,y,z軸ともに-1〜+1ですよね
にも関わらずglClearDepthで指定するzバッファーは0~1なのですが、これおかしくないですか
zテストするときはz軸をさらに変換しないといけないのがおかしいと思います。
どうでしょうか。
0906デフォルトの名無しさん2010/10/13(水) 14:54:19
そのあと glDepthRange の変換がかかるから
09079052010/10/13(水) 15:14:39
でもこの辺赤本でも明確に書かれていないよね。
まずウインドウ座標が2次元なのか3次元なのかが明確でない。
デプステストがウインドウ座標で行われるのか明確でない。
もうちょっとわかりやすく書いて欲しい。。。。
0908デフォルトの名無しさん2010/10/14(木) 00:37:48
赤本は単なるプログラミングガイドであって、仕様書とかじゃないから・・・
正確なところを知りたければ仕様書を読まねばなるまい
わかりやすくはないけど
レス数が900を超えています。1000を超えると表示できなくなるよ。