OpenGLスレ Part11
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/04/26(木) 02:43:38禁止事項
・「OpenGL終了」系のまず価値否定ありきの主観発言(客観的な懸念要素を挙げた上での建設的議論は可)
・学歴・理系か文系かに関連する差別発言
・その他の荒らし全て
これらは付き合うだけ無駄なので無視しましょう。
- 前スレ -
OpenGLスレ Part10
http://pc11.2ch.net/test/read.cgi/tech/1141034983/
- 関連サイト -
http://www.opengl.org/
http://www.mesa3d.org/
http://developer.nvidia.com/
http://www.ati.com/developer/
http://developer.3dlabs.com/
- 過去スレ -
Part 9: http://pc8.2ch.net/test/read.cgi/tech/1132403929/
Part 8: http://pc8.2ch.net/test/read.cgi/tech/1126267690/
Part 7: http://pc8.2ch.net/test/read.cgi/tech/1118151979/
Part 6: http://pc8.2ch.net/test/read.cgi/tech/1105612993/
Part 5: http://pc5.2ch.net/test/read.cgi/tech/1100085657/
Part 4: http://pc5.2ch.net/test/read.cgi/tech/1091724463/
Part 3: http://pc5.2ch.net/test/read.cgi/tech/1067529308/
Part 2: http://pc2.2ch.net/test/read.cgi/tech/1039984523/
Part 1: http://pc3.2ch.net/tech/kako/981/981044659.html (dat落ち)
0002デフォルトの名無しさん
2007/04/26(木) 02:44:41OpenGL 2.0 専用スレ
http://pc11.2ch.net/test/read.cgi/tech/1126268759/l50
くだすれOpenGL(超初心者用)
http://pc11.2ch.net/test/read.cgi/tech/1131208166/l50
- 各社のOpenGL拡張対応状況-
nVidia
http://developer.nvidia.com/object/nvidia_opengl_specs.html
ATI
http://mirror.ati.com/developer/sdk/radeonSDK/html/info/Prog3D.html
- その他もろもろリンク集 -
http://www.nbrains.net/php/pukiwiki/index.php?OpenGL
0003デフォルトの名無しさん
2007/04/26(木) 02:45:48■OpenGLコーディングの補助
・glew http://glew.sourceforge.net/
OpenGL拡張の利用を簡便に。
■数値演算ライブラリ
・CwMtx library http://www.xs4all.nl/~hkuiper/cwmtx/cwmtx.html
行列、ベクトル、クォータニオンの演算ライブラリ。LGPL。
・Matrix, vector and quaternion library 2.0 http://www.programmersheaven.com/zone3/cat415/26784.htm
配布ページの記述によれば無償で使えるらしい。ライセンスは未確認。
C++のメタテンプレート技法を多用しているので高速。APIとしての形も非常にシンプル。
・MathGL++ http://sourceforge.net/projects/mathgl-pp/
行列、ベクトル、クォータニオンなどの各種演算用ライブラリ。APIはOpenGLライク。LGPL。
■マルチプラットフォーム化・イベントやサウンドなどのハンドリング
・SDL http://www.libsdl.org/index.php
定番。数多くの関連ライブラリが開発されている。現在のバージョンでは描画とイベントハンドリングを分離できないため、
描画がもたつくとイベント処理ももたつく。ライセンスはLGPL。
・Allegro http://www.talula.demon.co.uk/allegro/
サポートしている機能、対応OSともにSDLに似ている。日本語資料は少ないが、Gift-wareという位の寛大なライセンスが魅力。
・GLFW http://glfw.sourceforge.net/
キーボード、マウス、ジョイスティックなどのイベント処理、タイマ、マルチスレッド辺りのみをシンプルに抑えたマルチプラットフォームライブラリ。
サウンドやその他は他のライブラリと組み合わせたい場合は、こちらの方が競合などの問題が無く安心か。
・Java+jogl https://jogl.dev.java.net/
OpenGLのJavaバインディング。現在のSun JavaVMがC++に肉薄した演算パフォーマンスを発揮している今、
Javaの豊富な標準ライブラリやSwing・Java2Dと連携できる事も考えると、今後はダークホース的選択肢に?
0004デフォルトの名無しさん
2007/04/26(木) 02:46:51・OpenAL http://www.openal.org/
3Dサウンドライブラリ。マルチプラットフォーム。DirectXゲームでもサウンドはこれを使っているものも。MacOSXでは標準で入っている。
■その他
・OpenSceneGraph http://www.openscenegraph.org/
シーングラフライブラリ。
・freetype http://www.freetype.org/
ビットマップフォントやベクタフォントのレンダリングを行うライブラリ。
■フォント描画
・FTGL http://homepages.paradise.net.nz/henryj/code/index.html#FTGL
Freetypeを利用したもの。マルチプラットフォーム。アウトラインフォント対応。日本語が使えるかは未確認。
■物理エンジン
・ODE:Open Dynamics Engine http://ode.org/ode.html
オープンソース物理エンジン(GPL or BSD-Style License)
0005デフォルトの名無しさん
2007/04/26(木) 02:48:27追加も歓迎です。
0006デフォルトの名無しさん
2007/04/26(木) 05:04:430007デフォルトの名無しさん
2007/04/26(木) 06:42:310008デフォルトの名無しさん
2007/04/26(木) 07:01:370009デフォルトの名無しさん
2007/04/26(木) 08:40:52赤本見てみたけど何故かPC8001mk2時代を思い出した。
0010デフォルトの名無しさん
2007/04/28(土) 14:56:19もっぱらネットで仕入れた知識のみを継ぎ接ぎで使っただけなので、少し不安です。
で、ちょうど連休と言うことでもあるので、暇つぶしを兼ねて本でお勉強をしようと思いました。
以下のような要望に適う本があればご紹介頂けると嬉しいです。
・次のような人間がちゃんと OpenGL を理解したいと思っている
・VC++ でグラフやなんやらの表示を伴うプログラムを普通に書いている
・OpenGL はネットで調べて簡単なプログラムなら組めるようになった
・でも体系立てた理解をしていないため不安である
・日本語で読める本 orz
>>9
そう感じるのは私だけではなかったんですね。w
0011デフォルトの名無しさん
2007/04/28(土) 15:23:14ネットにある赤本と仕様の pdf ならタダだし、赤本の先の情報を得ようと思うと
ほとんど英語になってしまうんだから。
プログラミング以外でも、世界が広がるぞ。
すごい交じレス
0012デフォルトの名無しさん
2007/04/28(土) 16:01:11http://www.mesa3d.org/relnotes-6.5.3.html
http://www.mesa3d.org/
OpenGL 2.Xサポートですよ奥さん
001310
2007/04/28(土) 21:15:03英語からは逃げれるだけ逃げていたのですが。w
暇つぶしの範疇ですが、ちょっとだけ頑張ってみることにします。
0014デフォルトの名無しさん
2007/04/28(土) 21:29:360015デフォルトの名無しさん
2007/04/28(土) 22:44:55ないならそれなりに努力しなさいな。
0016デフォルトの名無しさん
2007/04/30(月) 21:28:34挙げられた条件からすると、どう考えても赤本だなぁ・・・。
って、もう遅いカナ??
0017デフォルトの名無しさん
2007/05/06(日) 20:14:43赤本って何ですか?大学受験のやつしか思い浮かばないw
001817
2007/05/06(日) 20:17:18Programing Guideのことか.
0019デフォルトの名無しさん
2007/05/17(木) 10:29:560020デフォルトの名無しさん
2007/05/17(木) 15:00:410021デフォルトの名無しさん
2007/05/17(木) 15:05:140022デフォルトの名無しさん
2007/05/17(木) 17:45:34DirectX9SDKヘルプのジオメトリブレンディングの項を見れ
0023デフォルトの名無しさん
2007/05/19(土) 03:18:350024デフォルトの名無しさん
2007/05/20(日) 01:47:12的確杉な擬人化表現にワロタwww
0025デフォルトの名無しさん
2007/05/20(日) 12:13:010026デフォルトの名無しさん
2007/05/20(日) 16:12:390027デフォルトの名無しさん
2007/05/20(日) 21:38:120028デフォルトの名無しさん
2007/05/21(月) 00:10:260029デフォルトの名無しさん
2007/05/21(月) 06:10:090030デフォルトの名無しさん
2007/06/02(土) 12:23:27バナナワロタ
0031おしえてちゃん
2007/06/03(日) 14:34:46点を二つ作り、その点の大きさをgl_PointSizeを使って
大きくしたら、点が重なりました。その重なった部分の混合色は
どのようにつくられるのですか?
1,(vertex + fragment シェーダでの処理を一単位と考えて)
二度シェーダプログラムを呼んで色の混合を作る。
2,(上と同じ考えで)一度で処理する。
3,そのほか
同じカーネルに、複数の色を叩き込むということなので、
その色の混合処理の方法がわからないのです。
一体どれなんでしょうか?
0032デフォルトの名無しさん
2007/06/03(日) 14:55:32GPGPUをやる前に、OpenGLの基礎をちゃんと勉強しなさい。
話はそれからだ!
0033おしえてちゃん
2007/06/03(日) 17:10:14独学でやったからよく判らないんだよねぇ・・・
0034デフォルトの名無しさん
2007/06/03(日) 18:59:58透明の時?
0035デフォルトの名無しさん
2007/06/03(日) 19:48:59ブレンドの混合色はどのように作られるんですか、とかはここで聞く前に
OpenGL ブレンド とかでググってくらさい。
0036おしえてちゃん
2007/06/05(火) 19:15:30GL_ONEについて調べてみました。
GL_ONEってfragmentしぇーだですよね。(だと思う。)
それでそのしぇーだの内容を調べさせてもらったらただ単純に
結果の色 = 新しい色 * 1 + 元の色 * 1
みたいなことを、してるそうだとわかりました。
この場合、2度色をインプットしなければ混合色を作れません
でなければ、しぇーだの内容が
結果の色 = 新しい色(1つめ) * 1 + 新しい色(2つめ) * 1 + 元の色 * 1
みたいな感じになってるはずです。
でも2番目のようなソースは見たことがありません。
やっぱり"順番をつけて"2度シェーダを呼んで
混合色を作っているってことなんでしょうか?
どっかでトンデモな間違いをしてそうですが、そこらへんは勘弁してください。
0037デフォルトの名無しさん
2007/06/05(火) 19:56:270038デフォルトの名無しさん
2007/06/05(火) 21:42:20古い方でもいいから赤本を図書館でもなんでも見付けて読みなさい
0039デフォルトの名無しさん
2007/06/05(火) 22:06:26ブレンド処理はバックエンドのラスタオペレーションなので、フラグメントシェーダは関係無いです。
最初の
>結果の色 = 新しい色 * 1 + 元の色 * 1
が正しいです。
「新しい色」てのが今処理してるポリゴンのフラグメント、「元の色」はフレームバッファの色ですね。
>この場合、2度色をインプットしなければ混合色を作れません
その通り、混合色を作るには、ポリゴンを複数回重ね合わせます。
0040デフォルトの名無しさん
2007/06/05(火) 22:47:10Aero Glassでは、DirectX 9をベースにしているため、
基本的にはOpenGLはDirect3Dにマップする形をとるような話が過去にあり、
それを裏付けるようなベンチマーク 結果
http://www.tomshardware.com/2007/01/29/xp-vs-vista/page6.html
製品FAQ?
http://jp.wiki.mcneel.com/default.aspx/McNeel/RhinoOnVista.html
http://www.housenetworks.jp/vista.html
がある一方、
2007.04.20 Khronos OpenGL ARB ワーキング グループ
http://khronos.jp/wp-content/uploads/opengl200704.pdf
にあるような許容範囲内の速度で動くような話も出ています。
Driverしだい... ということでしょうか?
フルスクリーンではなく、ウィンドウ内への描画を行っておりまして、
Aero Glassとの併用がどの程度のオーバーヘッドで実現できるのか
解らずにおります。
#開発PCにVistaがなく、私は嫌なのですが、
#今後、導入が計画されていまして...。
0041デフォルトの名無しさん
2007/06/06(水) 06:55:27確か、Geforce。
アプリは、ゲームだったんだが、ゲームにならないほど遅かった。
FPSはちょっと覚えていないが、10以下。
Driver入れたら、ちゃんと規定の速度で動いた。
0042デフォルトの名無しさん
2007/06/06(水) 08:59:030043デフォルトの名無しさん
2007/06/06(水) 12:13:16そうでなければDirectXのラッパーとして動かして
OpenGL1.4までサポート・パフォーマンスはだいたい半減、
またはDWMを切って今まで通りに動かす。
0044デフォルトの名無しさん
2007/06/06(水) 20:02:46float f;
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
for(f = 0 ; f < 1; f += 0.1) {
// glColor4f(0 , f , 0, 0.2);
glCallList(DISP_LIST_INDEX);
}
glPopMatrix();
glFlush();
}
void setDispList( void ) {
glNewList(DISP_LIST_INDEX , GL_COMPILE);
glBegin(GL_POLYGON);
glVertex3f(-0.1 , -0.1 , -0.1);
glVertex3f(-0.1 , 0.1 , -0.1);
glVertex3f(0.1 , 0.1 , -0.1);
glVertex3f(0.1 , -0.1 , -0.1);
glEnd();
glTranslatef(0 , 0 , 0.1);
glEndList();
}
ポリゴンをミルフィーユのように重ねたものを表示したいのですが
このようにやってみて、一応重なったのですが、なんとなくスマートではありません
-0.1〜0.1の正方形のポリゴンを10枚重ねて表示するにはどうやったらいいのでしょうか
また、その1枚1枚に別々のテクスチャを貼っていきたいのですが
御指導お願いします
0045デフォルトの名無しさん
2007/06/06(水) 22:24:23そもそもこれがわからない
0046デフォルトの名無しさん
2007/06/06(水) 22:32:01for(){
glTranslatef(0 , 0 , 0.1);
glCallList(hoge);
}
こんな感じ
テクスチャーが10枚とも固定されているなら、DisplayListに
描画命令を埋め込んでもいいと思うが、動的に変更されるなら、
DisplayListは使用しないほうがいいと思う。
あと、GL_BLEND, glBlendFunc あたりを押さえておく必要があります。
004740
2007/06/07(木) 01:27:22>>43
なるほど。参考になりました。ありがとうございました。
新しいドライバが出ているビデオカードでの開発になると思いますので、大丈夫そうですね。
0048デフォルトの名無しさん
2007/06/07(木) 12:53:15ありがとうございます
テクスチャが10枚とも別のものなので
1枚1枚別のを指定しないといけなくて…そこでも躓いてしまっています
DisplayListを使わないやり方ですと
頂点を1個1個書いていくのでしょうか?
glbeginのところにfor文を入れたらエラーになってしまって、DisplayListを使いました
0049デフォルトの名無しさん
2007/06/07(木) 16:20:53別にglbeginをfor文で囲ってもエラーにはならないよ。
実際の コードだしてみないと、わからない
0050デフォルトの名無しさん
2007/06/07(木) 17:58:43float i;
glClear(GL_COLOR_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D , texName);
for(i=-0.5;i<0.5;i+=0.1){
glBegin(GL_POLYGON);
glTexCoord2f(0 , 0); glVertex3f(-0.5 , -0.5 , i);
glTexCoord2f(0 , 1); glVertex3f(-0.5 , 0.5 , i);
glTexCoord2f(1 , 1); glVertex3f(0.5 , 0.5 , i);
glTexCoord2f(1 , 0); glVertex3f(0.5 , -0.5 , i);
glEnd();
glBegin(GL_POLYGON);
glTexCoord2f(0 , 0); glVertex3f(-0.5 , i , -0.5);
glTexCoord2f(0 , 1); glVertex3f(-0.5 , i , 0.5);
glTexCoord2f(1 , 1); glVertex3f(0.5 , i , 0.5);
glTexCoord2f(1 , 0); glVertex3f(0.5 , i , -0.5);
glEnd();
}
glFlush();
glutSwapBuffers();
}
すいません…勘違いをしていて、これで表示が出来ました
これに1枚ごとにテクスチャを変えていけると、なんとか出来そうなのですが
0051デフォルトの名無しさん
2007/06/07(木) 18:45:26テクスチャーを配列に入れて、ループ内で、BindTextureすればいいんでないの。
0052デフォルトの名無しさん
2007/06/07(木) 18:51:501枚ずつ(積み重ねているものの下〜上までで)違っていて
さらに縦方向(1回目のglbegin)と横方向(2回目のglbegin)で異なっていて
そこで、どう組んでいけばよいか躓いてしまいました
ただ…あと少しという感じがしているので、もう少しテクスチャマッピングの項を見て勉強します。
0053デフォルトの名無しさん
2007/06/08(金) 03:06:58科学シミュレーションで行う温度の可視化のようなものをしようと考えています
(▽こんな雰囲気)
http://www.mathworks.com/access/helpdesk/help/techdoc/visualize/volvis_sliceplane2.jpg
表示する色の与え方についてOpenGLのサンプルを
探してみたのですが見つからず、とりあえず素人考えで
「可視化対象の変数値分布を0-1の範囲に変換」
→「HSV色空間におけるHの0度(赤)-240度(青)に割り振り」
→「HSV->RGB変換して表示」
と試してみたところ、まあまあイメージ通りのものができました・・・
が、他にもっと優れた方法やサンプルがあれば教えて頂きたく存じます
どうぞ宜しくお願いします
0054デフォルトの名無しさん
2007/06/08(金) 03:58:200055デフォルトの名無しさん
2007/06/08(金) 08:48:31環境によるが
2D、3Dとも
Direct3D ≒ OpenGL >>>>>>>>> ソフトウェア描画 > GDI
0056デフォルトの名無しさん
2007/06/08(金) 08:49:330057デフォルトの名無しさん
2007/06/08(金) 12:02:140058デフォルトの名無しさん
2007/06/08(金) 14:01:10もちろん例外はあるけど最近のハードならほぼ間違いない
0059デフォルトの名無しさん
2007/06/08(金) 18:33:450060デフォルトの名無しさん
2007/06/08(金) 19:51:070061デフォルトの名無しさん
2007/06/08(金) 19:54:400062デフォルトの名無しさん
2007/06/08(金) 20:50:400063デフォルトの名無しさん
2007/06/08(金) 20:52:04> 「可視化対象の変数値分布を0-1の範囲に変換」
> →「HSV色空間におけるHの0度(赤)-240度(青)に割り振り」
> →「HSV->RGB変換して表示」
なんとなくこの部分は1次元テクスチャーを先に作って割り振ったほうが負荷がかからんのじゃないかと思う。
もしかしたらそうやってるのかもしれんけど。
0064デフォルトの名無しさん
2007/06/08(金) 21:24:17BMPのある1色(黒)をマスクのように抜きたいのですが
glBlendFunc(GL_ONE , GL_ONE );だと
後ろが極端に白くなってしまいます
ただ、抜くだけにはどうすればいいのでしょうか
0065デフォルトの名無しさん
2007/06/08(金) 22:11:30自分でd3d/glの切り替え可能な描画エンジン組めばわかるよ
0066デフォルトの名無しさん
2007/06/08(金) 22:15:23GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHAだと普通のアルファ合成。
ちなみに一色だけで抜きたいというのであれば、
ブレンドは使わずにAlphaTestのほうが高速。
0067デフォルトの名無しさん
2007/06/08(金) 22:28:370068デフォルトの名無しさん
2007/06/08(金) 22:40:550069デフォルトの名無しさん
2007/06/08(金) 23:01:39どうせ環境依存だし実際にどっちが速いかはそんなに気にならないけど、
どうして D3D の方が確実に速いと思ったかにはとても興味がある。
0070デフォルトの名無しさん
2007/06/08(金) 23:12:110071デフォルトの名無しさん
2007/06/08(金) 23:20:09GLのドライバは全てベンダが提供しなければならない(シェーダコンパイラでさえも!!
さらに速度が最も重要視されるゲーム市場においてシェアに圧倒的な差がつけられている
結果的にどちらのドライバが信頼性、速度において洗練されるか言うまでもない
0072デフォルトの名無しさん
2007/06/08(金) 23:25:00OpenGLと言うまでも無いな
0073デフォルトの名無しさん
2007/06/08(金) 23:26:580074デフォルトの名無しさん
2007/06/08(金) 23:30:14AlphaTestで色々ためしていたのですが
どうも色が抜けなくて
床井さんの所では、画像の抜きたいところを透明に処理してから使ったりで
やりたいのは黒(っぽい)ところを、黒ければ黒いほど透明にしたいのです
RGB=000 ならαも0
RGB=111 ならαも1
といった感じで。。。
0075デフォルトの名無しさん
2007/06/08(金) 23:39:52Direct3D>ソフトウェア>OpenGL>GDI
2Dの軽さ
ソフトウェア>Direct3D>OpenGL>GDI
0076デフォルトの名無しさん
2007/06/08(金) 23:41:06まあまあ^^;
ここはOpenGLスレなんだからその辺にしといてくれよ。
0077デフォルトの名無しさん
2007/06/08(金) 23:41:52Alha Testするには、黒とかの色じゃなくて、
アルファが重要なのはわかる?
0078デフォルトの名無しさん
2007/06/08(金) 23:53:49はい。
ポリゴンに白黒のテクスチャを貼り付けているので
それ自体にα値が無いのでAlphaTestが出来ないのはわかっています
こういう場合はどうやって抜けばいいのでしょうか…
0079デフォルトの名無しさん
2007/06/09(土) 00:30:25・テクスチャー生成時に、抜きたい色のα情報をテクスチャに書き込む
・シェーダーでゴニョゴニョ(アホ
0080デフォルトの名無しさん
2007/06/09(土) 00:47:260081デフォルトの名無しさん
2007/06/09(土) 00:51:01GL_DST_COLORとかあるんだっけ?
まあ、自分でやってないのでどうなるかはわかんないけど。
0082デフォルトの名無しさん
2007/06/09(土) 01:04:52何故なら全てのカードごとに最適化されたドライバを書くことすら出来るからだ
実際に固定機能時代のnVIDIAのカードのパフォーマンスはD3Dを上回った
これはQuakeエンジン等のGLベースエンジンの活躍が大きな要因だろう
しかしその後のAPI仕様の肥大化、プラットフォームの多様化等のせいで
個別の最適化どころかそこそこの速度と信頼性を維持するのがやっとというのが現状
0083デフォルトの名無しさん
2007/06/09(土) 01:30:24お遊び程度ならD3D。
0084デフォルトの名無しさん
2007/06/09(土) 01:33:570085デフォルトの名無しさん
2007/06/09(土) 01:49:180086デフォルトの名無しさん
2007/06/09(土) 01:55:01ハードウェアに依存しないから昔のマシンでもそこそこの速度で安定して動くんで使いやすいという程度
0087デフォルトの名無しさん
2007/06/09(土) 02:03:550088デフォルトの名無しさん
2007/06/09(土) 02:05:380090デフォルトの名無しさん
2007/06/09(土) 02:39:21Mac のデスクトップは 2D も OpenGL で描画してるよ
0091デフォルトの名無しさん
2007/06/09(土) 02:46:53MacでもGLの出番はクライアント領域への描画だけ
0092デフォルトの名無しさん
2007/06/09(土) 02:48:410093デフォルトの名無しさん
2007/06/09(土) 02:55:58何が言いたいのかわかんないんだけど
MacでデスクトップがソフトウェアでもGLで描画していようとも
ソフトウェアレンダリングするなら速度に影響しないからどうでもいいでしょ?
0094デフォルトの名無しさん
2007/06/09(土) 02:58:34○ソフトウェアでラスタライズ
0095デフォルトの名無しさん
2007/06/09(土) 03:03:21>90はデスクトップ描画に使うくらいGLは軽いって言いたかったのかな?
もしそうならすまんかった
0096デフォルトの名無しさん
2007/06/09(土) 03:10:380097デフォルトの名無しさん
2007/06/09(土) 03:15:25わかってるかもしれませんが、1次元テクスチャによる色変換は
いわゆる依存(従属)テクスチャ処理になるからシェーダが必須ですよ〜。
0098デフォルトの名無しさん
2007/06/09(土) 03:23:39何がしたいんだ?
0099デフォルトの名無しさん
2007/06/09(土) 03:32:430100デフォルトの名無しさん
2007/06/09(土) 11:07:42glBlendFunc(GL_ONE ,GL_ONE_MINUS_SRC_COLOR);
で上手く黒が消えて、白いところだけ出てきました!
ありがとうございました。。。なんか涙出てきた
0101デフォルトの名無しさん
2007/06/09(土) 11:09:180102デフォルトの名無しさん
2007/06/09(土) 11:26:190103デフォルトの名無しさん
2007/06/09(土) 12:19:062Dなら、むしろ、画質向上のためアルファ付きテクスチャーを多く描画することになると
想定すると、Zバッファが使えなくなって、重くなることもある。
まさか、いまどき、2Dで、ジャギジャギのドット絵スプライトの描画なんて、そうそうねーし。
まあ、場合によりけるだが・・・
0104デフォルトの名無しさん
2007/06/09(土) 12:20:54懐かしいなー。
前世紀は、Quake3時代だよな
メーカーが、こぞって、OpenGL対応をうたってて、OpenGLの方ががメチャ速い(気のせいかも)時代だった
0105デフォルトの名無しさん
2007/06/09(土) 13:02:18for(i =0; i < 枚数(512〜); i++)
{
glBindTexture(GL_TEXTURE_2D, texture[i]);
}
のように、番号を保管するtexture[]配列を作らないとだめでしょうか?
forの中で、順次貼り付けるテクスチャを更新していって
貼り付けて描画→次のを貼り付けて描画→…終わりまで
で texture 変数を更新するだけでやるのは可能でしょうか。
0106デフォルトの名無しさん
2007/06/09(土) 13:06:200107デフォルトの名無しさん
2007/06/09(土) 13:14:53配列でやるよりも遅くなるのですか。。。
枚数がたくさんになりそうなので(512×3 や 1024×3)あまりメモリを使いたくなくて…
for(i =0; i < 枚数(512〜); i++)
{
SetTexture(i);//テクスチャを連番で取得する関数
glBindTexture(GL_TEXTURE_2D, texture[i]);
//i枚目テクスチャを貼り付け
}
というやり方を考えていました。
0108デフォルトの名無しさん
2007/06/09(土) 13:18:05そのやり方が普通だよ
0109デフォルトの名無しさん
2007/06/09(土) 13:36:06これで迷い無く組めそうです。
あと、上のは少し違っていました
glBindTexture(GL_TEXTURE_2D, texture);
こうやっていくつもりでした。
テクスチャの中身を更新、というのは具体的にどういうことなのでしょうか
私のは中身を更新、していないのですか?
すみません…何回も何回も
0110デフォルトの名無しさん
2007/06/09(土) 13:44:04これだと劇的に遅くなる代わりにメモリはテクスチャ1枚分しか使わないから
0111デフォルトの名無しさん
2007/06/09(土) 14:06:132] 問題文(含コード&リンク): 2教科のテストの点数を入力し、その2つの点数に
任意の点数を加算する関数を、ポインタを使って定義し、以下のように出力するコー
ドを提出しなさい。
例)2教科分の点数を入力してください。
78
65
加算する点数を入力してください。
12
12点加算したので
科目1は90点になりました。
科目2は77点になりました。
[3] 環境
[3.1] OSLinux
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語:C
[4] 期限:6月11日17時まで
[5] その他の制限: 配列を関数までならいました。ポインタは初めてです
とにかく初心者です。
よろしくお願いします(><)
0112デフォルトの名無しさん
2007/06/09(土) 14:06:30SetTextureのところで、毎回違う画像(BMP)を拾ってきて、それをテクスチャにして
ポリゴンに貼り付けていくので…
0113デフォルトの名無しさん
2007/06/09(土) 14:12:51それだとglBindTextureはいらないよ
glBindTextureは時間のかかるglTexImage2Dなどのテクスチャロード処理を事前にやっておき
描画を高速にするためのものだから
0114デフォルトの名無しさん
2007/06/09(土) 15:44:51それともVisual studioを買って勉強したほうがいいでしょうか?
自分のパソコンにはCygwinが入っていて大学だとVisual studioなのですが。
何か違いが出てきますか?
0115デフォルトの名無しさん
2007/06/09(土) 18:05:14今はVisualC++2005 ExpressEditionという無料のバージョンがあるよ
OpenGL用のSDKが追加で入るのかは知らないけど
0116デフォルトの名無しさん
2007/06/09(土) 18:32:15ダウンロードするページにプラットフォームSDKを一緒に使いましょうみたいなお知らせがあるし、
でないとwindows.hもつかえないんじゃなかったっけ?
0117デフォルトの名無しさん
2007/06/10(日) 00:04:20ここに導入方法が
0118デフォルトの名無しさん
2007/06/10(日) 00:56:00楽かもしれないよ。大変かもしれないけど。
0119デフォルトの名無しさん
2007/06/10(日) 12:34:18どっちだよ
0120デフォルトの名無しさん
2007/06/10(日) 13:14:250121デフォルトの名無しさん
2007/06/10(日) 19:29:45テクスチャを大量に貼り付けるのに、このようにしたのですが、何も貼られなくて進めなくなっています…
床井先生のところをみながら、手探りでやっています。
static void SetTexture(int i){
/* テクスチャの読み込みに使う配列 */
GLubyte texture[TEXHEIGHT][TEXWIDTH][3];
FILE *fp;
sprintf(texture1,"texture%04d",i); //連番でテクスチャ読み込み
/* テクスチャ画像の読み込み */
if ((fp = fopen(texture1, "rb")) != NULL) {
fread(texture, sizeof texture, 1, fp);
fclose(fp);
}
else {
perror(texture1);
}
/* テクスチャ画像はバイト単位に詰め込まれている */
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
/* テクスチャの割り当て */
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TEXWIDTH, TEXHEIGHT, 0,
GL_RGB, GL_UNSIGNED_BYTE, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
}
ディスプレイ関数側ではこのように呼び出しています
for(i=1;i<=SLICE_NUM;i++){
glBegin(GL_QUADS);
SetTexture((int)i);
/* テクスチャマッピング開始 */
glEnable(GL_TEXTURE_2D);
glTexCoord2d(0.0, 1.0); glVertex3d(-1.0, -1.0, i/SLICE_NUM);glTexCoord2d(1.0, 1.0); glVertex3d( 1.0, -1.0, i/SLICE_NUM);lTexCoord2d(1.0, 0.0); glVertex3d( 1.0, 1.0, i/SLICE_NUM);glTexCoord2d(0.0, 0.0); glVertex3d(-1.0, 1.0, i/SLICE_NUM);
glEnd();}
0122デフォルトの名無しさん
2007/06/10(日) 20:22:34initやmain関数で先にテクスチャを確保しないとダメっぽいということがわかりました…
動的にディスプレイ関数の中で確保する方法とかないでしょうか
0123デフォルトの名無しさん
2007/06/10(日) 20:48:190124デフォルトの名無しさん
2007/06/10(日) 21:02:36テクスチャに関係している部分はココだけです。
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TEXWIDTH, TEXHEIGHT, 0,
GL_RGB, GL_UNSIGNED_BYTE, texture);
ここで、開いたテクスチャが割り当てられると思ってやっていたのですが…
0125デフォルトの名無しさん
2007/06/10(日) 21:44:27というか設定系はglBeginの前に全部終わらせといて
Begin〜Endの中にはglVertexとかglTexCoordとかだけにしよう
0126デフォルトの名無しさん
2007/06/10(日) 21:58:30オメエ、mixiで手当たり次第に、マイミク登録して、聞いていただろう
>>125
え!それ知らなかった。
それってどこかに書いてある?
0127デフォルトの名無しさん
2007/06/10(日) 21:58:50できました。
本当に、ただ、そこだけだったんですね
SetTextureをBeginから出しただけで、思ったとおりに出来ました
これだけのことなのに、ずっと悶々ググッていました
すみません、ほんと助かりました
これでようやく帰れます。。。ありがとうございました・゚・(ノД`)・゚・。
0128デフォルトの名無しさん
2007/06/11(月) 00:40:12OpenGL SDKのリファレンス、glEnableのErrorsの欄にあった
たぶん青本でも書いてあると思うよ
0129デフォルトの名無しさん
2007/06/11(月) 01:01:03常識だぜ
0131≠129
2007/06/11(月) 19:14:30マジ
glBegin〜glEndの中では、glEnableが使えないというよりはむしろ
ごく少数の限られたGLコマンド以外のほとんどがエラーになるんだでよ
0132デフォルトの名無しさん
2007/06/12(火) 15:55:360133デフォルトの名無しさん
2007/06/12(火) 17:23:04Only a subset of GL commands can be used between glBegin and glEnd.
The commands are glVertex, glColor, glIndex, glNormal, glTexCoord, glEvalCoord, glEvalPoint, glArrayElement, glMaterial, and glEdgeFlag.
Also, it is acceptable to use glCallList or glCallLists to execute display lists that include only the preceding commands.
If any other GL command is executed between glBegin and glEnd, the error flag is set and the command is ignored.
0134デフォルトの名無しさん
2007/06/13(水) 05:00:11ttp://www.4gamer.net/news/history/2007.06/20070612202046detail.html
0135デフォルトの名無しさん
2007/06/13(水) 06:16:56> 例えば,マップ内にある山の頂上付近の色だけを変えたり,
> 岩に名前を掘り込んだりといった具合に,マップの表面を自在に
> 変更することが可能。さらに,パフォーマンスや安定性には一切影響を与えないという。
すげえな。
どうやってんだ?
20Gって、VRAM足りんよな?
動的に読み込んだりして、あとはどうするんだろ・・・
0136デフォルトの名無しさん
2007/06/13(水) 21:33:090137デフォルトの名無しさん
2007/06/14(木) 20:48:42ちなみに大学生でVisual Studioは持っていないのでUNIX環境で作るつもりです。
0138デフォルトの名無しさん
2007/06/14(木) 21:38:300139デフォルトの名無しさん
2007/06/14(木) 21:58:18http://www.opengl.org/sdk/
0140デフォルトの名無しさん
2007/06/16(土) 00:32:38GLUIはLGPLのくせにスタティックリンクしかねぇ!
ソース後悔はいやづら
0141デフォルトの名無しさん
2007/06/16(土) 01:07:26gluiを *.dll とか *.so にコンパイルすればいいんでは。
0142デフォルトの名無しさん
2007/06/16(土) 01:21:51おっしゃる通りなんですが、ほとんどの機能がクラスで提供されているので、事実上無理ではないでしょうか
0143デフォルトの名無しさん
2007/06/16(土) 01:23:33LGPL はスタティックリンクしてもソースは公開しなくて良いんだぜ。
他人が再リンク可能なようにする必要があるだけだから、リンク前の
オブジェクトファイルを同梱しておけばオーケー。ソースは隠しておけ。
0144デフォルトの名無しさん
2007/06/16(土) 01:28:53おおっ、トリッキーな情報さんきゅです。
確かにそんなこと書いてあった気がする。
これで恥ずかしい自コードを隠しておけそうですヽ(´▽`)/
0145デフォルトの名無しさん
2007/06/16(土) 18:19:21嘘はいけないよ、嘘は・・・
0146デフォルトの名無しさん
2007/06/16(土) 18:28:43釣りするつもりならもう少し工夫したらどうなんだ?
最近少し頑張りが足りないぞ。
0147デフォルトの名無しさん
2007/06/16(土) 18:56:46だから、みんな、DLLにしてるのに・・・
0148デフォルトの名無しさん
2007/06/16(土) 19:09:54gnu.org 逝って来い
思い込みだけで書き散らしてないで、原文をきちんと読め
0149デフォルトの名無しさん
2007/06/16(土) 19:10:060150デフォルトの名無しさん
2007/06/16(土) 19:49:54思っている人間がいたのが驚きだ…
0151デフォルトの名無しさん
2007/06/16(土) 23:12:49ソースの公開義務が無けりゃ、BSDとかわらんではないか…
俺は勝手にwikipediaのttp://ja.wikipedia.org/wiki/GNU_Lesser_General_Public_Licenseが正しいとか思ってるんだが、どうだろうか?
0152デフォルトの名無しさん
2007/06/17(日) 15:41:18for(j=0;j<HEIGHT;j++){
/* test source */
glGetDoublev(GL_MODELVIEW_MATRIX, model);
glGetDoublev(GL_PROJECTION_MATRIX, proj);
glGetIntegerv(GL_VIEWPORT, view);
glReadPixels(i, j, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &z1);
gluUnProject(i, j, 0, model, proj, view, &x1, &y1, &z1); //スクリーン上の座標をワールド座標で取得
/* test source */
}
printf(" at (%d, %d) --> ", i, j);
printf(" at unproject (%lf, %lf, %lf)\n", x1, y1, z1);
}
スクリーン上の各ピクセルが、ワールド座標上でどうなっているのか知りたくて
上のようなソースを書いたのですが、変な値が入ってきます。
視点を<10 10 -20>において、<10 10 0>を見ているときに
左端のX〜右端のXを表示しても
at (0, 256) --> at unproject (10.552285, 10.465990, -19.000000)
at (255, 256) --> at unproject (9.672081, 10.465990, -19.000000)
画面の幅が縦横256なのに、こんな小さな差しか出てきません。
これだとスクリーンは左端〜右端までワールド座標中で約-0.5〜0.5の差でしかないということでしょうか
gluPerspective(45.0, (double)w / (double)h, 1.0, 1000.0);はこのようにしております。
スクリーンの点から空間の点を知る方法を教えてください
0153デフォルトの名無しさん
2007/06/17(日) 15:54:220154デフォルトの名無しさん
2007/06/17(日) 16:06:50上のことは、私の勘違いだったかもしれません
画角を90度にして、画面も正方形で作ってみました
そうすると距離が1離れているスクリーンは
左端が-1 右端が+1になりますねよね。
それで正しい値だと認識できました。
0155デフォルトの名無しさん
2007/06/17(日) 17:02:30とりあえず
gluUnProject(i, j, 0, model, proj, view, &x1, &y1, &z1);
↓
gluUnProject(i, j, z1, model, proj, view, &x1, &y1, &z1);
じゃねぇかね?
0156デフォルトの名無しさん
2007/06/17(日) 18:41:26z1だとこの場合スクリーンより奥の値になりますよね?
ここまでやって、スクリーンに向かって光線を打てると思ったのですが詰まりました…はぁ…
0157デフォルトの名無しさん
2007/06/17(日) 19:42:18>ワールド座標中でのスクリーンが欲しいときは0にすると以前教えていただきまして
はっきりいって間違ってるよ
0158デフォルトの名無しさん
2007/06/17(日) 19:43:06>これだとスクリーンは左端〜右端までワールド座標中で約-0.5〜0.5の差でしかないということでしょうか
そーゆーコトです。(gluPerspectiveに与えたwとhの比にもよりますが)
>gluPerspective(45.0, (double)w / (double)h, 1.0, 1000.0);はこのようにしております。
とのことなので、これはglFrustumでいえば
const double t = tan(22.5 / 180 * M_PI);
glFrustum(
-1.0 * t * w / h,
1.0 * t * w / h,
-1.0 * t,
1.0 * t,
1.0
1000.0
);
に相当しますから、nearクリック面の横幅はw/h*2tan22.5度、となります。
>スクリーンの点から空間の点を知る方法を教えてください
求められているように思えますが・・・。
0159デフォルトの名無しさん
2007/06/17(日) 19:54:32もしいまだにnearクリップ面のことを「スクリーン」と呼んでるのなら、早く直した方がいいですよ。
独自の用語を使われると、意志の疎通以前に混乱を招きますので。
>>157
字面だけみると完全に間違ってる(笑)んですけど、
その辺の事情は前スレを見ないと分からないかと・・・。
0160140
2007/06/17(日) 20:18:51スタリンクするものはLGPLの派生物となるが、例外として、
リバエン/改変などの告知をし、完全かつ機械読み取り可能なオブジェクトコードあるいはソースコー ド(どちらかでも可) と一緒にする。
この「オブジェクトコード」がglui.libを指すのであれば大丈夫ですな
0161デフォルトの名無しさん
2007/06/17(日) 20:37:56その節はありがとうございました。
一度他のことで時間を割かれてしまって、もう一度着手しているところです。
ご指摘もありがとうございます。手探りでやっている状態で、、、
上記の方法で、視点位置と、nearクリップ面とを結ぶ直線(レイ)を出そうとして
レイを単位ベクトルにしていざ使おうと思ったのですが
今度はそれと、立方体の面との交点の算出に苦戦しています。
ここはOPEN-GLじゃない、数学のレベルの問題なので、どうにかして頑張ります。
今日は帰れそうになさそうです(´;ω;`)
0162デフォルトの名無しさん
2007/06/17(日) 21:00:36>この「オブジェクトコード」がglui.libを指すのであれば大丈夫ですな
違う、アプリケーションを構成する.oファイル全てなので、
公開しないコードの部分も.oは公開しないといけない。
つまり、コードは無くても良いけどLGPLの部分が置き換え可能な状態で無ければいけない。
0163デフォルトの名無しさん
2007/06/17(日) 21:28:27交差判定は面倒ですね〜。
こことか参考になるかもですよ。
ttp://ft-lab.ne.jp/cgi-bin/wiki.cgi?page=%B8%F2%BA%B9%C8%BD%C4%EA_3DCG
日曜なのに大変そうですね。
がんばれ〜。・ω・`)ノシ
0164デフォルトの名無しさん
2007/06/17(日) 21:30:40LGPL 部分を自分で改変したバイナリで置き換えられる様に、.o を入手可能にする
必要がある。派生物の所持者が入手可能であれば良いから、世界に向けて公開する
必要は無いよ。
0165140
2007/06/17(日) 22:45:24両氏ともありがとうございました。
オブジェクトコード=.oだったんですね(;゚Д゚)
なるほど、派生物所持者が再びリンクできるようにってことですね。
>世界に向けて公開する 必要は無い
バイナリといえど、ちょっと抵抗があったので安心しました。
重ね重ね感謝ですヽ(´▽`)/
0166デフォルトの名無しさん
2007/06/20(水) 20:36:52どうにか無事にレイと面の交差判定、できました!
あとはそれの効率化で頑張ります。
本当にありがとうございました!
0167デフォルトの名無しさん
2007/06/23(土) 08:15:38dllやらsoを使うのが簡単な気がする。
0168デフォルトの名無しさん
2007/06/24(日) 04:46:17具合的には、
GLfloat lightAmb[4] = {0.0f, 0.0f, 0.0f, 0.0f};
GLfloat lightDif[4] = {0.0f, 0.0f, 0.0f, 0.0f};
GLfloat lightSpe[4] = {0.0f, 0.0f, 0.0f, 0.0f};
glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmb);
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDif);
glLightfv(GL_LIGHT0, GL_SPECULAR, lightSpe);
GLfloat mateAmb[4] = {1.0f, 1.0f, 1.0f, 0.0f};
GLfloat mateDif[4] = {0.0f, 0.0f, 0.0f, 0.0f};
GLfloat mateSpe[4] = {0.0f, 0.0f, 0.0f, 0.0f};
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mateAmb);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mateDif);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mateSpe);
にして描画すると、薄暗く (RGB=0.1, 0.1, 0.1 ぐらいの暗さ) 描画されてしまいます。
原因がわかる人おりますでしょうか?
環境は、GeForce 7900 GS です。
0169デフォルトの名無しさん
2007/06/24(日) 10:16:440170デフォルトの名無しさん
2007/06/24(日) 11:42:49ありがとうございます。原因わかりました。
デフォルトで環境光 0.2 が加わるなんて、知りませんでした。
0171yd
2007/06/25(月) 19:05:500172デフォルトの名無しさん
2007/06/25(月) 19:09:030173yd
2007/06/25(月) 19:20:100174yd
2007/06/25(月) 19:21:49をFor文で回したいんですけどうまく逝きません;;
0175yd
2007/06/25(月) 19:31:250176デフォルトの名無しさん
2007/06/25(月) 20:13:160177デフォルトの名無しさん
2007/06/25(月) 21:16:28int i;
float a;
const float b = 3.1415926535897932384626433832795028*2/64;
glBegin(GL_POINTS);
for(i = a = 0; i < 64; i++, a += b)
glVertex2f(cosf(a), sinf(a));
glEnd();
0178デフォルトの名無しさん
2007/06/25(月) 22:55:220179デフォルトの名無しさん
2007/06/26(火) 00:13:33はあ?
0180デフォルトの名無しさん
2007/06/26(火) 00:31:45誤差が蓄積するからって言う意味だろ。
0181デフォルトの名無しさん
2007/06/26(火) 00:45:55でも差は、6.283185-6.283182=0.000003だけどな。
0182yd
2007/06/26(火) 04:01:080183デフォルトの名無しさん
2007/06/26(火) 04:04:360184デフォルトの名無しさん
2007/06/27(水) 00:20:17方法はさておき、左右の画像を1/2に間引きして交互に合成すれば
いいのでしょうか。こんな感じに
右右右右右右右右右右右右右右
左左左左左左左左左左左左左左
右右右右右右右右右右右右右右
(繰り返し)
左左左左左左左左左左左左左左
資料があまりないので確証がとれません。どこかにありませんか。
英語サイト可です。
0185デフォルトの名無しさん
2007/06/27(水) 00:51:010186デフォルトの名無しさん
2007/06/27(水) 00:58:43例えば、
640x480右画像
640x480左画像
↓
奇数行は右画像から
偶数行は左画像から
↓
640x480の(裸眼では見るに堪えない)画像
でいいのでしょうか。それをOpenGLでやりたいんですが。もちろん動画です。
0187デフォルトの名無しさん
2007/06/27(水) 01:28:29仕様に沿った形で画像データを渡せばよろしいかと思います。
0188yd
2007/06/27(水) 12:11:18直線ニナら結べるんですけど、円弧だとどうアプローチしていいかわかりません
やさしい人教えてください。
0189デフォルトの名無しさん
2007/06/27(水) 21:25:160190デフォルトの名無しさん
2007/06/27(水) 21:44:06それはともかくOpenGLでやるなら細かい直線に分けて書く
それも面倒ならgluPartialDisk
ニナって誰?
0191Light
2007/06/27(水) 22:26:40リンク先のような画像をOpenGLで作製したいのですが、うまくいきません。
http://en.wikipedia.org/wiki/Image:Monocular_rivalry.png
いまのアルゴリズムは、赤線を描いた後、緑線を描いているんですが、
それだと上描きしてしまうことになるので、リンク先の画像のように、
重なった部分が混ざり合ってぼけた感じになりません。
また、赤と緑を別々に描くと、僕のiMacだと後の方に描いた線が
バチバチします。計算量が無駄に多くなってしまっているのかもしれません。
何か良い解決方法はないでしょうか?
閃いた方、ぜひぜひご教授ください。
0192デフォルトの名無しさん
2007/06/28(木) 00:22:00ブレンドについてはGL_BLENDとかglBlendFuncで調べれば出てくるはず
パチパチというのはよく分からないがZ比較してるんでないかい?
glEnable(GL_DEPTH_TEST)をやってたらglDisableにしてみれ
あとこのレベルの質問はくだすれOpenGLスレに書いた方が適切と思われる
0193デフォルトの名無しさん
2007/06/28(木) 14:35:22パチパチはvsyncに同期してないか、
ダブルバッファリング関係かどちらかかと思われる
0194Light
2007/06/28(木) 23:39:57回答、ありがとうございます。
GL_BLENDは可にしていたんですが、glBlendFuncのパラメーターが良くなかった
ようです。glBlendFunc( GL_SRC_ALPHA, GL_ONE );でうまく色を融合できました。
バチバチは、glutIdleFunc( idle ); を入れると起こってしまいます。
ただし、idle関数の中身は、glutPostRedisplay();です。
glutSwapBuffers()を使っています。
もう少し自分でやってみて、また判らなければ「くだすれOpenGLスレ」に
投稿したいと思います。
0195デフォルトの名無しさん
2007/07/03(火) 02:15:15どうしたらいいのですか?
0196デフォルトの名無しさん
2007/07/03(火) 02:44:55どういうふうに起動しないのよ?
環境わからんからなんとも言えんけど、GLUTは適切にインストールされてる?
0197デフォルトの名無しさん
2007/07/03(火) 08:25:163つ以上、チェックがつけばアナタの性格はひん曲がっており、
ネガティブ負け組派遣人生を歩んでいます。
□派遣先正社員の作った糞開発ツールはたとえ腐っててもマンセーして使う
□派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする
□昼食は必ず派遣先の社員と行くべきだ
□自分の仕事で問題が発生しても解決するのは自分の仕事ではない
□派遣先から「いつまでもここで仕事してくださいね(安い金でw)」と言われて嬉しい
□自社で仕事なんてできるわけがない
□派遣労働の問題点の話題が出ると感情剥き出しにして反論する
□派遣労働の問題を指摘する人は嫌いだ
□派遣先には仕事だけでなくプライベートについてもグイグイ引っ張って欲しい
□奢ってくれる派遣先正社員を尊敬する
□自分の月額金額を知らないのは当然だ、単金を聞いてはいけない
□派遣先正社員より自分の生涯収入が低いのは当然だ
□チビは派遣先にかわいがってもらいやすから派遣には有利だ
0198デフォルトの名無しさん
2007/07/03(火) 12:33:070199デフォルトの名無しさん
2007/07/03(火) 12:56:45文句があるなら派遣を辞めてから言え
0200デフォルトの名無しさん
2007/07/03(火) 15:51:080201デフォルトの名無しさん
2007/07/03(火) 18:44:550202デフォルトの名無しさん
2007/07/03(火) 18:56:570203デフォルトの名無しさん
2007/07/03(火) 21:35:56余計なもんなぞ糞
0204デフォルトの名無しさん
2007/07/04(水) 18:55:120205デフォルトの名無しさん
2007/07/04(水) 19:12:140206デフォルトの名無しさん
2007/07/04(水) 19:48:52>203は全く意味がワカランなぁ・・・
OpenGL単独で一体何ができるってんだか。肝心の絵すら出ないよw
0207デフォルトの名無しさん
2007/07/04(水) 20:07:38行く先も分からぬまま
0208デフォルトの名無しさん
2007/07/04(水) 20:40:07ほんとに出るのかな…
0209デフォルトの名無しさん
2007/07/04(水) 21:58:55ヒント
描画ロジックの分離
0210デフォルトの名無しさん
2007/07/04(水) 22:35:51…描画ロジックを分離するとOpenGL単独でいけるんだ。
…へェ。
0211デフォルトの名無しさん
2007/07/04(水) 22:53:16極意を教えてください!!
0212デフォルトの名無しさん
2007/07/04(水) 23:00:400213デフォルトの名無しさん
2007/07/04(水) 23:20:20Haskellみたいな純粋に近い関数型言語ってよく知らないんだけどさ、
OpenGLみたいなStateMachineとの相性って悪くないの?
あれかな、モナドとかいうやつを使ってむにゃむにゃするのかな?
0214デフォルトの名無しさん
2007/07/05(木) 00:09:52言語との組み合わせでどう?といわれているのに
単独とかわけの分からないこと言ってるから突っ込まれてるんだろ
0215デフォルトの名無しさん
2007/07/05(木) 01:05:16エスパー乙
0216デフォルトの名無しさん
2007/07/05(木) 01:20:37HaskellでOpenGL使ってる人
0217デフォルトの名無しさん
2007/07/12(木) 00:10:34くっついているのって扱いにくくないですか?
スレッドにカレントコンテキストを設定するのもグローバル変数のようで
プログラムが複雑になるような気がします。
0218デフォルトの名無しさん
2007/07/12(木) 00:40:140219デフォルトの名無しさん
2007/07/12(木) 01:23:500220デフォルトの名無しさん
2007/07/12(木) 21:19:22D3DでもDeviceは一個しか作れんし、結局グローバル変数にしちゃわない?
デバイスを使用する関数にいちいち渡してたらそっちの方が複雑になるな
あとは次バージョンのOpenGLにご期待ください
0221デフォルトの名無しさん
2007/07/12(木) 21:41:58二個以上作れるしデバイスのAPIが複数スレッドからの
呼び出し可能にするオプションもあるんだなこれが。
ゲームはともかくツールとか作る時には未だにwgl*の適切な取り扱いがよーわからん。
0222デフォルトの名無しさん
2007/07/12(木) 21:55:33確かにツールとか複数ウィンドウに描画する場合はコンテキストの管理が面倒だな
設定は独自管理にしてコンテキスト切り替え時に必ず設定するようにするのがいいのかな
しかしマルチコンテキストの場合は何が共有できるのか分かりづらいのが困る…
これが嫌でpbuffer諦めてFBOにしたしな
0223デフォルトの名無しさん
2007/07/13(金) 11:40:57別に OpenGL を使っている可能性があるからライブラリの関数を
呼び出すごとにコンテキストの退避,切り替え,復元をしなけれ
ばならないから非効率
0224デフォルトの名無しさん
2007/07/14(土) 20:53:030225デフォルトの名無しさん
2007/07/15(日) 01:50:28OpenGL をライブラリ内部に隠蔽してユーザと同じスレッドで動かすライブラリ
の場合,ユーザが設定するコンテキストの影響を受けてもいけないし影響を
与えてもいけない。
結局ライブラリの関数に入ったときにこっそりコンテキストを切り替えて
関数から出るときに元のコンテキストに戻す方法しか思いつかなかった。
0226デフォルトの名無しさん
2007/07/19(木) 15:32:06そのほうが学習も楽だし,GPU ベンダーも楽になるのに。
0227デフォルトの名無しさん
2007/07/19(木) 17:17:030228デフォルトの名無しさん
2007/07/19(木) 17:24:160229デフォルトの名無しさん
2007/07/19(木) 17:32:03今後はしばらくAPIの策定がD3D先行なのは間違いないから
インターフェイスはともかく出来ることはほぼ同じになるだろうね
少なくともD3Dで出来ることはGLでも出来るようになる(速度は知らんが
0230デフォルトの名無しさん
2007/07/19(木) 20:57:400231デフォルトの名無しさん
2007/07/19(木) 23:25:16修士研究で使用していますが,周りに使っている人がいないので聞けない状況
です.
解析で出た速度ベクトルを,glutSolidConeで描画したいと思っています.
流体なので,複数のベクトルがあり,陰影がついていないと見づらいのです.
for文で描画しようと思っています.
問題があり,glutSolidConeは,デフォルトでZ軸方向を向くようになっています.
これを回転させて,求めたベクトルの方向に向かせたいのですが,分かりません.
Z軸をこの方向に向かせたとして,他の2軸の向きがどうなろうと
かまわないのですが,Z軸に向かせるだけなのにできません.
調べたところクォータニオンというものがあり,便利ということですが,
あまり資料がありません.また,CGが研究の主題なのではなく,
描画自体はシンプルなものなので,ここまでやらなくてはいけないのか
悩んでいます.
良い方法があったらよろしくお願いしま
0232デフォルトの名無しさん
2007/07/19(木) 23:35:07回転行列の3列目に向かせたい方向のベクトル入れたらええんちゃうのん?
残りの2列は直交するように適当に
0233デフォルトの名無しさん
2007/07/19(木) 23:42:29詳しくないものですいません.
0234デフォルトの名無しさん
2007/07/19(木) 23:45:39四元数でもいいけど、glMultMatrix()使うのが分かりやすいかと。
Z軸が (x, y, z) の方向を向いて欲しいなら、
GLfloat m[16]={x0,x1,x2,0, y0,y1,y2,0, x,y,z,0, 0,0,0,1};
glMultMatrixf(m);
(glutSolidCone...)
て感じ。Cしか知らないので自分で適当にJavaに翻訳してね。
あ、事前に(x0,x1,x2)と(y0,y1,y2)と(x,y,z)は互いに直交するように
かつ正規化されているように設定する必要がありますヨ。
0235デフォルトの名無しさん
2007/07/20(金) 00:04:27調べてやってみたいと思います.
>234
あ、事前に(x0,x1,x2)と(y0,y1,y2)と(x,y,z)は互いに直交するように
かつ正規化されているように設定する必要がありますヨ。
の部分がはっきりしないのですが,
(x0,x1,x2)と(y0,y1,y2)はどういったベクトルなのでしょうか?
・向かせたい方向(x,y,z)
・直行するベクトル→(x0,x1,x2)と(y0,y1,y2)は
(x0,y0,z0),(x1,y1,z1)と解釈
でよろしいでしょうか?
かつ,(x,y,z),(x0,y0,z0),(x1,y1,z1)はそれぞれ正規化されたベクトル
ただし,今回は(x0,y0,z0),(x1,y1,z1)は適当に与えればよい.
でよろしいでしょうか?
0236デフォルトの名無しさん
2007/07/20(金) 00:13:51教えていただいたことで分からない点がもう一つありました.
仕様が違うのかもしれませんが…
「glMultMatrixf(float[],int)は(float)に適用できません」と出てしまいました.
引数で,int型のある数が必要らしいのですが,知っていれば教えていただけませんか?
0237デフォルトの名無しさん
2007/07/20(金) 01:10:16座標変換前のx軸とy軸が座標変換後に向く方向、って意味で(x0,x1,x2),(y0,y1,y2)って
名前にしましたけど、かえって分かりづらかったですか。w
まぁ、名前なんて(x0,x1,x2)だろうが(x0,y0,z0)だろうがどうでもいいんで気にしない方向で。
要は、座標変換後もxyz軸が直交して欲しいなら三つのベクトルを直交させないといけないし、
また座標変換後のxyz軸の大きさが変わらないで欲しいなら三つのベクトルが正規化されてないと
いけないわけです。GLと関係無い、数学の話ですね。
glMultMatrixf()の二番目の引数ってなんだろ。Cにはそんなの無いんですが。
てかAPIのリファレンスとかwebで調べれば良いだけの話では。
0238デフォルトの名無しさん
2007/07/20(金) 01:25:37分かりました,ありがとうございます.
3次元の座標変換というものに慣れていないので,質問しました.
調べてみればみるほど,数学の話になるので仰るとおり理解するには
数学的にしっかり理解しなければいけないようです.
APIの方も見ようと思います.
ありがとうございました.
0239デフォルトの名無しさん
2007/07/20(金) 16:00:04改めて考えてみたら、glMultMatrixを使うのは無駄多いかも。
要するにz軸(0,0,1)を任意の方向(x,y,z)に向けられればいいわけだから・・・
Vz=(0,0,1)→V=(x,y,z)
回転軸Vr(rx,ry,rz)は
Vr = Vz x V (外積)
回転角度aは
a = arccos(Vz・V) (・は内積、Vは単位ベクトルとする)
このVrとaが、そのままglRotateの引数に使える、の、かな。
Vz = (0,0,1)を入れて具体的に計算すると、
Vr = (-y, x, 0)
a = arccos(z)
これを、速度ベクトル一個ずつに対応して保存しておけば、
描画するときにglRotate(a, Vr.x, Vr.y, Vr.z)でいけるはず。
ただしGLの角度表現はradじゃなく度なので注意。
あとV(x,y,z)がz軸に平行なときは計算が別になるけど、ま、それは分かるでしょ。
0240デフォルトの名無しさん
2007/07/20(金) 22:22:242 番目の引数は配列のオフセット。
C → glMultMatrixf( m + 10 );
Java → gl.glMultMatrix( m, 10 );
0241デフォルトの名無しさん
2007/07/21(土) 00:03:45直接基底作ってglMultMatrixのほうが明らかに計算量が少ないと思うが・・・
0242デフォルトの名無しさん
2007/07/21(土) 01:25:26>239
なるほど,そういう方法もあるんですね.glRotateの引数には,1.0fか0.0fを
入れる方法しか知りませんでした(汗)
>240
オフセットですか.APIを見ても???という感じでしたが,オフセットで調べたいと
思います.
みなさんありがとうございます.諦めかけていましたが,なんとかなりそうです.
0243デフォルトの名無しさん
2007/07/21(土) 02:48:34>glMultMatrixのほうが明らかに計算量が少ない
そうでもない。
・パラメータの転送量が多い
・(OpenGL内部での)逆行列計算が大変
てことで、glMultMatrixは負荷が大きいよ。
対してglTranslate,glScale,glRotateは逆行列の計算が速い。
ま、自分ではベンチとって比べてみたことは無いけど。一般的には、
MultMatrixを使うよりはTranslate/Scale/Rotateを使うべきと言われてるね。
それに事前の計算量もメモリ消費量も、このケースでは
234の方法 > 239の方法 だと思うけど・・・。
0244薄汚い派遣の国、日本
2007/07/22(日) 17:53:13派遣契約を切られたにもかかわらず「次の派遣先でも切られてしまって生活できません」
などと 言って泣き落としで現場責任者に一切話がないまま再契約した派遣のことです。
今月初め、半年前に切った派遣が出社してきてマネージャーも含めみんなびっくりしました。
影でコソコソ偉い人に泣きついて再契約したそうです。同じ部署の人には黙って・・・
そんなことまでして自宅の近くの派遣先にこだわって人間として恥ずかしくないのですか。
派遣でスキルアップ、派遣で収入アップとか言うなら一箇所にしがみつかず
複数の会社を渡り歩いてください。
ひとつの会社で派遣向けの単調な仕事をしていたらスキルアップなんてありえないでしょう。
身分不相応な商品のローンを払うために派遣だと当然足りない収入は親にも寄生して、
いつ切られるんじゃないかとビクビクしながら人事権のある人間とだけ仲良くし、
契約終了を通知されれば泣き落とし。悲惨な人生ですね。
氏んだほうがいいんじゃないですか。
0245デフォルトの名無しさん
2007/07/26(木) 14:28:32テクスチャの切り替えがうまくいかねぇ・・・・
ググっても同様の症状は出ないので自分のコードのどこかが
行儀悪いんだろうが何がいけないのやらさっぱり・・・ orz
0246デフォルトの名無しさん
2007/07/26(木) 20:39:330247デフォルトの名無しさん
2007/07/26(木) 23:59:463つ以上、チェックがつけばアナタの性格はひん曲がっており、
ネガティブ負け組派遣人生を歩んでいます。
□派遣先正社員の作った糞開発ツールはたとえ腐っててもマンセーして使う
□派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする
□仕様とは正社員から口伝されるものだ
□耳で聞いた仕様を正確に覚えていないのは自分の責任だ
□昼食は必ず派遣先の社員と行くべきだ
□自分の仕事で問題が発生しても解決するのは派遣の仕事ではない
□自社で仕事なんてできるわけがない
□派遣労働の問題点の話題が出ると感情剥き出しにして反論する
□派遣労働の問題を指摘する人は嫌いだ
□派遣先には仕事だけでなくプライベートについてもグイグイ引っ張って欲しい
□奢ってくれる派遣先正社員を尊敬する
□自分の月額金額を知らないのは当然だ、単金を聞いてはいけない
□派遣先正社員より自分の生涯収入が低いのは当然だ
□チビは派遣先にかわいがってもらいやすいから派遣には有利だ
0248デフォルトの名無しさん
2007/07/27(金) 00:05:24ども。試してみます。
0249デフォルトの名無しさん
2007/07/27(金) 09:52:21ここにVistaでOpenGLを使う時の注意点があるけどどうだろう
http://www.opengl.org/pipeline/article/vol003_7/
Aeroを使ってたら切って試してみるといいかもしんない
0250デフォルトの名無しさん(245)
2007/07/27(金) 10:40:19glBindTexture でテクスチャを切り替える時に、XPだと、
glBindTexture( GL_TEXTURE_2D, テクスチャ1 );
/* テクスチャ1有効 */
glBindTexture( GL_TEXTURE_2D, テクスチャ2 );
/* テクスチャ2有効 */
とダイレクトにバインドして問題ないんだけど、
Vista の場合、
glBindTexture( GL_TEXTURE_2D, テクスチャ1 );
/* テクスチャ1有効 */
glBindTexture( GL_TEXTURE_2D, 0 );
glBindTexture( GL_TEXTURE_2D, テクスチャ2 );
/* テクスチャ2有効 */
glBindTexture( GL_TEXTURE_2D, 0 );
と、名無しテクスチャに戻してやらないと他のテクスチャにバインドし直せなかったです。
うーん・・・ 赤本(原書第5版)の glBindTexture のサンプルコードは上の書き方だったけど
この辺何か文献でてましたっけ。 勉強が足らんなぁ・・・
>> 249
サンクス!!
OpenGL描画中にGDIはいじってないので大丈夫そうです。
自分の元のコードが Aero の On/Off に関わらず発症すること、
上記の修正をして Aero の On/Off に関わらず修正されたことを確認しました。
以上、お騒がせしてすんませんでした・・・・ orz
0251デフォルトの名無しさん
2007/07/27(金) 11:06:45BindTextureに0を指定することって普通無いと思うが、不思議な現象だな
まだVista用のグラフィックドライバがバグってるってだけかもしんないね
0252デフォルトの名無しさん
2007/07/27(金) 16:03:10てか今まで特に不具合は出てないな。
0253デフォルトの名無しさん
2007/07/27(金) 16:32:41定番だけどドライバを更新。もうやってそうだけど。
>>251
無名のテクスチャを指定するときに0を指定するんじゃなかったかな。
0254デフォルトの名無しさん
2007/07/27(金) 18:17:260255デフォルトの名無しさん(245)
2007/07/29(日) 08:31:17とはいえ、標準ドライバでも最低限まともに動くようになってないとね・・
なんせ「標準」ですからね・・
>>252
ですよねぇ。自分のOpenGL作法がおかしいんだろうなぁとは思うんですが、
テクスチャ以外は問題ないし、毎回 gllTexImage2D() する分にも問題ない。
glBindTexture だけが思うように動かない。謎です。
みなさんどもありがとです。m(_ _)m
0256名無しさん@そうだ選挙に行こう
2007/07/29(日) 13:16:20WindowsXPのベンダー提供ドライバ時の約6%しか、速度がでなかった。
Vista対応ドライバを入れると、解決した。
よって、Vistaの添付ドライバは全く信用していない
0257名無しさん@そうだ選挙に行こう
2007/07/29(日) 13:37:48信用云々とかあふぉくさ
0258デフォルトの名無しさん
2007/07/30(月) 01:13:23いつも仕事中にWebばかり見てる派遣クンが
「OpenGLがプログラムどおりに動かない原因を調べるのは僕の仕事ではありません。」
と言っています。
彼のOpenGLプログラムが動かないのを調べるのは誰の仕事なのでしょうか?
0259デフォルトの名無しさん
2007/07/30(月) 01:15:030260デフォルトの名無しさん
2007/07/30(月) 01:18:15俺なら論破以前に派遣契約を切るからな
0261デフォルトの名無しさん
2007/07/30(月) 01:23:480262デフォルトの名無しさん
2007/07/30(月) 01:32:37論破しようにもそういう奴って話通じないだろ
「僕は言われた通りにやりました!何で僕が調べないといけないんですか!」
なんて言われたひにゃ俺ならマジギレしそう
0263デフォルトの名無しさん
2007/07/30(月) 01:50:00話通じない奴が居るって時点でお前も話通じなそうだな
0264デフォルトの名無しさん
2007/07/30(月) 01:57:43日本語をしゃべってれば話が通じるなんて考えは甘いよ。
0265デフォルトの名無しさん
2007/07/30(月) 02:04:33お前ずいぶん恵まれた環境で仕事してるんだな
0266デフォルトの名無しさん
2007/07/30(月) 03:06:580267デフォルトの名無しさん
2007/07/30(月) 05:45:570268デフォルトの名無しさん
2007/07/30(月) 07:02:500269デフォルトの名無しさん
2007/07/30(月) 09:20:100270デフォルトの名無しさん
2007/08/04(土) 19:23:430271デフォルトの名無しさん
2007/08/04(土) 19:28:32XCode 使っても良いけど、↓これ見ておけば悩み無用。
ttp://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html
0272デフォルトの名無しさん
2007/08/04(土) 23:02:220273デフォルトの名無しさん
2007/08/05(日) 23:56:10日本語で基礎からガッチリ固めたかったらあの高い赤本しかないの?
せめて5000円以下でないだろうか
0274デフォルトの名無しさん
2007/08/06(月) 00:13:13人材配置を見直してもらうか、仕事振ってるマネージャーを変えてもらえ
0275デフォルトの名無しさん
2007/08/06(月) 11:39:09学生なら学校の図書館とか、あるいは市町村の図書館でもあたってみては。
無いかもしれんが。
英語でよければ古い版の赤本を無料で読める http://www.glprogramming.com/red/
0276デフォルトの名無しさん
2007/08/06(月) 16:11:22覚悟きめてがんばるわ
0277デフォルトの名無しさん
2007/08/06(月) 20:52:07図書館は無ければリクエストしてみるといいかも
でも入るまでかなり時間かかるかな
0278デフォルトの名無しさん
2007/08/06(月) 21:04:40英語で格闘する労力と13k円の出費のトレードオフを考えてオレは買った。>赤本
0279デフォルトの名無しさん
2007/08/06(月) 21:09:000280デフォルトの名無しさん
2007/08/06(月) 21:10:380281デフォルトの名無しさん
2007/08/06(月) 22:12:540282デフォルトの名無しさん
2007/08/06(月) 22:42:51Amazon.co.jp: OpenGLプログラミングガイド 原著第5版: 本: OpenGL策定委員会,松田 晃一
http://www.amazon.co.jp/dp/4894717239
> ■OpenGL バージョン1.5 で追加された以下の新しいコア機能:頂点配列のバッ
> ファオブジェクトへの格納/遮蔽問い合わせ/シャドウマッピング用のテクス
> チャ比較関数の追加/トークンの更新
>
> ■OpenGL バージョン2.0 で追加された以下の新しいコア機能:シェーダ記述言
> 語の追加/プログラマブルシェーダからの複数のカラーバッファへの異なる色の
> 出力/テクスチャマップに関する2 のべき乗のサイズ制限の緩和/テクスチャ
> マップされた点スプライトのレンダリング/前面と背面ポリゴンでのステンシル
> 処理の分離
>
> ■バグ修正
だそうです。
OpenGL1.5とOpenGL2.0についての追加と、訳の見直しが行われている模様。
俺もほしい
0283デフォルトの名無しさん
2007/08/06(月) 23:10:140284デフォルトの名無しさん
2007/08/06(月) 23:29:29・より赤くなった
・1,000円高くなった
0285デフォルトの名無しさん
2007/08/07(火) 00:20:48しかしせめて8000円ぐらいに…
0286デフォルトの名無しさん
2007/08/07(火) 02:27:061.5倍くらいは速くなってんのかな
0287デフォルトの名無しさん
2007/08/07(火) 02:39:49テクスチャへの描画とか、実際に使う際の普遍的なチップスとかって
載ってますのん?
そういうのは、Game Programming Gems買えって事かな?
(そろえたら、赤本よりたけええけどよぉおぉ)
0288デフォルトの名無しさん
2007/08/07(火) 02:52:530289デフォルトの名無しさん
2007/08/07(火) 03:18:43テクスチャへのレンダリングにはGL_EXT_framebuffer_objectを使う。
この拡張機能はOpenGL 2.0の仕様に含まれていないから当然赤本には載ってない。
0290デフォルトの名無しさん
2007/08/07(火) 22:16:01そうだよなあ
0291デフォルトの名無しさん
2007/08/07(火) 22:51:140292デフォルトの名無しさん
2007/08/13(月) 18:58:10http://www.opengl.org/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic;f=3;t=015351;p=0
0293デフォルトの名無しさん
2007/08/19(日) 23:15:270294デフォルトの名無しさん
2007/08/19(日) 23:26:55OpenGL 2.0 専用スレ
http://pc11.2ch.net/test/read.cgi/tech/1126268759
0295デフォルトの名無しさん
2007/08/23(木) 18:42:39ttp://www.technobahn.com/cgi-bin/news/read2?f=200708231640&page=2
0296デフォルトの名無しさん
2007/08/23(木) 18:48:330297デフォルトの名無しさん
2007/08/24(金) 05:32:420298デフォルトの名無しさん
2007/08/24(金) 19:51:37OpenGLでなくGLSLでVertex texture fetchをしたいのですが、
テクスチャを取ってくるときの関数はフラグメントシェーダと同じように、
texture2Dやtexture2DRectを使うのでしょうか?
0299デフォルトの名無しさん
2007/08/24(金) 21:08:31確かそうだったと思う。
0300デフォルトの名無しさん
2007/08/26(日) 01:18:20VBOにデータ置いても直らず、シェーダやテクスチャはおろか、ライティングすらしてないモデルでも再現。
WindowsXPで、ドライバは最新(162.18)とベータ版(163.44)両方で発症。
GeForce6000系や7000系では問題は起きませんでした。
プログラムを何度も起動しなおしたら上手くいくこともあるのですが…。
0301デフォルトの名無しさん
2007/08/26(日) 01:38:33熱暴走してないか疑え
0302デフォルトの名無しさん
2007/08/26(日) 21:53:14あとDirectXのゲームとかでは同様の問題は起きず。
# もう検証疲れた…。ドライバが腐ってるせいってことにしたいorz
0303デフォルトの名無しさん
2007/08/26(日) 21:58:460304デフォルトの名無しさん
2007/08/26(日) 22:09:36glBegin()〜glEnd()、の5パターンで同じモデルを描いてみましたが、全てで発症しました。
モデルは立方体を1000個程描いてるだけです。
0305デフォルトの名無しさん
2007/08/26(日) 22:12:000306デフォルトの名無しさん
2007/08/26(日) 22:15:40ちょっと公開したくない部分があるんで、
問題が起きる最小限のプログラム用意してみます。
0307デフォルトの名無しさん
2007/08/26(日) 22:21:12大抵公開できない部分があるのでそこを何とかお願いしますとかが多いのに。
0308デフォルトの名無しさん
2007/08/27(月) 01:40:12DLKey: 0000
急拵えなんでバグってたらすみません。
グラフの単位はミリ秒で、上限20msです。
good.jpgは正常時、bad.jpgが異常に遅いときのスクリーンショットです。
これ作りながら検証したところ、どうも全体的な負荷が高い時程発症確率が上がってる感じがします。
立方体1000個にしてシェーダ使うと9割以上発症したり。
しかし500個シェーダ無しでも稀に遅くなったりで、根本的な対処法は依然分からず。
0309デフォルトの名無しさん
2007/08/27(月) 02:23:56解凍できないのは俺だけか?
0310デフォルトの名無しさん
2007/08/27(月) 03:34:28とりあえず解凍はできたぞ。
0311デフォルトの名無しさん
2007/08/27(月) 11:02:23安心しろ俺もだ
0312デフォルトの名無しさん
2007/08/27(月) 11:40:180313デフォルトの名無しさん
2007/08/27(月) 12:07:050314デフォルトの名無しさん
2007/08/27(月) 17:17:020315デフォルトの名無しさん
2007/08/27(月) 19:33:23解凍できません
0316デフォルトの名無しさん
2007/08/27(月) 20:33:59リンク押してダウソしたら解凍できるんでないか
0317デフォルトの名無しさん
2007/08/27(月) 20:47:070318デフォルトの名無しさん
2007/08/29(水) 21:25:44うちのgeforce8800gtxでもbad.jpgと同じぐらいのスピードになった。
GLexpertから何もメッセージがでてない(標準出力は起動時につくられるstdout.txtに出力されるんだよね?)
っぽいし、ソースコードをざっと読んだけど原因はよくわからなかった。
そういえば、geforce6000, 7000で毎framePBOにデータを送るようなプログラムを書いていたときに
数秒後に急に倍近くfpsが上がることがあった。
ドライバが消費電力を低くするために裏で負荷に合わせて使用するシェーダの数を調整したりしてるのか?
教えてエロ詳しい人
0319デフォルトの名無しさん
2007/08/30(木) 21:39:21うちだと>>308のbad.jpgより遅くなってる。
ttp://d.hatena.ne.jp/yaneurao/20061122
これとか見ると少なくとも7000だと問題ないみたいだが。
8000はまだOpenGLの実装が不完全と見た方がいいのかね。
0320デフォルトの名無しさん
2007/08/31(金) 11:21:10yaneurao
0321デフォルトの名無しさん
2007/09/01(土) 13:24:30ずっとこんな感じで推移。
http://gamdev.org/up/img/10058.jpg
たまにぐっと負荷がかかるようだが、見た目はスムーズ
たぶん常駐が多いせいだと思う
環境は、
CPU: Pen4 2.6GHz
メモリ: 1.5GMB
GPU: Sapphire RADEON X700
今時だと、さすがにプア環境でアレだが
しかし、きれいやねー参考にさせていただこう
0322デフォルトの名無しさん
2007/09/01(土) 13:27:04OS: Windows XP SP2 32bit
GPU DRIVER: ATI ver 8.342.0.0
0323デフォルトの名無しさん
2007/09/05(水) 10:52:26すげー
0324デフォルトの名無しさん
2007/09/05(水) 11:09:260325デフォルトの名無しさん
2007/09/05(水) 13:29:05コンセプトだけ言って、具体的には何もできてないっての
0326デフォルトの名無しさん
2007/09/05(水) 16:55:37それは、もまえ、OpenGL自体を馬鹿にしているのかw
0327デフォルトの名無しさん
2007/09/06(木) 00:03:47楽したいんじゃ。ワシャ。
この前セレクション出来るようになったばっかなのに(^ω^;;)
0328デフォルトの名無しさん
2007/09/06(木) 02:36:51nVidiaのドライバの設定にあるtheaded optimizationがautoになってると遅くなったり速くなったりするようだ。
onにすると常に速く、offにすると遅くなるようだ。
このオプションはマルチコアCPUで複数スレッドを使って高速化するかどうかのオプションらしい。
fpsが60以上になるとだんだんとCPU側がボトルネックになってきてるんかな。
>>327
そういうのはwild magicとかなんとかライブラリを使えばいいんじゃない?
0329308
2007/09/06(木) 08:33:45うお、ありがとうございます。
ただ、うちだとoffにすると常に速くなるようになりました。
(FPS60超える/超えない関係なく)
なんかこれ不気味なオプションですね…。
0330デフォルトの名無しさん
2007/09/23(日) 10:52:180331デフォルトの名無しさん
2007/10/06(土) 23:02:51ウィンドウがリサイズされたときにSDL_setVideoMode()すると画像が無くなってしまうのですが、仕様ですか?
リサイズされたときビューポートをウィンドウと一致させたくて毎回SDL_setVideoMode()しているのですが、
glViewPort()を使ったほうがいいのでしょうか?
0332デフォルトの名無しさん
2007/10/06(土) 23:26:38おしえてください
0333デフォルトの名無しさん
2007/10/06(土) 23:40:53ウインドウのサイズが変わるたびにglViewportするべき
だと俺は考える
0334デフォルトの名無しさん
2007/10/07(日) 02:53:26そうするとディスプレイリストが無効になることがあります。
リサイズのときにディスプレイリストを消して作り直すことにして回避したけど、
これはそういうものですか? それともどっかおかしい?
0335デフォルトの名無しさん
2007/10/07(日) 03:19:00俺の経験上、ウインドウのリサイズでディスプレイリストを作り直すってことは無いな…
glRasterPosとか使ってるのかな??
>>331ならglTexParameterのGL_TEXTURE_MIN_FILTERなり、GL_TEXTURE_MAG_FILTER
なり
と思ったりするけど、どうなんかなぁ〜
0336デフォルトの名無しさん
2007/10/07(日) 05:05:44しかし、もしウィンドウのサイズが最大テクスチャサイズを超えてしまうとどうしようもありません。そういう場合どうすればいいのでしょうか?
0337デフォルトの名無しさん
2007/10/08(月) 22:48:26いくつかのテクスチャに分割するしか無いだろうな
0338デフォルトの名無しさん
2007/10/08(月) 23:09:11gluBuild2DMipmapsではどんなサイズでも指定できることに関して、わからない点があります。
ミップマップは使う必要がない場合、例えば100*200の画像をglTexImage2Dでテクスチャ化しようとしたとします。
ここから128*256というサイズのテクスチャを作るところまではいいのですが、
そうした場合、100*200に対してはみ出ている部分も含めて、128*256のテクスチャがopenGLに渡されますよね。
そうすると、glTexCoord2fに指定する値は、(0〜100/128) * (0〜200/256) としなければ、
こっちが広げてやった余白(?)も表示されてしまいます。
しかし、gluBuild2DMipmapsで100*200を指定してやった場合は
glTexCoord2fに指定する値は、(0〜1) * (0〜1) でうまくいきます。
これはどういうことですか?glTexImage2Dを使ってテクスチャを作った後、
任意のサイズの元画像にたいして、glTexCoord2fに指定する値を(0〜1) * (0〜1) で操作できるようにする方法を教えてください。
0339デフォルトの名無しさん
2007/10/08(月) 23:17:39http://www.opengl.org/sdk/docs/man/xhtml/gluBuild2DMipmaps.xml
>Initially, the width and height of data are checked to see if they are a power of 2.
>If not, a copy of data (not data), is scaled up or down to the nearest power of 2.
0340デフォルトの名無しさん
2007/10/09(火) 01:19:40非2^nのサイズ扱えるし、ミップマップも生成してくれる。(パラメータの設定次第
0341デフォルトの名無しさん
2007/10/09(火) 12:35:09Windows上のSDLだとsetVideoModeするとOpenGLのコンテキスト作り直される
設定やらディスプレイリストやらテクスチャは全部作り直す必要があるぞ
Windows以外ではどうなってるかわからん
0342デフォルトの名無しさん
2007/10/09(火) 15:28:10てことは内部で既に縦横比が変更されてるんですね。ありがとうございます。
>>340
>(パラメータの設定次第
調べてみます。
>>341
ありがとうございます。やはりそうなんですね。ウィンドウリサイズにはglViewportだけ動かすようにしました。
0343デフォルトの名無しさん
2007/10/11(木) 13:21:30ゲッ!
もしかして、OpenGLで、DirectDraw使って全画面表示やってた時に、
環境によって、うまく動かなかった(画面真っ黒)のは、もしや、これのせいだったのか?
Geforceでは、うまく動いてたからなぞだったんだが・・・
0344デフォルトの名無しさん
2007/10/15(月) 00:44:43いいサンプルとかない?
0345デフォルトの名無しさん
2007/10/16(火) 23:54:45キャプチャ以外で画像の情報(RGBなど)はとってこれるんでしょうか
0346デフォルトの名無しさん
2007/10/16(火) 23:59:450347デフォルトの名無しさん
2007/10/17(水) 02:42:05ありがとうございます。調べてみました。
いろんなサイトのサンプルを見てみたのですが
具体的にどのようにプログラムすればいいのかどうしてもわかりません・・
(出てきた画面をキャプチャしたいんですが、どうすればいいんでしょうか)
0348デフォルトの名無しさん
2007/10/17(水) 16:20:56少なくとも
unsigned char pBuffer = new unsigned char[WIDTH*HEIGHT*4]; // sizeof(RGBA)==4?
glReadPixels(0,0
WIDTH,HEIGHT
GL_RGBA,
GL_UNSIGNED_BYTE,
(GLvoid *)pBUffer);
この位は実験してみようや。
0349デフォルトの名無しさん
2007/10/18(木) 00:50:110350デフォルトの名無しさん
2007/10/18(木) 16:46:28ありがとうございます、解決できました
0351デフォルトの名無しさん
2007/10/20(土) 17:39:49各面に3次元テクスチャを並行投影したくて下記のようにしてるのですがどうも表示がおかしいのです。
確認したいのですが、これはちゃんと各頂点に、テクスチャ座標の0と1が対応されてマッピングされていますよね?
void vertex(float x, float y, float z)
{
glActiveTexture(GL_TEXTURE0);
glMultiTexCoord3fARB(GL_TEXTURE0_ARB, x, y, z);
glVertex3f(x,y,z);
}
void drawQuads(float x, float y, float z)
glBegin(GL_QUADS);
/* Back side */
glNormal3f(0.0, 0.0, -1.0);vertex(0.0, 0.0, 0.0);vertex(0.0, y, 0.0);vertex(x, y, 0.0);vertex(x, 0.0, 0.0);
/* Front side */
glNormal3f(0.0, 0.0, 1.0);vertex(0.0, 0.0, z);vertex(x, 0.0, z);vertex(x, y, z);vertex(0.0, y, z);
/* Top side */
glNormal3f(0.0, 1.0, 0.0);vertex(0.0, y, 0.0);vertex(0.0, y, z);vertex(x, y, z);vertex(x, y, 0.0);
/* Bottom side */
glNormal3f(0.0, -1.0, 0.0);vertex(0.0, 0.0, 0.0);vertex(x, 0.0, 0.0);vertex(x, 0.0, z);vertex(0.0, 0.0, z);
/* Left side */
glNormal3f(-1.0, 0.0, 0.0);vertex(0.0, 0.0, 0.0);vertex(0.0, 0.0, z);vertex(0.0, y, z);vertex(0.0, y, 0.0);
/* Right side */
glNormal3f(1.0, 0.0, 0.0);vertex(x, 0.0, 0.0);vertex(x, y, 0.0);vertex(x, y, z);vertex(x, 0.0, z);
glEnd();
}
drawQuads(1.0,1.0,1.0)
0352デフォルトの名無しさん
2007/10/20(土) 17:44:18ttp://home.student.uu.se/cebl4603/thesis_html_m74d5f1f4.jpg
image planeのところをどうやったらいいのか四苦八苦しています
0353デフォルトの名無しさん
2007/10/20(土) 17:52:30そのコードだと、サイコロの各表面に2次元テクスチャを貼り付けてるのと大差ない気がするが。
3次元テクスチャの各表面を貼り付けてるだけで、内部は描画されていないが、そのへんは理解してるか?
0354デフォルトの名無しさん
2007/10/20(土) 18:13:17サイコロの各面から、内部に向かってレイを放ってテクスチャのピクセル色を決定して(フラグメントシェーダ)
それを貼り付ける、といったことをしようとしてこうなっています。
ttp://www.uploda.org/uporg1073971.jpg
これは0〜64までの3次元テクスチャに
4〜60まで、テクスチャ在りにしたものを、45度程度傾けたものなのですが
テクスチャがある部分を内側になればなるほど、緑〜赤のグラデにしたものです。
6面全体に一部分だけが表示されてしまって、立方体の形状が出てこなくて…
0355デフォルトの名無しさん
2007/10/20(土) 22:57:00各頂点にテクスチャ座標の0と1は渡ってるよ。
ActiveTextureは余計な気がするけどまぁいいか。
0356デフォルトの名無しさん
2007/10/20(土) 23:05:47ありがとうございます。
とりあえず3次元テクスチャが格納されている側面が写し取られている、と確信がもてて安心しました。
ということはフラグメントプログラムの方なのかな…
fragmentの方でfor文を使うと
error C6001: Temporary register limit of 32 exceeded; 201 registers needed to compile program
こんなエラーが出てきて、本来走査するべきところまでいけなくて64回繰り返すところを
4回くらいしか深度を進めなくなっています
ただ、CgじゃなくてGL_TEXTURE_3Dでも同じような表示がされてわけがわからんくなってます。
Cgで同じようなエラーが出たことがある方がいたら…
0357デフォルトの名無しさん
2007/10/20(土) 23:30:55実際はループ回数やテクスチャフェッチ回数には上限があるんじゃないの?
最新のグラフィックスカードを使えば、実行結果が変わったりとかー。
0358デフォルトの名無しさん
2007/10/20(土) 23:33:57このエラーに関する記述がWEB上に4つほどしかなくて…
ttp://developer.nvidia.com/object/nvemulate.html
このエミュレーターでどうにかなるんじゃないか?と英語であったのですがそれを起動しても変わらず
nvidiaのカード買うしかないのか…お金ないや
0359デフォルトの名無しさん
2007/10/21(日) 01:58:33テクスチャの投影部分ではなく、シェーダーで反復回数が足りないせいだと判明しました。
原因はAtiだからだと思います。for文をまわすたびにレジスタが使用されているのか、、、
0360デフォルトの名無しさん
2007/10/27(土) 04:03:52何をしようとしているのかよくわかってないけど、GPUレイトレで3次元テクスチャをボリュームレンダリングするなら、
何故画面の各ピクセルからレイを飛ばさないの?
0361デフォルトの名無しさん
2007/10/27(土) 04:59:27動的なループ、分岐やら新しい技術が使用できないのがきつい、というか終わってるね
最近触ってないけどGLSLだとその辺どんな感じなの?
0362デフォルトの名無しさん
2007/10/27(土) 17:15:42画面からするとバウンディングボックスとの交差判定が必要で
ものすごい遅くなっていたのです。
実際にarbvp1 arbfp1が選択されていました。
ATIしかない環境でCgを選択したのがマズイのですね…
nVidiaを購入するのに…10万か…お金が。。。ない
0363デフォルトの名無しさん
2007/10/27(土) 17:47:04CgでもプロファイルのglslvとglslfでGLSLにコンパイルして使える
…が、使ったことはないしLatestProfileでも出てこないのであんまりお勧めはできないかも
つかGeForceで10万って何買うつもりだよwwww
0364デフォルトの名無しさん
2007/10/27(土) 17:50:30PCそのものを買わないといけなくて、結局10万くらい掛かるっていうことです。
glslv glslfについてちょっと調べてみます
0365デフォルトの名無しさん
2007/10/27(土) 18:18:35ATIのドライバではコンパイルできないソース吐くから使うのあきらめたな
あれからだいぶ時間たってるからその辺直ってるといいね
0366デフォルトの名無しさん
2007/10/27(土) 19:19:530367デフォルトの名無しさん
2007/10/28(日) 01:24:13openglのプログラムのビルドで、error C2381: exit' : 再定義〜とエラーが出てしまいます
何かstdlibとglutが関係ありそうなのですが、よくわかりません
解決策がありましたら教えてほしいのですが
0368デフォルトの名無しさん
2007/10/28(日) 06:32:34includeの順番入れ替えてみ
0369デフォルトの名無しさん
2007/10/28(日) 06:54:27http://man.sourcentral.org/debian-unstable/ja/
0370デフォルトの名無しさん
2007/10/28(日) 12:42:06#include<stdio.h>
#include<cstdlib>
#include<GL/glut.h>
にしたら、解決しました
理由はわかりませんが・・・ありがとうございました
0371デフォルトの名無しさん
2007/10/30(火) 16:12:14インベーダーとかハノイとかルービックとか。。。
誰かおせーて
0372デフォルトの名無しさん
2007/10/30(火) 16:53:140373デフォルトの名無しさん
2007/10/30(火) 17:28:53OpenGLはあくまで動かすための道具なんだから基本は自分でできなきゃ
というか、たぶん基礎を調べるための課題だろ
がんばれ
0374デフォルトの名無しさん
2007/10/30(火) 17:44:37なるべくハード依存したくないならGLSL?
0375デフォルトの名無しさん
2007/10/30(火) 18:22:17超初心者スレに同じ質問があるからそっちみれ
>>374
GLSLはWindowsではIntelGPUで使えない。Macなら使えるがLinuxとかは知らん
あとRadeonとかでもドライバが古いと酷いことになる
CgはGL_ARB_vertex_programとかGL_ARB_fragment_programのアセンブリシェーダにコンパイルできるので
SM2.0に対応してればIntelでもRadeonでもつかえる。もちろんGeForceなら最新機能も使える
ただし配布するには別途ランタイムも配布する必要があるし、プロファイルによっては機能制限もある
あと書き方の違いもあるんで好みでどうぞ。
俺はCgの方が好きだがGLSLのランタイム不要な点も捨てがたいな
0376デフォルトの名無しさん
2007/10/30(火) 19:17:12GLSLをプッシュしておきながら結局撤退した3DLabs死ねよ
0377デフォルトの名無しさん
2007/10/30(火) 19:17:53アンチエイリアシング、その他諸々が使えないから最初から無視してるな
0378デフォルトの名無しさん
2007/10/30(火) 19:22:22なるほどCgの方がハードには柔軟ですね
0379デフォルトの名無しさん
2007/10/30(火) 23:59:22何か関数は用意されてるんでしょうか?
0380デフォルトの名無しさん
2007/10/31(水) 01:28:040381デフォルトの名無しさん
2007/11/01(木) 01:17:23でも3Dデスクトップ効果の Compiz を起動させて実行すると,描画ができません.
窓枠がでなかったり色とかも変だし.
これって一緒には使えないものなんでしょうか?
使えるとすれば何かおまじないのようなものを書かないといけないとかあるんでしょうか?
教えてください.
0382デフォルトの名無しさん
2007/11/01(木) 02:00:050383デフォルトの名無しさん
2007/11/01(木) 02:12:53compiz起動しながらOpenGLのアプリ動かしても
俺の環境では問題ないなー
どのサンプル?
0384デフォルトの名無しさん
2007/11/01(木) 09:40:01犬糞板池
0385デフォルトの名無しさん
2007/11/01(木) 22:08:000386デフォルトの名無しさん
2007/11/02(金) 17:04:12解説もついているとありがたいです
0387デフォルトの名無しさん
2007/11/02(金) 18:46:270388デフォルトの名無しさん
2007/11/02(金) 20:30:160389デフォルトの名無しさん
2007/11/03(土) 11:33:46そういうシェーダーを書かないといけないような。
水彩シェーダーは、前に見かけた気がするが、
油絵ってみたことないな・・・
0390デフォルトの名無しさん
2007/11/03(土) 11:36:453DLabsをせめないで。
すべてにおいて糞なクリエイティブを呪ってください。
0391デフォルトの名無しさん
2007/11/03(土) 13:55:14そしてWildeCatは死んだ,あのボードも波乱だよなIntergraphが死んだりして
0392デフォルトの名無しさん
2007/11/04(日) 04:53:556000点ほどの頂点を取ってるのですが
起動して描画まではしてくれるのですが動作がとまってしまいます。
何か解決方法はないものでしょうか
0393デフォルトの名無しさん
2007/11/04(日) 11:04:59そういうのじゃないか
0394デフォルトの名無しさん
2007/11/05(月) 00:23:50>glDisplayFuncで指定した関数で
glDisplayFuncって何。glutDisplayFuncのこと?
>6000点ほどの頂点を取ってるのですが
頂点を取る、って何。意味不明。
>起動して描画まではしてくれるのですが動作がとまってしまいます。
動作が止まる、って何。意味不明瞭。
単に再描画がされないってだけなら、glutPostRedisplay()でも呼んでみれば。
>何か解決方法はないものでしょうか
ある。
「正しい用語を正しい用法で使うこと」 これを必ず守れば良い。
なんでこれが解決方法なのか?の説明は面倒なので省く。
しかし、これを常に守る事を心掛けていれば、技術的な問題のうち半分以上は
君自身で答えを見つけられるはずだ。これはマジな話。
0395デフォルトの名無しさん
2007/11/05(月) 00:48:53>>394の言うことは確か。
3D絵画とかじゃ当たらないし、状況を文字よりもキャプったりソース上げた方が確実。
0396デフォルトの名無しさん
2007/11/05(月) 04:25:07横で見てる分には楽しめるんだが。
0397デフォルトの名無しさん
2007/11/05(月) 21:14:480398デフォルトの名無しさん
2007/11/05(月) 21:42:430399初心者
2007/11/05(月) 23:33:29次のことについてどなたか教えていただけないでしょうか。
OpenGL+glutでシミュレーション結果を表示しようとしています。
VC++で作成し、コンパイルエラーはなかったのですが、実行してみると
何も起こらずに"終了にはキーを押してください"というような画面のみでした。
しかるべき場所にそれぞれのライブラリなど置いたつもりですが...
どのような原因が考えられるでしょうか。
0400デフォルトの名無しさん
2007/11/05(月) 23:41:430401初心者
2007/11/05(月) 23:49:250402デフォルトの名無しさん
2007/11/05(月) 23:52:460403デフォルトの名無しさん
2007/11/06(火) 00:07:180404デフォルトの名無しさん
2007/11/06(火) 00:34:13VisualStudioならデバッガが使いやすいし、最低限printfデバッグくらいはするべきだ。
0405デフォルトの名無しさん
2007/11/07(水) 01:29:21ふいたw
0406デフォルトの名無しさん
2007/11/12(月) 07:43:46その前に使ったglColorの値がtextureの色と混じってしまうんだけど
glColorの値の影響を受けないようにするにはどうしたらいいですか
0407デフォルトの名無しさん
2007/11/12(月) 08:42:150408デフォルトの名無しさん
2007/11/12(月) 09:58:58単にテクスチャ色とglColorの色が乗算(GL_MODULATE)されてるだけですねん。
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
を実行してやると、テクスチャの色だけが描画されるようになるよ。
0409デフォルトの名無しさん
2007/11/12(月) 18:01:14できました
0410デフォルトの名無しさん
2007/11/12(月) 19:31:27プログラム自体は動くのものの、実行時に
libGL warning: 3D driver claims to not support visual 0x4c
とでるのが気になります
どうすればいいんですかね?
0411デフォルトの名無しさん
2007/11/12(月) 20:22:06本気でやるならデバイスドライバをハックしてみよう。
もっともgpu側がサポートしてなかったらどうしようもないけどさ。
0412デフォルトの名無しさん
2007/11/13(火) 22:18:58ttp://www.technobahn.com/cgi-bin/news/read2?f=200711131807
0413デフォルトの名無しさん
2007/11/13(火) 22:52:540414デフォルトの名無しさん
2007/11/17(土) 01:05:22本買わないとだめ?
0415デフォルトの名無しさん
2007/11/17(土) 01:14:390416デフォルトの名無しさん
2007/11/17(土) 01:26:24講座サイト漁ろう。
0417デフォルトの名無しさん
2007/11/17(土) 12:20:43最新かどうかわからんけど
0418デフォルトの名無しさん
2007/11/18(日) 00:30:040419デフォルトの名無しさん
2007/11/20(火) 02:49:52ttp://www.opengl.org/documentation/red_book/ (v1.1)
ttp://www.opengl.org/documentation/blue_book/ (v1.0)
以前はここで pdf が落とせたような気がするが、今は html 化されてる模様。
0420デフォルトの名無しさん
2007/11/20(火) 03:52:330421デフォルトの名無しさん
2007/11/20(火) 21:50:04どうすれば解決できますか?
0422デフォルトの名無しさん
2007/11/20(火) 22:33:54オブジェクトが入るような視点にする
0423デフォルトの名無しさん
2007/11/20(火) 23:02:420424デフォルトの名無しさん
2007/11/22(木) 12:07:50視界に入ってる領域だけ読み込んで表示できるようにしたいです
どうすればいいですか><
0425デフォルトの名無しさん
2007/11/22(木) 12:27:020426デフォルトの名無しさん
2007/11/22(木) 13:02:580427デフォルトの名無しさん
2007/11/22(木) 13:13:22ポリゴン単位なら視錐台とポリゴンの交差判定
フラグメント単位ならオクルージョンクエリーでも使ったら?
0428デフォルトの名無しさん
2007/11/22(木) 13:41:33>>パラメータから視錐台を求めてそこに頂点が入ってるかどうか判別
>>ポリゴン単位なら視錐台とポリゴンの交差判定
これやるためには、バカでかいデータをメモリに載せないといけない気がするのですが載りません><
視錐台に入る座標をまとめてデータにして、それをファイルポインタで読み込むときに
1頂点読み込み→視錐台内の座標か判定→視錐台内ならメモリに格納
そんな流れになるのでしょうか><
オクルージョンクエリーという言葉初めて聴きました!見てみたら難しそうでした!
0429デフォルトの名無しさん
2007/11/22(木) 16:39:36やり方としてはそれでいいが、実際には1頂点ずつやってたら大変だわな
モデルデータを前もって適当に一度にメモリに載せられる範囲に区切っておいて
その範囲と視錐台が重なってるかどうか判定して重なってれば読み込む、
という感じである程度の頂点数を一気に処理した方が速いだろうな
0430デフォルトの名無しさん
2007/11/22(木) 16:44:460431デフォルトの名無しさん
2007/11/22(木) 21:08:48平面を表示させるプログラムを作っています
今はyz平面上に立方体を平べったく伸ばして平面をつくって
そのあと原点回りに回転移動させてから平行移動をさせる方法で平面を表現しようと考えて
↓のような感じで組んでいます
-----
dcos_x = A/sqrt(A*A+B*B+C*C);
dcos_y = B/sqrt(A*A+B*B+C*C);
dcos_z = C/sqrt(A*A+B*B+C*C);
glPushMatrix();
glColor4d(0.5, 0.5, 0.5, 0.8);
glTranslated(trans_x,trans_y,trans_z);
glRotated(dcos_x, 1.0, 0.0, 0.0); // x軸に対する回転移動
glRotated(dcos_y, 0.0, 1.0, 0.0); // y軸に対する回転移動
glRotated(dcos_z, 0.0, 0.0, 1.0); // z軸に対する回転移動
glScaled(1.0, height, depth);
glutSolidCube(1.0);
glPopMatrix();
-----
平行移動量trans_x,trans_y,trans_zはどう与えればよいのかがわからないので
trans_x,trans_y,trans_zは今のところ0.0で実質回転移動のみを行う形になっています
dcos_x,dcos_y,dcos_zの計算式はこれでいいのかどうか、
trans_x,trans_y,trans_zの与え方はどのようにすればいいのか
どなたか教えていただけませんでしょうか?
まあ・・・根本から間違っていたり、もっといい方法があるんでしょうけど・・・
0432デフォルトの名無しさん
2007/11/22(木) 21:30:14回転はよくわかんね
というか平面を描くなら立方体を変形させるより
平面上の4点とかを適当に求めてポリゴンで描いた方が楽だと思う
0433デフォルトの名無しさん
2007/11/22(木) 21:47:52平行移動はそれでいいね。
平面に平行な移動は無意味だから (trans_x, trans_y, trans_z) には2次元の自由度(任意性)がある。
回転については、三角関数を経由して回りくどいことしなくても、
元のyz平面の法線(=x軸)を (A, B, C) に移すような正規直交3x3行列を作ればいい。
つまり、(A, B, C) に直交する2つのベクトルを適当に選んでやればいいだけ。
こっちは法線まわりの回転について1次元の自由度ある。
0434デフォルトの名無しさん
2007/11/28(水) 00:22:431>fatal error C1900: 'P1' Version '20060201' と 'P2' Version '20050411' が一致しません。
1>LINK : fatal error LNK1257: コードの生成に失敗しました。
というエラーがでてきます。
思い当たる節としては
・「GLee」を入れてみた
これぐらいです。どなたか解決策をお願いします。
0435デフォルトの名無しさん
2007/11/28(水) 01:30:12「GLeeを入れる」とは具体的にどのファイルをどこに置いたのか
0436デフォルトの名無しさん
2007/11/28(水) 02:02:36学校と家のコンパイラのバージョンが違うんでないか
全プロジェクトをリビルドしてみ
0437デフォルトの名無しさん
2007/11/28(水) 07:36:28「GLeeを入れる」というのは
GLee.cをスタティックライブラリにして追加し
glBindBufferARBなどの関数を使っていることをいいたかったんです。
>>436
リビルドしてみましたが、同じエラーでとまってしまいました。
0438デフォルトの名無しさん
2007/11/28(水) 11:35:57ググったがVC++の環境がおかしくなってるみたいだな
解決策としてはVC++2005のSP1を入れてみる
ダメならVC++を再インスコ
それでもダメならOSから再インスコするくらいかな
0439デフォルトの名無しさん
2007/11/28(水) 21:23:26VC++2005のSP1を入れたらなおりました!!!!
課題の締め切りが明日までだったので、本当にうれしいです!!!
今日はこのうれしさをばねに、徹夜でやろうとおもいます。
0440デフォルトの名無しさん
2007/11/29(木) 00:44:320441デフォルトの名無しさん
2007/11/29(木) 01:54:54http://www.google.co.jp/search?hl=ja&q=%22%E5%AC%89%E3%81%97%E3%81%95%E3%82%92%E3%83%90%E3%83%8D%E3%81%AB%22&btnG=%E6%A4%9C%E7%B4%A2&lr=
結構出てきて吹いたw
さすがゆとり。
言葉の意味なんて考えたことないんだろうな。
0442デフォルトの名無しさん
2007/11/29(木) 02:13:48嬉しさを追い風にして?
0443デフォルトの名無しさん
2007/11/29(木) 02:25:040444デフォルトの名無しさん
2007/11/29(木) 07:39:580445デフォルトの名無しさん
2007/11/29(木) 08:44:14〜をバネには単なる反発、糧には消化して教訓とするって感じじゃないか。
0446デフォルトの名無しさん
2007/11/29(木) 12:31:400447デフォルトの名無しさん
2007/11/29(木) 14:08:410448デフォルトの名無しさん
2007/11/29(木) 20:52:430449デフォルトの名無しさん
2007/11/29(木) 21:00:130450デフォルトの名無しさん
2007/11/30(金) 04:09:52さすがにその誤用をつっこむやつは最近なかなかいないが。
0451デフォルトの名無しさん
2007/11/30(金) 10:05:470452デフォルトの名無しさん
2007/11/30(金) 22:52:520453デフォルトの名無しさん
2007/11/30(金) 23:18:12モデルビューの行列から視点、注視点、アップベクトルを求めたいんだけどいい方法無い?
gluLookAtの逆バージョンみたいなの
もう1つ質問で
頂点にウェイトをつけたいんだけど、OpenGLだとどうやってやるんだ?
0454デフォルトの名無しさん
2007/12/01(土) 00:26:46モデルビュー行列の左上3×3の各行が
それぞれ右方向ベクトル、上方向ベクトル、逆視線ベクトル。
モデルビュー行列の逆行列の4列目が視点。
のような気がする。
0455デフォルトの名無しさん
2007/12/01(土) 01:52:18>頂点にウェイトをつけたいんだけど、OpenGLだとどうやってやるんだ?
いまどきならシェーダを書く
0456デフォルトの名無しさん
2007/12/01(土) 10:37:09どうせ逆行列求めるなら、1〜4列目がそれぞれ
右、上、逆視線、視点
でいいと思ったw
あと頂点ウェイトは
glVertexWeightfEXT
かな。
0457デフォルトの名無しさん
2007/12/01(土) 11:58:24EXT_vertex_weighting拡張はNVIDIAにしかない
頂点ブレンドは汎用的な方法があんまりないから
シェーダでやるのが一番無難だろうな
0458デフォルトの名無しさん
2007/12/01(土) 13:32:05NVIDIAもARB_vertex_blend対応してるぞ。
0459デフォルトの名無しさん
2007/12/01(土) 14:20:37まじか
うちのGeForce8600GTでは無いみたいなんだけど…
もしかしてExtensionStringに出てこないけど使えんの?
0460デフォルトの名無しさん
2007/12/01(土) 17:03:05ソースはOpenGL Extensions ViewerのDatabase。
ちなみに8600は項目がなくてわからん。
8600Mならあるんだがなぁ
0461デフォルトの名無しさん
2007/12/01(土) 17:12:26OSのフィルタでWindowsに絞ったらNVIDIA全滅した。
MAC使えって話っぽい。
0462453
2007/12/01(土) 21:56:23サンクス
う〜ん、モデルビュー行列から完全に元には戻せないのかな
注視点を求めたいんだけど、さっぱりわからない
ウェイトの件はシェーダを使うのが無難みたいですね
0463デフォルトの名無しさん
2007/12/01(土) 22:07:25見てる方向は求まるけど、その方向ですぐ目の前から無限遠までのどの点を見てるのかは失われる
奥行きをz=1とか適当に決めちゃって、そこを注視点ということにするくらいか
0464453
2007/12/02(日) 01:39:56残念だけど諦めよう
0465デフォルトの名無しさん
2007/12/02(日) 13:03:51それの1Dテクスチャ・3Dテクスチャのものってありますか?
0466デフォルトの名無しさん
2007/12/02(日) 18:16:40それなら2D版しかない
GL_ARB_non_power_of_two拡張があれば
特に何も考えずに1Dでも2Dでも3Dでも2の乗数じゃないサイズが使えるよ
0467デフォルトの名無しさん
2007/12/02(日) 18:51:47ググります!
0468デフォルトの名無しさん
2007/12/02(日) 22:55:54標準にはなってるけど当然古いカードだと使えないし。なんだかなーという感じだ。
0469デフォルトの名無しさん
2007/12/02(日) 23:07:26あとRadeonのドライバはOpenGLのバージョン2以降返しときながらGL_ARB_non_power_of_two対応してないこともあったり。
0470デフォルトの名無しさん
2007/12/03(月) 01:19:378600GT。
つーかシェーダ組んだときのRadeonのクソっぷりにビックリした
俺、今度からNvidia住人になるよ
0471デフォルトの名無しさん
2007/12/07(金) 16:30:01ポリゴンを1枚作って表示させたとき
OPENGLではメモリの量違いますか?
0472デフォルトの名無しさん
2007/12/07(金) 18:28:270473デフォルトの名無しさん
2007/12/07(金) 20:46:420474デフォルトの名無しさん
2007/12/07(金) 21:57:580475デフォルトの名無しさん
2007/12/07(金) 22:28:030476デフォルトの名無しさん
2007/12/12(水) 10:39:47cpadでopenGLを起動できないのですが、どうしたらいいですか?
実行ファイルが作れません。というエラーがでます。
0477デフォルトの名無しさん
2007/12/12(水) 11:29:59次にCPadでOpenGLを使わないプログラムが実行できるか確認するんだ
それができたら「実行ファイルが作れません」の前にもエラーが出てるはずなのでそれを確認しよう
前に出てるエラーの原因が分からない、となってから質問しても遅くないと思うぞ
0478デフォルトの名無しさん
2007/12/12(水) 15:03:050479デフォルトの名無しさん
2007/12/12(水) 15:25:36そういえばPS3でGLやCgが採用されるってのは結局どうなったんだろ
0480デフォルトの名無しさん
2007/12/12(水) 20:00:50でもOpenGLはパフォーマンスが出ないからGPUのコマンド直に叩くのがほとんどと聞いた
最近はほとんどシェーダだしDirect3D10もGPU仮想化されてOpenGLとたいして違いがないし
どっちでもいいわな
0481デフォルトの名無しさん
2007/12/12(水) 20:17:02うん。組み込みとかそれしか選択肢がないの多いし…
0482デフォルトの名無しさん
2007/12/12(水) 20:52:14PS3 Wii XBOX
Microsoftゲイツ様仕様のDirectXをPS3やWiiが使えると思ってるのかな。
選択肢としてOpenGL+GPU言語(Cg・GLSL)くらいしか無いでしょうに。
0483デフォルトの名無しさん
2007/12/12(水) 21:27:020484デフォルトの名無しさん
2007/12/12(水) 21:54:010485デフォルトの名無しさん
2007/12/12(水) 23:46:450486デフォルトの名無しさん
2007/12/13(木) 01:15:25ttp://www.arch.oita-u.ac.jp/povjp/povjp/ref7.8/prz8209.jpg
二つの物体あわせてこういうのが作れるってことですか!
作れたら、作り方教えて下しア!!!
0487デフォルトの名無しさん
2007/12/13(木) 02:26:22>二つの物体あわせてこういうのが作れるってことですか!
違う・・・
ググれ!
0488デフォルトの名無しさん
2007/12/13(木) 11:17:110489デフォルトの名無しさん
2007/12/13(木) 18:47:380490デフォルトの名無しさん
2007/12/13(木) 18:51:28OpenGLを実行したらこんな警告がでてくるんですが
どう解決すればよいのでしょうか?
*********************************WARN_ONCE*********************************
File r300_render.c function r300Fallback line 428
Software fallback:ctx->Line.SmoothFlag
***************************************************************************
0491デフォルトの名無しさん
2007/12/13(木) 20:42:26HWで対応してないからソフトウェアで処理すんぞってことでしょ
ビデオカードを換えるかglDisable(GL_LINE_SMOOTH)してみたらどうか
0492デフォルトの名無しさん
2007/12/14(金) 00:15:040493デフォルトの名無しさん
2007/12/14(金) 00:59:110494デフォルトの名無しさん
2007/12/14(金) 11:58:50プラットフォーム非依存なんだから、とうぜん標準で glDrawText 関数なんてものは
ないんだと思うんだけど、テキスト描画したい人はやっぱりゴリゴリコード書いて、
フォントイメージ持って来てそれを自力で転送してるの?
0495デフォルトの名無しさん
2007/12/14(金) 12:41:54環境依存(任意のフォントでディスプレイリストを作成)
glXUseXFont
wglUseFontBitmaps
wglUseFontOutlines
環境非依存(フォントの種類が少なく、ディスプレイリストを作らないので遅い)
glutBitmapCharacter
glutStrokeCharacter
0496デフォルトの名無しさん
2007/12/14(金) 14:02:410497デフォルトの名無しさん
2007/12/14(金) 18:00:32mesa-r300は色々と未実装なフォールバックになるやつが結構ある。
それもfglrxならフォールバックなしに使えたりする。
内部的にはlinesmoothはvs使って実相しているらしいが、
仕様公開後もっと開発が進むんじゃないかな。
0499498
2007/12/14(金) 18:15:430500デフォルトの名無しさん
2007/12/15(土) 07:48:28忙しくてそれ以上続けられなかった俺様が
来年こそはと>>500をゲット
0501デフォルトの名無しさん
2007/12/15(土) 08:18:14大丈夫だ。若いんだから年末年始だけでOK
知的欲望全開で突っ走れ
0502デフォルトの名無しさん
2007/12/15(土) 13:13:22で、OPENGL動かそうとしたら、止まった
なぜ…研究が進められない
0503デフォルトの名無しさん
2007/12/15(土) 13:22:36随分古いマシンだな
とりあえずグラフィックスドライバ更新
でもOpenGLなんて所詮は最後に表示を担当するだけなんだから
研究は進められるんじゃ?
0504デフォルトの名無しさん
2007/12/15(土) 13:25:01OpenGL 3 will not have support for the GL_DOUBLE token. This means it will not be possible to send double precision vertex data to OpenGL.
OpenGL3.0からGL_DOUBLEのサポートがなくなることは既出?
0505デフォルトの名無しさん
2007/12/15(土) 13:27:530506デフォルトの名無しさん
2007/12/15(土) 13:35:580507デフォルトの名無しさん
2007/12/15(土) 13:36:48画面サイズを小さくしたら出来ました。
研究室がいきなり工事やら停電やらで土日作業できず
自宅のはもらいもののノート。一応作業できますわ
0508デフォルトの名無しさん
2007/12/21(金) 09:10:44ARB_fragment program_shadowのサポートが無くなってやがった
AMD氏ね
0509デフォルトの名無しさん
2007/12/21(金) 12:38:19GL_FLOATが、16bitだよな?
32bitはなんだっけ?
0510デフォルトの名無しさん
2007/12/21(金) 22:45:13アプリを再起動したらそれ以降全くテクスチャが張れなくなるのって何が原因
なんでしょうか?
昨日作ったソフトが今日になって全くテクスチャが張れなくなってしまって
困っています。バイナリ、テクスチャの元画像共に昨日テクスチャが張れた
時から全くいじっていません。また、ドライバの更新等もしていません。
思い当たるとしたらノートンの更新ぐらいですが…
0511デフォルトの名無しさん
2007/12/22(土) 01:03:45合成するにはどうしたらいいでしょうか?
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
は実行しているのですが、なぜか合成してくれません。
┌―――┐
| |
| |
| ┌―┼―┐
└―┼―┘ |
| |
| |
└―――┘
こんな具合です。
0512デフォルトの名無しさん
2007/12/22(土) 02:46:14にしてるかい??
0513デフォルトの名無しさん
2007/12/22(土) 03:34:45大丈夫です。ただ、Z軸が重なるとなぜか合成されずに上書きになってしまう orz
0514デフォルトの名無しさん
2007/12/22(土) 03:53:30glDepthMask(GL_FALSE);
glDepthFunc(GL_LEQUAL);
描画
glDepthFunc(GL_LESS);
0515デフォルトの名無しさん
2007/12/22(土) 20:22:14遅くなりましたが、上手くいきました!
ありがとうごさいます。
0516デフォルトの名無しさん
2007/12/22(土) 22:49:52GL_FLOAT は float だから32ビット。
16ビットは GL_NV_half_float の GL_HALF_FLOAT_NV とか VGL_ARB_half_float_pixel の GL_HALF_FLOAT_ARB とか。
0517デフォルトの名無しさん
2007/12/22(土) 22:50:46○GL_ARB_half_float_pixel
0518デフォルトの名無しさん
2007/12/22(土) 22:59:39float、32bitか。何年プログラマやっとんだ、アホか俺はw
0519デフォルトの名無しさん
2007/12/24(月) 20:39:34{
gluLookAt(3.0,2.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
glRotated(x,0.0,0.0,1.0);
glColor3d(0.0,1.0,0.0);
glutWireTeapot(0.5);
glFlush();
}
void myKbd(unsigned char key, int x, int y)
{
if(key == KEY_ESC)
exit(0);
else if(key == 'g'){
x += 1;
glutPostRedisplay();
}
}
void init(void)
{
int width = 500, height = 500;
double aspect = (double)width/(double)height;
glClearColor(0.0,0.0,0.0,1.0);
glutCreateWindow("Sample");
glutDisplayFunc(display);
glutKeyboardFunc(myKbd);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30.0,aspect,1.0,100.0);
}
0520デフォルトの名無しさん
2007/12/24(月) 20:40:54キーボードを押したらティーポットが回転するプログラムを書いたんですが、
ティーポットが回転してくれません。それどころかポットがどっかに移動して
しまいます。どうしたら良いですか? 教えてください。
0521デフォルトの名無しさん
2007/12/24(月) 23:49:54どう見てもコンパイルすら通りそうにないコードなんだが
C言語の基礎(変数のスコープとか)を勉強し直すことだな
0522デフォルトの名無しさん
2007/12/25(火) 01:06:44glRotated(x,0.0,0.0,1.0);
これでxを+1しても回転にならないぞw
0523デフォルトの名無しさん
2007/12/25(火) 01:14:56どうもこうもOpenGL/gl.hが無いと言われます。
ググってみると、
XPはデフォルトであるから心配ないとしか書かれていないのです(泣)
GLUTはインストール済みです。
もしよろしければ、対応策を教えていただけないでしょうか。
0524デフォルトの名無しさん
2007/12/25(火) 01:30:20もし
#include <OpenGL/gl.h>
ってやってるなら、その行は削除。いらない。
0525522
2007/12/25(火) 01:55:07勘違いしたw 酔ってるので許せ。
>>520
描画のたびに
gluLookAt(3.0,2.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0);
で行列を掛けてるから、どっかへ飛ぶ。
0526デフォルトの名無しさん
2007/12/25(火) 04:32:13で、
x += 1;
は、何も影響を及ぼさない気がする・・・
0527デフォルトの名無しさん
2007/12/26(水) 19:22:57物体(glutSolidSphereなど)を3次元空間で動かして
動かした三次元座標空間だけマスクして
動かせば動かすほど、画像が変わっていく(3次元空間がマスクされて、隠れている画像が出てくる)
ということをしたいのですが。
どうやればいいかヒントをください
0528デフォルトの名無しさん
2007/12/26(水) 20:23:44日本語でおk
0529デフォルトの名無しさん
2007/12/26(水) 21:47:49要は3次元空間にマスクをマウスで書き込んでいく、ということをしたいのです。
フォトショップとかの2次元空間でのクイックマスク処理を
3次元でやるイメージです
0530デフォルトの名無しさん
2007/12/26(水) 22:09:50もしSculptみたいなことをやりたいならボクセルでも使うのが早いかなぁ
0531デフォルトの名無しさん
2007/12/26(水) 22:30:36まさしくそんな感じです。
固体を削り取っていって、削られた部分だけ別の物体の色になっていくという感じです。
それか、マウスの範囲内の物体の色(不透明度)を強制的に0にしていければ…同じように出来ると考えてるのですが
マウスでglutSolidSphereの範囲内のカラーを変えていく、ということ出来ますか?
0532デフォルトの名無しさん
2007/12/26(水) 22:41:450533デフォルトの名無しさん
2007/12/26(水) 22:49:32そっちにシフトします><
0534デフォルトの名無しさん
2007/12/26(水) 23:45:14参考になるサンプルとか考え方あったら、レスお願いします。
0535デフォルトの名無しさん
2007/12/27(木) 01:04:05そもそも、サーフェスモデルが基本なので、
「削り取る」というのをどのように表現するか・・・だな
0536デフォルトの名無しさん
2007/12/27(木) 01:18:27>マウスでglutSolidSphereの範囲内のカラーを変えていく
こっちのほうを実装するほうが、やりたいことが出来そうな気がしてきました
まだ研究室で、2時くらいに帰るのですが
かなりてんぱってきました
0537デフォルトの名無しさん
2007/12/28(金) 23:04:41アキュムレーションバッファで変更したい部分を上書きしてく、ということはできるでしょうか?
もし出来るなら、エリア内の画素のαを0にして上書き・エリアを動かして0にして上書き…で削り取れるかもと思ったのですが
0538デフォルトの名無しさん
2007/12/28(金) 23:33:04エリア内の指定
全体が変化する
でアウトでした。
もう夜も眠れません
0539デフォルトの名無しさん
2007/12/29(土) 01:58:55それならStencilBufferでいいと思うけど
初心者スレにそんな話題が出てたぞ
0540デフォルトの名無しさん
2007/12/31(月) 17:54:28�@FBOテクスチャに適当に描画。
�A上のレンダリングテクスチャに、上のレンダリングテクスチャを別のオブジェクトに貼って描画。
としう事をしたいのですが、�Aを行う際、�@で作ったテクスチャを別のテクスチャにコピーする必要があると思います。
その、テクスチャを別のテクスチャにコピーをしたいのですがどのようにすればいいのでしょうか?
できれば、高速な方法が良いです。宜しくお願いします。
0541デフォルトの名無しさん
2007/12/31(月) 17:55:050542デフォルトの名無しさん
2008/01/06(日) 19:39:29さっと立ち読みしただけだがタイトル通り要点を押さえた本だった
神髄とか言うと上級向けっぽいがそうでもなく
いきなり赤本を読む前に読んでおきたい本だな
0543デフォルトの名無しさん
2008/01/06(日) 21:41:32DirectXとか汎用言語書は自称初心者向け(笑)が増殖してるが、
買うヤツがほとんどいないOpenGL本をあえて出すということはそれなりのクオリティであると期待してみる
0544デフォルトの名無しさん
2008/01/06(日) 21:56:29だが需要はあると思うぞ。俺も買った。
0545デフォルトの名無しさん
2008/01/07(月) 07:55:58各章サンプルはあるんだけどあるだけって感じなんで、初心者で
手を動かしながら理解したいって人は合わせて別のチュートリアル読んだ方がいいかも。
0546デフォルトの名無しさん
2008/01/15(火) 17:31:13どこかからサンプルコードはダウンロードできないでしょうか?
0547デフォルトの名無しさん
2008/01/15(火) 17:37:40できるけど、OpenGLのサンプルコードがあるかどうかは知らない
0548デフォルトの名無しさん
2008/01/15(火) 18:09:290549デフォルトの名無しさん
2008/01/15(火) 19:41:580550デフォルトの名無しさん
2008/01/15(火) 20:27:55CGプログラムやれや、お前ら
http://pc11.2ch.net/test/read.cgi/cg/1025138347/
昔はあったんだけどね
落ちちゃったのかな
0551デフォルトの名無しさん
2008/01/15(火) 21:48:26ついでに過疎ってるが
http://pc11.2ch.net/test/read.cgi/gamedev/1005185166/l50
このスレもOpenGL3が出ないから話題が無いしCgとGLSLならここでもいいんじゃね?
今時DirectXでわざわざCgを使ってる奴がいるとも思えんし
あとは3Dグラフィックスプログラミングスレとかかな
0552デフォルトの名無しさん
2008/01/16(水) 04:27:470553デフォルトの名無しさん
2008/01/16(水) 10:06:52趣味でやってるなら聞くだけ聞いてやる
0554デフォルトの名無しさん
2008/01/16(水) 12:50:17いっぱい有りますやん。
gpuでこの板検索してみそ。
0555デフォルトの名無しさん
2008/01/16(水) 14:25:25GPGPUのスレしか見つからないが
グラフィックでのシェーダと使い方大分違くないか?
0556デフォルトの名無しさん
2008/01/16(水) 23:53:320557デフォルトの名無しさん
2008/01/17(木) 01:28:030558デフォルトの名無しさん
2008/01/17(木) 21:30:293次元座標空間内の点が消える、という処理をしたいのですが
赤い○←クリック α値が0になって
αテストで画面内から消滅。という流れでやろうと思っています。
ただ、どうにもクリックしたオブジェクトの選択方法・クリックによる色・αの変換方法がわからず
どうにもわかりません。
参考サイトとかあったら教えてくださいませんか
0559デフォルトの名無しさん
2008/01/17(木) 21:53:02αで消すよりポリゴンそのものの描画をカットしたほうが楽じゃないか?
ポリゴン選択なら
glRenderMode(GL_SELECT);
gluPickMatrix
あたりで検索するといいよ。
0560デフォルトの名無しさん
2008/01/17(木) 23:01:02ありがとうございます。
そこらでググって見ましたがいまいち、クリックしたオブジェクトを、消すというのが
どの時点で選択されているのかわからなく
ttp://wiki.livedoor.jp/mikk_ni3_92/d/%a5%b5%a5%f3%a5%d7%a5%eb%a5%b3%a1%bc%a5%c9%3a%3aOpenGL
ttp://son-son.sakura.ne.jp/programming/opengl_6.html
こちらを参考にしました。
消すのに、描画をカットする方法やαを0にするのがどこをいじくってよいのやら
無数に飛んでくる玉をクリック・クリックで消すというゲームを想定してます。
0561デフォルトの名無しさん
2008/01/18(金) 01:42:23処理すればいいんじゃない? 結構処理時間食うぞ、ピッキング。
他に意図があるなら別だけど。
0562デフォルトの名無しさん
2008/01/18(金) 03:20:46手前のオブジェクトから順に判定して行く感じかな
もはやOpenGL関係ないけど
0563デフォルトの名無しさん
2008/01/18(金) 06:12:050564デフォルトの名無しさん
2008/01/18(金) 14:54:14>もはやOpenGL関係ないけど
それが普通だよ。OpenGLの仕事は基本的に描画のみ。衝突判定やピッキングは別でやるのが当たり前。
セレクションモードとかは「場合によっては使えなくもない」ってだけの仕組み。
初心者は、無理してOpenGL使うより、適当なシーングラフライブラリを使ったほうがいいと思うんだよなー。
でも敷居の低いシーングラフってなかなか無いんだよなー。
0565デフォルトの名無しさん
2008/01/18(金) 16:23:17と、JOGLをRhinoから遊んでる俺が言ってみる。
0566デフォルトの名無しさん
2008/01/18(金) 17:37:50メソッドのglとか定数のGL_とか、クラス名があるんだから不要じゃん?
入力面倒だよ……。
0567デフォルトの名無しさん
2008/01/18(金) 17:42:16メソッドのはメンドイね
0568デフォルトの名無しさん
2008/01/19(土) 02:43:39戦場の絆みたいなゲームって、
blenderみたいなソフトでモデル(ガンダム)を作って、
その情報を取り込んでOpenGLでプログラミングして動かしているのでしょうか?
0569デフォルトの名無しさん
2008/01/19(土) 02:54:16絆のハード構成は最近のPCと同じ(チップセットがAMDでVGAがGF7800)でOpenGL使ってるからCg使ってるかもしれないけど。
0570デフォルトの名無しさん
2008/01/19(土) 03:05:48むむ、言ってることが難しくて分からないです。
自分が何でこんなこと思ったのかと言うと、
たとえばもうちょっと簡単な例で、同人ゲームとかで3Dな奴ありますよね。
でも、自分にはOpenGLであんな複雑な人の形を作るなんて、とっても大変だと思うんです。
それで、たとえば何かのCGソフト(blenderとか六角大王とか)で人間の形を作って、
その人間の形を出力して、OpenGLで取り込んでプログラミングして動かすのかなと思ったんです。
実際のところどうやって3Dゲームは人の形を動かしてるんでしょうか?
0571デフォルトの名無しさん
2008/01/19(土) 08:35:42基本はあってる。
3DCGソフト(ゲームなら、3DSMax、Maya、XSIあたり)でモデリングして、アニメーション付けて、
それを独自形式で適当に吐いて、
プログラムでデータとして読み込む。
後は、それをOpenGLなり、DirectXなりで画面に出力する。
0572デフォルトの名無しさん
2008/01/19(土) 09:05:08なるほど!
とてもよく分かる説明、ありがとうございます。
ちなみに、モデリングしてアニメーションつける人と
OpenGLなりDirectXで動かす人は普通別なんですよね?
0573デフォルトの名無しさん
2008/01/19(土) 12:08:24別である必要はないけど
技術的につらいし作業量的にも無理あるよな
0574デフォルトの名無しさん
2008/01/19(土) 12:33:58前者はデザイナー、後者はプログラマーの仕事だよな
0575デフォルトの名無しさん
2008/01/19(土) 12:52:20規模のでかいゲーム屋ならWebの募集要項の種類眺めるだけでも雰囲気つかめるんじゃないの>>572
0576デフォルトの名無しさん
2008/01/19(土) 16:55:18ただゲームに適したポリーを吐くのは難しいときもある。
0577デフォルトの名無しさん
2008/01/19(土) 21:25:19赤本より簡単なやつで。
0578デフォルトの名無しさん
2008/01/19(土) 21:30:35続きという事なら、これはどうかな。俺もまだ読んでないけど。
GLUTによるOpenGL入門2 テクスチャマッピング
http://www.kohgakusha.co.jp/books/detail/978-4-7775-1332-1
0579デフォルトの名無しさん
2008/01/19(土) 21:30:54太陽系の模型とか、三次元テトリスとか
0580デフォルトの名無しさん
2008/01/19(土) 23:55:330581デフォルトの名無しさん
2008/01/20(日) 17:37:44各関節を座標で与えて表示することは可能でしょうか?
現在は例として肩から肘まではxyz座標でそれぞれの軸に何度回転しているかで
描画しているのですが…
よろしくお願いします
0582デフォルトの名無しさん
2008/01/20(日) 17:49:170583デフォルトの名無しさん
2008/01/22(火) 00:17:40今、複数のポリゴンに動画を貼り付けるようなことをやっているのですが、
どうしても8fps位しか出ず、複数のポリゴンと複数の動画を描画すると、0.5fps位になって
しまいます。なにか高速化のヒントだけでもいただけるとうれしいのですが…
テスト時の動画は400*400、処理は大体以下のような感じです。
1、カメラの設定
2、変換座標の設定
3、テクスチャの生成(1つの名前をglTexSubImage2Dで使い回し)
4、ポリゴン描画
1に戻る
0584デフォルトの名無しさん
2008/01/22(火) 00:25:19エスパーは出張中だ。
0585デフォルトの名無しさん
2008/01/22(火) 08:06:43動画のデコードが遅いだけじゃないだろうな
動画でなく同じサイズの静止画を毎フレームglTexSubImageで設定してみて
遅いかどうかを確認してみなよ
0586デフォルトの名無しさん
2008/01/22(火) 17:01:41試したところ、無変形では静止画の方が速くなりました。
ところが、回転や移動をすると、なぜか静止画の方はフレームレートが
半分ぐらいにまで落ちたのに対し、動画の方は変わりませんでした。
これはデコード以外の別なところにもネックがあると考えた方がいいんでしょうか?
0587デフォルトの名無しさん
2008/01/22(火) 18:05:51>>半分ぐらいにまで落ちた
これはおかしいな。考えにくい。
プログラムうp。
0588デフォルトの名無しさん
2008/01/22(火) 18:31:42ちょっといろいろ処理がからみついていて長くなっているのでうpは出来ませんが、モデルビューや
プロジェクションの設定は動画と静止画の時は全く同じ処理で動いてます。
違うとしたら、動画から静止画を切り出すか、静止画をコピーするかの違いしかないのですが、
それは無変形の時に速度差が出てるので原因になってるわけ無いですし…
動画と静止画のサイズは一緒で、800*800ですが、サイズによっては高速に
動くようです。400*400では問題ありませんでした。
0589デフォルトの名無しさん
2008/01/22(火) 18:36:51と、今もう一度試したところ、どうやらゴミがついていたようで、それを取ったら
ちゃんと問題なく速度を維持してました。
お騒がせしてすいません orz
0590デフォルトの名無しさん
2008/01/22(火) 18:36:550591デフォルトの名無しさん
2008/01/22(火) 18:37:30>>587
安価… orz
0592デフォルトの名無しさん
2008/01/22(火) 22:29:400593デフォルトの名無しさん
2008/01/23(水) 08:22:39PBO2つ作って現在デコードしてるフレームの書き込み用と
テクスチャ設定用でダブルバッファリングするのが速い気がする
0594デフォルトの名無しさん
2008/01/23(水) 22:13:25かめれす... 「OpenGLの神髄」買いました.
分かり易くってよいです.コメント参考になりました.ありがとです.
0595デフォルトの名無しさん
2008/01/24(木) 15:46:410596デフォルトの名無しさん
2008/01/24(木) 16:51:32基本的にインターフェース仕様が変わらないGLは相性いいね
GLそのものが衰退しないという前提はあるけど
0597デフォルトの名無しさん
2008/01/24(木) 18:18:400598デフォルトの名無しさん
2008/01/24(木) 21:51:260599デフォルトの名無しさん
2008/01/24(木) 22:04:540600デフォルトの名無しさん
2008/01/25(金) 02:08:553.0は従来とは別のコンテキストを作るようになる
両方使ってもコンテキストが別なんで全く別に処理されるって寸法らしい
あと3.0の描画を2.1以前のテクスチャとして使える拡張も用意される…かもしれない
0601デフォルトの名無しさん
2008/01/26(土) 16:46:14void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}
void init(void)
{
glClearColor(0.0, 0.0, 1.0, 1.0);
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA);
glutCreateWindow(argv[0]);
glutDisplayFunc(display);
init();
なのですが、
init関数で塗りつぶす色を指定しているのに、
その前のglutDisplayFunc(display)で描画をしています。
何故init関数で色を指定する前にglutDisplayFunc(display)を実行しても
ウィンドウが塗りつぶされるのでしょうか?
逆なのではないのでしょうか?
0602デフォルトの名無しさん
2008/01/26(土) 17:21:350603デフォルトの名無しさん
2008/01/26(土) 17:22:130604デフォルトの名無しさん
2008/01/26(土) 17:23:53実際に登録した関数が実行されるのは、例えば
glutDisplayFunc なら画面の再描画時、
glutMouseFunc ならマウスがクリックされたとき等など。
どの命令でどのタイミングのコールバック関数を登録するかはマニュアルを参照すること。
0605デフォルトの名無しさん
2008/01/26(土) 17:23:55登録する関数?
じゃあ、glutMainLoopが描画してるんですか?
0606デフォルトの名無しさん
2008/01/26(土) 17:26:39そのなかでイベントに応じてコールバック関数を呼び出してる。
0607デフォルトの名無しさん
2008/01/26(土) 19:00:56いまどき、コールバック関数ないのはHSPくらいだぞ。
0608デフォルトの名無しさん
2008/01/26(土) 21:39:54大量にある
0609デフォルトの名無しさん
2008/01/27(日) 02:39:21>glOrtho() で指定するの領域の大きさをビューポートの大きさに比例するように設定します.
>例えばワールド座標系の座標軸が上記と同様に l, r, t, b, n, f で与えられており,
>もともとのウィンドウの大きさが W×H, リサイズ後のウィンドウの大きさが w×h なら,
>glOrtho(l * w / W, r * w / W, b * h / H, t * h / H, n, f) とします.
>上のプログラムでは, ワールド座標系の2点 (-1, -1), (1, 1) を対角線とする矩形領域を
>200×200 の大きさのウィンドウに表示した時の表示内容の大きさが常に保たれるよう設定しています.
ここの意味が良くわかりません。
例えばW×H 200×200 (-1,-1) (1,1)をw×h 400×400にすると(-2,-2) (2,2)となって、
ウィンドウのリサイズに比例して表示画像も大きくなるような気がするのですが...
0610デフォルトの名無しさん
2008/01/27(日) 03:45:37縮尺を一定にしたいという話なんだからそれで正しいだろ
0611デフォルトの名無しさん
2008/01/27(日) 08:15:08現在表示している画面を画像ファイルに吐いてくれるような関数を探してます。
ありましたらぜひ教えてください。
0612609
2008/01/27(日) 09:37:39やっぱり良くわからないです?
ttp://upload.fam.cx/cgi-bin/img-box/a2g80127093410.jpg
のようになって、表示される画像の大きさが
ウィンドウをリサイズしたら比例しして大きくなりそうな気がするんですが。
0613デフォルトの名無しさん
2008/01/27(日) 10:00:19考えてないでやってみるとわかる。
0615デフォルトの名無しさん
2008/01/27(日) 11:05:26この文章をどう理解するかという問題のような気がする
0616デフォルトの名無しさん
2008/01/27(日) 11:10:35おまえが作ったその図を見る限り
「表示図形のサイズをビューポートの大きさにかかわらず一定にする」
がめでたく実現されているようだが、いったい何が問題なんだ?
0617609
2008/01/27(日) 11:41:21すいません。自分の説明の仕方が悪かったみたいです。
ttp://upload.fam.cx/cgi-bin/img-box/7o080127113738.jpg
の赤い丸のような状態になるんじゃないかなと思ってるんです。
だって、
「表示図形のサイズをビューポートの大きさにかかわらず一定にする」
というのは、ビューポートに表示される図形の割合がリサイズしても変わらない
という意味ではないのでしょうか?
0618デフォルトの名無しさん
2008/01/27(日) 12:45:02どこに「割合」なんて書いてあるんだよ。
サイズと言ったらサイズだろ。
0619609
2008/01/27(日) 13:00:54今やっと分かったっす。
自分の日本語読解能力な無かったんです。
ありがとうございました。
0620デフォルトの名無しさん
2008/01/27(日) 13:55:06わかったことをわかりやすく図に示してくれ
俺も不思議になってしまった
0621609
2008/01/27(日) 14:27:22つまり、そのまんまですよ。
自分の日本語読解能力が低かったんです。
円の大きさがウィンドウリサイズしたときに、
リサイズしたウィンドウの大きさに合わせて大きくなったり小さくなったりする場合が、
(ttp://upload.fam.cx/cgi-bin/img-box/7o080127113738.jpgの赤い円の状態)
glOrtho(-w / w , w /w , -h /h , h /h , -1.0, 1.0);
で常に表示される割合が一定で投影される範囲が(-1, -1), (1, 1)に固定。
ウィンドウの大きさにを変えても円の大きさが固定の場合が場合が、
(ttp://upload.fam.cx/cgi-bin/img-box/7o080127113738.jpgの黒い円の状態)
glOrtho(l * w / W, r * w / W, b * h / H, t * h / H, -1.0, 1.0);
でウィンドウをリサイズすると、合わせて(-2,-2)(2,2)...と投影される範囲が大きくなるから
逆に考えて円の大きさは変わらない。
みたいな理解で良いんでしょうか?
0622デフォルトの名無しさん
2008/01/29(火) 15:37:35一つは、
OpenGLでアニメーションをするときにダブルバッファをいれても
アニメーションのコマ毎に物体のオブジェクトが
制止している状態であっても点滅している風になってしまう場合があるのですが
どのように解消すればよいのか。
もう一つは、
軌跡を描くということで再描画の際にも軌跡を表現するオブジェクトは
そのまま残しておかなければならないと思うのですが
この処理はどのようにコーディングすればよいのか。
この2点なのですが、ご教授のほどよろしくお願い致します。
0623デフォルトの名無しさん
2008/01/29(火) 17:45:27glSwapBuffer()のタイミング。
windowsで使用しているなら、windowsでの再描画系のチェック。
軌跡に関してはopenGL関係ねえ。
適当に軌跡を保持しておけばいいんじゃない?
0624デフォルトの名無しさん
2008/01/29(火) 21:54:330625デフォルトの名無しさん
2008/01/29(火) 22:00:150626デフォルトの名無しさん
2008/02/02(土) 15:22:29四角形を描画したいのですが、四角形にならず円形しか描画されません。
GL_POINT_SMOOTHになってるのかと思い、Disableにしてみましたが
結果は変わりませんでした。
glDisable(GL_POINT_SMOOTH);
glPointSize(10);
glBegin(GL_POINTS);
glVertex2f(x, y);
glEnd();
GL_POINTSで四角形のpixelを描画するにはどうすれば良いのでしょうか?
ご教授を宜しくお願いします。
0627デフォルトの名無しさん
2008/02/02(土) 16:09:14どうしてもというなら、円が重なるようにたくさん打てば良いんじゃないか。
0628626
2008/02/02(土) 16:41:23確かにGL_QUADSでも良いのですが、GL_POINTSの方がポリゴンを描画するよりも高速だったので
GL_POINTSで四角形の点を表示したかったのです。(数万個のパーティクルを扱いたいので)
とりあえずGL_QUADSで処理する事にします。どうもありがとうございました。
昔のグラボで試したところ四角形で点が表示されました。
うーん、ハードウェアの問題なんでしょうか…?ELSA GLADIAC 786GTを使用してます。
0629デフォルトの名無しさん
2008/02/02(土) 16:45:260630629
2008/02/02(土) 16:52:15赤本じゃなくて、OpenGLの真髄でした。最近出た本です。
0631デフォルトの名無しさん
2008/02/04(月) 02:25:38for (i=0; i<7; i++)
color[i] = (GLdouble)i/6.0;
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
for(i = 0 ; i < 7 ; i ++){
for(j = 0 ; j < 7 ; j ++){
glColor3d(color[i], color[i], color[i]);
glVertex2f(-1.0+i*0.3, -1.0+j*0.3);
glColor3d(1.0, color[i], 0.0);
glVertex2f(-0.8+i*0.3, -1.0+j*0.3);
glColor3d(0.0, 1.0, color[j]);
glVertex2f(-0.8+i*0.3, -0.8+j*0.3);
glColor3d(color[i], 0.0, 1.0);
glVertex2f(-1.0+i*0.3 , -0.8+j*0.3);
}
}
glEnd();
みたいなコードって、
forの中身を
glColor3d(color[i], 0.0, 1.0);
glVertex2f(-1.0+i*0.3 , -0.8+j*0.3);
glColor3d(color[i], color[i], color[i]);
glVertex2f(-1.0+i*0.3, -1.0+j*0.3);
glColor3d(1.0, color[i], 0.0);
glVertex2f(-0.8+i*0.3, -1.0+j*0.3);
glColor3d(0.0, 1.0, color[j]);
glVertex2f(-0.8+i*0.3, -0.8+j*0.3);
と順番をいろいろ入れ替えただけで
描画される形や色が変わるんですけど、同じ場所に同じ色で指定しているのに
なんで順番を変えただけでグレデーションが変わってしまうのでしょうか?
0632デフォルトの名無しさん
2008/02/04(月) 02:44:43聞きたいことを再現する最小限のコードを載せてくれよ。
だいたい、グレデーションってどこのよ?
0633デフォルトの名無しさん
2008/02/04(月) 11:21:25頂点の順序は重要
その順番に繋いで形にするんだから
0634デフォルトの名無しさん
2008/02/04(月) 11:45:54glColor3d (1)
glVertex2f (1)
glColor3d (2)
glVertex2f (2)
glColor3d (3)
glVertex2f (3)
glColor3d (4)
glVertex2f (4)
の順序を
glColor3d (4)
glVertex2f (4)
glColor3d (1)
glVertex2f (1)
glColor3d (2)
glVertex2f (2)
glColor3d (3)
glVertex2f (3)
に変えたと言ってるわけで、
GL_QUADSの定義からして特に問題はないように見えるんだよね・・・。
0635デフォルトの名無しさん
2008/02/04(月) 11:59:08やっぱりでたらめにいろいろ入れ替えてるんじゃないのかなぁ
あとは、四角形を内部で三角形2枚に分割して処理してたりすると、
形や色の具合が変わることがあるかもしんない
0636デフォルトの名無しさん
2008/02/04(月) 12:08:330637631
2008/02/04(月) 12:25:38すいません。
ttp://www2.uploda.org/uporg1233762.jpg
に再現画像をのせました。
>>633
予測する方法は無いのでしょうか?
>>634
自分の言いたい事を分かりやすくいって頂いて有り難うございます。
えっと小さな四角形をグラデーションでたくさん表示したいなと思ったんですが、
プログラムを書いてる最中に「このグラデーションで表示したい」と思って
プログラムを書いているのに思っている物と違う物が表示されてしまって、
順番をかえると思った物が表示される事に気づきました。
色と点は同じ指定しているのに、順番を変えるだけで表示される画像が
かわってしまうので、最終的に表示される画像がどのようなグラデーションになるか、
法則?(色の補完の法則?)みたいなものは無いのでしょうか?
0638デフォルトの名無しさん
2008/02/04(月) 12:35:080639デフォルトの名無しさん
2008/02/04(月) 15:57:500640デフォルトの名無しさん
2008/02/04(月) 16:33:410641デフォルトの名無しさん
2008/02/04(月) 20:06:260642デフォルトの名無しさん
2008/02/04(月) 20:42:08OpenGL point sprite でググったら一番上にでてきた。
0643デフォルトの名無しさん
2008/02/04(月) 20:42:460644デフォルトの名無しさん
2008/02/04(月) 22:22:33「デバイス座標系とワールド座標系ではglutMouseFuncに渡されるマウスの座標の上下が反転している 」
というのがいまいち理解できません。
glutMouseFunc(mouse);
void mouse(int button, int state, int x, int y){
static int x0, y0;
switch(button){
case GLUT_LEFT_BUTTON:
if(state == GLUT_UP){
glColor3d(0,0,0);
glBegin(GL_LINES);
glVertex2i(x0,y0);
glVertex2i(x,y);
glEnd();
glFlush();
}else{
x0 = x;
y0 = y;
}
break;
printf("(%d %d)¥n",x,y);
というプログラムで、
glOrtho(-0.5,w - 0.5,w-0.5,-0.5,-1,1);
とやって上下を逆転させてやると正しく線が引ける事
glOrtho(-0.5,w - 0.5,-0.5,w-0.5,-1,1);
とやると引かれる線の状態が鏡のように反転する事を確認しました。
でもprintf("(%d %d)¥n",x,y);で渡されるxとyは、glOrthoで上下反転してもしなくても、左上が(0,0)で右下は(w,h)であるようです。
それに上下反転させると絵も下のように逆転しそうな気がするのですが...
http://tune.ache-bang.com/~vg/outitem/up/img/18549.jpg
上のように絵は逆転しないのでしょうか?なぜ上下が反転しているのに、printf("(%d %d)¥n",x,y)で渡される値は正しいのでしょうか?
0645デフォルトの名無しさん
2008/02/04(月) 22:24:55ifとかつかっても俺の頭では行きっぱなししかできん!
0646デフォルトの名無しさん
2008/02/04(月) 22:33:430647644
2008/02/04(月) 22:38:35でも、マウスをクリックして渡される座標は左上が(0,0)で右下が(w,h)で良くわかりません。
それとプロの方々はこのようにワールド座標系とデバイス座標系が逆転する時は、
わざわざ逆転したとき用にプログラムを書いているのでしょうか?
0648644
2008/02/05(火) 01:39:33デバイス座標系では左下が(0,0)なのに、
ワールド座標系では左上が(0,0)になるから、書いた線が鏡に書いたように逆転するんだ!
下の絵のような感じで。
ttp://www2.uploda.org/uporg1234742.jpg
絵に描けばすぐ分かったのに、なんでグダグダ頭の中で考えてたんだ、自分の馬鹿。
0649デフォルトの名無しさん
2008/02/05(火) 04:49:270650デフォルトの名無しさん
2008/02/05(火) 05:16:26WindowsでVisual C++でつくりました。
0651デフォルトの名無しさん
2008/02/05(火) 05:52:050652デフォルトの名無しさん
2008/02/05(火) 07:01:29ほらできた!
0653デフォルトの名無しさん
2008/02/05(火) 16:35:17OpenGLってHCLの道具として役に立つんですか?
0654デフォルトの名無しさん
2008/02/05(火) 17:33:340655デフォルトの名無しさん
2008/02/05(火) 17:38:45ありがとう!できた!でもめちゃくちゃ重くなった!
0656デフォルトの名無しさん
2008/02/05(火) 18:31:260657デフォルトの名無しさん
2008/02/05(火) 22:37:18HCLがなんだかさっぱりわからんけど
OpenGLは3D*描画用*のAPIだ
それが役に立つなら役に立つんじゃね?
0658デフォルトの名無しさん
2008/02/06(水) 11:29:26HCLじゃなくてHCIでした。単なる読み間違いでした。
0659デフォルトの名無しさん
2008/02/06(水) 11:50:12HCIがなんだかさっぱりわからんけど
OpenGLは3D*描画用*のAPIだ
それが役に立つなら役に立つんじゃね?
0660デフォルトの名無しさん
2008/02/06(水) 15:17:41俺もHCIがよくわからんのでググッタカス
だがわからん
0661デフォルトの名無しさん
2008/02/07(木) 22:55:120662デフォルトの名無しさん
2008/02/09(土) 06:34:16glLogicOp(GL_INVERT);
glBegin(GL_LINES);
線を引く
glend();
glDisable(GL_LOGIC_OP);
というプログラムなのですが、
GL_COLOR_LOGIC_OPは「図形の描画の際に,ウィンドウに既に描かれている色と,
これから描こうとする色の間で論理演算を行うことができるようにします」
という解説が有りました。
「GL_INVERT はウィンドウに描かれている内容の, これから描こうとする図形の領域を反転します」
とあります。
つまりコレは、以前引いてある同じ色の線の色を反転して、新しい線をまた反転した色で引くプログラムという
理解で良いのでしょうか?
「ウィンドウに描かれている内容の, これから描こうとする図形の領域を反転します」の意味がいまいち理解できないんです。
0663デフォルトの名無しさん
2008/02/09(土) 08:31:550664デフォルトの名無しさん
2008/02/09(土) 10:51:47黒が白に、白が黒になるのが反転
GL_INVERTは「これから描こうとする色」は使われない
「すでに描かれている色」を反転するのみ
>以前引いてある同じ色の線の色を反転して
以前に線を引いてある必要はない
たとえば真っ白のところにGL_INVERTで線を引くと黒い線になる
真っ黒のところにGL_INVERTで線を引くと白い線になる
>>663
それはGL_XORだろう
0665デフォルトの名無しさん
2008/02/10(日) 16:33:56ちがうよ
0666デフォルトの名無しさん
2008/02/15(金) 02:21:240667デフォルトの名無しさん
2008/02/15(金) 03:03:190668デフォルトの名無しさん
2008/02/15(金) 03:17:11超高いけど
0669デフォルトの名無しさん
2008/02/15(金) 03:19:02お金がないので、フリーか、もしくはプログラミングの方法があればお願いします。
0670デフォルトの名無しさん
2008/02/15(金) 08:03:56vtkとかMayaViに逃げるとか。
0671デフォルトの名無しさん
2008/02/15(金) 09:52:25ありがとうございます!
試してみます。
0672デフォルトの名無しさん
2008/02/15(金) 14:06:080673デフォルトの名無しさん
2008/02/15(金) 23:30:35vtkならサンプルがある。
フルスクラッチで書く技量が無いなら取り敢えず他人のソースを参考にしろ
0674デフォルトの名無しさん
2008/02/23(土) 11:48:59本を読んで勉強しているのですが、
「射影変換には、射影変換には透視射影と平行射影が〜」
または、
「投影変換には大きくわけて、透視投影と平行投影が〜」
みたいに、どう見ても同じ無いようなのに、ころころ文によって
射影と投影が使われていてとても疑問なんです。
0675デフォルトの名無しさん
2008/02/23(土) 11:55:21どっちも projection の訳語
0676デフォルトの名無しさん
2008/02/23(土) 13:21:480677デフォルトの名無しさん
2008/02/24(日) 23:44:52glpng.hを設定しただけでは上手くコンパイルが通りませんでした。
調べたところd.hatena.ne.jp/minami_SC/20070425/1177462910
のページが出てきて
この通りにやってみたのですが
ここでもコンパイルが通らずエラーを吹いてしまいます。
VisualStudio2005でのglpngを導入方法はできないのでしょうか?
できるのでしたら方法をご教授ください。
0678デフォルトの名無しさん
2008/02/25(月) 01:34:10|;:;:_:;:_:;:_:;:_;:;_:;:l:;_;:_:;:_:;:_:;:_;:_;|
|______|_____|
| 三| _ _ |三 !
| 三| 三シ ヾ三 |三 |
| 三′ .._ _,,.. i三 |
ト、ニ| <でiンヽ ;'i"ィでiン |三.| エラー内容も貼らずに質問とな!!
', iヽ! 、 ‐' / !、 ーシ |シ,イ
i,ヽリ ,' : !. |f ノ
ヾ! i ,、 ,..、ヽ lノ
| _ _ イ l
l ,ィチ‐-‐ヽ i /、
゙i、 ゝ、二フ′ ノ/'"\
| \ ー一 / / _,ン'゙\
,ィ|、 \ /_,、-'" _,.-''´ `丶、__
_, イ | ヽ_ 二=''" _,. -''´ """""´´ ``ー
0679デフォルトの名無しさん
2008/02/25(月) 01:54:29d.hatena.ne.jp/minami_SC/20070425/1177462910
にある方法は使わずに、VS2005で普通に試してみた。
libc.lib のエラーがでたけど、無視するようにしたら、うまくいったよ。
それ以外のエラーだったら知らん。
0680デフォルトの名無しさん
2008/02/25(月) 11:11:49error LNK2019: 未解決の外部シンボル _main が関数 ___tmainCRTStartup で参照されました。 LIBCMT.lib
無視する方法とかあるんですか?
0681677.688
2008/02/25(月) 11:55:04最初の設定が悪かったみたいですorz
0682デフォルトの名無しさん
2008/03/03(月) 20:11:07梅宮辰夫の歌に、シンボルロックいうのがあってな
シンボル
シンボル
外部のシンボルぅぅ〜
って
0683デフォルトの名無しさん
2008/03/03(月) 20:58:40リンケージの話か??
しかもぐぐったら歌詞違うじゃん
0684デフォルトの名無しさん
2008/03/03(月) 21:00:09くだすれとごっちゃになってたorz
0685デフォルトの名無しさん
2008/05/16(金) 11:59:470686デフォルトの名無しさん
2008/05/16(金) 14:31:32>Don’t miss the great updates on OpenGL3 at the SIGGRAPH BOF!
あと三ヶ月程待て
0687デフォルトの名無しさん
2008/05/16(金) 17:13:210688デフォルトの名無しさん
2008/05/16(金) 19:01:00ショボーン
0689デフォルトの名無しさん
2008/05/26(月) 22:55:40俺はSIGGRAPH行けないので後は頼んだ…!
0690デフォルトの名無しさん
2008/05/28(水) 00:52:45環境マップっぽいことをする方法は……無いよな……
0691デフォルトの名無しさん
2008/05/28(水) 10:18:560692デフォルトの名無しさん
2008/05/28(水) 13:56:26テクスチャ座標だけ自前で毎フレーム計算して渡してやればいいな
しかしES1.1な環境のCPUでそれをやるとなると……
0693デフォルトの名無しさん
2008/06/09(月) 19:28:49参考になるソースを紹介していただけないでしょうか?
なるべくシンプルで簡単なのがいいです。
(mesaは大きすぎる)
0694デフォルトの名無しさん
2008/06/09(月) 19:53:24スキャンライン、レンダリングとかでググってみてください
レイトレで良ければMiniLightとか
ttp://www.hxa7241.org/minilight/minilight.html
0695デフォルトの名無しさん
2008/06/10(火) 00:04:293DCGの解説書はだいたい>>693みたいのばっかりだ。
0696デフォルトの名無しさん
2008/06/12(木) 19:04:15wglSwapIntervalEXT
という関数があるのはわかりましたが、
それを利用する方法がわかりません
#include <gl/wgl.h>
と書いても存在しないといわれます。
どうすればいいでしょうか?
0697696
2008/06/12(木) 19:14:410698697
2008/06/12(木) 19:23:12glewInit();でエラーが出ました。
0699デフォルトの名無しさん
2008/06/12(木) 19:42:310700デフォルトの名無しさん
2008/06/12(木) 20:31:03glewInit後wglSwapIntervalEXTに1を渡すと同期あり、0を渡すと同期無しになる
しかしデフォルトは1のはずなんでドライバの設定いじってない限りは
同期取るはずなんだが、設定確認した方が良くないか?
0701デフォルトの名無しさん
2008/06/12(木) 20:51:49VSyncがオフになっててちょっとびっくり
拡張サポートはGLEEの方が個人的に好きです
0702698
2008/06/13(金) 14:09:211です。
>>700
ウィンドウ作って呼ぶと行けました。
ありがとうございます。
>同期
glutInitDisplayMode を GLUT_SINGLE で設定してたので非同期でした。
GLUT_DOUBLE で同期しました。のでwglSwapIntervalEXTは、必要なくなりました><
まあ、でもglewは、今後お世話になりそうなので良かったです。
ありがとうございます。
0703デフォルトの名無しさん
2008/06/23(月) 00:39:420704デフォルトの名無しさん
2008/06/23(月) 18:35:210705デフォルトの名無しさん
2008/06/25(水) 23:26:09Linuxでは使えるんでしょうか?
あげ
0706デフォルトの名無しさん
2008/06/25(水) 23:30:470707デフォルトの名無しさん
2008/06/26(木) 19:55:464.0プロファイルで
0708デフォルトの名無しさん
2008/06/26(木) 19:58:02primitive shader
0709デフォルトの名無しさん
2008/06/26(木) 20:45:16フラッグメントシェーダーとプリミッチブシェーダーになったのか
0710デフォルトの名無しさん
2008/06/26(木) 21:10:05GL_EXT_geometry_shader4
>>705
くだすれでRADEON HDはドライバがどうのでダメとか言ってたような。
glGetStringとかで拡張が使えるか調べてみればわかるのでは
つか何に使ってます?ステンシルシャドウ以外の使い道がよくわからない
0711デフォルトの名無しさん
2008/06/26(木) 22:48:40Vertex Shader
Primitive Shader
0712デフォルトの名無しさん
2008/06/26(木) 23:44:13今はopenGL.orgのForumでもGeometry Shaderしか聞いたことない。
正式には調べが付かなかったが、Geometry Shaderでいいんじゃね。
0713デフォルトの名無しさん
2008/06/27(金) 21:57:25以前はwglUseFontOutlinesを使ったフォントクラスを自作していたのですが、
FTGLを使おうと思い立ち既存コードを変更しています。
それで困ったのが、フォントをフォント変更ダイアログから変更する場合で、
これまではChooseFontで得たLOGFONT構造体からフォントを作り、
wglUseFontOutlines→ディスプレイリスト作成という流れで問題なかったのですが、
FTGLの場合はFTGLオブジェクトのコンストラクタにフルパスでフォント名のみを
指定するようになってます。両者で全然勝手が違うのですが、
LOGFONT構造体の情報をFTGLのフォントに簡単に反映させる方法というのは
ないでしょうか?
0714デフォルトの名無しさん
2008/06/28(土) 22:55:26LOGFONTにはFont自体の情報が入ってないみたいだし無理だね
FTGLというかFreeTypeではファイル名か、ファイルの中身自体を指定するしかないよ
それかなんとかしてタイプ名からファイル実体を拾ってくるのをWindowsAPI使ってやるか
0715デフォルトの名無しさん
2008/06/29(日) 21:35:21glTranslatef(0.0,0.0,5.0*sin(theta*PAI/180));
図形
というのをコンパイルすると、図形が5.0*sin(theta*PAI/180)上を移動しますよね?
で、その移動を制御するにはどうすればいいのでしょうか。例(10秒だけ関数上を動く)
分かりにくい質問文で申し訳ございません。どなたか分かる方がいらしたら
教えてくださいm(_ _)m
0716デフォルトの名無しさん
2008/06/29(日) 22:22:42質問の意味もどのレベルの質問かもわからない。
アニメーションの基礎ならGLUTのサンプルでも見てみたらどうでしょう
0717705
2008/06/30(月) 22:09:46XPでもLinuxでもジオメトリシェーダー使えないんですか!?つまりVistaのみ?
ATI何やってんだ!!
今XP起動中なのでLinux対応はそのうち調べます。
>つか何に使ってます?ステンシルシャドウ以外の使い道がよくわからない
確かに使い道が・・
0718デフォルトの名無しさん
2008/07/01(火) 00:21:34使えるとなれば使い途は意外にあるもんだぜ
GeForce8系では遅いって話だけどなー
0719デフォルトの名無しさん
2008/07/01(火) 01:25:360720713
2008/07/01(火) 04:20:04ないですか。ないということを知ったのが収穫でした。
ダイアログからイタリックやボールド、フォントサイズ等を指定できればと思ったんですが、
LOGFONT構造体で得た情報をFreeType側に反映させるのは
全部自前でやらないといけないわけですね。面倒だなぁ・・・。
0721デフォルトの名無しさん
2008/07/02(水) 21:35:59「20msおきにセンサから計測、計算」はdisplay()関数の中で
「前回display関数が呼び出されたときから20ms経過してたら計測、計算」ってやろうと思ってるんですが
なんかそもそもアイドル時GlutPostRedisplay()呼ぶようにしてても
display()が呼ばれる周期が20msより遅いように感じます。
1msおきくらいでdisplay()呼ぶ方法ないですか?
(描画自体はもっと更新レート遅くていいんですが)
0722721
2008/07/02(水) 21:43:49プログラム起動してmain関数の中でglutMainLoop()に入っちゃった時点で
その後のコードはプログラム終了時まで実行されない、という点さえ何とかなれば
描画部分のみGLのdisplay()関数で行って
20msごとの計測や計算はMain関数の中で
for(;;)
{
20ms経過してれば計測と計算
}
みたいな無限ループ作ってやりたいなと思ってるんですが。
0723721
2008/07/02(水) 21:50:02for(;;)
{
前回から20ms経ってたら計測計算描画
}
みたいにやりたいです。
要はGLが常時ループで回ってるんじゃなくて
必要なときだけ一瞬仕事してほしい(GDIでLineToで線描くような感覚で)です。
0724デフォルトの名無しさん
2008/07/02(水) 21:50:23idleの中で時間待ち・計測・計算するとか
0725デフォルトの名無しさん
2008/07/02(水) 23:00:220726デフォルトの名無しさん
2008/07/02(水) 23:05:38glfwなんかが手軽でいい感じ
0727デフォルトの名無しさん
2008/07/03(木) 02:29:50良質なサンプルとかありませんか?
0728デフォルトの名無しさん
2008/07/03(木) 02:35:10個人的には、725→726の順で考えるのか良いかと。
boost::threadが手軽(?)に使えていいよ。
0729デフォルトの名無しさん
2008/07/04(金) 18:20:263Dゲームをなるべく高フレームレートで動かすことを考えて設定するとどうするのが良いですか?
以下に設定項目を書きますのでアドバイスお願いします。
非同期反転: オフ / オン
トリプルバッファ: デフォルト / オフ / オン
フリッピングポリシー: フリップ / ブリット
深度バッファ ビット深度: デフォルト / 16ビット深度バッファ / 24ビット深度バッファ
S3TC テクスチャ圧縮の強制: オフ / オン
FXT1 テクスチャ圧縮の強制: オフ / オン
ドライバメモリフットプリント: 標準 / 低 / 高
テクスチャ色深度: デスクトップ色深度 / 16ビットテクセル / 32ビットテクセル
異方性フィルタ: アプリケーションコントロール / オフ / オン
0730デフォルトの名無しさん
2008/07/04(金) 19:04:060731デフォルトの名無しさん
2008/07/04(金) 19:16:270732デフォルトの名無しさん
2008/07/04(金) 21:15:31それのコピペなんですが本当にこの自己解決した回答であってるんですか?
0733デフォルトの名無しさん
2008/07/04(金) 21:38:31プログラムの質問にしてネ!
0734デフォルトの名無しさん
2008/07/05(土) 23:25:40初心者スレで乞食してろ
0735デフォルトの名無しさん
2008/07/07(月) 10:45:17VenderID : GenuineIntel
CPUの数 : 2
CPUのスピード : 3188.7MHz
■OS : Microsoft Windows XP Service Pack 2 Ver 5.01.2600
■メインメモリ容量 : 502 MB
空きメモリ容量 : 171 MB
■ハードドライブの容量 :
C:\ : 空き容量: 54.90 GB 総容量: 213.17 GB
D:\ : 空き容量: 18.92 GB 総容量: 19.72 GB
■DirectX : DirectX 9.0c installed
■サウンドカード : Realtek AC97 Audio
■グラフィックカード : Intel(R) 82915G/GV/910GL Express Chipset Family
VidMemTotal : 116 MB
GetAvailableVidMem : 116 MB
VRAM : 128.0 MB
DriverVersion : 6.14.0010.4764
このVRAM容量なんですがこれは3Dゲームをやるときにトリプルバッファを消したほうがいいですかね?
0736デフォルトの名無しさん
2008/07/07(月) 11:29:340737デフォルトの名無しさん
2008/07/07(月) 11:52:23誘導
PCゲーム
http://game13.2ch.net/game/
0738デフォルトの名無しさん
2008/07/08(火) 12:35:25glslにおいてですが、現在フラグメントシェーダ内で数千回のループであれば描画されるのですが、
数万回、数十万回になると黒塗りのオブジェクトあるいは何も描画されない状況になってしまいます。
for文の繰り返しに制限はあるのでしょうか?
0739デフォルトの名無しさん
2008/07/08(火) 15:06:28for文の制御してる変数がoverflowしてるとかは?
65535回までならうまくいくとか、二重ループにするとうまくいくとかないだろか。
0740デフォルトの名無しさん
2008/07/08(火) 16:14:37GLSLだと命令と文が対応しないから明示されてないけど、ARB_fragment_programの制限を見るとなんとなくわかると思う
でも最近のGPUだと制限がかなり緩いんだっけか?
あとVistaだとあんまり長いことGPUに仕事させるとハングしたと思ってGPUの強制リセットがかかるから注意な
0741デフォルトの名無しさん
2008/07/08(火) 23:10:41オーバーフローに関しては言われた通りだったので、ループ変数の型を変更しました。
しかしどうやら根本の原因はループ以外で起きているようです。
おおまかな処理としては1次元配列テクスチャとして色データを送り、その要素をループして足し合わせ計算しています。
この1次元配列テクスチャの要素数が2の15乗を超えると、描画がおかしくなることが新たにわかりました。
もう少し自分で調べてみて、また何か変化があれば質問しますのでよろしくお願いします。
0742デフォルトの名無しさん
2008/07/09(水) 10:47:47というか最大のテクスチャサイズが8192を越えるGPUなんて見たことないぞ
どうしてもというならGL_EXT_texture_buffer_objectなら2^23サイズまでいけるようだ
ただし、普通のテクスチャと使い方がちょっと違うのとGeForce8以降でしか使えない
0743デフォルトの名無しさん
2008/07/09(水) 11:57:29やはりテクスチャサイズが8192を超えるとだめなんですね
教えていただいた方法を含め、何か別の方法を考えてみます
0744デフォルトの名無しさん
2008/07/15(火) 06:17:02ここに質問しちゃうお!
0745デフォルトの名無しさん
2008/07/15(火) 06:30:400746デフォルトの名無しさん
2008/07/15(火) 06:47:580747デフォルトの名無しさん
2008/07/15(火) 08:04:34↓のコードがあって
glGenTextures(1, &texid); //テクスチャオブジェクト名を生成
glBindTexture(GL_TEXTURE_2D, texid); //
テクスチャオブジェクトを作成
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, imWidth, imHeight,0, GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL);
//グラボメモリにテクスチャをロード
glBindTexture(GL_TEXTURE_2D, 0);//←????????
グラボのテクスチャメモリにロードしたらバインドを解除してもいいのか.....
というかバッファオブジェクトについて詳しいサイトはどこかにないでしょうか。。。
0748デフォルトの名無しさん
2008/07/15(火) 10:43:45OpenGL1.0の頃は、glBindTexture()でテクスチャオブジェクトを切り替えることができなかったんだヨ。
で、そのデフォルトのテクスチャが、OpenGL1.1以降ではテクスチャオブジェクトの0番になった。
0番だけが他のテクスチャと区別があるわけでもないので、glBindTexture(GL_TEXTURE_2D, 0);は
「バインドを解除」じゃなくてバインドを0番に戻すだけ。
どういう必要があるときに使われるかっていうと・・・0番のテクスチャに切り替えたい時に使われるね。
そのままだけどw
0749デフォルトの名無しさん
2008/07/15(火) 19:07:57glRotateを複数回使って物体を回転させているのですが、
回転後の頂点座標が必要なので、仕方ないので自分で計算しています。
任意軸中心の回転をする必要があるので
http://www5d.biglobe.ne.jp/~noocyte/Programming/Geometry/3DRotation.html
の「ベクトルによる表現」を参考に回転をしようとしているのですが、
計算式にベクトルと三角関数の積があって一体どうやって計算していいものかわかりません。
微妙にスレ違いかもしれませんが、もっといい方法などありましたらそれも含めて
教えていただけるとありがたいです。よろしくお願いします。
0750デフォルトの名無しさん
2008/07/15(火) 19:13:050751デフォルトの名無しさん
2008/07/15(火) 23:11:58そのページわざわざ難解に書いてる感じ
本屋か図書館行って自分が理解できる本を探すのが一番でしょう
3Dグラフィックスの本とベクトルの教科書を中心に
こんなところで説明するのは量的にとても無理
0752デフォルトの名無しさん
2008/07/16(水) 10:57:24> 計算式にベクトルと三角関数の積があって一体どうやって計算していいものかわかりません。
普通にベクトルとスカラーの積ですが何か?
何がわからんのかわからん。高校数学の教科書読み直した方がいい。
(最近高校でどこまで教えているのか知らんけど。)
そのページはいちいち細かい説明してないけど、3次元の内積と外積、
2次元の回転行列がわかっていれば理解できるはず。
最後の回転行列成分の式はちょっとテンソルとか使ってて上記の
範囲外だけど、これは理論計算するときに便利なだけであって
実際のプログラムには使わない方がいいので気にしなくていい。
(エディントンのイプシロンが入った式をそのまま計算するのは
プログラム上効率が悪い。)
わからなければそのページにあるリンク(↓)もたどってみた方がいい。
Mini Tips 1:任意軸周りの回転行列を求める (Java サンプル付)
http://www004.upp.so-net.ne.jp/hiromu-i/tips001.html
OpenGL ES の glRotatef, glRotatex のマニュアル (英語、行列成分が書いてある。)
http://www.khronos.org/opengles/documentation/opengles1_0/html/glRotate.html
0753デフォルトの名無しさん
2008/07/16(水) 12:09:46VIEW座標じゃいやなら、カメラ設定後にMODELVIEW(=VIEW)を保存しといて逆行列にしてかければワールドになるし
もちろん行列計算の基礎は知ってて当然だけど
0754デフォルトの名無しさん
2008/07/16(水) 12:15:15一応リファレンスを全部読んでみましたがどう使ったらいいんでしょう??
>>752
ちょっと本借りてきます。ありがとうございます。
>>752
PcosθならPのそれぞれの成分にそれぞれcosθをかければよい、
ということでしょうか?それだとうまくいきませんでした。
計算が間違っているのかもしれませんが・・・・。
リンク先も参考にしてみます。
0755デフォルトの名無しさん
2008/07/16(水) 12:17:54glGetFloatv(GL_MODELVIEW_MATRIX, matrix);
0756デフォルトの名無しさん
2008/07/16(水) 12:31:13なるほど・・・。そういう方法があるんですね。勉強不足であまり理解できていませんが・・・。
少し勉強してみます。ありがとうございます。
0757デフォルトの名無しさん
2008/07/16(水) 12:34:02わざわざありがとうございます。
もしかしてこれで取得した行列にもともとの座標をかければ
ワールド座標上での回転後の座標になりますかね?
>>754の人の話だとそう簡単じゃないか。
どちらにせよ勉強不足のようですね。みなさんありがとうございました。
0758752
2008/07/16(水) 13:13:25> PcosθならPのそれぞれの成分にそれぞれcosθをかければよい、
> ということでしょうか?それだとうまくいきませんでした。
> 計算が間違っているのかもしれませんが・・・・。
それでいいはずなんだけど…。間違っている可能性としてまず思いつくのは,
回転軸方向のベクトルaがちゃんと単位ベクトルになっていないんじゃないかな?
(glRotate() は単位ベクトルじゃなくても自動的に正規化して計算してくれる。)
次に思いつくのは回転方向が逆とか。(これは表示させればすぐわかると思う。)
それでもだめなら,ソース晒してみれば?
0759デフォルトの名無しさん
2008/07/16(水) 13:19:25>>753の言っているように、>>755の行列をかけるとワールド座標を飛ばしてビュー座標まで変換されちゃう。
OpenGLはモデル変換(ローカル→ワールド)とビュー変換(ワールド→ビュー)を区別せずに、
MODELVIEWという1つのスタックで管理してるからね。
ということで、これまた>>753の繰り返しになるが、
gluLookAt等でカメラを設定した直後にglGetでモデルビュー行列(=ビュー行列)を保存しておき、
あとでその逆行列をかけてやればいい。
[ワールド座標] = [ビュー行列の逆行列]×[モデルビュー行列]×[ローカル座標]
0760デフォルトの名無しさん
2008/07/16(水) 19:15:51このプログラムをダウンロードしたんですが
「入力ファイル'jpeg-6b\libjpeg.lib'を開けません」とコンパイルエラーが出ます。
libjpeg.libはネット上で発見してダウンロードし、
それを入れたフォルダにパスを通した(VCのツール→オプション→プロジェクトで設定)したのですが
やっぱりエラーが出ます。
何がいけないのでしょうか?
(普通に「libjpeg.libが見つかりません」と言われる場合はこれでよかったと思うのですが
「jpeg-6b\libjpeg.libが見つかりません」の場合は違うのでしょうか)
0761デフォルトの名無しさん
2008/07/16(水) 19:28:34ttp://blog.livedoor.jp/houka/archives/6543040.html
ここ見て事故解決しました。
0762デフォルトの名無しさん
2008/07/16(水) 21:04:52よーそんなこえーことできるなー
0763749
2008/07/17(木) 23:15:46ありがとうございます。
今はとりあえず>>759の方がおしえてくださった方法でやろうとしているのですが、
いずれ必要になると思うのでそのときまた質問させていただくかもしれませんが
そのときはよろしくお願いします。
>>759
丁寧にありがとうございます。
色々なHPを参考にしてビュー行列の逆行列を計算しようとしたのですが、
どのプログラムを使っても正しく逆行列を求めることができませんでした。
たとえば↓を使うと、
http://www.toyokeizai.co.jp/pub/c_download/program/program2.txt
途中でminv_row_transが0を返してしまい
「singular matrix」と出力されてしまいます。
もうすでにOpenGLというよりは行列計算の話になってしまっていますが、
どなたかご指導お願いします。
0764デフォルトの名無しさん
2008/07/18(金) 00:14:39ビューマトリックスは回転と移動しかしてないから、回転部分を転置行列にして逆移動成分を掛けたのが逆行列に。
でもとりあえずWindowsならD3DXMatrixInverseを使っちゃえば?
0765デフォルトの名無しさん
2008/07/18(金) 01:24:10ほらよっ
ttp://uploaders.ddo.jp/upload/1mb/src/1up4680.txt.html
0766749
2008/07/18(金) 17:03:51申し訳ないのですが実行してみたところやっぱりだめでした。
実行すると結果の行列のそれぞれの要素が他のプログラムで実行したとき同様に
-1.#INDと表示されてしまいました。
関数内のLU分解のところで計算に失敗しているようです。
ビュー行列は、
1 0 0 0
0 0 1 0
0 -1 0 0
0 0 -80 1
に今なっているのですが、これが正則行列ではないので逆行列が求められないのでしょうか。
質問ばかりですみませんがよろしくお願いします。
0767デフォルトの名無しさん
2008/07/18(金) 17:09:240768デフォルトの名無しさん
2008/07/18(金) 17:24:31その行列なら手でも簡単に逆行列出せちゃうぜ
0769デフォルトの名無しさん
2008/07/18(金) 17:58:29void getInverseVMatrix(float src[], float inv[])
{
for(int x=0;x<3;++x){
for(int y=0;y<3;++y){
inv[y*4+x] = src[x*4+y];
}
}
inv[3] = inv[7] = inv[11] = 0.0;
inv[12] = (-src[12]) * inv[0] + (-src[13]) * inv[4] + (-src[14]) * inv[8];
inv[13] = (-src[12]) * inv[1] + (-src[13]) * inv[5] + (-src[14]) * inv[9];
inv[14] = (-src[12]) * inv[2] + (-src[13]) * inv[6] + (-src[14]) * inv[10];
inv[15] = 1.0;
}
0770デフォルトの名無しさん
2008/07/20(日) 01:48:42Symbian OS上での携帯電話ソフトウェアの開発(C++)に関わっているのですが、
これからの業務でOpenGL ESを覚えないといけなくなりました。(普通のOpenGLも触ったこと無い)
無印OpenGLの資料ならぐぐればいくらでもあるんですが、
ESが付くほうは断片的にしか情報が無い、英語でしかない、という状況で、何から覚えればいいのかサッパリ。
無印OpenGLの資料もある程度は参考になるんですが、ESでは実装されていない関数があったりで難航しております。
2ちゃん見ても専用スレも無いようだし、手がかりも無さ過ぎて途方にくれています。どこかいい資料ありませんか?
あるいは、「こうやって習得した」など、経験者の方いらっしゃったらアドバイスいただけませぬか・・
いま悩んでいる問題について。
ある1平面を色がグラデーションになるように着色したいのですが、
ちょうどこんな感じに。
http://www.ccad.sist.chukyo-u.ac.jp/~mito/ss/program/C/DialogBase/openGL/model/index.htm
上記資料を見ると、glColor3f()で「頂点ごとの色指定」して、glShadeModel(GL_SMOOTH)に指定すれば中間色を計算して塗ってくれるようですが。
ESではglColor3f()は実装されていないようで・・・
0771デフォルトの名無しさん
2008/07/20(日) 02:10:400772デフォルトの名無しさん
2008/07/20(日) 02:19:11まずはkhronosの資料読むしかねーだろ
http://www.khronos.org/opengles/
概観つかむならここがよさげ
http://www.asahi-net.or.jp/~yw3t-trns/opengl/opengles/index.htm
0773デフォルトの名無しさん
2008/07/20(日) 02:26:19使えってことじゃないかと。
まずはOpenGL Distillerとか読んでOpenGLの大体の感触を掴んだらどうでしょ。
0774デフォルトの名無しさん
2008/07/20(日) 04:48:360775デフォルトの名無しさん
2008/07/20(日) 09:04:46ESは基本的に頂点配列での描画じゃない?
glDrawArrays, glDrawElements辺りを調べればいいんじゃないかと。
0776デフォルトの名無しさん
2008/07/20(日) 13:56:24ただしOpenGLを知っている人向けに書かれてるのでOpenGL知らないと難しいかもな
0777デフォルトの名無しさん
2008/07/20(日) 16:57:120778デフォルトの名無しさん
2008/07/20(日) 23:22:420779デフォルトの名無しさん
2008/07/21(月) 17:24:08なければストリップで書くのだけど・・・。
0780デフォルトの名無しさん
2008/07/21(月) 22:42:460781デフォルトの名無しさん
2008/07/21(月) 23:06:05GLSLで描画コール(glDrawElements())に対してシェーダーを記述しているのですが、
この一連の描画を使うシェーダーを更にセットしたい場合、
glUseProgram()でそのシェーダーをセットして…
あれ?最初の描画コール用のシェーダーセットしたら、シェーダー上書きしちゃう?
って感じなのですが、何かやり方があるのでしょうか?
よろしくお願いします。
0782デフォルトの名無しさん
2008/07/22(火) 01:06:390783デフォルトの名無しさん
2008/07/22(火) 09:10:29その発想は無かった。やってみる。ありがと。
0784デフォルトの名無しさん
2008/07/23(水) 00:43:140785デフォルトの名無しさん
2008/07/23(水) 03:45:35いや、実際こう書けるんだからglColor3fいらないよね、ってのがESのポリシーなわけで
0786デフォルトの名無しさん
2008/07/23(水) 04:21:52ESにはglBegin()が無いんだからglColor4fでどうこうなるってもんでもないんじゃ
0787デフォルトの名無しさん
2008/07/23(水) 08:45:21glBeginとglEndの内側で↓のようにエバリュエータを切り替えることは
できなかったと思います。良い方法はないでしょうか。
glBegin(GL_POLYGON); // ポリゴン描画開始
glMap1d(..., &ctrlpoint0[0][0]); // スプライン曲線その1
glEnable(GL_MAP1_VERTEX_3);
for (int i=0; i<=30; ++i) glEvalCoord1d((GLdouble)i/30.0); // プロット
glDisable(GL_MAP1_VERTEX_3); // その1終わり
glMap1d(..., &ctrlpoint0[0][0]); // スプライン曲線その2
glEnable(GL_MAP1_VERTEX_3);
for (int i=0; i<=30; ++i) glEvalCoord1d((GLdouble)i/30.0); // プロット
glDisable(GL_MAP1_VERTEX_3);
glEnd(); // ポリゴン描画終了
0788デフォルトの名無しさん
2008/07/23(水) 08:52:01凹んでる頂点があったらアウト
0789デフォルトの名無しさん
2008/07/23(水) 09:24:572本の曲線で囲まれた内側とか言われても困るんで、
赤本の「エバリュエータとNURBS」のとこ読んでください
0790787
2008/07/23(水) 09:49:13例え話です。
>>789
うまく伝わらなかったかもしれませんが、
「端点A0〜端点A1」という曲線と「端点B0〜端点B1」という曲線があったとき、
A0 A1
■■■■■■
B0 B1
こんな形のリボンを描きたいと思っています。
つまり■で示したA0〜A1〜B1〜B0〜A0という領域を塗りつぶそうとしています。(曲線内部が潰れることは今は考えない)
各セグメントの座標がわかればA0からB1に向かってTRIANGLE_STRIPで
A、B、A、B…と交互に点を打っていけば目的は達成できるのですが、
エバリュエータから座標を取得する関数はOpenGLにはなかったように思います。
自前でベルンシュタイン関数を計算してもたかが知れてるのでそうしてもいいのですが、
その前によい案があればと思い質問しました。
赤本は手元にないのですが…解決方法が載っているならそちらを参照します。
0791デフォルトの名無しさん
2008/07/23(水) 10:38:05自分だったら自前で計算するかな。そのほうが簡単で融通も利くような気がするし。
アニメーションしなければ1度の計算ですむし、アニメーションするならねじれた場合の再分割を処理できる
0792787
2008/07/23(水) 13:26:29>>791 glTranslateやglScaleを使って端点の移動を効率良く反映させる方法を考えないといけなさそうです。
template <int N> struct power { static double value(double base) { return base*power<N-1>::value(base); } };
template <int N, int M> struct factorial { static double value(void) { return N*factorial<N-1,M-1>::value(); } };
template <int N, int M> struct combination { static double value(void) { return factorial<N,M>::value()/factorial<M,M>::value(); } };
template <int N, int M> struct bernstein_weight {
static vector<double> value(double par) {
vector<double> retval(1, combination<N,M>::value()*power<N-M>::value(1.0-par)*power<M>::value(par));
vector<double> tmp(bernstein_weight<N,M+1>::value(par));
retval.insert(retval.end(), tmp.begin(), tmp.end());
return retval;
}
};
template <int N> vector<vec2<double> > generate_spline_points(const vector<vec2<double> >& ctrlpoints, int number_of_segments) {
assert(ctrlpoints.size()==N+2); // +2は端点
vector<vec2<double> > retval(number_of_segments+1);
for (int i=0; i<=number_of_segments; ++i) {
vector<double> weight(bernstein_weight<N+1,0>::value(double(i)/number_of_segments));
for (int j=0; j<N+2; ++j) retval[i] += weight[j]*ctrlpoints[j];
}
return retval;
}
0793デフォルトの名無しさん
2008/07/23(水) 14:59:030794749
2008/07/23(水) 18:41:04>>769
わざわざ関数まで作っていただいてありがとうございます。
>>759の方を参考に関数を使ってみたのですがうまく使うことができませんでした。
ビュー行列が
1 0 0 0
0 1 0 0
0 0 1 0
0 0 -80 1
その逆行列が
1 0 0 0
0 1 0 0
0 0 1 0
0 0 80 1
になりました。
(続きます)
0795749
2008/07/23(水) 18:41:491 0 0 0
0 1 0 0
0 0 1 0
0 0 -90 1
これは、ためしにglTranslateで-10だけz軸方向にずらしたものです。
逆行列とビュー行列の積が、
1 0 0 0
0 1 0 0
0 0 1 0
0 0 -10 1
になりました。
これをローカル座標にかけると上の行列の4行目が無視されて、
結局座標が移動されないことになってしまいます。
とりあえず縦、横逆にして掛けちゃえ、と思いましたが、
それだと回転がうまくいかないようです。
何度もすいませんがご指導お願いします。
0796デフォルトの名無しさん
2008/07/23(水) 19:28:53ローカル座標を縦ベクトルとして、行列を左からかけてるってことだよね?
その場合、OpenGLの行列の解釈は次のようになる。
┌ m[0] m[4] m[8]. m[12] ┐
│ m[1] m[5] m[9]. m[13] │
│ m[2] m[6] m[10] m[14] │
└ m[3] m[7] m[11] m[15] ┘
赤本にも書いてある基本中の基本だね。
もし>>794-795の行列表記のままで行きたいなら、
座標を横ベクトルにして、行列を右からかけないと駄目。
その場合、>>759の掛け算の順序も全部逆になるから注意。
(DirectXのヘルプの流儀はこっち)
まあ、これはあくまで頭で考えるときの表記上の問題で、
コーディング的にはどっちもまったく同じことだけど。
0797769
2008/07/23(水) 23:56:55>>796さんの言われてるとおり、
元の座標位置を p ( x, y, z, 1 )、モデルビューマトリックスをMv 逆ビューマトリックスをIvとすると
p * Mv * Iv がワールド座標位置になる
表記の違いで、移動成分を第4列に書く(openGL流)なら、位置がたてベクトルになって全部逆に書くが、
プログラム的にはなにも変わらない
赤本の付録F 「同時座標と座標変換行列」の所読めばわかるよ
0798デフォルトの名無しさん
2008/07/24(木) 22:19:500799デフォルトの名無しさん
2008/07/24(木) 23:31:28BMPの特定の色だけ、透過色に指定して、手前に配置されたテクスチャの透過色の部分から、
奥に配置されたテクスチャに貼り付けられたBMP画像が見えるようにするには、
どうしたらいいんでしょうか? よろしくお願いします。
0800デフォルトの名無しさん
2008/07/25(金) 01:31:52台形に変えたときに斜線が入った感じにテクスチャマップされるのを
解消するにはどうしたらいいですか。
0801デフォルトの名無しさん
2008/07/25(金) 01:34:44トランスフォーム済み頂点でやってるならXYZRHWのrhwをどうたらこうたら
0802801
2008/07/25(金) 01:36:18なんにしても、Perspective Correctが関係していると思う。
0803名無しのせんべえ
2008/07/25(金) 01:50:58お伺いします。
OSはVISTA、開発ツールはVisualC++2008 ExpressEditionです
GLUT関連のファイルがあるホームページからglut-3.7.6-binをダウンロードし、
指定のディレクトリにそれぞれのファイルを置いたのですが、コンパイルが
うまくいきません。エラー内容は以下になります。おたすけください。。
Shogi3DCon.obj : error LNK2019: 未解決の外部シンボル __imp____glutInitWithExit@12 が関数 _glutInit_ATEXIT_HACK@8 で参照されました。
C:\PRG\SHOGI\Shogi3DConsoleThree\Shogi3DCon\Debug\Shogi3DCon.exe : fatal error LNK1120: 外部参照 1 が未解決です。
0804749
2008/07/25(金) 02:37:26行列の表記法が間違っているとは思いませんでした。
無事に変換後の座標を取得することができました!
今までレスしてくださったみなさんも含めて本当にありがとうございましたm(_ _)m
0805デフォルトの名無しさん
2008/07/25(金) 04:12:07ttp://www.r3.nu/~cass/qcoord/
0806デフォルトの名無しさん
2008/07/26(土) 13:23:30それぞれ両方のウインドウにOGL領域を持ち、OGLコンテキスト(主にテクスチャ)を共有したいのだけど、可能だろうか?
単純に、それぞれの領域に同じPIXELFORMATDESCRIPTORでOGL領域を作り、
wglCreateContext(SDI_DC)で作ったコンテキストのIDをモードレスダイアログと共有したんだけど、
モードレスダイアログ側の挙動が不可解な状態に陥るのみだった。(何故か、glClearColor のステートだけは有効)
何か、助言や参考になる資料などないだろうか?
0807デフォルトの名無しさん
2008/07/26(土) 14:01:050808名無しのせんべえ
2008/07/26(土) 15:52:18解決しました。
解決方法はプログラムソースがあるディレクトリに
glut32.libがありましたので、そちらを削除しました。
おさわがせしました
0809デフォルトの名無しさん
2008/07/27(日) 00:05:00wglMakeCurrent()でカレントコンテキストを設定した後にglGetString(GL_EXTENSIONS)
を実行するとAccessViolationが発生してしまいます。
カレントコンテキストを設定しない場合はNULLが帰ってくるのですが…
何が原因なんでしょうか?
0810デフォルトの名無しさん
2008/07/27(日) 17:01:04テクスチャの色と同じ赤色になって困っています。よろしくお願いします。
GLfloat blue[] = { 0.0, 0.0, 1.0, 1.0 };
void __fastcall TForm1::Display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glCallList(listid);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, blue);
glColor3f(0.0, 0.0, 1.0);
glutSolidCone(1.0,0.5,3,3);// 青色にしたい
glFlush();
}
void __fastcall TForm1::MakeDisplayList()
{
listid=glGenLists(1);
glBindTexture(GL_TEXTURE_2D,texname);
glNewList(listid,GL_COMPILE);
glBegin(GL_POLYGON);
glTexCoord2d(0.0,0.0); glVertex3f(1.0,-0.5,0.0);
glTexCoord2d(1.0,0.0); glVertex3f(2.0,-0.5,0.0);
glTexCoord2d(1.0,1.0); glVertex3f(2.0,0.5,0.0);
glTexCoord2d(0.0,1.0); glVertex3f(1.0,0.5,0.0);
glEnd();
glEndList();
}
0811810
2008/07/27(日) 17:36:38おさわがせしました
0812デフォルトの名無しさん
2008/07/29(火) 22:26:15特に発生しないぞ。
wglCreateContext();
が失敗しているとか。
MFC使ってません?
C○○App::InitInstance()の中で、glGetString(GL_EXTENSIONS)する場合、
タイミングによっては、glGetString(GL_EXTENSIONS)が失敗する。
0813デフォルトの名無しさん
2008/07/30(水) 14:12:08すいません、自己解決しました。
実際にはglGetString()で発生しているのではなく、マーシャリングを失敗しているのが原因でした。
VSの例外アシスタントがなぜか機能しなかったため、自分が勘違いしてたみたいです orz
0814デフォルトの名無しさん
2008/08/02(土) 10:45:47板ポリにはっつけて描画するのは分かるんですが
LookAtで視点変えちゃうと傾くし、拡縮されるし・・・
0815デフォルトの名無しさん
2008/08/02(土) 10:58:25だったら視点を変えなければいいと思うよ
0816デフォルトの名無しさん
2008/08/02(土) 11:40:40そしたら3Dオブジェクトの描画が
0817デフォルトの名無しさん
2008/08/02(土) 11:47:59でもどんなに頑張っても若干はゆがむ。目に見えない程度にはできるはず。
0818デフォルトの名無しさん
2008/08/02(土) 11:49:020819デフォルトの名無しさん
2008/08/02(土) 11:57:12>>818
ありがとう、もう少しで解決できそうだ
2D描画の時と3D描画の時で射影行列もろもろを再設定してる
0820デフォルトの名無しさん
2008/08/02(土) 19:40:180821デフォルトの名無しさん
2008/08/03(日) 00:01:100822デフォルトの名無しさん
2008/08/03(日) 00:41:290823デフォルトの名無しさん
2008/08/03(日) 19:37:51glTranslated(x, y, z);
glBegin(GL_POINTS);
glVertex3d(0, 0, 0);
glEnd();
と
glBegin(GL_POINTS);
glVertex(x, y, z);
glEnd();
では後者の方が速いですよね?
0824デフォルトの名無しさん
2008/08/03(日) 19:42:230825デフォルトの名無しさん
2008/08/03(日) 19:46:160826デフォルトの名無しさん
2008/08/03(日) 20:23:59が、コードの再利用をするならある程度処理を使い回せるようにした方がよい。
そしてgl*コールの関数を1つ減らすよりはもっと大枠を見直した方がずっと高速になる。
なので関数1つの有無に拘るのはやめといたほうがいい。老婆心ながら。
0827デフォルトの名無しさん
2008/08/04(月) 00:36:59行列操作のコストの方が大きな問題になる気がする。
まぁ、並行移動なら、逆行列の生成も早いだろうけど・・・。
0828デフォルトの名無しさん
2008/08/04(月) 01:49:160829デフォルトの名無しさん
2008/08/04(月) 22:25:440830デフォルトの名無しさん
2008/08/05(火) 20:55:45glGetInteger(GL_MAX_TEXTURE_SIZE, &size)
などとして取得すると思うのですが、2Dのテクスチャを使用する場合、この後に環境によっては2や4で
割らなければいけない環境もあるらしいのですが、そういう環境なども考慮して最大サイズを割り出す
にはどうしたらいいでしょうか?
GeForce7600GSでは最大サイズがそのまま使えたりするので、単純に2で割ればいいというわけではない
みたいなのですが…
0831デフォルトの名無しさん
2008/08/05(火) 21:02:410832デフォルトの名無しさん
2008/08/05(火) 21:45:50ありがとうございます。うまくサイズを取得できました。
しかし、ついでにNPOTテクスチャも使用してみようと思ったのですが、最大サイズからとりあえず-1して
GLint maxTeSize = 4096;//取得した最大サイズ
GLint width = 0;
maxTexSize -= 1;
glTexImage2D(GL_PROXY_TEXTURE_2D, 0, 4, maxTexSize, maxTexSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);
とすると4095が帰ってくるのですが、試しに4095x4095なイメージをでテクスチャを作ろうとしても
うまく作成できません。4096x4096なテクスチャは作成できるのですが…
0833デフォルトの名無しさん
2008/08/05(火) 21:56:29問題が再現する最小限のコードか、せめてglGetErrorの結果を貼ろうよ。
0834デフォルトの名無しさん
2008/08/05(火) 22:39:49すいません、>>832を書いた後にOpenGLの設定をいじって遊んでいたら4095x4095のテクスチャが
作成できるようになり、また、以前の設定に戻しても作れるようになってしまいました orz
どうやらこちらの環境依存の問題だったようです。
もうちょっといじってみてまた作成できなくなったらちゃんとglGetError()の結果を張りにこようと思います。
お手数をおかけしてすいませんでした orz
ありがとうございました。
0835デフォルトの名無しさん
2008/08/06(水) 13:12:30「以前の設定」を具体的に書かないと情報として(他の人の)役に立たないだろ
同じミスを二度しちゃダメだ
0836デフォルトの名無しさん
2008/08/07(木) 00:12:270837デフォルトの名無しさん
2008/08/07(木) 04:45:58将来プログラマとかSEになりたい、とかならわかるけど。
向上心ないよね、頑固だし。
そういう派遣テスターって、仕様書は読めない、
テスト仕様書も作れない、テストプログラムも作れない
やれることは「テキトーにプログラムを触る」ことだけ。
俺は派遣プだけどさ、こういう派遣テスターがいると
派遣全体がバカにされるんだよ。
テスト専門派遣なんて氏んで欲しいよ、まったく。
今日も正社員の人が派遣テスターに仕様書を読んで
テスト仕様書を作ってください、って説教してたよ。
その派遣は頑固に「何故、仕様書が必要なんですか?」って
反論してたから、きっとテスト専門派遣テスターだな。
仕様書も読まず、テスト仕様書も作らず、ただテキトーに
プログラム触るだけで給料もらおうなんて頭おかしいんじゃねーの?
あ〜あ、あの派遣テスターが3ヵ月後に切られるまで、
仕様書も読まねーでテキトーにテストしたバグ票がまわってくんのかよ。
そんな糞なもん、読んで処理する派遣プの身にもなってくれよ。
うわ〜、しかもそいつが切られる3ヵ月以内に中間納品あるじゃねーか!
テスト仕様書もなしにテキトーにテストして納品か。
中間納品後にソッコウクレームでデスマ必至だな。俺の休みも返上かよ。
派遣専門テスターさんよ、少しは向上心持てよ!
頑固な性格直して仕様書読めよ!テスト仕様書作れよ!
0838デフォルトの名無しさん
2008/08/07(木) 08:42:16まで読んだ
0839デフォルトの名無しさん
2008/08/07(木) 11:38:370840デフォルトの名無しさん
2008/08/07(木) 11:40:06コピペに反応するなよ
0841デフォルトの名無しさん
2008/08/07(木) 12:17:100842デフォルトの名無しさん
2008/08/07(木) 12:43:38>>840
0843デフォルトの名無しさん
2008/08/09(土) 01:02:460844デフォルトの名無しさん
2008/08/10(日) 21:05:21いろんなサイトを見てもこれで動くような気がするんですが、環境的な問題でしょうか。
コンパイラはBorland C++ 5.5.1です。
#include <windows.h>
#include <GL/glut.h>
const GLfloat lightPos[] = { 3 , 0 , -2 , 0 };
const GLfloat lightCol[] = { 1 , 0 , 0 , 1 };
void disp( void ) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);
glNormal3f(1.0 , 1.0 , 1.0);
glVertex3f(0.0 , 0.0 , 1.0);
glVertex3f(0.0 , 1.0 , 0.0);
glVertex3f(1.0 , 0.0 , 0.0);
glNormal3f(-1.0 , -1.0 , -1.0);
glVertex3f(0.0 , 0.0 , -1.0);
glVertex3f(0.0 , -1.0 , 0.0);
glVertex3f(-1.0 , 0.0 , 0.0);
glEnd();
glFlush();
}
0845デフォルトの名無しさん
2008/08/10(日) 21:06:20glutInit(&argc , argv);
glutInitWindowPosition(50 , 50);
glutInitWindowSize(400 , 400);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);
glutCreateWindow(argv[0]);
glutDisplayFunc(disp);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(1 , -1 , -1 , 1 , 2 , 10);
glLightfv(GL_LIGHT0 , GL_POSITION , lightPos);
glLightfv(GL_LIGHT0 , GL_DIFFUSE , lightCol);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glutMainLoop();
return(0);
}
0846デフォルトの名無しさん
2008/08/10(日) 21:16:500847デフォルトの名無しさん
2008/08/10(日) 21:34:370848デフォルトの名無しさん
2008/08/10(日) 21:49:14ってfrustumの下にでも書いてみ。
0849デフォルトの名無しさん
2008/08/10(日) 21:51:350850849
2008/08/10(日) 22:04:200851デフォルトの名無しさん
2008/08/11(月) 00:32:53「解決しました」の一言で放ったらかしな人間が多いのかねぇ・・・。
理解に苦しむわ。
0852デフォルトの名無しさん
2008/08/11(月) 01:22:04何をどうしたら解決したかを書くのは最低限のマナーというか
掲示板のルールなんだが
0853デフォルトの名無しさん
2008/08/11(月) 01:25:430854デフォルトの名無しさん
2008/08/11(月) 03:53:33欲しいのか?>>652
0855デフォルトの名無しさん
2008/08/11(月) 07:21:300856デフォルトの名無しさん
2008/08/11(月) 09:27:070857デフォルトの名無しさん
2008/08/12(火) 12:32:22ttp://www.khronos.org/opengl/
なにこの最新拡張取り込んだだけの3.0は…
ゆっくりした結果がこれかよ!
ものすごい数のAPIは削除されてるけどな
0858デフォルトの名無しさん
2008/08/12(火) 15:57:54正方形のテクスチャを台形のような形に張った場合に、線形に変形するのではなく、
Photoshopの変形の遠近法みたいな補間をしてくれる拡張があると
ちらっと聞いたような気がするのですが、そんなものはないのが正解でしょうか。
つまり、上が狭い台形に張った場合に、下から上に向かって縦の座標もどんどん狭く
変形されていってほしいのですが。
0859デフォルトの名無しさん
2008/08/12(火) 16:19:01テクスチャ座標の4番目の要素 (q座標) を狭さ・広さにあわせて調節する
0860デフォルトの名無しさん
2008/08/12(火) 16:20:11>>805のやり方で物足りないならフラグメントシェーダーでやるのが簡単じゃ
0861デフォルトの名無しさん
2008/08/12(火) 16:29:09ありがとうございます!
まさにそれで出来ました。感謝感激です!
OpenGLのテクスチャ座標は(s, t, r, q)で表されて、
最終的に使われる座標は(s/q, t/q, r/q)になる、という話ですよね。
で、glTexCoord2fで(x,y)とかすると、s=x, t=y, r=0, q=1になる、と。
助かりました。
0862デフォルトの名無しさん
2008/08/14(木) 12:44:53http://developer.nvidia.com/object/opengl_3_driver.html
Desktop: GeForce 8000 series or higher; GeForce GTX 260, 280; Quadro FX 370, 570, 1700, 3700, 4600, 4700x2, 5600
Notebook: GeForce 8000 series or higher; Quadro FX 360M, 370M, 570M, 770M, 1600M, 1700M, 2700M, 3600M, 3700M
0863デフォルトの名無しさん
2008/08/16(土) 18:07:45{
glPolygonMode(GL_FRONT,GL_LINE);
glPolygonMode(GL_BACK,GL_LINE);
glLineWidth(2.0f);
glColor3f(0.0f,0.0f,1.0f);
glTranslatef(0.0f,5.0f,0.0f);
glRotatef(30.0f,0.0f,0.0f,1.0f);
glScalef(10.0f,10.0f,10.0f);
myglWireCube(); <-6面体のポイントとラインだけの
ワイヤーフレームモデルの配列
}*/
こんなプログラムでワイヤーフレームの六面体をアフィン変換して空間上での
回転・並進・スケールチェンジをして絵としては出力できるのですが、アフィ
ン変換後の各頂点のX,Y,Z座標を数字で抜き出すにはどうすればいいのでしょ
うか?
要はグラフィック処理ではなく、空間上の任意のポイントの座標をアフィン変
換した後の座標を求める作業に流用したいわけですが。
0864デフォルトの名無しさん
2008/08/16(土) 18:36:420865デフォルトの名無しさん
2008/08/16(土) 19:14:41早速有りが�d。そんな手があったか。
昨日届いたばかりの赤本にめっけたので読んでみる。
0866デフォルトの名無しさん
2008/08/17(日) 11:19:12WinXP, GLUTを使ってポリゴン描画をやってるのですが、以下の状況のときにfpsが大きく落ちます。
・ポリゴン数を増やし(300程度)、画面全体に隙間なく配置する。
・ウィンドウを拡大(1600,1200,あるいは640,480のフルスクリーン)する。
ちなみに、ポリゴンを小さくした場合速度の低下が緩やかになります。
どこが原因なのかと以下のコードで検証した結果、画面の拡大に伴い
idle関数終了から次にidle関数が呼ばれるまでの時間が増加(30ms程度)することが分かりました。
glutPostRedisplay関数自体どの条件でも1ms程度で終わるので遅くなる
直接的な原因が謎ですが、ご存知のかたいらっしゃらないでしょうか?
開発環境がビデオカードのしょぼいノートPCなのでそれが原因とも思いますが、
改善案がないかと思い相談させていただきました。
DWORD static t1 = 0;
void idle()
{
printf("%d : ",timeGetTime()-t1); //idle終了から次が発生するまでの時間
DWORD t = timeGetTime();
static DWORD prevTime = timeGetTime()*3; // fpsを60に保つ
while(timeGetTime()*3 - prevTime < 50);
prevTime += 50;
glutPostRedisplay(); // 描画関数
t1 = timeGetTime();
printf("%d\n", timeGetTime() - t); // 描画にかかった時間
}
0867デフォルトの名無しさん
2008/08/17(日) 11:39:16実際に描いてるのはdisplayコールバック関数内部
whileのループは無駄にCPUを消費するからSleep()を噛ますなり、タイマー割り込み使うなりしたほうが良いかと
可能性は低いかもしれないが60fpsが突然30fpsになるなら垂直同期が強制ONになってるとか
0868デフォルトの名無しさん
2008/08/17(日) 12:20:08ありがとう御座います。
timeGetTimeによる時間計測をglutPostRedisplay();終了後を基準として、
displayイベントの関数開始と終了に配置して調べてみました。
結果、glutPostRedisplay()を呼び出してから、実際にdisplayイベントが発生するまでの時間が
865の状況下で大幅に遅くなっていたようです。
この原因は、glutSwapBuffers();関数もglutPostRedisplay();関数同様に、
制御はすぐに返すものの、実際に画面が更新されるまで時間がかかることと感じます。
ポリゴンの描画面積に応じてSwap速度が変化するってのは若干すっきりしませんが一歩前進できました。
垂直同期に関しては、wglSwapIntervalEXTをサポートしていない腐れビデオカードなので
安西先生・・・垂直同期したいです・・・。と泣きたい状況です。
fps60に固定してもティアリングが軽減されるだけでやっぱり気持ち悪い。
ティアリングを感じないOpenGLのソフトもあるのだけど、どうやって対策してるのか不思議です。
0869デフォルトの名無しさん
2008/08/17(日) 13:11:590870デフォルトの名無しさん
2008/08/17(日) 14:40:49うーん。
glewInit();は成功で、
glewGetExtension("WGL_EXT_swap_control")
でこけてるから無理かな〜と思ったんだけど間違ってたかなorz
ネットで拾ったvsyncのサンプルプログラムも全滅したんで諦めてました。
もし間違ってたらヒントくらい教えてもらえませんか?
ちなみに速度の問題はどうしようもなさげです。こっちは他のアプリケーションでも
かなりカクカクになることを確認したのでノートPCが原因っぽ。
0871デフォルトの名無しさん
2008/08/17(日) 15:25:51どうやらglVertex3d関数はSwap()と同じキューにタスクを放り込んで即制御を戻す気がします。
加えて、俺のPCだと計算時間はポリゴン数じゃなく、
glVertex3d関数で書き換わるバックバッファのピクセル数に比例するみたい。
・画面外に馬鹿でかいポリゴンを表示しても速度に影響しない(バッファに影響しないため?)
・画面全体を埋めるポリゴンだと3枚くらいでfpsが60を切る。
・上記より小さいポリゴン100枚(glVertex3d関数の呼び出し回数も100倍)のほうが圧倒的に早い。
キューにポリゴン表示によるバッファの書き換えも蓄積し、その後Swapが行われるから遅いってことかな。
こう考えればidle関数が2度目呼び出されるまで大幅に遅れるのも納得できる気がします。
初心者の戯言なので、間違ってたら指摘してください。
0872デフォルトの名無しさん
2008/08/17(日) 15:32:280873デフォルトの名無しさん
2008/08/17(日) 15:52:05Intel 965/963 Graphics Media Accelerator
って帰ってきました。
関数を調べてたらGL_EXTENSIONSってので拡張機能を分かるっぽいので見てみたら多すぎて泣けた。
GL_WIN_swap_hintってそれっぽい気がするのでちょっと調べてくる。
ついでにGL_VERSIONって入れてみたら1.5.0 build 6.14.10.4864とか出てきた。
何か強烈に嫌な予感がする。これも調べてみる。
0874デフォルトの名無しさん
2008/08/17(日) 18:14:48本家のページにSDKってあるのにどこからダウンロードしたらいいか分からんとか
俺どんだけゆとりなんだorz
目痛くなってきたんでちと休憩
0875デフォルトの名無しさん
2008/08/17(日) 19:04:220876デフォルトの名無しさん
2008/08/18(月) 00:57:57おそろくし、勘違い暴走している。
> ついでにGL_VERSIONって入れてみたら1.5.0 build 6.14.10.4864とか出てきた。
> 何か強烈に嫌な予感がする。これも調べてみる。
これ、普通。
赤本でも買って勉強するがよろし。
0877デフォルトの名無しさん
2008/08/18(月) 18:22:30なんだかよくわからないが、描画時間は描画ピクセル数にだいたい比例するぞ。
ポリゴン数ではなくて。
3角形ホリゴン100個・三角形一つの大きさが10ピクセルなら、
vertex shaderが300回、fragment shaderが1000回計算。
3角形ホリゴン1個・三角形の大きさが10000ピクセルなら、
vertex shaderが3回、fragment shaderが10000回計算。
画面外の場合は、ラスタライザがカットしてるんじゃないか?(よく知らないが)
0878デフォルトの名無しさん
2008/08/18(月) 22:24:41>>877
最初はglVertex3d関数を呼び出す回数に比例するんかなと思ったんだけど
関数呼び出し自体のコストは微々たるものだったという壮大な勘違いでしたorz
0879デフォルトの名無しさん
2008/08/19(火) 02:55:07プログラム上だけで試行錯誤するよりも、本格的にGLを勉強するなら
やはり赤本が近道だと思う。がんばれ。
解決済みかもしれないけど、OpenGLのVersionを最新にするには
GPUベンダのドライバを更新することで実現します。
ただし、IntelのChip set内蔵GPUは、シェーダアーキテクチャでも
OpenGL 2.Xには対応していないので、最新GPUとドライバでも1.5まで。
0880デフォルトの名無しさん
2008/08/20(水) 09:23:56俺もOpenGLの勉強しなおししようと思うのですけど、
赤本ってこれでいいんですよね?
Amazon.co.jp: OpenGLプログラミングガイド 原著第5版: OpenGL策定委員会, 松田 晃一: 本
http://www.amazon.co.jp/OpenGL%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%AC%E3%82%A4%E3%83%89-%E5%8E%9F%E8%91%97%E7%AC%AC5%E7%89%88-OpenGL%E7%AD%96%E5%AE%9A%E5%A7%94%E5%93%A1%E4%BC%9A/dp/4894717239
あと、シェーダーの本が一冊ほしいのですが、お勧めがあったら教えてください
0881デフォルトの名無しさん
2008/08/20(水) 10:41:40新しい赤本ってこれでいいんですよね?
0882デフォルトの名無しさん
2008/08/20(水) 10:54:270883デフォルトの名無しさん
2008/08/20(水) 11:28:16Cgでよければ、
http://www.amazon.co.jp/3D‐CGプログラマーのためのリアルタイムシェーダー-理論と実践―「古典的ライティング・モデル」から「グローバル・イルミネーション」まで-I・O-BOOKS-金谷/dp/4777510875/ref=sr_1_1?ie=UTF8&s=books&qid=1219199126&sr=1-1
あんまりいい本ではないが、ほかに入門書がない、と思う。
0884デフォルトの名無しさん
2008/08/20(水) 14:12:550885デフォルトの名無しさん
2008/08/20(水) 18:35:32これですね。
Amazon.co.jp: 3D‐CGプログラマーのためのリアルタイムシェーダー 理論と実践―「古典的ライティング・モデル」から「グローバル・イルミネーション」まで (I・O BOOKS): 金谷 一朗: 本
http://www.amazon.co.jp/dp/4777510875/
関連書籍にもおもしろそうなのがありました。
あと、洋書ならオレンジブックってのもありましたけど、GLSLだから2.0になってしまうんでしょうか?
Amazon.co.jp: Open Gl Shading Language: Marc Olano, Randi J. Rost, John M. Kessenich, Barthold Lichtenbelt: 洋書
http://www.amazon.co.jp/dp/0321197895
>>884
なるほど、Direct3D関連なら書籍がたくさんありますものね。
0886デフォルトの名無しさん
2008/08/20(水) 23:57:24ttp://developer.nvidia.com/object/cg_toolkit.html
シェーダーだけをFX Composerで色々いじってみるってのもいいかもしれないし
0887デフォルトの名無しさん
2008/08/22(金) 06:38:560888デフォルトの名無しさん
2008/08/22(金) 09:11:542,英語読めない(´・ω・`)
0889デフォルトの名無しさん
2008/08/22(金) 10:42:54この頭の悪そうなレスはなんだろう?・・・
0890デフォルトの名無しさん
2008/08/22(金) 22:39:12ビデオメモリから直接取り出したり出来ますか?
0891デフォルトの名無しさん
2008/08/22(金) 23:00:050892デフォルトの名無しさん
2008/08/22(金) 23:05:100893デフォルトの名無しさん
2008/08/22(金) 23:19:190894デフォルトの名無しさん
2008/08/23(土) 00:07:060895デフォルトの名無しさん
2008/08/23(土) 00:12:310896デフォルトの名無しさん
2008/08/23(土) 00:13:39GLSL -OpenGLのシェーダ言語。コンパイラがドライバに依存してるため癖がある。日本語資料はそこそこ
Cg -OpenGL、Direct3Dで使える。HLSLのルーツで構文が柔軟かつ簡単。日本語資料少なめ。将来性はぁゃιぃ
HLSL-Direct3Dのシェーダ言語。Cgと構文がほぼ同じ。サンプル及び日本語資料大量。バグに悩まされることが非常に少なく初心者向き
0897デフォルトの名無しさん
2008/08/24(日) 03:54:070898デフォルトの名無しさん
2008/08/24(日) 03:56:02煽りに釣られる低脳な自分に気づかない男の人って・・・
0899デフォルトの名無しさん
2008/08/24(日) 05:50:25煽ってないで、巣に帰れ
0900デフォルトの名無しさん
2008/08/24(日) 11:34:471.1のならいらね
0901デフォルトの名無しさん
2008/08/25(月) 07:54:35MSなんとかしろ
0902デフォルトの名無しさん
2008/08/25(月) 09:15:120903デフォルトの名無しさん
2008/08/25(月) 14:52:46Win/C++ Builderでアプリ作りましたがOpenGL使った場合、
ライセンス表示とか必要なんでしたっけ?
GLUTは使っていません。
0904デフォルトの名無しさん
2008/08/25(月) 19:06:33Form.Canvas.Handle: HDC などのウインドウやコントロールなどのHDCをOpenGLに渡してやると
きちんと画面に描画できるのですが、
TBitmap.Canvas.Handleなどのように画像のHDCを渡すと正しく描画されません。
このようなものなのでしょうか?
オフスクリーンで画像を得たい場合は、
FBO、pbuffer, CopyTexImage2Dなどを使うしかない?のでしょうか。
0905904
2008/08/25(月) 19:15:24初期化時にTBitmap.Canvas.Handleを渡したところ、SetPixelFormat に失敗し、
仮に他の(Form.Canvas.Handle)HDCなどで初期化した後、
BitmapのHDCを wglMakeCurrent に渡しても失敗するようです。
0906デフォルトの名無しさん
2008/08/25(月) 19:51:150907デフォルトの名無しさん
2008/08/25(月) 22:30:20コード付きだと最高です。よろしくお願いします。
0908デフォルトの名無しさん
2008/08/26(火) 00:39:17GL関係ないやん。
自分で勉強しなさい。
0909デフォルトの名無しさん
2008/08/26(火) 01:29:530910デフォルトの名無しさん
2008/08/26(火) 03:11:370911デフォルトの名無しさん
2008/08/26(火) 03:12:090912デフォルトの名無しさん
2008/08/26(火) 03:15:520913デフォルトの名無しさん
2008/08/26(火) 03:31:05履き違えるな。
他人に教えを乞うときはそれ相応の礼儀が必要ということだ。
0914デフォルトの名無しさん
2008/08/26(火) 03:32:46で、幼女どこ?
0915デフォルトの名無しさん
2008/08/26(火) 05:51:15ありがとうございます。試してみます!
しかし、基本的なことを聞いてしまった気がします。
赤本どこいったんだろ・・・
0916デフォルトの名無しさん
2008/08/26(火) 08:26:30「三角形 線分 交差判定」でぐぐればすぐ出てくるよ
0917デフォルトの名無しさん
2008/08/26(火) 08:48:340918デフォルトの名無しさん
2008/08/26(火) 10:30:10赤本には載ってないと思うよ。白本じゃね?
0919デフォルトの名無しさん
2008/08/26(火) 12:09:39これですか。Windows向けのOpenGL本ってあったんですね。
Amazon.co.jp: Opengl Programming for Windows 95 and Windows Nt: Ron Fosner: 洋書
http://www.amazon.co.jp/dp/0201407094
http://images-jp.amazon.com/images/P/0201407094.09.MZZZZZZZZZ.jpg
ここも参考になりました。
T.Teranishi:OpenGL:samples:offscrn
http://www.asahi-net.or.jp/~YW3T-TRNS/opengl/samples/offscrn/index.htm
ただ、当たり前のようですが PFD_DRAW_TO_BITMAPだとハードウェアアクセラレーションが効かないんですね・・・
大丈夫だろうか
0920デフォルトの名無しさん
2008/08/26(火) 18:11:21重なり部分はうまくブレンディングできているようですが、
重なりでない部分が背景色とブレンディングされてしまうのですが、どうしたらよいですか。
またサンプルコードとかありましたら教えてください
0921904
2008/08/26(火) 18:45:52Windowに描画するコードと同じコードでは描画時に毎回行う wglMakeCurrentに失敗します。
原因を探っていましたところ、DelphiのTBitmap.Canvas.Handleで得られるHDCは
ことあるごとに生成、解放されるようでして、
何故か描画時に wglMakeCurrent だけでは失敗するようです。
ChoosePixelFormat、SetPixelFormat、wglCreateContext、wglMakeCurrent
まで全部やってしまうと、OKなのですがそうすると、コンテキストを引き継げず
SetViewportなどを一通り全部を描画の度にやらないといけません。
異なるHDCに描画したい場合は、wglMakeCurrent だけ毎回すればよいと思っていたのですが、
こんなもんなのでしょうか?
それとも、Delphiの変な仕様のTBitmapを捨てて、DIBSection自前でやるべきなのでしょうか?
0922904
2008/08/26(火) 18:48:16o glViewport
> まで全部やってしまうと、OKなのですがそうすると、コンテキストを引き継げず
まで全部、描画時に毎回やってしまうと、OKなのですがそうすると、コンテキストを引き継げず
あとライブラリのソース読んだところ、変な仕様なのはTBitmapのせいというより TBitmap.Canvas(つまり、TCanvas)の仕様のようでした。
0923904
2008/08/26(火) 19:04:49変わらないようにするには、TBitmap.Canvas.LockすればOKのようです。
これには、こちらのサイトが参考になりました。
2.5 Canvas
http://www.asahi-net.or.jp/~ha3t-nkmr/vcl2-5.htm
More Secrets
http://www.asahi-net.or.jp/~HA3T-NKMR/DGS/more_secrets.htm#Secret5
思い切り Delphi依存の話で終わりアレですが、聞く場をあたえて下さったみなさんに感謝いたします。
> 異なるHDCに描画したい場合は、wglMakeCurrent だけ毎回すればよいと思っていたのですが、
> こんなもんなのでしょうか?
とりあえずはこれで回避しようと思いますが、これだけがちょっと解せない点ではあります。
0924デフォルトの名無しさん
2008/08/26(火) 19:15:35背景色を黒にしとけばいいんじゃね
0925920
2008/08/26(火) 19:56:49板が重なった部分だけをテクスチャの色をあるα値でプレンディングしたいんですが、
重なっていない部分がα値で原色されてしまっている状況なのです。
0926デフォルトの名無しさん
2008/08/26(火) 23:50:38長方形のポイントスプライトを作りたいのですが
0927デフォルトの名無しさん
2008/08/27(水) 00:36:120928デフォルトの名無しさん
2008/08/27(水) 00:37:46gl.hとかににSGIのライセンスがどうとか書いてある
だが俺には読んでもよくわからなかったのでGLeeを使った
実際のところどうすればいいのか俺も知りたい
>>925
板1を不透明で描く
板2をその上から不透明で描く
板1をα付きで描く
これでよくね?
>>926
正方形だけ
長方形は自分で描いてください
それかテクスチャを長方形になるようにαで抜くとか
0929デフォルトの名無しさん
2008/08/27(水) 11:28:033Dtextureのサイズについて何か制限があるのでしょうか
元データ480x480x96→動かない
周囲黒ピクセル480x480x128→動く
2の倍数かなと思ったのですがx,yの座標は違いますし…コンパイルは通るのですがアプリケーションを実行中に
0x693a1273 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x000003a4 を読み込み中にアクセス違反が発生しました。
と出て止まります。止まる位置は
// Render enclosing rectangles
glCallList(listName);
でListは
glNewList(listName, GL_COMPILE);
glDrawArrays(GL_QUADS, 0, nElements);
glEndList();
です。
OS:WindowsVista
toglinfo:
GL_VERSION: 2.0.6479 Release
GL_RENDERER: ATI Mobility Radeon X1400
GL_VENDOR: ATI Technologies Inc.
EXTENSION: GL_EXT_texture3D
GL_MAX_3D_TEXTURE_SIZE_EXT: 2048
よろしくお願いします
0930デフォルトの名無しさん
2008/08/27(水) 23:41:00メモリ関連で、変なところ書き込んじゃってるんじゃないか?
他に思いつかない
0931デフォルトの名無しさん
2008/08/28(木) 00:00:42最新のドライバにしてみる、もし可能なら別なグラボやPCで動かしてみるとどうだろう
0932デフォルトの名無しさん
2008/08/28(木) 00:11:33RadeonはGL_VERSIONが2.0以上でも2のn乗テクスチャ対応してないことが多いから、そこが疑わしい気がする。
480x480x128はたまたま動いてるだけって可能性も。
0933デフォルトの名無しさん
2008/08/28(木) 01:02:43OpenGLで花びら大回転というやつをしてみたいんですが、
どのようなコーディングをすればきもちよくなれますか?
あ
0934デフォルトの名無しさん
2008/08/30(土) 00:56:12モデリングソフトでCOLLADAファイルに書き出したモデルのボーンをパースして利用する感じ?
0935デフォルトの名無しさん
2008/08/30(土) 12:10:32OpenGLのデフォルトはGLfloatの場合が多いのでGLfloatかと思うのですが…
gl.hをみると以下のようになっています
typedef double GLdouble;
typedef double GLclampd;
素のdoubleとfloatだとdoubleの方が速いんですよね?
0936デフォルトの名無しさん
2008/08/30(土) 12:18:52>素のdoubleとfloatだとdoubleの方が速いんですよね?
ANSI以前のCだとfloatはdoubleに変換するから遅いんだっけ?今はそんなことないはず。
float使ってコンパイルフラグでSSEの使用をONにしときなさい。
0938920
2008/08/30(土) 13:24:22ただ、同じものを2回描画しなきゃならないのがちょっと…
なにかいい方法はないものか
0939デフォルトの名無しさん
2008/08/30(土) 14:59:13>>二つのテクスチャマップした板の重なり部分をテクスチャの色でブレンディングしたいのですが、
>>重なり部分はうまくブレンディングできているようですが、
>>重なりでない部分が背景色とブレンディングされてしまうのですが、どうしたらよいですか。
普通の alpha 合成なら
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
だが、
alpha 値を、裏にある色を透過させる割合、としたいならば、
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
にすべき。たぶん君がやりたいのはこっち。
裏にどういう物体が存在するかで、光学特性を変えようとするなら、
そりゃあめんどくさいことになるよ。
0940デフォルトの名無しさん
2008/08/30(土) 15:51:18そんな感じ
ただCOLLADAはけっこうめんどくさい
BVHがシンプルだがスキン付きのモデルの方をどうするか悩む
0941デフォルトの名無しさん
2008/09/01(月) 12:14:36floatは演算プロセッサが処理する時にdoubleに変換されてるので、
最初からdoubleを使った方が効率いい。
0942デフォルトの名無しさん
2008/09/01(月) 13:37:380943デフォルトの名無しさん
2008/09/01(月) 14:05:35太古の昔にどこかで聞いた言葉の受け売りか?
0944デフォルトの名無しさん
2008/09/01(月) 16:47:19configure.inを書きたいのですが、方法が全く分からなくて困っています。
すでにそこらへんのプラットフォームでコンパイルできるように調整されたソフトウェアのconfigure.inを
参考にしようと思っているのですが、そんなソフトウェアご存知ないでしょうか?
0945デフォルトの名無しさん
2008/09/01(月) 21:11:38でも、configureはコピペで動かすのも結構大変なんだよね・・・。
gnuに拘ってるんじゃないならcmakeを検討してみるのもいいかもよ。
configureよりビルドが速いし、VisualStudioのプロジェクトも作ってくれるし。
0946デフォルトの名無しさん
2008/09/01(月) 22:37:36お望みの環境で全部動くかどうか知らないが、
ttp://autoconf-archive.cryp.to/ax_check_gl.html
辺りを参考にしてみれば?
必要なら近辺の GLU とかも参考に。
0947デフォルトの名無しさん
2008/09/02(火) 10:33:3764ビットマシンではdouble圧勝。
0948デフォルトの名無しさん
2008/09/02(火) 11:42:030949デフォルトの名無しさん
2008/09/02(火) 17:20:05どのようにして値をセットすればいいのでしょうか?
FBOを使うとシェーダからでも深度値の取得が出来るらしいのですが、
単純にglUniform1iABRで0を入れてみてもその数字はテクスチャユニットの番号になってしまうみたいですが…
0950デフォルトの名無しさん
2008/09/02(火) 21:52:31FBOの深度バッファにDEPTHCOMPONENTのテクスチャをアタッチすれば深度値をテクスチャに入れられる
あとは普通にテクスチャとしてそいつをサンプリングすればok
0951デフォルトの名無しさん
2008/09/02(火) 23:42:56教えてくださったとおり、テクスチャをFBOに関連付けたものをglBindTextureし、
その後glUniform1iABRを実行してみたのですが、なぜか入ってるのは
深度値ではなくポリゴンに貼り付けるテクスチャでした orz
これは全く別問題でしょうか?
0952デフォルトの名無しさん
2008/09/03(水) 10:31:04テクスチャを作ってglBindTextureしたあと、
glCopyTexImage2DでinternalFormatにGL_DEPTH_COMPONENTとかを指定すると
画面の深度値をテクスチャに簡単にコピーできるから、そいつをサンプリングだ
0953デフォルトの名無しさん
2008/09/03(水) 13:15:51うまく行きました!
glActiveTextureした後にglBindTexture、glCopyTexSubImage2Dでシェーダに深度値を
渡せました。
しかし、深度値をとった後に
depht.r
とするのと、
depth.x
とでは値が違うみたいなのですが、これは単純にvec4の値の取り出している位置が
違うだけなのでしょうか?
それと、テクスチャとデプスバッファからコピーしたテクスチャのサイズは同じはずなのに、
gl_Color = vec4(texture2D(tex, gl_TexCoord[0].st).xyz, texture2D(depthTex, gl_TexCoord[0].st).r);
とすると、同じサイズのポリゴンを重ねたときに、上のポリゴン全体の
アルファが変わるのではなく、中心部分しか半透明になりません。
これは何故でしょうか?
0954デフォルトの名無しさん
2008/09/03(水) 21:56:10あとの中心だけってのもよくわからない
とりあえず自分のプログラムのバグを疑って確認するんだ
それでもおかしいようなら最新のドライバを試してくれ
もし古いドライバ使ったりするとGLSLなんかはひどくバグってたりする
0955890
2008/09/03(水) 22:27:02>>891
glReadPixelsでも充分な速度出ますか?テクスチャをロックしたときのように
直接アクセスは出来ないんでしょうか。
>>893
ttp://ruffnex.oc.to/kenji/text/api_hook/
のような方法でglFlushのときに画像取得処理をすればいいんでしょうか
0956デフォルトの名無しさん
2008/09/04(木) 01:09:14試してみたところ、rはzと同じ値になっていたようですが、もう一度
確認してみるとrとxが同じ値だったので、見間違いしてたんだと思います orz
テクスチャの方もこちらの単純ミスが原因でした orz
最後に1つだけ…
テクスチャ座標を求めるために、テクスチャのサイズをuniform vec2な変数に
入れようと、glUniform2fvで代入したのですが、なぜか0しか入らず、テクスチャ座標を
求めることが出来ません。
ちゃんと変数へのハンドルは取得されており、代入前や代入後にglGetInfoLogARBを
しても特にエラーはなく…
テクスチャの方はちゃんと代入
されているのですが。
聞いてばかりで本当にすみません orz
0957デフォルトの名無しさん
2008/09/04(木) 04:41:47どうやってshader側に渡されたuniform値を確認しているのかが
よく見えないが、
Textureサイズ(widthとheightのこと?)をuniformで渡している点から
推測してサンプリング座標を操作しているだろうから、texture2Dに
渡している s,t まわりのfragment shaderを確認してみては?としか。
GL仕様でいうところの(s,t)→(u,v)変換がtexture2D内部で実行されるのは
認識しているよね、念のため。
0958デフォルトの名無しさん
2008/09/04(木) 10:04:03ありがとうございます。参考にしてconfigureしてみます。
0959デフォルトの名無しさん
2008/09/04(木) 10:44:14まず、値がちゃんとセットされるかどうかを確認するために、
uniform vec2 texSize;
void main(void)
{
gl_FragColor = vec4(texSize.x / 640.0, texSize.y / 480.0, 1, 1);
}
というのを書き、glUniform2ivで(640, 480)を渡したのですが、texSizeにこの値が入っていれば
白い単板になるはずなのになぜか真っ青に… orz
gl_FragColor = vec4(texSize, 1, 1);
として(1, 1)を渡しても真っ青でした。
>GL仕様でいうところの(s,t)→(u,v)変換
glTexCoord2などの引数からST=UVかと思っていましたが…
ST座標が(1.5, -0.5)などとなっていたときに、(0.5, 0.5)と1〜0の間に戻す計算のことでしょうか?
0960デフォルトの名無しさん
2008/09/04(木) 21:04:34値のセットがうまくいかなかったのはglUniform2ivではなく、glUniform2fvでしたが、
texSizeをtexWidth、texHeightに分けてglUniform1fvで1つずつ渡すことにより解決できました。
これでなんとかなりそうです。
今までくだらない質問に答えていただき、本当にありがとうございました (';ω;`)
0961デフォルトの名無しさん
2008/09/06(土) 23:14:21いまはglOrthoで空間を定義して、glScalefで拡大縮小してるんだけど、
これだと一定以上に拡大したときにオブジェクトの端が切れちゃう。
CADみたいな感じで無段階拡大縮小ってどうやったらいいかな?
0962デフォルトの名無しさん
2008/09/06(土) 23:20:580963デフォルトの名無しさん
2008/09/06(土) 23:27:030964デフォルトの名無しさん
2008/09/06(土) 23:31:07orthoのnear/farも一緒に動かしたらいいんじゃね?
0965デフォルトの名無しさん
2008/09/07(日) 08:35:17glOrthoで指定するleft〜rightとbottom〜topの幅を小さくすればいいんだヨ。
見る範囲を半分にすれば、見える大きさは2倍になるでしょ?
>>964の方法でもいい(というかやってることは本質的に変わらない)けど、
プログラムは面倒臭くなると思うw
0966デフォルトの名無しさん
2008/09/07(日) 14:38:16できた!
お前ら愛してる!
0967デフォルトの名無しさん
2008/09/09(火) 10:10:04GL_TEXTURE_2Dで作ったフルカラーのテクスチャを表示したいのですが、
16bitカラーみたいな色むらが表示されます。
どのようにすれば奇麗に表示されるんでしょうか?
0968デフォルトの名無しさん
2008/09/09(火) 10:28:190969デフォルトの名無しさん
2008/09/09(火) 10:52:00レスありがとうございます。
サンプルコードをベースにしているので初期化の状況すら把握できていないのですが、
どのようにすれば初期化時に色数を指定できるんでしょうか?
0970デフォルトの名無しさん
2008/09/09(火) 13:52:29OpenGLともうひとつ画面だしてmulti-threadで表示すると
(OpenGLの画面+OpenCVの画面)
OpenCVのほうが止まる…
どうすればいいものか…
OpenGLで2画面ってだせるんでしたっけ…
0971デフォルトの名無しさん
2008/09/09(火) 14:52:102画面は出せると思う
0972デフォルトの名無しさん
2008/09/09(火) 15:04:28環境は?
OSとかglut使用とか
0973デフォルトの名無しさん
2008/09/09(火) 20:56:03できますか?
uniform int aaa;
として
vec3 bbb[aaa];
とするとエラーになります。
0974デフォルトの名無しさん
2008/09/09(火) 22:38:13規格としてはマルチスレッドについてはなにも定めてないので実装依存
描画は一つのスレッドでまとめてやるのが無難
NVIDIAの何かのドキュメントではマルチスレッドで描画するにはスレッドごとに別コンテキストにしろって話だった
0975デフォルトの名無しさん
2008/09/09(火) 22:45:41残念ながら無理だ
定数として埋め込んでその都度コンパイルしなおす、
充分大きな配列を作っておいて一部だけ使うようにする、
テクスチャにしてしまう、
なんかで対処してくれ
0976デフォルトの名無しさん
2008/09/10(水) 17:16:37glVertexPointer や glTexCoordPointer などの引数がnewやmallocで確保した通常のメモリーへのポインタなのですが、
OpenGLでは頂点配列などをVRAM上に配置することはできないのでしょうか?
大きな頂点配列を持つハイポリな人間モデルなどは、VRAMを食ってでもVRAM上に配置して速度を稼ぎたいのですが・・・。
0977デフォルトの名無しさん
2008/09/10(水) 17:23:46VBOでぐぐる
0978デフォルトの名無しさん
2008/09/10(水) 17:28:25ありがとうございます
さっそくiPhoneでも使えるか試してみるとします〜
0979973
2008/09/10(水) 18:37:210980デフォルトの名無しさん
2008/09/11(木) 00:32:43glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
としたんですが、エッジが黒く縁取りされたようになてしまいます。
これはテクスチャの作り方が悪いんでしょうか?
0981デフォルトの名無しさん
2008/09/11(木) 02:22:00エッジというのがテクスチャのボーダーという意味なら、WRAPを
GL_CLAMP_TO_EDGEやGL_REPEATで指定。
エッジが半透明と完全透明の境界という意味なら、透過テクセルの
RGBが0だからそう見えている。テクスチャのサンプリング時にバイリニア
/トライリニアで、透過テクセルのRGBもフィルタリングされているから。
フィルタ不要ならポイントサンプル(GL_NEAREST)にするだけでいいし、
フィルタリングするならエッジに隣接した透過テクセルのRGBを
正しい値で作っておく必要があるかと。
0982デフォルトの名無しさん
2008/09/11(木) 03:04:28アルファの解釈の仕方は、いわゆる "pre-multiplied alpha" というやつだね。
映像業界のポスプロの合成なんかで昔からよく使われている流儀。
この場合、ソースRGBにアルファを再度かけてやる必要はないから、
半透明合成は glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) になる。
0983デフォルトの名無しさん
2008/09/11(木) 17:56:551からOpenGLを始め、ライティングの利用にとりかかりました。
ただうまくいかず、とりあえず
glEnable(GL_LIGHTING);
glDisable(GL_LIGHT0);
glDisable(GL_LIGHT1);
以下、7まで無効化。
として「これなら真っ黒になるはずだよな」と思ったのですが、なぜかモデルの色が暗くですがはっきりと色づきます。
RGB(255,0,0)のモデルなのですが、RGB(32,0,0);くらいの色で見えるのです。
GL_EMISSIONのような自己発光は行わせていません。
なぜライトがすべて無効であっても、うっすらモデルが見えるのでしょうか?
また、もちろんglEnable(GL_LIGHTING);しなければ、モデルは真っ赤で描画されます。
0984デフォルトの名無しさん
2008/09/11(木) 18:11:20glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
でどう?
0985デフォルトの名無しさん
2008/09/11(木) 18:13:400986980
2008/09/11(木) 21:44:29ありがとうございました。
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)で出来ました。感謝!
0987ahonoko
2008/09/11(木) 22:05:22関数 glBegin()の内部処理について知ることは出来ませんでしょうか?
出来るとすれば、どのソースファイルを読めば良いのでしょう?
助けて下さい。
0988デフォルトの名無しさん
2008/09/11(木) 22:10:52ソースを見たければMesaというオープンソースなOpenGLの実装がある。
でも、なぜ直線の描画の処理を知りたいのか書いた方がいいんじゃね。
単に直線の描画アルゴリズムが知りたいのか、何かライブラリの内部処理を
知らないといけない事情があるのか。
0989デフォルトの名無しさん
2008/09/11(木) 22:17:34参考実装で良ければMesa3Dについて調べるといい
なんでそんなのを知りたいか書けばもっと適切なアドバイスが出来るかもしれないよ
0990ahonoko
2008/09/11(木) 22:44:33返信ありがとうございます。
知りたいのは、直線の描画アルゴリズムです。
言葉が足りずに申し訳ありません。
例えば、縦×横=10×10の画像を考えてみます。
そこで、2点(0, 0)と(2,9)を結ぶ直線を描画したいような場合についてです。
(0,0)と(9, 9)は綺麗に引けると思います。
しかし、例のような場合で、”ディザ”って言うのですかね?
傾きがぴったり1ではないので、
単純に直線の式から求めた座標ではなく、
描画すべき(x, y)の組み合わせが変わってくると思います。
例のように(0, 0)と(2, 9)を結びたければ、
(0, 0)、(0, 1)、(0, 2)、(1, 3)、(1, 4)、(1, 5)、(1, 6)、(2, 7)、(2, 8)、(,2,9)
といった感じの座標になるのでしょうか。
分かりにくい文章で申し訳ありません。
ご教授お願いします。
0991デフォルトの名無しさん
2008/09/11(木) 22:49:42直線 描画 アルゴリズム
とかでググった方がいいぜ
0992ahonoko
2008/09/11(木) 22:57:04本当ですね。
皆さん、ありがとうございます。
アホな質問をして、申し訳ありませんでした。
貴重なお時間をありがとうございます。
またよろしくお願いします。
0993デフォルトの名無しさん
2008/09/11(木) 22:58:200994デフォルトの名無しさん
2008/09/11(木) 23:20:52>>984-985
今手元に環境がないのですが、
984さんので直りそうな雰囲気ですね
GL_LIGHT_MODEL_AMBIENT でぐぐったら、初期値が(0.2、0.2、0.2、1.0)とありました。
Materialのambientは0,0,0,1でしたので、こちらではなさそうです。
お二人ともありがちございました。
0995デフォルトの名無しさん
2008/09/11(木) 23:27:240996デフォルトの名無しさん
2008/09/12(金) 09:10:330997デフォルトの名無しさん
2008/09/12(金) 17:56:290998デフォルトの名無しさん
2008/09/12(金) 18:33:180999デフォルトの名無しさん
2008/09/12(金) 19:27:421000デフォルトの名無しさん
2008/09/12(金) 20:10:5710011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。