5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

OpenGLスレ Part12

1 :デフォルトの名無しさん:2008/09/12(金) 19:28:29
クロスプラットフォーム 3D API OpenGLに関する話題を扱うスレッド。

禁止事項
・「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/

- 過去スレ -
OpenGLスレ Part11
http://pc11.2ch.net/test/read.cgi/tech/1177523018/

2 :デフォルトの名無しさん:2008/09/12(金) 19:31:56
- 関連スレ -
OpenGL 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

3 :デフォルトの名無しさん:2008/09/12(金) 19:33:12
- 補助ライブラリ -
■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と連携できる事も考えると、今後はダークホース的選択肢に?


4 :デフォルトの名無しさん:2008/09/12(金) 19:34:54
■サウンド
・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)


5 :デフォルトの名無しさん:2008/09/12(金) 19:38:40
http://wisdom.sakura.ne.jp/system/opengl/gl23.html

このサンプルコピペして実行してみたんですけど
ポリゴン部分が真っ白になるんです

他に何か設定必要なんですか?

6 :ahonoko:2008/09/12(金) 20:34:33
またまた質問です。

OpenGLとOpenCVのメリットやデメリットを教えて下さい。
OpenCVは、
 ・画像処理のAPIがすぐに使える。
 ・OpenGLと同様、直線を引いたりすることが出来る。
といった感じですよね。

OpenGLがOpenCVに比べて良い点とは何でしょう?

どちらを使用して、開発をするか検討中です。
よろしくお願いします。

7 :デフォルトの名無しさん:2008/09/12(金) 20:43:17
OpenCVは2D画像処理
OpenGLは3D
だろ
何開発するつもりなんだよ

8 :ahonoko:2008/09/12(金) 20:52:03
>>7
なるほど。

デバッグやアルゴリズムの確認・評価にOpenCVを使用することにし、
当初の予定通り、OpenGLで開発を進めていくことに致します。

ありがとうございます。

9 :デフォルトの名無しさん:2008/09/12(金) 23:40:39
>>5
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
を追加したら上手くいくかも

10 :デフォルトの名無しさん:2008/09/13(土) 18:01:41
OpenGLを使って簡単なお絵かきプログラムを組んだのですが
マウスのポジションをコールバックする回数が少なすぎて
マウスを速く動かすと線がカクカクしてしまいます.
MotionFuncを呼ぶ回数が多くなる方法を知っている方いらっしゃいますか?
もしくはC++とOpenGLの限界なんでしょうか?

11 :デフォルトの名無しさん:2008/09/13(土) 18:25:12
>>10
得られた点列を曲線にするなどして入力を補間したらいいかと。
それで満足できなかったらWin32APIとかOSのAPIを直接叩けばいいと思うよ。

12 :デフォルトの名無しさん:2008/09/13(土) 19:21:42
ポイントスプライトは頂点がひとつしかありませんから
そのものを回転することはできませんよね…?

13 :デフォルトの名無しさん:2008/09/13(土) 19:49:14
そうですね

14 :デフォルトの名無しさん:2008/09/15(月) 05:43:11
OpenGLにてWin32APIの UpdateLayeredWindow(); 用の32bitのアルファ付き画像をレンダリングしたいのですが、
どうするのが簡単な方法でしょうか?

・BitmapのHDCにレンダリング(アルファ取れる?)
・glReadPixels

うーん

15 :デフォルトの名無しさん:2008/09/15(月) 09:09:30
>>14
普通にglTexImage2Dでテクスチャを作ればいいと思うけど、それじゃ何か問題があるの?

16 :デフォルトの名無しさん:2008/09/15(月) 09:56:23
OpenGL ESでColorDepthを32bitにするにはどうすれば良いのでしょうか?

17 :デフォルトの名無しさん:2008/09/15(月) 10:07:38
>>15
いや、GLでレンダリングした結果をWin32の半透明ウィンドウとして
使いたいという意味では?

>>14
その2つでは、glReadPixelでDIBに取得してBitBltのほうが適当かと、
32bits DIBに描画してBitBltは、MSのソフトウェア実装でGL描画が実行される
可能性が高いような。

GPUのピクセルフォーマットのサポート状況にもよるけど、PbufferSurfaceを作り、
そのHDCを使ってUpdateLayeredWindowもできるのかな?

18 :デフォルトの名無しさん:2008/09/15(月) 10:35:41
>>16
eglChooseConfigでEGL_BUFFER_SIZEに32を指定。
失敗した場合、その環境では32bitsのカラーバッファはサポートされていないことに

19 :デフォルトの名無しさん:2008/09/15(月) 22:38:46
人が作ったOpenGLアプリケーションをフックして画像を取得したいんですが、
glFlushをフックすればいいんでしょうか?

glFlush

glFlush
glReadPixels
画像を保存とかする

20 :デフォルトの名無しさん:2008/09/15(月) 23:59:36
つ GLIntercept

21 :デフォルトの名無しさん:2008/09/16(火) 13:23:02
行列スタックについて質問です。
glPushMatrix と glPopMatrix は便利なのですが、
・大きさを三倍にし30度傾けたモデルを、複数の場所に移動させて描画したい
という場合に行列の乗算の順番の問題からうまくできません。

glTranslatef
glRotatef
glScalef
draw

という順番に処理を行う(と思う)のですが…。これだとうまくglPushMatrixを活用できません
これが仮に逆だったら(乗算の前後関係が逆だったら)
glScalef
glRotatef
glPushMatrix
 glTranslatef
 draw
glPopMatrix
glPushMatrix
 glTranslatef
 draw
glPopMatrix
このように、非常に手軽だと思います。
何かこの手のやりようが他にあるのでしょうか?

22 :デフォルトの名無しさん:2008/09/16(火) 13:37:45
1. 描写する前にモデルを三倍にして30度傾けておく
1.1 CPUで
1.2 Transform Feedbackで
2. GLSLでなんとかする
2.1 三倍と30度をuniform変数に
2.2 せっかくなのでGeometry Instancingで

23 :デフォルトの名無しさん:2008/09/16(火) 13:45:33
>>22
1はモデルデータを書き換えてしまうわけですね。ちょっとこれだと、傾けたい角度が動的に変化する場合に負荷がきつそうですね
2はシェーダですね。(iPhoneでのOpneGL活用をやっているのですが)iPhoneにシェーダが使えたか確認してみます。

意外と行列操作そのものの機能が乏しいのでしょうか。
Direct3DにあるD3DXMATRIXのようなものも見当たりませんし、glTranslatefなどを使わず行列そのものを適用する方法も見つかりませんでした
glSetMatrix(float *matrix);
みたいなものがあれば、行列系は全部自前でやってしまうのですが・・・


24 :デフォルトの名無しさん:2008/09/16(火) 14:16:37
つglLoadMatrix*()

25 :デフォルトの名無しさん:2008/09/16(火) 14:49:44
>>9
いけました。
ありがとうございます^^

26 :デフォルトの名無しさん:2008/09/16(火) 15:03:10
>>24
!!
あとは自前で行列クラスを作れば良いですね。
ありがとうございました。

glRotatefなどの行列乗算が適用順番と逆順なのは、カメラ座標への変換(最後に行うべき変換)を最初に宣言させたいからですかね。
というか、適用昇順と逆順は結構使い分けたい場合が多いので、glTranslatefに2種欲しかったですね・・・

27 :デフォルトの名無しさん:2008/09/16(火) 20:01:46
>>23
> 傾けたい角度が動的に変化する場合に負荷がきつそうですね
ちょっと考えればそれは一概には言えないことに気づくはず。

28 :デフォルトの名無しさん:2008/09/17(水) 00:42:48
4ByteでGL_RGBA指定でテクスチャーを作っているのですが、
描画してもアルファの部分が抜かれません。
何か設定がいるのでしょうか?

29 :デフォルトの名無しさん:2008/09/17(水) 01:22:29
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
とかちゃんとやってるだろうか

30 :デフォルトの名無しさん:2008/09/17(水) 01:34:27
やってませんでした><

31 :デフォルトの名無しさん:2008/09/18(木) 23:10:57
一応これ置いときますね

32 :デフォルトの名無しさん:2008/09/18(木) 23:11:55
書き込んじまったorz

つ GL_ALPHA_TEST

33 :デフォルトの名無しさん:2008/09/19(金) 07:08:43
vbogl.tlbのedxさんめちゃくちゃいい人だ。メールしたら速攻返事きたw

34 :14:2008/09/20(土) 09:24:51
>>15-17
レス遅くなりました
やっぱり、glReadPixelになるのかあ。
画面に表示せずにでもバッファから取得できるものなのだろうか・・・
試してみたいと思います。


35 :14:2008/09/20(土) 09:27:26
x やっぱり、glReadPixelになるのかあ。
o やっぱり、ハードウェアきかせるには glReadPixelになるのかあ。

開発環境のマシンがドライバが古いせいでか、
glReadPixelがメッチャ遅いんですよね
ドライバ新しくしたら、WMPとかが真っ黒になったりするので、
古いのバージョンのドライバを使ってたりします。
Geforce6600だったと思うけど、ビデオカード買い換えるか・・・orz

36 :デフォルトの名無しさん:2008/09/20(土) 11:53:44
glReadPixelsが重いのは大抵のハードウェアで共通。
GF6600ならPBOなりFBOなり使え。
でもpbufferは勘弁な。

37 :デフォルトの名無しさん:2008/09/20(土) 13:53:09
http://www.sgi.com/company_info/newsroom/press_releases/2008/september/opengl.html

38 :デフォルトの名無しさん:2008/09/20(土) 22:59:59
OpenGLでスキンメッシュボーンアニメーションを実装しているのですが、クォータニオンから回転行列への変換って一意じゃないのでしょうか?

一部のアニメーションフレームでボーンが360度一瞬クルッと回ってしまうというバグに困ってます。

39 :デフォルトの名無しさん:2008/09/20(土) 23:35:00
そのおかしなアニメーションの時のクォータニオンと変換した行列を調べて何がいけないのか原因をつきとめればいい
バグに困ったらデバッグしよう

40 :デフォルトの名無しさん:2008/09/21(日) 00:34:51
>>39
やっぱり地道なデバッグですよね。

デバッグしてたら少し原因が分かりかけてきました。
問題のフレームでクォータニオンの大きさが限りなく0に近くなっているようです。
自分の実装の仕方が悪いみたいです。ありがとうございました。

41 :デフォルトの名無しさん:2008/09/21(日) 21:30:20
重なる向きで正しい結果が出る実装は
Gemsに載ってる。
それでも反対向きの場合はダメだったはず
だけど、現実的にはあり得ないからOK
というやつだった。

42 :デフォルトの名無しさん:2008/09/25(木) 02:20:49
質問です
glDrawPixelsで背景を描いて
GL_BLENDをなど有効にしてglBeginなどでポリゴンを描いても
ポリゴン同士はアルファが効いてるんですが
背景がポリゴンから透けてないんです
他に設定がいるんでしょうか?

43 :デフォルトの名無しさん:2008/09/25(木) 03:22:02
解像度指定(640x480等)のフルスクリーンにするにはどうすればいいでしょうか?



44 :デフォルトの名無しさん:2008/09/25(木) 12:00:43
>>43
お前の環境がわからんので、とりあえずこれでも挙げとく
http://developer.apple.com/documentation/GraphicsImaging/Conceptual/OpenGL-MacProgGuide/opengl_fullscreen/chapter_4_section_1.html

45 :デフォルトの名無しさん:2008/09/26(金) 13:50:21
glutGameModeString

46 :デフォルトの名無しさん:2008/09/26(金) 14:25:55
>>43
俺は、DirectDrawでやってるけど、
何故か一部のマシン(ノートPC)環境で画面が真っ黒になるという現象が
発生しているんだよなあ。

Windowモード→OpenGL初期化→表示、実行→フルスクリーンに切り替え→まっくら
→Windowモードにもどす→また表示される

なんとかしたいんだけどもねえ。
フルスクリーンになってから、最初期化しないといけないのかも
DirectXみたいにサーフェスロストとかってしないよな?OpenGLは。
そもそもWindowモードに戻したらまた表示されるのがわからんな。

47 :デフォルトの名無しさん:2008/09/28(日) 05:20:27
シェーダー系の処理について質問です

よくテクスチャにシーンをレンダリングして、
それにシェーダーでエフェクト処理をかけて画面に表示してるとかありますが、

テクスチャなどは2のn乗サイズがメジャーですが(512x512とか)
画面は4:3とかがメジャーだと思います(640:480とか)

そこで、
・縦横比が合わない出力バッファで、どう言う処理概念で出力しているのでしょうか?
・テクスチャと言う事は、最終的な処理は、画面全体に2Dポリゴン+レンダリングテクスチャ、とかになるのでしょうか?


48 :デフォルトの名無しさん:2008/09/28(日) 12:29:37
2のn乗サイズにならないテクスチャは
* OpenGL2.0以降かGL_ARB_texture_non_power_of_twoがあれば問題なく使える
* GL_ARB_texture_rectangleとかを使う
* でかい2のn乗サイズのテクスチャの一部だけ使う
のどれか
あと最終的には全画面を覆うポリゴンにシェーダなりでテクスチャにフィルタかけながら描画になるね

49 :デフォルトの名無しさん:2008/09/29(月) 19:29:56
誰か頼む・・・
OpenGLをHP-UXにインストールするにはどうすればいいか、
教えてくれ・・・

Solarisへのインストーラは直ぐに見つかったんだが、
HPのがどうしても見つからん

50 :デフォルトの名無しさん:2008/09/29(月) 21:28:11
HPにOpenGL使いたいがどうすればいいかと聞く方がよさそうな。

51 :デフォルトの名無しさん:2008/09/29(月) 23:12:35
OpenGLを用いてシミュレーションをしたいんですが,
バイナリ形式で書かれたSTLという拡張子のファイルを読み込むライブラリないし
データ形式に関して解説されている資料はありませんでしょうか?

52 :デフォルトの名無しさん:2008/09/30(火) 01:52:01
>>51
拡張子でぐぐれば拡張子辞典が出てくる。
STLを調べればStereoLithographyが見つかる。
あとは"StereoLithography file format"とかでぐぐる。


って、おい!
質問するから普通に検索しても見つかないのかと思ったら
stl file formatでヒットするじゃねーか。だいじょぶかw
まさか日本語じゃなきゃ分からないとか言わないよねw

53 :デフォルトの名無しさん:2008/09/30(火) 20:00:52
スプライト(矩形)表示したいんですけど、

座標を(-1.0,-1.0) - ( 1.0, 1.0) とかでなく、
ドット指定 (0,0) - (640,480) ってできないんですか?


54 :デフォルトの名無しさん:2008/09/30(火) 21:43:01
gluOrtho2Dとかでお好みの座標系を設定すればいいと思うよ

55 :デフォルトの名無しさん:2008/10/01(水) 00:02:37
GL_TEXTURE_MAG_FILTERで設定できるのはLINEARとNEARESTがあると思うのですが,
独自に(LINEARやNEARESTじゃないものを自分で定義)拡大時の補間方法を定義できないでしょうか。


56 :デフォルトの名無しさん:2008/10/01(水) 00:21:59
ピクセルシェーダで必要な数だけサンプリングして適当に混ぜ合わせればできる
t-pot バイラテラルフィルタでぐぐると具体例が

57 :デフォルトの名無しさん:2008/10/01(水) 09:56:50
>>53
俺はこんな感じでやってる
glMatrixMode(GL_PROJECTION);
glPushMatrix;
glLoadIdentity;
glOrtho(0, ScreenWidth, ScreenHeight, 0, -10000, 10000);

glMatrixMode(GL_MODELVIEW);
glPushMatrix;
glLoadIdentity;

58 :デフォルトの名無しさん:2008/10/04(土) 18:18:46
今更だけど動作検証用にvista導入して最新ドライバで
自作プログラムを動かしてみたら予想より良く動いて驚いた

ちなみにアプリはsm2.0世代ターゲット(ARBアセンブラシェーダ)、
グラボはゲフォ9600GTでD3D9の95%程度のFPSが出てた
ラデは知らん

59 :デフォルトの名無しさん:2008/10/04(土) 18:24:20
計算間違ってた、大体90%程度ね

60 :デフォルトの名無しさん:2008/10/05(日) 20:12:06
ttp://www.4gamer.net/games/043/G004345/20080825042/
カーマックに倣ってレンダリングスレッドを独立させてみたけど
苦労した割りにCPUファンがやかましくなっただけで別段早くならんかった

まあもともと1コアすら使い切ってなかったから当たり前なんだろうけど

61 :デフォルトの名無しさん:2008/10/07(火) 10:33:29
どなたかプログラミングの宿題
3〜4題(大学1年生レベル)のアルバイト
日当8千円くらいでやってくれる方いませんか?

62 :デフォルトの名無しさん:2008/10/07(火) 11:22:20
いません

63 :デフォルトの名無しさん:2008/10/07(火) 11:37:52
金出すなら学校のツテで探したほうが早いだろ

64 :デフォルトの名無しさん:2008/10/07(火) 12:24:55
>>60
計算スレッドとレンダリングスレッドを分けるのがナウい
一度やって懲りたけど

65 :デフォルトの名無しさん:2008/10/07(火) 12:41:58
描画するだけならともかく、ゲームになると結構いろんなところでCPUは食うから
分散させれるなさそうしたほうがいいんじゃ。ゲームの種類にもよるんだろうが。
まーシングルCPUでは無意味ですがね。

66 :デフォルトの名無しさん:2008/10/07(火) 12:54:30
>>61
ソースの書き方で大学1年レベルかどうかばれると思うよ

67 :デフォルトの名無しさん:2008/10/07(火) 13:10:15
>>66
ソースは枠があって、座標軸やらポリゴン構成やらの設定を
する部分だけすげかえるような感じなんです。
あまり詳しくかけないですが、工学系の院にいれらておる
法律家で、畑違いでちょっと困っているんです。

68 :デフォルトの名無しさん:2008/10/10(金) 11:16:55
VBOを使うときはまず初期化処理の段階でglBufferData()でバッファを確保しますよね

プログラム中でバッファを再び確保しなおしたい時(つまりデータを書き換えて再度送りたい時)
glBufferData()を呼び出して確保しなおしているのですが
この際,元々確保されていたバッファをクリアしなくて良いのでしょうか?

69 :デフォルトの名無しさん:2008/10/10(金) 23:51:49
バッファをテクスチャに、glBufferDataをglTexImage*に読み替えてみればわかると思うよ。

70 :デフォルトの名無しさん:2008/10/11(土) 19:46:05
最近OpenGL ESから勉強し始めて、なんとなくOPEN GLそのものは理解しました。

画面の表示をピクセル単位で制御しようとして、
今表示してるものは glReadPixels で取得するとこまでは成功しました。
で画像を弄くったあとに、表示しようと思ったら
OpenGL ESには、glDrawPixelsがなかった…

こういう場合どうするのが一般的なんでしょう。
ピクセルデータの入った配列から毎フレーム、glTexture2D作るんですか?

よろしくお願いします。

71 :デフォルトの名無しさん:2008/10/11(土) 21:35:47
Texture はあらかじめ作成しておいて、glBindTexture 後、
glTexSubImage2D で該当部を書き換えがおすすめ

72 :デフォルトの名無しさん:2008/10/11(土) 21:36:47
と、思ったけど、glTexSubImage2D が OpenGL ESにあるかどうかは知らない。

73 :デフォルトの名無しさん:2008/10/11(土) 22:29:43
>>71

glTexSubImage2D ありました!!
ちょっとこれから実験してみます。
ありがとうございます!!

74 :デフォルトの名無しさん:2008/10/12(日) 02:40:19
>>71

無事かけるようになりました thx!!です

75 :デフォルトの名無しさん:2008/10/13(月) 11:08:32
glVertex4についての質問なんですが、4つめの引数のwは他のxyzに対してどのように作用しているのでしょうか?
4次元の同次座標を3次元の空間座標に変換する場合、xyzをwで割ると思うのですが、
glVertex3にwで割ったxyzを入れたときと、glVertex4に同次座標をそのまま入れたときの描画結果が
違うときがあるのですが…
もし、glVertex4がxyzをwで割っているのならば、引数の値が(-1, -1, -2, -2)と(0.5, 0.5, 1, 1)で描画結果が同じに
なるはずですが、全く描画結果が違うので混乱してしまっています orz

76 :75:2008/10/13(月) 11:39:33
書き忘れてましたが、モデルビュー行列とプロジェクション行列は一応単位行列に
してあります。単位行列になっているのが原因とは思えませんが…

77 :デフォルトの名無しさん:2008/10/13(月) 13:26:52
>>75
w < 0 は動作保証されない。正の値を使う。


78 :75:2008/10/13(月) 17:53:10
>>77
ということはw<0の時に正しく描画されたのはたまたまだったということですね。
喉のつっかえがとれてすっきりしました。
ありがとうございます。

79 :デフォルトの名無しさん:2008/10/15(水) 10:13:24
glutMainLoop()を使わずに自分で作ったfor文の中で、
glutDisplayFunc()で登録した関数呼び出したいんですが可能ですか?

glut使った場合は必ずglutMainLoopを使わないといけないの?

80 :デフォルトの名無しさん:2008/10/15(水) 11:53:22
つfreeglut

81 :デフォルトの名無しさん:2008/10/16(木) 03:10:13
みなさん、
The OpenGL
Graphics System:
A Specification
(Version 3.0 - August 11, 2008)
を読まれましたか?

The Deprecation Model
を読むと、
glBegin, glEnd, glVertex, glFrustum, glPopMatrix, glPushMatrix, glTranslate*
glDrawPixels, glNewList, glEndList, 等々
が将来無くなるらしいですよ。

82 :デフォルトの名無しさん:2008/10/17(金) 22:21:58
シェーダでもOpenGLが自動的に設定してくれていたattribute変数やuniform変数が使えなくなるぞ

83 :デフォルトの名無しさん:2008/10/17(金) 23:24:49
ある程度真面目に作った場合はどれも使わなくなる機能だから消えるのは仕方ないかもれない
しかし敷居は上がるよな
その辺をフォローするライブラリみたいなのを用意してくれればいいんだが
OpenSceneGraphとかNVSGを使えとか言うのかな

84 :デフォルトの名無しさん:2008/10/18(土) 00:27:08
誰か固定機能パイプラインの関数と互換性のある関数を(OpenGLのちゃんとした関数で)実装したりしそうだけどな。

glBegin, glEndは実行効率は悪いだろうけどちょっと何かをレンダリングしたいときに
ささっとコードを書けて便利だよね。


85 :デフォルトの名無しさん:2008/10/18(土) 00:50:56
うわ、マジなのか。

初心者がまず最初に覚える関数じゃん。
敷居があがっちゃうな、確かに。

86 :デフォルトの名無しさん:2008/10/18(土) 00:55:28
まあ今までglNantoka()だったのがgluNantoka()に変わるだけだろうな

87 :デフォルトの名無しさん:2008/10/18(土) 08:02:07
えええええ
glBeginとかなくなったら、どうやって描画寸の???

88 :デフォルトの名無しさん:2008/10/18(土) 08:24:04
glPush・PopMatrix使って、中級者レベルになってきたんじゃね?って
俺はどうすればいいんですか><

89 :デフォルトの名無しさん:2008/10/18(土) 10:02:31
今でもドライバの中ではそれらの関数とかはvboなりに置き換えてからやっていたりするので、
>>86なだけだろうよ。変換する関数がもっと手前(ユーザー側)に出てくるだけ。

90 :デフォルトの名無しさん:2008/10/18(土) 10:33:00
http://www.devklog.net/2008/08/23/forward-compatible-opengl-3-entry-points/

Matrix 関連は shader uniforms あたりを使うことになるんですか?

91 :デフォルトの名無しさん:2008/10/18(土) 16:02:57
アホな質問ですみません
OpenGLに行列の乗算の関数ってありますか?


92 :デフォルトの名無しさん:2008/10/18(土) 16:07:52
すみません自己解決しました
glMultMatrix() ですね

93 :デフォルトの名無しさん:2008/10/19(日) 00:07:54
そのうちなくなるけどな

94 :デフォルトの名無しさん:2008/10/19(日) 12:48:47
>>89
もっと奥(シェーダ、GPU側)に行くんじゃないの

95 :デフォルトの名無しさん:2008/10/20(月) 01:18:51
ビットマップテクスチャにglColorで色加えることってできますよね(多分)。
glTexEnviを使って、ゴニャゴニャ弄ればいけるとは思うんですが、
組み合わせがよくわからず苦戦中です。

とりあえずアプローチは間違ってないでしょうか?
よろしくお願いします。



96 :デフォルトの名無しさん:2008/10/20(月) 17:42:39
乗算合成はできるけど加算合成は無理じゃね

97 :デフォルトの名無しさん:2008/10/20(月) 21:31:17
シェーダ使って足せばいいんじゃね

98 :デフォルトの名無しさん:2008/10/20(月) 22:23:17
シェーダだけ覚えてしまえば他のいろいろ面倒なことを完全スルーできるから楽だな
GMA950でGLSL使えなくて(´・ω・`)だったけどCg使えばいいしな

99 :95:2008/10/21(火) 00:45:52
なるほどです。シェーダ勉強しはじめます!!
ありがとうございます!!

100 :デフォルトの名無しさん:2008/10/22(水) 13:28:40
100get

101 :デフォルトの名無しさん:2008/10/23(木) 23:58:40
もうゴテゴテした固定機能パイプラインの関数なんて覚えなくていい。
vertex shaderでは値をそのまま通すだけ。
fragment shaderでは法線ベクトルを0〜1の範囲にスケーリングしてfragmentのcolorに設定する。
ただ、これだけでいいんだ。

102 :デフォルトの名無しさん:2008/10/24(金) 01:17:54
シェーダー使えればどんなに楽か。

使えないパソコンの方が圧倒的に多いだろ。
特にノーパソ。何とかしてくれ。

103 :デフォルトの名無しさん:2008/10/24(金) 01:21:56
つmacbook

104 :デフォルトの名無しさん:2008/10/24(金) 02:39:19
つソフトエミュ

105 :デフォルトの名無しさん:2008/10/24(金) 07:23:23
ARB_fragment_programならノートでも結構使えるよ
アセンブリ直接書くのはつらいからCg使うことになるだろうけど
使えるという程の速度が出ないと言うことなら仕方ないが

106 :デフォルトの名無しさん:2008/10/25(土) 09:06:58
何年遅れだよって感じだが
フォンシェーディングとシャドウマップで次世代な気分になった
ttp://www1.axfc.net/uploader/Li/so/18674.mp4

でも頂点シェーダからテクスチャにアクセスできないんで
仕方なくCPUでスキニングとか全然次世代じゃねぇ('A`)

107 :デフォルトの名無しさん:2008/10/25(土) 10:07:12
このぐらいのモデルならスキニングでテクスチャにアクセスする必要はないと思うが・・・
骨が指の関節にまで入ってたりでもするのか?

108 :デフォルトの名無しさん:2008/10/25(土) 17:34:18
いい感じに次世代な気分
でもノーマルマップとHDRが今の次世代(?)標準らしいぜ

スキニングはテクスチャ必要ないと思うけど
バーテックスシェーダのuniform変数の数が足りないなら
足りそうな所まででモデルを分けて描画という面倒な手もある
他には頂点座標の値を1次元テクスチャに書く方法でスキニングをピクセルシェーダでやるとか

まあ今はCPUもコア数余ってたりするから
余程頂点数が多くない限りスキニングはCPUでもいいんじゃないか
別スレッドでやればマルチコア対応で次世代気分だよ

109 :デフォルトの名無しさん:2008/10/26(日) 00:42:11
VRAMに頂点データ置いておいてGPUだけでボーン変形して
しかもそれをディスプレースメントマッピングしたりとか
表示だけならいいんだろうが当たり判定したい場合はどうするんだろうな
もしかして当たり判定もGPUでやる時代になるのか

110 :デフォルトの名無しさん:2008/10/26(日) 00:54:44
表示モデルとコリジョンモデルは分けておく
CUDAかなんかで一度実装すればCPU/GPUのどっちでも実行できるって世界が理想だけど

111 :デフォルトの名無しさん:2008/10/26(日) 09:21:11
> 表示モデルとコリジョンモデルは分けておく
だな

112 :デフォルトの名無しさん:2008/10/26(日) 14:58:51
めり込んだり貫通したりしても見なかったことにするというわけか

見た目そのままで判定したい場合はやっぱりCPUで頂点処理することになるはずなので
そのうち頂点シェーダは要らない子になるな

113 :デフォルトの名無しさん:2008/10/26(日) 15:35:31
今のシェーディングはピクセル単位だからそういう意味でも頂点「シェーダ」ではないしな
やるにしても頂点シェーダからジオメトリシェーダはOpenCLとかでの
汎用処理になっていくんじゃないかと思う

114 :デフォルトの名無しさん:2008/10/26(日) 16:43:37
表示に最適なデータ形式とコリジョンに最適なデータ形式は一致しない
表示とコリジョンのレベルを一致させるにしてもめりこみ対策をするにしても
やっぱり分離しておくほうがいろいろと便利

115 :デフォルトの名無しさん:2008/10/29(水) 18:46:12
ジョン・カーマックの宇宙船(?),飛行コンテストを制する
ttp://www.4gamer.net/games/000/G000000/20081029023/

116 :デフォルトの名無しさん:2008/10/29(水) 18:53:19
シェーダーってのが何なのか簡潔に教えてください><
調べてみたんですが、サンプルから入っていくのでよく分からない。

シェーダーを使うことによって得られる利点ってのは何なんですか?
CPUを使わないでGPUで演算?わけわかからん


117 :デフォルトの名無しさん:2008/10/29(水) 19:06:02
この連載を最初から順番に読めば分かる
ttp://journal.mycom.co.jp/column/graphics/001/index.html

118 :デフォルトの名無しさん:2008/10/29(水) 19:08:26
>>117
ありがとう。記事にバーチャ載ってて少しテンション上がった。


119 :デフォルトの名無しさん:2008/10/29(水) 19:35:49
あまりに正直な感想でちょっと笑ってしまった
でもまぁ大抵そういうところから入っていくんだよね

120 :デフォルトの名無しさん:2008/10/29(水) 22:18:16
普段は調子こいて「今シェーダーが熱い!」
とかいってるけど本当はよくわかってない俺にちょうどいい記事があるときいて

121 :デフォルトの名無しさん:2008/10/30(木) 00:11:30
>>115
ようやくかよw
まだあきらめてなかったんだな

122 :デフォルトの名無しさん:2008/10/30(木) 10:28:30
>>117
すばらしいまとめ。最初は歴史だけだったが、
後半から3Dのシェーダーがらみのパイプラインの詳しい解説。
ちと長いがw

123 :デフォルトの名無しさん:2008/10/30(木) 10:33:13
>>117
>>116じゃないけど、>>117を一通り読んだ俺にオススメのシェーダー本を教えてください

124 :デフォルトの名無しさん:2008/10/30(木) 10:49:49
個人的にはシェーダに関してはネットがあれば本を買う必要は全く感じないな
強いて言えば赤本でGLSLの解説が日本語で読める位か

125 :デフォルトの名無しさん:2008/10/30(木) 12:55:47
red book

126 :デフォルトの名無しさん:2008/10/31(金) 06:53:08
赤本は最近のだとシェーダーの説明してるの?
スゲーな…

オレンジ本って言うの?
OpenGL Shading Language
英語だし、内容が古いけど、これが一番詳しい気がする

後、More OpenGL Game Programmingは持って無いが気になる

127 :デフォルトの名無しさん:2008/10/31(金) 09:28:39
>>124-126
ありがとう
本が好きなんですw
過去スレ除いたら同じような質問が出てたので、それも参考にできました。
テンプレに入れといていい気がする。

赤本の英語版がPDFで読める?という情報も過去レスにあったのですが、
見つからない・・・

■書籍
・赤本(OpenGL1.5と2.0を網羅。シェーダーに関しても少し載っている)
Amazon.co.jp: OpenGLプログラミングガイド 原著第5版: OpenGL策定委員会, 松田 晃一: 本
http://www.amazon.co.jp/dp/4894717239
http://images-jp.amazon.com/images/P/4894717239.09.MZZZZZZZZZ.jpg

・古い赤本が無料で読める(英語)
http://www.opengl.org/documentation/red_book/ (1.1)
http://www.glprogramming.com/red/ (1.1)

・オレンジ本(シェーダー、GLSLに関して。英語。少しふるい)
Amazon.co.jp: Open Gl Shading Language: Marc Olano, Randi J. Rost, John M. Kessenich, Barthold Lichtenbelt: 洋書
http://www.amazon.co.jp/dp/0321197895
http://images-jp.amazon.com/images/P/0321197895.09.MZZZZZZZZZ.jpg

・Cgの本(Cgを使ったシェーダー入門本)
Amazon.co.jp: 3D‐CGプログラマーのためのリアルタイムシェーダー 理論と実践―「古典的ライティング・モデル」から「グローバル・イルミネーション」まで (I・O BOOKS): 金谷 一朗: 本
http://www.amazon.co.jp/dp/4777510875
http://images-jp.amazon.com/images/P/4777510875.09.MZZZZZZZZZ.jpg

128 :デフォルトの名無しさん:2008/10/31(金) 09:30:46
> 個人的にはシェーダに関してはネットがあれば本を買う必要は全く感じないな
具体的にはどの辺をよめばいいんでしょうか?
仕様書?

129 :デフォルトの名無しさん:2008/10/31(金) 21:59:21
OpenGLのプログラミングをこれからはじめようとしている初心者です(・・;)
質問があります。

WindowsVistaに対応しているGLUTは存在しないのでしょうか?
また,GLUTが使えない場合は,Win32を使ってプログラムするのが無難でしょうか?

よろしくお願いします。


130 :デフォルトの名無しさん:2008/10/31(金) 22:32:38
>>128
おいらはOpenGLで調べたいことがあったら、まずは仕様書読むようにしている。
仕様書読んでもよくわからんかったらググるか、それもでもわからんだらここで聞けばいいんでない。

>>129
まずはお手元のglutがvistaで動くか試す。
それが駄目ならfreeglut使うとかglfw, gluxとか使ってみてはどうだろうか。
Win32apiの勉強もしたいのなら、glut系のラブライブラリを使わずにやればいいけど
結構大変だと思う。

131 :デフォルトの名無しさん:2008/10/31(金) 23:53:27
おいらはOpenGLで調べたいことがあったら、まずはここで聞くようにしている。
ここで聞いてもよくわからんかったらググるか、それもでもわからんだら仕様書読めばいいんでない。

132 :デフォルトの名無しさん:2008/10/31(金) 23:58:50
最低の人間ですね

133 :デフォルトの名無しさん:2008/11/01(土) 00:46:26
>>130
ありがとうございます。m(_ _)m

やはり、公式にvistaまで対応しているglutは、ないんですかね。
windowsXPまで対応しているglutが動くか試してみます。

134 :デフォルトの名無しさん:2008/11/01(土) 16:32:41
俺はGLUT使ってないけど、SDLとかglfw使ったプログラムもVistaで問題無く動いてるよ
多分GLUTも動くはず

135 :デフォルトの名無しさん:2008/11/02(日) 03:58:37
赤本のためにglutが書かれる

glutがメンテされなくなったので
openglut, freeglut開始

glut互換なapiでは物足りないのでglfw開始

glut系がほとんどメンテされてないのでglux開始←今ここ

??


136 :デフォルトの名無しさん:2008/11/02(日) 13:14:30
約2年放置されてんじゃん
ttp://www-sop.inria.fr/reves/Sylvain.Lefebvre/glux/



・・・と思ったらこっち?Ogreの人らが作ってるのか
ttp://code.google.com/p/glux/

137 :デフォルトの名無しさん:2008/11/04(火) 00:56:12
OpenGL で Fetch4 使えたんで日記投下・・・と思ったけど日記にもならないほど簡単だった。
単に GLSL で vec4 texture4( sampler2D, vec2 ) を使うだけ。
左下基準で
r g
a b
の順番で4つ読んでくれる。
internalformat は DEPTH かつ FLOAT である必要はなくて、ALPHA4 とか1要素ものはなんでもおkだった。
3850、4850で動作確認。GPUSAによると2xxx以下じゃ動かないらしい。
GL_AMD_texture_texture4のドキュメントが出ないとわからないけど、ひょっとしたら2xxx以下は
DirectXみたいにglTexParameteri辺りで設定するとtexture2Dでいけるようになったりするのかもしれない。

2要素以上の internalformat に無理やり使うと一応テクスチャから読んではくれる。
但し読んでくれるのは1つだけで、テクスチャの内容を xy [ z [ w ] ]、vec4 を rgba であらわすと
・2要素
g = b = x
r = a = y
・3要素
r = y
g = z
b = x
a = 1
・4要素
r = y
g = z
b = x
a = w
ま、意味はないなw

138 :デフォルトの名無しさん:2008/11/05(水) 12:42:13
GLの色の丸め方について質問です。
浮動小数点値で色を指定してmビット深度のバッファにレンダリングする場合、
その丸め方について定式化された方法はあるのでしょうか。
灰色(L=0.5)を出そうとするとき、8bitバッファでは127/255になるか128/255になるかは決まっているのでしょうか。

ttp://www.opengl.org/registry/doc/glspec21.20061201.pdf
2.14.9 Final Color Processing

139 :デフォルトの名無しさん:2008/11/06(木) 01:24:49
そこを見る限りでは決まってはなさげ
大抵は切り捨てで127/255になりそうな気はするが
どうしても一致させたいなら整数テクスチャとか使った方がいいかもな

140 :デフォルトの名無しさん:2008/11/06(木) 10:38:59
ありがとうございます。
ATIだけ微妙な動作をしたので、
差を吸収するためにCPU側で整数化することにしました。

141 :デフォルトの名無しさん:2008/11/06(木) 19:53:57
VBで使ってみようと思ったら滅茶簡単でワロタ

142 :デフォルトの名無しさん:2008/11/08(土) 00:51:15
glut以外に、glutSolidCubeのような
物体を関数化してくれているライブラリとかありませんか?

143 :デフォルトの名無しさん:2008/11/08(土) 13:33:54
glDrawPixels() APIを使用して画像データを転送するとき、
次のような画像データを直接送ることができるのでしょうか?

RRRRR....
........................
GGGGG....
........................
BBBBB....
........................

144 :デフォルトの名無しさん:2008/11/08(土) 18:28:26
画面じゃなく、テクスチャに描画して
保存したいのですが、何かよいサンプルとかありますか?


145 :デフォルトの名無しさん:2008/11/08(土) 19:35:32
画面じゃないところに描画したりする方法まとめ

・PFD_DRAW_TO_BITMAP
・glReadPixels
・pbuffer拡張
・FBO(Frame Buffer Object)拡張

他にある?

146 :デフォルトの名無しさん:2008/11/08(土) 20:03:42
PBO

147 :デフォルトの名無しさん:2008/11/08(土) 21:19:41
・PFD_DRAW_TO_BITMAP
・glReadPixels
・glCopyTex[Sub]Image2D
・pbuffer拡張
・render texture拡張
・FBO(Frame Buffer Object)拡張
・PBO(Pixel Buffer Object)拡張

148 :デフォルトの名無しさん:2008/11/08(土) 22:24:43
たくさん出てきて涙目

149 :デフォルトの名無しさん:2008/11/08(土) 22:33:24
決定打はないのかよw

150 :デフォルトの名無しさん:2008/11/09(日) 00:37:01
決定打ねぇ。
PFD_DRAW_TO_BITMAPはWindowsべったりな上にアクセラレーション効かないし、
glReadPixelsはシステムメモリへの転送でCPU喰うしレンダリングパイプライン止まるし、
glCopyTex[Sub]Image2Dもパイプライン止まるしFBからテクスチャへの転送は大抵変換が必要で遅いし、
pbufferは多少古いIntelオンボも対応してるおかげで使える環境は多いけどコンテキスト切り替えとか不便&コスト高いし、
render textureは単にpbufferからテクスチャにコピーせずに済むだけだし、
FBOは比較的最近の環境を仮定するなら決定打だろうけど未だにノートPCだと使えない場合が多いし、
PBOは単にコピーのお手伝い拡張だし。

まぁ、選ぶならFBOだな。

151 :デフォルトの名無しさん:2008/11/09(日) 00:52:40
概要サンクス

152 :デフォルトの名無しさん:2008/11/09(日) 15:58:50
glutで「3Dオブジェクトを2Dとして変形」したいんですが方法あるでしょうか?

たとえばこんな例。
・オブジェクトは空き缶
・まずは空き缶を3Dオブジェクトとして回転量(Rotated)や視点(LookAt)を指定して
見え方を決める。この結果空き缶を真上から見た絵になったとする
・次にこの「真上から見た空き缶の絵」を「2D一枚絵として」
回転・拡大縮小したい

153 :デフォルトの名無しさん:2008/11/09(日) 16:13:13
描画結果をテクスチャにして描画

154 :デフォルトの名無しさん:2008/11/09(日) 16:47:21
回転はカメラのロールで、拡縮はglViewportで

155 :デフォルトの名無しさん:2008/11/09(日) 21:07:19
初心者です。セレクションモードに切り替えると座標系がズレて変になってしまうのですが、
自分の理解が足りなくて変な座標変換を間に挟んでいるのだと思います。
セレクションモードとレンダモードの切り替えにおける内部の動作を流れ図で教えてもらえませんか。

156 :デフォルトの名無しさん:2008/11/11(火) 12:36:22
>>155
内部動作とかよくしらんけど、関数呼び出し順序は、
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPickMatrix(...);
gluPerspective(...); or glOrtho(...);
とかしとけば、セレクションうまくいくと思うよ。
はずしてたらすまん。


157 :名無し:2008/11/13(木) 13:51:45
質問がございます。
1辺の長さが10の箱の中に直径がBの球(中心座標:x,y,z)がM個存在するとします。
3次元上で考え、箱の端では周期境界条件を採用しています。
球の中心の座標は箱内でS回の移動を繰り返すとします。
例えば球の中心の座標は次のように変化します。
座標はファイルQにまとめて書いてあるとします。
※(S+1)個のブロックが存在。(スペースで区切り)1個のブロックにM個のxyz座標が存在。
<ファイルQ>
1  2  3
2  3  4
 ・    
 ・
 ・

1  3  4
1  9  5
 ・
 ・
 ・
 
 ・
 ・
 ・
球が箱からはみ出ると周期境界条件によって、はみ出た部分だけ反対側から出てくるとします。
このようなM個の球のS回の移動の様子をOpenGLで表示することは可能でしょうか?
(表示するもの:球、箱)
可能ならばその方法について教えてもらえませんか?
(ファイルQの読み込み方法、球の直径もしくは半径の指定方法、周期境界条件を考慮した球の表示方法など)
ちなみにプログラムの記述言語はできればFortran77を使用したいと考えています。


158 :デフォルトの名無しさん:2008/11/13(木) 14:38:55
> はみ出た部分だけ反対側から出てくるとします。
この部分だけがGL的に面白い部分なので、
まずはただの球に衝突判定をつけて作ってみなさい。

159 :デフォルトの名無しさん:2008/11/13(木) 14:50:10
あとOpenGLはCで定義されていたはずだが、
Fortranだとマングリングを合わせればCの関数も呼べたと思う
まあ調べてみて

160 :デフォルトの名無しさん:2008/11/13(木) 15:20:29
これは凄い。
一見すると親切かつ丁寧な風に見えて、その実は回答の先送り投げっぱなしジャーマン。
宿題丸投げに対するパーフェクトな回答の見本だな。
久しぶりに職人の仕事を見た。

161 :デフォルトの名無しさん:2008/11/13(木) 21:41:16
危ねぇ…俺もシンセツダナーとか思いそうだった

162 :デフォルトの名無しさん:2008/11/14(金) 23:38:04
ワロタww

163 :デフォルトの名無しさん:2008/11/14(金) 23:56:03
3次元ベクトルの正規化をするような関数とかあります?
DXならD3DXVEC3DNORMALIZEとかいうのです

164 :デフォルトの名無しさん:2008/11/15(土) 01:19:10
ないから自分で書け

165 :デフォルトの名無しさん:2008/11/15(土) 01:19:16
ないので自分で作ってください

166 :デフォルトの名無しさん:2008/11/15(土) 01:22:51
質問するより自分で書いた方が早い

167 :デフォルトの名無しさん:2008/11/15(土) 01:24:13
d3dxのをそのまま使えばいい

168 :デフォルトの名無しさん:2008/11/15(土) 03:10:09
void DXならD3DXVEC3DNORMALIZEとかいうのです( vector3* vec )
{
float scalar = sqrt( vec->x * vec->x + vec->y * vec->y + vec->z * vec->z );

if( scalar == 0.0 ) return;

vec->x /= scalar;
vec->y /= scalar;
vec->z /= scalar;

}

169 :デフォルトの名無しさん:2008/11/15(土) 08:46:24
OpenGL使うのにD3DX使うのもなあ
まあ、俺も音鳴らすのにDirectSoundとか使ってるがw

マジレスすると、言語用に大抵、geometry関係のライブラリがフリーのがあるから
それを探してみたらどうかな?

170 :デフォルトの名無しさん:2008/11/15(土) 12:46:07
探すくらいなら自分で作ったほうがいいと思う派だが、あえて探すなら
信頼性の高い高速なgeometry関係のフリーのライブラリ = D3DX


171 :デフォルトの名無しさん:2008/11/15(土) 13:02:48
GLM(OpenGL Mathematics)とかいいんじゃない?

172 :デフォルトの名無しさん:2008/11/15(土) 13:11:51
NASMで実装します

173 :172:2008/11/15(土) 17:30:06
1677万回呼んでも差は0.7秒程度でした
確かに大体3分の1程度にはなりましたけど
骨折りですね

global fun

section .text
fun:
mov eax, [esp+4]
mov ebx, [esp+8]
movups xmm0, [ebx]
movaps xmm2, xmm0
mulps xmm0, xmm0
movaps xmm1, xmm0
shufps xmm0, xmm1, 0x4e
addps xmm0, xmm1
movaps xmm1, xmm0
shufps xmm1, xmm1, 0x11
addps xmm0, xmm1
rsqrtps xmm0, xmm0
mulps xmm2, xmm0
movups [eax], xmm2
ret


174 :デフォルトの名無しさん:2008/11/15(土) 18:13:02
SSE化で1/3縮んだのなら成功の部類じゃないか
そのコードだとむしろ遅くなりそうなものだけど・・・

175 :デフォルトの名無しさん:2008/11/15(土) 18:40:20
>そのコードだとむしろ遅くなりそうなものだけど・・・
そうなんすか?
とりあえず改良できると所あれば指摘してくださいな

176 :デフォルトの名無しさん:2008/11/15(土) 18:54:28
データのアラインメントを変えてmovupsを消す(可能なら4要素にする)
intrinsic関数で組んでインライン展開できるようにする
ループごと取り込んで関数呼び出しを消す
新しいSSE命令を使う(haddps/dpps)

特に関数呼び出しを消すのが重要。

177 :デフォルトの名無しさん:2008/11/15(土) 19:49:49
>>176
解答ありがとうございます

イントリンシック!そういうのもあるんですな
慣れないアセンブリより楽かも…
SSE3命令はCPUが対応してないから試せそうにありません
オンボロCPU乙ですねハハハ


178 :デフォルトの名無しさん:2008/11/16(日) 16:21:32
すごく初歩的な質問と思われるかもしれませんが
行列スタックでレンダリングしたものを
どのようにしたら色をつけることができますか?

glClearでは線に色が付くだけなってしまいます

179 :デフォルトの名無しさん:2008/11/16(日) 16:46:53
日本語でおk

glClearは画面消去だぞ
glClearじゃなくてglColor4fとかでは?

180 :デフォルトの名無しさん:2008/11/16(日) 17:36:47
>>179
うはぁ、ミスった
glClearじゃなくてglColor3fでした


181 :デフォルトの名無しさん:2008/11/16(日) 18:14:33
質問の意味がまったくわからないので勝手に妄想

色がついていないのではなく、表示されていないのだろう
PROJECTIONマトリックスが不適切で線に見える部分意外はクリッピングされているのでは
near/farの設定、MODELVIEWとのへの切り替え部分のチェック 



182 :デフォルトの名無しさん:2008/11/16(日) 21:11:52
はじめまして、質問させていただきます。
glGenTexturesでテクスチャを2個作って、
二つのテクスチャを画面に表示しようとしたのですが、
最初に表示したテクスチャが消えてしまいますorz
OpenGLで二つのテクスチャを一度に表示することは可能なのでしょうか?
もしくは、方法を教えていただけないでしょうか。


183 :デフォルトの名無しさん:2008/11/16(日) 21:12:21
基本立体を塗りつぶしたいんです
本やサイト読んでもイマイチ分からなくて
日本語下手ですみません

184 :デフォルトの名無しさん:2008/11/16(日) 21:26:25
>>182
glBindTextureの第二引数

185 :デフォルトの名無しさん:2008/11/16(日) 21:34:43
>>183
glColor
まずはlightingをしないで射影変換の正しさを確認して、光源を作るならそのあと

186 :デフォルトの名無しさん:2008/11/16(日) 22:05:11
>>184
ありがとうございます。

一応、glBindTextureの第2引数に別々のテクスチャ名を与えてるのですが、
それでも消えてしまいますorz
どうやら表示するときに消えてるのではなく、
2個目をBindしたときに消えてしまってるみたいです。
(glBindTextureを呼ぶだけで1個目のテクスチャが消えました)

187 :デフォルトの名無しさん:2008/11/16(日) 23:14:22
>>186
カプセル化してかなり忘れてたが、見直してみたら

glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, ...);
glBegin(...);
glEnd();
glDisable(GL_TEXTURE_2D);

を逐一繰り返す構造になってた
glPushAttrib, glPopAttrib のテクスチャ関係も参考に
もし関数化してたら、一度関数化してないmainのみのストレートフォワードなテストコードを書くといいかも
カプセル化しない状態で人力コーディングするとスタックの積み下ろしを忘れてることがよくあるから

188 :デフォルトの名無しさん:2008/11/17(月) 00:07:07
>>187
ありがとうございます。
自己解決できました

OpenGLをはじめてほとんど時間が立ってないにもかかわらず、
カプセル化に挑戦したところ行き詰っていました。
原因に関してですが、
ぶっちゃけて簡単に言うと、
glBindTextureでテクスチャを切り替えた際に、
いくつかの設定が初期化されてしまうのと、
モードによって複数のテクスチャを同時に使えなくなってしまうことが原因でした。


189 :デフォルトの名無しさん:2008/11/17(月) 09:00:14
>>183
それだと線にしか色が付かないですよ
書く位置が悪いんですかね?

190 :デフォルトの名無しさん:2008/11/17(月) 10:07:49
glPolygonMode
GL_QUADS

191 :デフォルトの名無しさん:2008/11/17(月) 11:30:17
日本語が下手ならコードを晒せ

192 :デフォルトの名無しさん:2008/11/17(月) 13:38:13
ttp://sky.geocities.jp/freakish_osprey/opengl/opengl_wireframe.htm

193 :デフォルトの名無しさん:2008/11/17(月) 18:36:33
ブラウザ上でOpenglを動かす方法教えれ

194 :デフォルトの名無しさん:2008/11/17(月) 18:51:31
プラグインを自分で書く
これしかない

195 :デフォルトの名無しさん:2008/11/17(月) 20:17:55
>>193
Unity3d

196 :デフォルトの名無しさん:2008/11/18(火) 15:56:33
VRAMの使用状況を取得するAPIは無いのでしょうか?

197 :デフォルトの名無しさん:2008/11/19(水) 00:23:11
無いよ
見るだけならNVPerfKit入れたりとかして見ることはできる
ATIなら普通にドライバ入れた時点でパフォーマンスカウンタ見れるのかな?
そうでなくどの環境でもプログラムから残り容量取るって話なら大分難しいと思う

198 :デフォルトの名無しさん:2008/11/19(水) 12:28:44
GL_ATI_meminfo は仕様が公開されていないの?

199 :デフォルトの名無しさん:2008/11/19(水) 12:49:36
俺もglATI.hを読んで見たが壮絶に意味不だった…

200 :デフォルトの名無しさん:2008/11/19(水) 18:25:03
DirectXならVRAM使用量見れるのにねー

201 :デフォルトの名無しさん:2008/11/19(水) 23:53:55
VRAMみたいな特定のハードに依存したインターフェースはおかしいだろ、GL的に考えて…

202 :デフォルトの名無しさん:2008/11/20(木) 03:41:20
>>200
IDirect3DDevice9::GetAvailableTextureMem ?
これは、VRAMじゃなくテクスチャに使える容量だお

203 :デフォルトの名無しさん:2008/11/20(木) 15:10:06
glTexImage2D で作ったテクスチャに
直接アクセスしたいのですが、どうしたらいいでしょうか?

204 :デフォルトの名無しさん:2008/11/20(木) 23:27:22
>>202
DirectDraw::getAvailableTotalMemのことじゃね?

205 :デフォルトの名無しさん:2008/11/21(金) 13:12:20
>>203
テクスチャの中身ってこと?
それは無理なので書き換えるにはglTexSubImage2Dを呼んで下さい
読み出すならglGetTexImage
PixelBufferObjectを使えば比較的高速にやりとりできるはず

>>204
DirectDrawってVistaとかでもちゃんとそれ使えるのか?
Direct3DでエミュレーションとかになっててAvailableTextreMemと同じような気がする

206 :デフォルトの名無しさん:2008/11/21(金) 14:09:22
openglで描画した画像を、見え方はそのままで描画される角度のみを変更したいのですが、どうしたらよいでしょうか?

glOrtho(-2.0f, 2.0f, -2.0f, 2.0f, 0.001f, 150.0f);
gluLookAt(a1,a2,a3,b1,b2,b3,c1,c2,c3);
を、
d1=b1-a1
d2=b2-a2
d3=c3-a3
として
glOrtho(-2.0f, 2.0f, -2.0f, 2.0f, 0.001f, 150.0f);
glTranslatef(a1,a2,a3);
glRotatef(30,d1,d2,d3);
glTranslatef(-a1,-a2,-a3);
gluLookAt(a1,a2,a3,b1,b2,b3,c1,c2,c3);
と変更しました。

本来はc1、c2、c3を変更するところなのですが、
視点の位置、注視点の位置、視野の上方向が毎回変わるので、
できればそれらの設定によらず画像だけの回転を行いたいと思っています。

207 :206:2008/11/21(金) 14:12:47
失礼しました、206の
glOrtho(-2.0f, 2.0f, -2.0f, 2.0f, 0.001f, 150.0f);
glTranslatef(a1,a2,a3);
glRotatef(30,d1,d2,d3);
glTranslatef(-a1,-a2,-a3);
gluLookAt(a1,a2,a3,b1,b2,b3,c1,c2,c3);
のように変更したところ、ちんちくりんな軸を中心に回転しているようで、
確認したい目標のオブジェクトの形まで変わってしまいます。

上記でまずいところがありましたらご指摘をお願いします。

208 :デフォルトの名無しさん:2008/11/21(金) 14:34:38
glOrthoの直後にgluLookAtを持ってくる
これじゃだめかな?

209 :206:2008/11/21(金) 14:41:37
>>208
( д ) ゜ ゜
うわぉ ありがとうございます
行列の順番を勘違いしてました
本当にありがとうございます

210 :デフォルトの名無しさん:2008/11/22(土) 01:38:06
任意の座標(例えば重心)をとおる軸を中心として回転させるにはどうやればいいですか。
重心座標が(3,4,5)としたらx=3を中心としてy軸周りに回転させるようにとか

211 :デフォルトの名無しさん:2008/11/22(土) 01:43:36
x方向に-3だけ平行移動して、原点中心の回転をして、x方向に+3だけ平行移動する、ってのはどう?

212 :デフォルトの名無しさん:2008/11/22(土) 01:50:39
回転軸を頻繁に変えるというのでなければ、
メインメモリ側に構造体を保持しておいて、
必要に応じてCPUで平行移動させてからディスプレイリストを作るのもよい

213 :デフォルトの名無しさん:2008/11/22(土) 06:45:30
9600GT+WGL_ARB_multisampleを使ってアンチエイリアシングをやってて
glDisable(GL_MULTISAMPLE)で一時的に無効にしようとしてもなぜか効かないんだけど原因わかる人いる?

同じことをD3D9でやったらちゃんと期待通りに動くから
ハードウェアの仕様じゃないみたいだけどよくわからん

214 :213:2008/11/22(土) 08:20:37
自己解決?

x8以下だとちゃんと機能してx16,x32だと効かないぽい
意味不

215 :デフォルトの名無しさん:2008/11/22(土) 12:24:06
MSAAx32とか設定できんのか?
それはともかく単なるドライバのバグではないかと
暇があったらNVIDIAに文句言ってやるといいかもしれない

216 :デフォルトの名無しさん:2008/11/23(日) 11:24:39
>>211,212
どうもありがとうございました。

217 :デフォルトの名無しさん:2008/11/25(火) 18:54:26
複数枚の画像を合成したいと思っています。
例えばプリクラで顔写真の周りをハート型で縁取ったりしていますが、
ああいう感じである画像の上に透過pngを表示したいということです。
最終的には画像の上にフリーハンドで線を引けるようにして、
教科書の上に落書きするみたいな機能を実装しようと思っています。

テクスチャの上で2枚合成すればいけるだろうと思って、
透過pngと普通の画像と2枚用意してプログラムを組んでみたのですが、

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, spriteData2);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, spriteData); ← 透過png

としているのですが、spriteDataのみが表示されてspriteData2は完全に上書きされてしまいます。
これはspriteDataのデータがきちんと透過データとして読み込めていないのでしょうか?
そもそもやり方が間違っているのでしょうか?
もしやり方が間違っている場合、本来どういう方法で実装すべきなのか、
ググるキーワード位でもいいので教えていただけると幸いです。

218 :デフォルトの名無しさん:2008/11/25(火) 19:01:58
つ マルチテクスチャ、glActiveTexture

でもこの場合、テクスチャ切り替えて2回描画すればおkな気もする

219 :217:2008/11/26(水) 13:47:16
>>218
教えてくださってありがとうございます。
調べてみます(・∀・)

220 :デフォルトの名無しさん:2008/11/27(木) 12:55:35
pixel to pixelの合成だから、実時間で変動させたり市内なら
アルファ値つき重ね合わせくらいはCPU側で実装するのも手だな

221 :デフォルトの名無しさん:2008/11/27(木) 22:30:59
>217
まだテクスチャの基本的な使い方からわかってないみたいだから
床井先生のサイトを見てみるといいと思う

222 :デフォルトの名無しさん:2008/11/30(日) 11:10:48
超初心者です
床井先生のサイトが落ちてるので。。。
上のサンプル使わせていただくと

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, spriteData2);
この3引数”GL_RGBA”internalFormatとtypeで何が違うんでしょう
bmpをOpenCVで読み込んだとき読み込んだファイルの形式がtypeなのはわかるのですが
internalFormatって何奴でしょう。ここが間違えていると画面が真っ白で表示されない…理由を知りたいのです。

馬鹿な質問なのは重々承知しております、
解説webとか知っていたら教えてください。



223 :デフォルトの名無しさん:2008/11/30(日) 11:23:46
formatとtypeはメモリの中に画像がどのように格納されてるか
internalformatはそれを元にどんなテクスチャを作るか
を指定するんだよー。

224 :デフォルトの名無しさん:2008/12/01(月) 11:05:05
画面に三角形や四角形を書いてライトを当てているのですが、
glScaleで拡大すると暗くなって、glScaleで縮小すると明るくなります。
法線ベクトルも頂点ベクトルと共に拡大縮小されるのなら、まだわかるのですが、
法線ベクトルだけ逆になっているようでよくわかりません。
これはOpenGLの仕様ということなのでしょうか?

225 :デフォルトの名無しさん:2008/12/01(月) 13:59:06
そーです
例えば物体をX方向だけに2倍拡大するとき、法線も同じようにX方向に2倍拡大したら、向きが変になるでしょう
まぁ何も考えず glEnable(GL_NORMALIZE) しておけばわりと幸せ

226 :デフォルトの名無しさん:2008/12/01(月) 14:00:38
つ glEnable(GL_NORMALIZE);

逆になるのは、たとえば平面をY軸に縮小すると頂点は小さくなるけど、法線ベクトルは起つため
法線は転地逆行列変換(かも)

227 :デフォルトの名無しさん:2008/12/01(月) 14:04:49
>>224
仕様です。
法線ベクトルはモデルビューの逆行列が掛けられます。
仕様書のNormal Transformationのとこに書いてあります。


228 :デフォルトの名無しさん:2008/12/01(月) 20:34:28
>>225>>226>>227
ありがとうございます。
よく考え直したらその通りでしたね。仕様もわかりました。

229 :デフォルトの名無しさん:2008/12/02(火) 05:05:36
>>223
ありがとうございます。
するとinternalformatはglutInitDisplayMode(GLUT_RGB);
で指定した値に矛盾してはいけないという理解でよろしいでしょうか
他に制限事項とかございましたら、ご教授してくださいませ


230 :デフォルトの名無しさん:2008/12/02(火) 09:43:08
ディスプレイモードとテクスチャフォーマットは何の関係もない

231 :デフォルトの名無しさん:2008/12/02(火) 21:27:06
"OpenGL 2.0 専用スレ"にも書いたんだが、
OpenGLnのmain関数をスレッドで呼び出して使おうと思っているのだが、display()関数のオブジェクトカラーを引数で渡した値で更新したいんだ。
マルチスレッドで値を渡すことはできるのだが、OpenGL側でどうやって、display()関数に値を綿したらいいのかわらかない。

つまり、
プログラム1 --> OpenGLプログラム(スレッドで生成)
  ▼       ▼
 値の更新     色変更
  ▼       ▼
 値の更新     色変更
  …       …
ってことをしたいんだ。

これはできないのか?

232 :デフォルトの名無しさん:2008/12/02(火) 21:30:15
意味が分からん
グローバル変数使えばいいんじゃね

233 :デフォルトの名無しさん:2008/12/02(火) 21:53:32
>232
使いたくないんだよ。

234 :デフォルトの名無しさん:2008/12/02(火) 22:40:46
openGL関係なしに排他制御してスレッド間で変数共有できてるなら、それを使えばいいんじゃない
display()ってGLUTの話?

235 :デフォルトの名無しさん:2008/12/02(火) 23:06:09
>234
スレッドには、ポインタを引数として渡してる。
それじゃ具合悪い?

>display()・・・のくだり
え?GLUT?おれが使ってるのってOpenGLじゃなかったのか。。。
確かに、ヘッダで、glut.hってのを読み込んでるが、OpenGLとばかり思ってた。



236 :デフォルトの名無しさん:2008/12/02(火) 23:31:20
>>235
GLUTはあくまでglを気軽に使うためのユーティリティだから……
gl関係なくただのスレッド間データ受け渡しの問題だし、
むしろスレッドを管理するAPIについてのスレで聞いた方が良いのではないかな。

237 :デフォルトの名無しさん:2008/12/02(火) 23:41:52
glutSetWindowDataとglutGetWindowDataをお探しか?
freeglutやOpenGLUTになるけど。

238 :デフォルトの名無しさん:2008/12/02(火) 23:49:31
boost::bindでインスタンスとメソッドを一緒にして
glutDisplayFunc()に渡してやったらダメかな

239 :デフォルトの名無しさん:2008/12/03(水) 03:18:45
>236
>237
>238
知らない言葉が多すぎるから答えようがないけど、
あがったキーワードをググってみる。



240 :デフォルトの名無しさん:2008/12/03(水) 06:09:36
>236
>237
>238

239です。
とりあえず、pthread_createの引数で渡したポインタを
glut( ) -> init( ) を経由して、 glutでスコープできる変数に渡す
で、やりたいことができました。

参考になったサンプルに出会うときに、キーワードが役立ちました。ども。


241 :217:2008/12/05(金) 17:27:21
前回質問して教えていただいた後、マルチテクスチャは大まかに理解して、2つのテクスチャを貼り付けることに成功しました。
次に線を引いてみようと思って、テクスチャを2枚表示したサンプルに付け加えて以下のソースを書いたのですが、
線のみが表示されてテクスチャが画面に出なくなってしまいました。

glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
glClear(GL_COLOR_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D, texname[0]);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); //テクスチャ0表示

glBindTexture(GL_TEXTURE_2D, texname[1]);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); //テクスチャ1表示

// 以下を追記 したら線しか出なくなった
GLfloat vertex[20];
for(int i = 0; i < 10; i++){
vertex[2 * i] = 0.1 * i;
vertex[2 * i + 1] = 0.1 * i;
}
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2 , GL_FLOAT , 0 , vertex);
glDrawArrays(GL_LINE_STRIP, 0, 10);
glFlush();

やりたいのは画像に落書きする機能の実装なので、
画像の前に線が引ければよく、画像自体に書き込む必要はないのですが、(とはいっても最終的にその結果を保存したいのですが)
この場合は直接画面に線を引くのではなく、テクスチャにレンダリングしてから表示しないといけないのでしょうか?
それとも何かが欠けているだけでこのまま直接描画できるのでしょうか?
質問ばっかりですみませんが、教えていただけると幸いです。
使っているのはOpenGL ES ver1.1です。

242 :デフォルトの名無しさん:2008/12/05(金) 17:44:07
・デプスバッファをクリアしてないので2度目以降の描画でデプステストが失敗して表示されない
・線分描画で頂点配列を変更したあとそのまま三角形を書こうとしてしている

243 :デフォルトの名無しさん:2008/12/05(金) 20:29:07
すみません、質問っす
テクスチャを貼ったトライアングルでフェードイン表示みたいなことをしたいばあい、どの機能を使えばいいでしょうか?


244 :デフォルトの名無しさん:2008/12/05(金) 20:31:18
アルファブレンド使え
頂点カラーかマテリアルのアルファ要素で何とかなったはずだ

245 :241:2008/12/05(金) 23:37:16
>>242
どうもありがとうございます。
ググってみたところ、一つ目の内容については内容は分かりました。
方法としては、描画と描画の間に glClear(GL_DEPTH_BUFFER_BIT); を挟めばいいんですよね?
ただ、二つ目の点についてはよくわかりませんでした。
ttp://wisdom.sakura.ne.jp/system/opengl/gl9.html
等、頂点配列を変更したあとそのまま描画しているように見えるのですが・・・
飲み込みが悪くてすみません。もう少し教えていただけないでしょうか。

246 :242じゃないけど:2008/12/06(土) 00:09:06
(二点目について)
線分を描画する直前に、glVertexPointerで頂点配列の指定を"vertex"配列に変更してるでしょ?
で、次のフレームを描画するときもずっとその指定が続いてるわけ。
つまりテクスチャ0/1を描画するつもりでglDrawArraysを発行しても、
参照してる頂点配列が"vertex"配列になったままだから、線分と同じ位置に
GL_TRIANGLE_STRIPで描画されちゃってると。
(プログラム見る限り、頂点が一直線だから実際は縮退して描画されないだろうけど)

テクスチャを描く前に、もう一回、テクスチャを描画するための頂点配列を設定するべし。

247 :241:2008/12/06(土) 00:25:37
あ、そうか、次に描画するときにvertex配列の指定が解除されてないから、
vertex配列の上にテクスチャが表示されちゃって線しか出ないってことなんですね。
なんだかまだらで変な色の線だなぁ、バグかなぁと思ってたら、
あれはテクスチャ画像の色が出てたんですね。
やっともやもやが取れました。調べてやってみます。
>>242 さん >>246 さん、どうもありがとうございました。

248 :デフォルトの名無しさん:2008/12/06(土) 22:38:52
GL_BGRAとかGL_BGRってVS2005に入ってるヘッダでは定義されてないんですが、
この定数ってどこで配布されてるヘッダに存在するんですか?

249 :デフォルトの名無しさん:2008/12/06(土) 22:41:47
俺はglewのを使ってる

250 :デフォルトの名無しさん:2008/12/06(土) 22:45:41
OpenGL総本山のExtension Registryのページにglext.hがあったはずだが。
あれでもいいし、最新でなくてよいのならglewのでもいい。

251 :デフォルトの名無しさん:2008/12/06(土) 23:05:04
>>249-250
どうもありがとう。取ってきます。

252 :デフォルトの名無しさん:2008/12/07(日) 23:44:04
マルチスレッドってOPENGLの描画を各スレッドでウインドウ作って
GLの描画処理やらせたら 
シングルスレッドでに2画面描画するより速くなるの?


253 :デフォルトの名無しさん:2008/12/08(月) 00:00:45
複数のハードウェアスレッドが使用可能なら早くなる可能性はある
セレロンみたいなシングルコアCPUだと同期処理が必要になる分確実に遅くなる

254 :デフォルトの名無しさん:2008/12/08(月) 01:18:54
はぁ?

255 :デフォルトの名無しさん:2008/12/08(月) 01:46:22
↑ケチつけるだけで具体的には何も書けない馬鹿

256 :デフォルトの名無しさん:2008/12/08(月) 08:01:16
GPUに空きがあれば速くなる可能性はあるよ
その場合スレッド毎にコンテキスト作れってNVが言ってた気がする
めんどうにはなるね

257 :デフォルトの名無しさん:2008/12/09(火) 03:33:02
グラボがGeForce 9300M GSとチップセット内臓の4500MHDを切り替え可能なVaioのノートを使っています。
JavaのOpenGLで、最大化ボタンを押したらフルスクリーン表示するプログラムを作ったんだけれど、

4500MHDの方ではフルスクリーン後も正常に描画されるのに、
GeForceの方ではフルスクリーン後に画面が真白になってしまって描画されません。

真白なのに、キーイベント等は正常で画面内にクリッカブルなボタンとかを作っておけばちゃんとクリックできるし、
第一、エラーが出ないのでどこが問題なのか良く分かりません。
描画している処理自体はきちんと呼び出されているのですが、画面上に表示されていないという感じです。

これってグラボのドライバのせいなんでしょうか?
チップセット内臓のグラボが描画できて、より高性能なはずのGeForceがダメという状況に戸惑ってます。



258 :デフォルトの名無しさん:2008/12/09(火) 03:48:48
つ glGetError

259 :デフォルトの名無しさん:2008/12/09(火) 03:56:42
俺は旧Direct3Dで言うデバイスロストが怖いから
ChangeDisplaySettingsとか呼ぶ度にコンテキストから全て作り直してる

260 :デフォルトの名無しさん:2008/12/09(火) 20:57:37
>>257
俺も知り合いのノートPC(DELL、geforceかどうか不明)で
フルスクリーン後に画面が真っ黒(多分ウインドウの背景色)になる現象に悩まされてます。
フルスクリーン解除するとまた見えるようになるんだよな。
なぞだ。

DirectXにある >>259 の言うデバイスロストだと、
通常はロスト後はフルスクリーン解除してもロストしたままだったはずなのだが、
うちの問題が起こる環境だと復帰するんだよね・・・。

まあ、一番確実なのは、全て作り直すことなんだろうけど。
時間がなくて試せてない

261 :デフォルトの名無しさん:2008/12/09(火) 20:58:47
わかりにくくてスマソ

> 通常はロスト後はフルスクリーン解除してもロストしたままだったはずなのだが、
> うちの問題が起こる環境だと復帰するんだよね・・・。

通常はロスト後はフルスクリーン解除してもロストしたままで
フルスクリーンから復帰しても見えないままだったはず。

262 :デフォルトの名無しさん:2008/12/09(火) 20:59:58
というわけで、全部コンテキストから作り直しなりなんなりで
上手く回避できたら報告キボン

263 :デフォルトの名無しさん:2008/12/09(火) 21:21:50
GeForce 8400Mを乗せたVAIOでGeForce側で起動するとどうもOpenGL
が不安定なので悩まされた事がある。
それこそフリーズや、フルスクリーン画面がバーコード状態になったり。
サポート出そうにも再現条件がはっきりしないので、半ばムキになって
SpecViewPrefを走らせたま酒飲んで寝たら、翌朝にはもう二度と起動
しなくなっていた。

264 :デフォルトの名無しさん:2008/12/10(水) 03:14:02
VAIOがあやしいのか?
俺も3Dビューアーを作っているんだが、VAIOのGeForce Go 6200 で画面が何も描画されない現象を
最近報告された。フルスクリーンではなく通常表示。
様々なグラボや内臓チップセットで動作確認して問題なかったのに。
原因もまったく思い当たらない。
ドライバ更新くらいしか手がないのだろうか?


265 :デフォルトの名無しさん:2008/12/10(水) 03:35:04
いや〜、自分の場合は完全にGeForce Goの問題だったと思う。
初期はOpenGLの高負荷時にWindowsの画面がフリーズする
程度だったけど、末期には起動直後のBIOSの段階から緑色の
バーコード模様やピンク色の市松模様とか表示されていたので。
完全に憶測だけど、NVidiaのリコールとの関連かなと思った。

ちなみにSpecViewPerfによってGeForce Goの不具合は再現率
100%になったので(なにせ起動しない)、はれてVAIOはサポセン
行き->マザボ交換(無償)となったのでした。
保証が切れるギリギリだったので結構やばかったです。

266 :257:2008/12/10(水) 04:02:59
>> 258
gl.getError()しても、エラー無いみたいなんですよねぇ・・・。

>> 259
はい、僕もコンテキストから作り直してるんですが、ウィンドウをフルスクリーンモードにすると何故か真白に・・・。
謎です・・・。
フルスクリーンモードに切り替えた後にコンテキストを作り直してるのですが・・・。
GraphicsDevice#setFullScreenWindow(Window w)を呼び出すと真白現象になっちゃいます・・・。

>> 260
同じ現象っぽいですね・・・。
フルスクリーンモードにして真白の状態の後、フルスクリーン解除してウィンドウ画面にしたら描画も復帰します。

>> 263
うーむ。GeForceのモバイル用はOpenGLに弱いのでしょうか・・・。

267 :260:2008/12/10(水) 08:12:09
おJavaか。
しかし、そっちはコンテキストから作り直しているんだね。
そちらもウインドウにもどしたら復帰するとすると同じ現象か。

あ、あと 安価する時は、>>258 みたいにスペースいれないでくれ頼む

268 :デフォルトの名無しさん:2008/12/16(火) 00:14:51
すいません初心者なんですがOpenGLにはある特定のキーの状態を取得する関数はありますか。
windowsプログラミングのGetAsyncKeyState('J') 的な。

269 :デフォルトの名無しさん:2008/12/16(火) 00:18:41
コールバック関数を使ってキーの状態をフラグに保存するとかしか方法はないのでしょうか
その場合にメインループとコールバック関数でフラグ変数に対して競合がおきるなどの問題はありますでしょうか

270 :デフォルトの名無しさん:2008/12/16(火) 00:35:43
描画以外はOpenGLの仕事ではない

271 :デフォルトの名無しさん:2008/12/16(火) 01:29:51
ではLinuxではどうやってキーの状態を調べればよいですか

272 :デフォルトの名無しさん:2008/12/16(火) 01:33:01
ここは警察じゃないよ

273 :デフォルトの名無しさん:2008/12/16(火) 01:33:12
GLUTでも使っとけ。

274 :デフォルトの名無しさん:2008/12/16(火) 10:20:22
>キーの状態

OpenGLは、グラフィックスハードウェアに対して描画命令を発行する以外のことは
本当に何一つできませんよ。キー入力はもちろん、ベクトルや行列の計算だって
自前で(あるいは他の何らかの手段で)やる必要があります。

OpenGLに全く関係の無い話題である以上、ここで質問しても期待される答えが
帰ってくる可能性は低いかと。Linuxのスレなりなんなり、適切な場へ移動した方が
良いのではないでしょうか。

てか、それくらい、ぐぐればいくらでも答えが引っ掛かりそうなもんですが・・・。

275 :デフォルトの名無しさん:2008/12/16(火) 15:57:16
OpenGLを1から学びたいんですが、お勧めのサイトは?
PBOやFBOについても学びたいです。

276 :デフォルトの名無しさん:2008/12/16(火) 17:25:41
>>275
床井先生のとことかかな。

277 :デフォルトの名無しさん:2008/12/16(火) 18:20:16
床井先生のとこ今年頭から更新再開してたのに今頃気づいたw

278 :デフォルトの名無しさん:2008/12/16(火) 22:34:02
glBegin(GL_LINES)や(GL_POINTS)で描画するような点や線の色や質感に関しては
ライティングを有効にした場合はどのように設定するのでしょうか?
いままでライティングを無効にしていたプログラムではglColor系の関数で色を付けていたのですが、
これではライティングした際に色が抜けてしまうようなので、何かしらの方法で色を付けたいと思うのですが

279 :デフォルトの名無しさん:2008/12/16(火) 22:35:11
つ マテリアル

280 :デフォルトの名無しさん:2008/12/17(水) 22:07:59
GLUTによる「手抜き」OpenGL入門
http://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html

これかな?なかなかよいまとめですね

スクリーンショットがもっとあったらもっとよかった

281 :デフォルトの名無しさん:2008/12/17(水) 22:19:55
すみません、質問なんですが、回転の変換行列からクォータニオンって求められますか?
ttp://marina.sys.wakayama-u.ac.jp/~tokoi/?date=20040321
にあるqrot(rt, tq);の逆向きの変換がしたいんですが、どうしたらいいんでしょうか?

282 :デフォルトの名無しさん:2008/12/17(水) 23:36:59
クォータニオンの虚部の符号を反転?

283 :デフォルトの名無しさん:2008/12/21(日) 11:37:19
現在、glutを使ってOpenGLを勉強しているのですが、Win32APIを使ったほうがいいのでしょうか?
glutを使わずにWin32APIを使うメリットはありますか?

284 :デフォルトの名無しさん:2008/12/21(日) 12:14:31
Win32APIの方が、フレームバッファの細かい設定とかできるね。
勉強中ならそこまで必要ないだろうし、GLUTでいいんじゃない?
Win32APIを使うのは、Win32APIじゃないとできないことをやりたくなってからで十分かと。
てかGL以外に考えるべきことを増やすのはかえって良くないと思う。
やりたいことに集中して、他の事はシンプルに済まそう。

285 :デフォルトの名無しさん:2008/12/21(日) 22:29:40
#include <GL/glut.h>
#include <dshow.h>
のようにして、glut-3.7.6とDirectShowを同時利用しようとしたら、次のようなコンパイルエラーが出ます。
どうすれば治りますか?

c:\program files\microsoft visual studio 9.0\vc\include\stdlib.h(371) : error C2381: 'exit' : 再定義 ; __declspec(noreturn) が異なります。
c:\documents and settings\裕\my documents\visual studio 2008\projects\glut-3.7.6\include\gl\glut.h(146) : 'exit' の宣言を確認してください。
c:\program files\microsoft visual studio 9.0\vc\include\stdlib.h(371) : warning C4985: 'exit': 前の宣言に属性が存在しません。
c:\documents and settings\裕\my documents\visual studio 2008\projects\glut-3.7.6\include\gl\glut.h(146) : 'exit' の宣言を確認してください。

286 :デフォルトの名無しさん:2008/12/21(日) 23:01:47
includeの順番のような気もするけど
「error C2381 exit」でググってみたら

287 :デフォルトの名無しさん:2008/12/22(月) 01:24:41
2.0専用スレに誤爆してしまいました orz

OpenGLでは各色の値の範囲が0〜1ですが、これってGDI上での0〜255の範囲に
リニアに一致する訳じゃないのでしょうか?
256*256のコンテキストを作り、全面ぴったりのポリゴンを張って、フラグメントシェーダーから

  gl_FragColor = vec4(gl_TexCoord[0].s, gl_TexCoord[0].s, gl_TexCoord[0].s, gl_TexCoord[0].t);

として色とアルファの増え方を見てみたのですが、どうもジャギっててきれいに0〜255の範囲で
増えてるわけではないみたいなのですが…
コンテキストと同じサイズのGL_NEARESTなテクスチャを張った場合はちゃんと256*256の範囲
全体が張られているのでテクスチャ座標がずれてるわけでもないみたいです。

上の式で得られたレンダリング結果↓
http://www3.uploda.org/uporg1873748.png

288 :デフォルトの名無しさん:2008/12/22(月) 11:45:51
流れの速いアップロードにファイルを置く馬鹿。

289 :デフォルトの名無しさん:2008/12/22(月) 11:47:07
アップローダをアップロードと書いてしまう馬鹿。

290 :デフォルトの名無しさん:2008/12/22(月) 23:32:44
>>287
普通は、リニアに対応するはずだけど。
レンダリング結果が見れないので、もう一度うpぷりーず!
(できればついでにソースも。)

291 :デフォルトの名無しさん:2008/12/23(火) 05:11:39
glReadPixelで数値にして見てみたら?

292 :デフォルトの名無しさん:2008/12/23(火) 20:06:55
例えば(10,0,0) (0,10,0) (0,0,10)・・ 原点が端のような
立方体があって、(0,0,10)を回転中心にして回転させたいのですが、どうすればよいのでしょうか?

for(;;){
glTranslatef(0,0,-10);// 原点に移動
glRotatef(10,1,0,0); // X軸を中心に回転
glTranslatef(0,0,10);// 元に戻す
draw();
}
とするとどんどんY座標がずれてきます。これを計算で戻すか、
使い方が悪いのか教えてください。



293 :デフォルトの名無しさん:2008/12/23(火) 20:40:07
回転したい点を原点に持ってきて回転させて戻せば?

294 :デフォルトの名無しさん:2008/12/23(火) 20:52:49
今は回転中心を原点に持っているつもりなのですが、<<292 では
持っていってないですか? わかっていません。

295 :デフォルトの名無しさん:2008/12/23(火) 20:59:44
どんどんずれていくのは、それはずれを蓄積しているからだろw
ループの最初で座標を初期化せい

296 :デフォルトの名無しさん:2008/12/23(火) 21:28:32
-Y座標方向にどんどんずれていくのですが、
1回転による座標系のずれを計算して、そのずれ分移動して元の位置関係に
あわせるということでしょうか?
それは計算しなければなりませんか? 関数はないでしょうか?

297 :デフォルトの名無しさん:2008/12/23(火) 22:36:48
>Use glPushMatrix and glPopMatrix to save and restore the unrotated coordinate system.
俺も勉強し始めたばかりでよく知らないんだけど、これとかどうよ?

298 :デフォルトの名無しさん:2008/12/23(火) 23:21:39
それは使えないかと思います。 回転させてそれを描画しないといけないので。
(なにかまちがっていますかね。。)

299 :デフォルトの名無しさん:2008/12/24(水) 00:07:32
すいません 教えてください
MAXで作ったアニメーションデータをOpenGLESで読み込んで動かしたいのですが、
調べたところCOLLADAがありましたが、C++のコードなんです。
組込み系でC++に対応していないため、C言語がいいんですけれども
何か解決案をご存知の方いますでしょうか?
おかしなこといってたらすいません・・・

300 :デフォルトの名無しさん:2008/12/24(水) 00:31:28
>>292
・座標変換は座標(縦ベクトル)に左から変換行列を掛ける
・変換行列の操作は右から行列を掛ける

301 :デフォルトの名無しさん:2008/12/24(水) 01:08:54
>>298
glPushMatrix();
glTranslatef(0,0,-10);
glRotatef(10.0 * n, 1,0,0);
glTranslatef(0,0,10);
draw();
glPopMatrix();
とかは?

302 :デフォルトの名無しさん:2008/12/24(水) 01:53:14
>>299
C++でCOLLADAからカスタムフォーマットを吐くものを作って、
カスタムフォーマットを再生するものはCで作る。
C++をCでラップしてもいいけど、XMLをそのまま扱うのは重いので
組み込みならなおさら事前に変換する方がよろしいかと。

303 :デフォルトの名無しさん:2008/12/24(水) 02:49:08
>>301
それ以前の問題で、変換前の座標を p、変換行列を上から M1, M2, M3 とすると、
変換後の座標は

 p' = M1 M2 M3 p

になるんだってば

304 :デフォルトの名無しさん:2008/12/24(水) 22:23:16
>>300, 303
その言い方じゃ、分かって貰えないんじゃないだろうか・・・。

>>292
移動と回転を組み合わせる、って発想は合ってるよ。
ただ、変換の順番が間違ってる。もし(0, 0, cz)を中心に回転させたいなら、↓こうする。
for(;;){
 glTranslatef(0,0, cz); // 元に戻す
 glRotatef(10,1,0,0); // X軸を中心に回転
 glTranslatef(0,0, -cz);// 原点に移動
 draw();
}
(コメントの順番に注目!)

で、こういう変換は>>295の言うとおり誤差が溜まっていくので、↓こうするともあべたー。
for(ループカウンタをiとする){
 glLoadIdentity();
 glTranslatef(0,0, cz); // 元に戻す
 glRotatef(10 * i とか ,1,0,0); // X軸を中心に回転
 glTranslatef(0,0, -cz);// 原点に移動
 draw();
}
(glLoadIdentity()の代わりにglPushMatrix()とglPopMatrix()を使ってもいいよ!)

305 :デフォルトの名無しさん:2008/12/24(水) 22:31:25
>>299
それはちょっと難しそうだなー・・・。

仕事でやるなら、Mascot Capsule とかの、既存の3Dエンジンを利用することを考えたほうがいいと思う。
(そもそもMAXでないといけないのかとか、ワークフローの最初から考え直した方が。)

趣味でやるなら、302の方法を支持します。
勉強することすごく多くて大変だけどねー。楽しいよねー。

・・・てか、組み込み系とはいえ、3Dモデルのアニメーションをさせるような分野で
C++が使えない!?というのがまず信じられないという心持ちですよ。

306 :デフォルトの名無しさん:2008/12/24(水) 22:52:37
ドリームky・・・おっとこんなクリスマスイブに誰か来たようだ

307 :デフォルトの名無しさん:2008/12/25(木) 00:14:38
>>302,305
レスありがとうございます
そういう考え方がありますね!頭が固いもので考えつかなかったです汗
libxmlやらCG言語やら絡んでてややこしいっす。ここらへんはあんまり見ないで
データ保持しているドキュメントクラスだけ見ればいいのかもしれないですが
とりあえず挑戦してみます!

あと、ドローソフトで作った頂点座標などのデータをOpenGLに
ドンと投げて楽して描画したいだけなんで、
MAXじゃないとだめってこともないですが、普及率が高い分、拡張性も高くて
3dsファイルはデータの損失が少ないなどの話も聞いたもので。
まだ歴史が浅い分野なもので手探り状態っす
Mascot Capsuleなんてものがあるんですね。導入できるのか分からないですが
もうちょっと調べてみます


308 :デフォルトの名無しさん:2008/12/25(木) 17:36:29
OpenGL ESもいいですか?

トライアングルの1頂点が画面の外に出ると光源計算してくれないって現象で困ってます.
アンビエントは入るのですが,はみ出した頂点だけでは無く,トライアングル全体が暗くなります.
GL_TRIANGLE_FANでもGL_TRIANGLE_STRIPでも同じ症状です.
3つの頂点全部が画面内に入ると計算してくれます.

何かヒントになる事でも結構ですのでアレじゃね?みたいなのがあればお願いします.

309 :デフォルトの名無しさん:2008/12/25(木) 20:07:11
ドライバーのバグでは?動作環境は何ですか?

310 :デフォルトの名無しさん:2008/12/25(木) 20:32:10
iPhoneと言うかiPhone SDKに付いてるiPhoneシミュレータなんすけど.
サンプルには光使ってるの無いし,もしかして出来ないなんて事有るんすかね?



311 :デフォルトの名無しさん:2008/12/25(木) 21:15:23
・OpenGLの関数(gl*という名前の関数)のドキュメントって何処にあるんですか?
出来れば日本語のをお願いします。
・glutの最新版ってバージョンいくつですか?今3.7.6が入っています。

312 :デフォルトの名無しさん:2008/12/25(木) 21:39:44
.orgにスペックからなにからあるけど、英語。翻訳は金かかるからな…。
glutはfreeglutの2.6がそろそろでようとしている模様。

313 :デフォルトの名無しさん:2008/12/25(木) 22:15:53
このスレなんかここ数ヶ月元気だよな

314 :311:2008/12/25(木) 23:50:45
>>312
ありがとうございます。ドキュメントは英語で我慢します・・。
glutのバージョンを訊いたのは
ttp://wisdom.sakura.ne.jp/system/opengl/gl23.html
の一番上にあるプログラムが動かなかったからです。
何故かテクスチャが貼られず、白いままになってしまいます。なぜでしょうか?
freeglutの2.4に変えてみても同じでした。
他のOpenGLを使うアプリケーションは普通に動作します。

315 :デフォルトの名無しさん:2008/12/26(金) 00:02:05
>glTexImage2D(
>GL_TEXTURE_2D , 0 , 3 , TEXSIZE , TEXSIZE ,
>0 , GL_RGB , GL_UNSIGNED_BYTE , bits
>);

3番目の引数を3からGL_RGBに変えて味噌


316 :デフォルトの名無しさん:2008/12/26(金) 11:00:02
>>310
もうちっとでiPhone SDKが入るマシンが来るので来たら試してみるわ
ってか、シミュレータの不具合の可能性があるかも知れん。実機で再現するか確かめてみ。
シミュレータのバグと確定した場合はバグレポしておいて。

317 :デフォルトの名無しさん:2008/12/26(金) 17:00:28
>>311
個人的にはやはり「赤本」がベスト。
手元に一冊あると便利で勉強にもなるけど、高いよね・・・

318 :デフォルトの名無しさん:2008/12/26(金) 22:00:57
俺も学ぶのに赤本は最高だと思うんだけど、
関数のドキュメントとしては青本の方がいいんじゃないか?

そういえば前スレに日本語manのリンクがあったけど
今見たらgluとglXのものしかないな…

319 :デフォルトの名無しさん:2008/12/26(金) 22:09:52
時節がら、大学入試の問題集の話かと思ったよw

320 :デフォルトの名無しさん:2008/12/27(土) 17:19:01
VCで開発してるけど、VC上でのデバッグ実行では普通に動くけど
リリースビルドするとカタカタ動く。
原因は初期化忘れとかあるみたいだけど、こういうの経験ない?
原因はなんですか?

321 :デフォルトの名無しさん:2008/12/27(土) 18:17:13
エスパーすると、初期化忘れだな

322 :デフォルトの名無しさん:2008/12/27(土) 20:06:27
やっぱり初期化忘れなのかな。
ただ回転させてるだけの処理でリリースはカクカクする。
初期化忘れはない・・と思ってるけど。あるのかな。

323 :311:2008/12/27(土) 22:40:13
>>315
GL_RGBにしても関係なかったようです・・なぜか
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
を実行するとテクスチャが表示されるようになりました。コメントアウトすると
表示されなくなります。解決してよかったけど何ででしょう?

もう1つ質問いいですか
ttp://uproda.2ch-library.com/src/lib084665.zip.shtml
↑このプログラムは、
ttp://www.shader.jp/xoops/html/masafumi/directx9/DShow/dshow001.htm
↑ムービーテクスチャ
をGLでやってみるプログラムです。

CTextureRendererのDoRenderSample()からテクスチャに書き込もうとすると
GL_INVALID_OPERATIONが帰ってきて何も書き込まれません。
そのため、DoRenderSample()内で
一旦memcpyでムービーの内容を適当なバッファにコピーしてから、
ポリゴンの描画を行う前にglTexSubImage2Dで更新していますが
負荷が大きいようです。何とかDoRenderSample()内で
テクスチャを更新したいんですが、どうすればいいでしょう?

PBOも使おうとしてみたんですが、どうやったらテクスチャとして使えるのか
分からないしmain.cpp以外から使おうとするとプログラムが落ちて駄目でしたorz

324 :311:2008/12/27(土) 22:50:23
プロジェクトのファイル全部入れてしまいましたが
入れ忘れあったのでビルドできません・・
CTextureRenderer.cppとmain.cppだけ見てください

325 :デフォルトの名無しさん:2008/12/27(土) 22:51:17
GL_TEXTURE_MIN_FILTERのデフォルト値はなぜかGL_NEAREST_MIPMAP_LINEARなので
環境によってはミップマップを設定しないとテクスチャが表示されない

326 :デフォルトの名無しさん:2008/12/27(土) 23:44:45
>一旦memcpyでムービーの内容を適当なバッファにコピーしてから、
>ポリゴンの描画を行う前にglTexSubImage2Dで更新していますが
>負荷が大きいようです。

普通にテクスチャ更新すりゃいいだろ。なんで無駄なコピーやっているんだ?

327 :デフォルトの名無しさん:2008/12/27(土) 23:47:43
そうしたらなぜかGL_INVALID_OPERATIONが・・

328 :デフォルトの名無しさん:2008/12/27(土) 23:54:03
glBindTexture(GL_TEXTURE_2D, TexName);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, TEXSIZE_X, TEXSIZE_Y, GL_BGR_EXT, GL_UNSIGNED_BYTE, pSampleBuffer);
printf("Error:%d\n", glGetError());
glBindTexture(GL_TEXTURE_2D, 0); //UnBind

これをDoRenderSample内でやるとGL_INVALID_OPERATIONが

329 :デフォルトの名無しさん:2008/12/27(土) 23:56:34
なんか知らんが、OpenGLにはコンテキストを生成したスレッドでAPI呼ばないといけない制限があるから、
スレッド違いで失敗してるんでね?サンプルごとキューにでも投げてGLのスレッドで処理するようしとくとか。
こんな基本的な事は承知だったらすまね。

330 :デフォルトの名無しさん:2008/12/28(日) 03:45:51
>>328
テクスチャーサイズが2のn乗になってないが、大丈夫なのか?

331 :330:2008/12/28(日) 04:11:42
と思ったが、write()ではうまくいってるのか。

呼ぶタイミングを見ようと思ったら、DoRenderSample()を呼び出している
箇所が見つからない。どうなってる?

332 :デフォルトの名無しさん:2008/12/28(日) 14:11:09
Gluxってなんか面白そうじゃんって調べたらLGPLなのに静的リンクライブラリだった
「自由に使って欲しいからGPLじゃなくてLGPLにしたんだぜ」
って書いてあったけど、これだと全然自由じゃないよな?

LGPLって動的リンクならゆるいけど、静的リンクだとソース公開だったよな
俺が勘違いしてるのか?

333 :デフォルトの名無しさん:2008/12/28(日) 14:40:10
ソースコードはあるからライセンスに従って適当に使えばいいだろ。

334 :デフォルトの名無しさん:2008/12/28(日) 15:00:31
静的リンクでもいいようだぞ
中身読んでないから知らんが
ttp://ja.wikipedia.org/wiki/GNU_Lesser_General_Public_License

335 :デフォルトの名無しさん:2008/12/28(日) 20:01:22
なんかちょっと伝わってないみたいだから整理してみる

俺が望んでいること
→Gluxをライブラリとして使いたいが、全ソース公開は勘弁して欲しい
 公式には「自由に使える」と書いてあるが、LGPLなのであまり自由ではない(詳細は下記)

LGPLのソース公開条件
→動的リンク(*.dll)ならソース公開は不要だが、リバースエンジニアリングを許可する必要がある
 静的リンク(*.libとか*.a)ならソース and/or オブジェクトファイルの公開が必要

んで俺が試してみたところ、DLL化は無理だった(ライブラリ内にmain関数への参照があるから)
要するに静的リンクするしかないので、ソース公開は避けられないんじゃないか?
というのが問題なんだ

336 :デフォルトの名無しさん:2008/12/28(日) 23:33:32
main関数を共有ライブラリにおけない環境の不幸を呪うがいい

337 :デフォルトの名無しさん:2008/12/29(月) 00:26:23
「and/or」は都合のいいほうに解釈するんだ
つまりオブジェクトファイルだけ公開すれば良いんだ

338 :デフォルトの名無しさん:2008/12/29(月) 01:02:27
ソース見てみたが簡単にDLL化できそうだけどな

339 :デフォルトの名無しさん:2008/12/29(月) 01:12:16
>>335
軽くソースを読んでみただけなので不適当なところがあっても勘弁して下さい。

概略はgluxPlatform.cppでコンソールアプリ用とGUIアプリ用のmain関数の
ひな形が実装されていて、ユーザ定義のmain関数はgluxPlatform.h内の
#defineでglux_Mainへとリネーム、上記のひな形main内から適切なタイミング
でglux_Mainを呼び出す、という形ですね。

で、ひな形main関数の名前がmainだったりWinMainだったりするのでDLL化
が出来ない、と。

となると、まずgluxPlatform.h内のmainをリネームする#defineを削除、次に
gluxPlatform.cpp内のひな形メインをConsoleInit, WinInitなど無難な名前に
付け替えて、ユーザ定義のmain等から明示的に呼び出す形にすれば良い
のでは。glux_Mainはこの際にポインタとして渡してやれば良いと思います。

で、DLL化のための上記の修正を行うpatchを作成して、LGPLで公開。
DLL化版のgluxもLGPLとなりますから、これを動的リンクするプログラムの
ソースを公開する必要は無くなるはずです。

340 :デフォルトの名無しさん:2008/12/29(月) 01:36:59
>>335
ttp://www.gnu.org/copyleft/lesser.html
LGPL v3だとこんな感じだ

4. Combined Works.
d) Do one of the following:
 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, ...

このライセンスはライブラリ部分に相当する最小限のソース・バイナリコードにのみ感染し適用される。その範囲内での感染はGNU GPL第6項と同様の方法で行う。
「glux使いました」と書いてgluxの入手先を明示しておけばおkなライセンス。

341 :デフォルトの名無しさん:2008/12/29(月) 11:05:45
>>339
細かいレスありがとう
大体そんな感じでやったら出来たよ
数行程度の修正で間に合った

サンプルコードを元に改造していったんだけど
エラーが出ると予告無しに終了するって仕様のせいで時間がかかったわ

>>340
LGPL v2.1って明記されてるんだけど、そういう場合でも
v3だと読みかえていいのか?

342 :デフォルトの名無しさん:2008/12/29(月) 13:10:05
>>340
> 「glux使いました」と書いてgluxの入手先を明示しておけばおkなライセンス。
全然違う。

>>341
よくない。
またLGPLとGPLでもソース配布についての規定は少し違う。

gluxを同梱するか、自分のソフトと同じダウンロード場所から自分で配布する必要がある。

343 :311:2008/12/29(月) 21:22:24
>>330
2のn乗でないテクスチャはうちの環境ではサポートされています。
>>331
レンダラーフィルタとしてグラフに挿入すれば
後はDoRenderSample()を呼ぶのはDirectShowが勝手にやってくれるみたいです。

>>329
初めて知りました。OpenGL使い始めて長くないので・・
どんなプログラムを書けば実現できるのでしょうか?
「OpenGL マルチスレッド」でググってみましたが、よく分かりません。

344 :デフォルトの名無しさん:2008/12/29(月) 21:57:13
OpenGLのAPIが実行されるスレッドを1つになるようにコーディングする。
DirectShowのコードは別スレッドで実行されてるだろ?

345 :デフォルトの名無しさん:2008/12/29(月) 23:34:33
すいません、全然やり方わからないですorz
どんな関数とかを使えば?

346 :デフォルトの名無しさん:2008/12/30(火) 00:02:07
VS std以上を使っていると思うが、ブレークポイントで停止させたりすると、スレッドの一覧でどのスレッドか状態がわかるだろ?
Expressだとスレッドは確認できなかったかな。というかExpressはデバッグ機能は貧弱すぎて使い物にならん。
スレッド間でデータを受け渡しする機構なんかは適当にやれ。マルチスレッドを理解していれば簡単だろう。

347 :デフォルトの名無しさん:2008/12/30(火) 00:05:13
DirectShowが管理するスレッドがDoRenderSampleを呼ぶならその中ではGLのコマンドは使えない
そんだけ

348 :デフォルトの名無しさん:2008/12/30(火) 01:40:44
俺が大昔に書いたらしいMovieTextureなるクラスのソース見たけどmemcpy使ってるな

349 :デフォルトの名無しさん:2008/12/30(火) 07:55:00
>>348
今ならどう書く?

350 :デフォルトの名無しさん:2008/12/30(火) 12:28:05
OpenGL API を呼ぶ部分をクリティカルセクションで排他制御すれば
別スレッドから OpenGL API を呼んでも問題ないと思うんだけど。

351 :デフォルトの名無しさん:2008/12/30(火) 13:34:11
コンテキストがスレッドごとに違うので
排他制御してもうまくいかないと思う。


352 :デフォルトの名無しさん:2008/12/30(火) 16:52:56
>>351
ウインドウが1つならスレッドが違ってもデバイスコンテキストは同じじゃね?

353 :デフォルトの名無しさん:2008/12/30(火) 17:30:33
デバイスコンテキストじゃなくてGLのコンテキストだろう。

354 :デフォルトの名無しさん:2008/12/30(火) 18:44:35
>>350 >>352 GLの常識を知らないならROMっとけよw

355 :デフォルトの名無しさん:2008/12/30(火) 21:53:42
>>354
あ〜あ…

356 :デフォルトの名無しさん:2008/12/30(火) 22:02:07
常識を知らずに、自分が常識を知らないということを知ることはできない

357 :デフォルトの名無しさん:2008/12/31(水) 08:27:42
常識もなにも、試してみれば分かることだと思うけど‥‥

358 :デフォルトの名無しさん:2008/12/31(水) 16:16:52
>>357
プログラマとして、その考え方は危険だろ。
「たまたまうまくいってた」だけ、ってのが往々にしてあるし。
特にOpenGLは。

……ええ、こないだそれで長時間悩むハメになりましたさ。


359 :311:2008/12/31(水) 22:59:28
マルチスレッドなプログラムなんて組んだことありません。
使っているのはVisual C++ 2008 Express Editionです。

・・・コンテキスト?
wglCopyContextを使えばいいんでしょうか?

360 :デフォルトの名無しさん:2008/12/31(水) 23:11:02
頑張れ。学ぶんだ。今年もあと1時間弱あるから、なんとか。

361 :デフォルトの名無しさん:2009/01/01(木) 18:23:35
今年もまだ8740時間はあるからがんばろう

362 :デフォルトの名無しさん:2009/01/02(金) 01:44:29
>>361
そう表現すると、やけに少なそうに見えるな。焦燥感を煽るにはいいかも知れん。

363 :デフォルトの名無しさん:2009/01/02(金) 15:28:56
>>361
あのゲームやこのゲームで数百時間浪費することがいかに愚かか実感しました

364 :デフォルトの名無しさん:2009/01/02(金) 15:37:41
寝る時間 8時間、飯食う時間 1時間半としても、今年はまだ 5292.5時間もある。
がんばろうな。

365 :311:2009/01/02(金) 21:45:35
ttp://uproda.2ch-library.com/src/lib086808.zip.shtml
コンテキストをコピーしてみましたが、駄目でした・・

・Windows SDK
・Active Template Library
・GLUT
・Irrlichtのinclude

ビルドするのにこれらが要ります。

366 :デフォルトの名無しさん:2009/01/02(金) 21:48:39
これはアレだ。頭の弱い子には無理かもしれんね。

367 :デフォルトの名無しさん:2009/01/02(金) 22:04:50
諦めてmemcpy使うかD3Dに乗り換えるかしたほうがいいぞ
後学のためにやってるなら止めないが

368 :デフォルトの名無しさん:2009/01/02(金) 22:58:02
諦めんなよ…
諦めんなよ、お前!!
どうしてそこでやめるんだ、そこで!!
もう少し頑張ってみろよ!
ダメダメダメダメ、諦めたら
周りのこと思えよ、応援してる人たちのこと思ってみろって。
あともうちょっとのところなんだから。
俺だってこのマイナス10度のところ、しじみが取れるって頑張ってんだよ!
ずっとやってみろ!必ず目標を達成できる!
だからこそNever Give Up!!

369 :311:2009/01/02(金) 23:27:13
wglCopyContextが何故かfalseを返しています・・
それ以前にこの方法が使えるのかどうか分かりませんが

wglCopyContext(OrigCt, CopyCt, GL_ALL_ATTRIB_BITS)

370 :デフォルトの名無しさん:2009/01/03(土) 01:37:24
つ wglShareLists

371 :デフォルトの名無しさん:2009/01/03(土) 03:14:15
>349
memcpy使う代わりにメインスレッドと同期を取ってコピー元のポインタを投げてやる、ってのを思いついた
ちゃんと動くかわからんけど試してみる気も無いw

372 :デフォルトの名無しさん:2009/01/03(土) 22:27:09
>>329 で答え出てるのに、それを実行できないなんてただの無能だろ。
まずはVS std以上を買ってちゃんと勉強すべきだ。
お年玉貰っただろ?

373 :デフォルトの名無しさん:2009/01/03(土) 23:26:15
ならスレッド毎にコンテキストを作れば。ここらへん参考にならね
ttp://support.microsoft.com/kb/128122
ttp://support.microsoft.com/kb/128122/ja

374 :デフォルトの名無しさん:2009/01/03(土) 23:52:09
>>373
お前も死ねw

375 :デフォルトの名無しさん:2009/01/04(日) 03:27:54
つまりOpenGLを初期化したスレッドでのみ
glHogehoge()を呼べばいいんでしょ

376 :デフォルトの名無しさん:2009/01/04(日) 12:07:25
>>373
うん、たしかに参考にならないwww

377 :デフォルトの名無しさん:2009/01/04(日) 12:18:25
勘違いしてた。>>373はスルーしてください orz

378 :311:2009/01/04(日) 22:31:35
>>369はコピー先でwglCreateContextしていなかった
せいでした・・>>365でもwglShareListsは使っていますが、
ムービー再生前にwglMakeCurrentしてなかったので動きませんでした。

//レンダリングコンテキストを複製
DC = wglGetCurrentDC();
OldRC = wglGetCurrentContext();
HGLRC RC = wglCreateContext(DC);
wglCopyContext(OldRC, RC, GL_ALL_ATTRIB_BITS);
wglShareLists(OldRC, RC);

//ムービー再生前に
wglMakeCurrent(DC, RC);
//DoRenderSample内に
wglMakeCurrent(DC, RC);

ムービー再生前にwglMakeCurrentしたり、古い(というか複製元)
のレンダリングコンテキストでもう1回wglMakeCurrentを呼ばなくて良い理由は
よく分かりませんが動きました。
720x480 30fpsのMPEG2で音が途切れまくりだったのが改善されています。
ビデオを2つ以上にしたら動くかどうかは分かりません。

以前うpしたコードで
memcpyではなく
tmp = pSampleBuffer
のようにしても動くようですがサイズのでかい動画で音が途切れるのは
これでは直りませんでした。なんでだろう?
DoRenderSample()の外でテクスチャへの書き込み処理をしたらいかんのか

379 :デフォルトの名無しさん:2009/01/05(月) 00:53:34
質問なのですが、3次元空間内において四角領域にカメラ画像を描写して、
マウスとかでグリグリしていろんな方向から見えるようにしたいなと考えています。

毎フレーム画像を取得して、描画するのは1度きりなので、テクスチャに読み込まなくても、
glDrawPixelsでいいかなって思ってやっていたのですが、不具合が生じます。

とりあえず、glFrustumで視錐体を設定して、glMultMatrixで変換して、
glDrawPixelsで表示するという感じでやってみています。

そうすると、どんな位置に変換してみても表示する画像がウィンドウいっぱいに表示されて
マウスでグリグリして、姿勢を換えるとかができません。

とりあえず、できていると確認しているのは
@ウィンドウいっぱいならglDrawPixelsで表示できる
Aキューブとかオブジェクトなら求める位置に表示することができ、
 マウスでグリグリする部分は完成している。
ということです。

glDrawPixels付近に問題があるのだと思うのですが、これって適当に四角形作って、
そこにテクスチャみたく貼りつけて表示しているのではないのかな?
そもそも3次元上で表示するってのは無理な関数なのかな?
って感じでわからないことが多いです。

テクスチャで読み込めばいいんですけど、画像サイズがVGAサイズなのでめんどいとか、
毎回読み込むのでメリットなかったりとかあって、使うのは微妙なんですがいい方法ないでしょうか?

参考になるサイトとかでも教えていただけるとありがたいです。


380 :デフォルトの名無しさん:2009/01/05(月) 01:26:52
glDrawPixelsの実装はテクスチャ&ポリゴンだった希ガス。
昔スプライトっぽくglDrawPixelsで描画しようと試行錯誤した経験があるのだが、シェーダーとか色々影響した。
なので、glDrawPixels前にステートやシェーダーの設定をし直す必要がある。
ちなみに画像表示するならテクスチャでやるのがパフォーマンスがよい。

381 :デフォルトの名無しさん:2009/01/06(火) 12:20:53
iPhoneのOpenGL ESについてなんですが、iPhoneアプリ開発スレで聞いても誰も分からなかったようなので、
マルチポストのようですみませんがここでもう一度質問させてください。
iPhoneに載っているバージョンのOpenGL ESではGL_LINE_SMOOTHが利かないようなんですが、
ttp://discussions.apple.com/thread.jspa?threadID=1611394&tstart=120
この場合アンチエイリアスをかけるにはどうすればいいんでしょうか?
他に、座標点列をペシェ曲線みたいに補完してくれるライブラリとかがあったらそっちも教えていただきたいです。
よろしくお願いします。

382 :デフォルトの名無しさん:2009/01/06(火) 19:55:33
初めて投稿させていただきます。

初歩的な質問ですみませんが、
・法線情報(ノーマライズ済み)
・原点からの距離
の二つの情報から効率的に平面を描画させる方法はありませんでしょうか?大きさは適当です。
法線から直交する2ベクトルを計算して平面状の適当な4頂点を生成して…とかやっていたのですが、0の例外処理とかがややこしくなり、スマートにいきません。

環境は
WindowsVista
c++
glut
です。

よろしくお願いいたします。

383 :デフォルトの名無しさん:2009/01/06(火) 23:35:48
適当にax+by+cz=Lを満たす点を選ぶのが効率的な気もするけど

Z軸に垂直で距離Lの平面を描く4点(?,?,L)をZ軸をNに変換する行列で変換すればいい
(0,0,1)とN(a,b,c)との外積T,NとTの外積B
TとBを正規化してT,B,Nで3x3の行列を作って4点を変換するといいかも

384 :デフォルトの名無しさん:2009/01/07(水) 23:47:10
>>382
「効率的に」の意味が分からないけど。
法線をN、原点からの距離をdとすると・・・
Nとx軸の外積を求めて正規化→Bベクトルとする
NとBの外積を求めて正規化→Tベクトルとする
って作っておけば、位置dNを平面の原点として、BとTで
好きなだけ平面を張れるよ。
ただ、Nがx軸と平行な時(平行に近い時)は、x軸の代わりにy軸を使うとか
みたいな場合分けが必要になるけど。

って、結局、言ってる事は382,383と変わらないなこりゃ。
「0の例外処理」って何だろう?
・Nを球面上で連続に動かした時、平面を張る二つのベクトルも連続して動く
・Nを決めたとき、平面を張る二つのベクトルは一意に決まる
の二つを同時に満たすことは不可能だから、不連続な関数でも使わない限りは
何らかの場合分けが必ず必要になるよ。

385 :デフォルトの名無しさん:2009/01/07(水) 23:49:59
↑「必ず必要」て。ボケてるね。orz

もう寝る!

386 :デフォルトの名無しさん:2009/01/09(金) 15:37:01
iPhone開発でOpenGL(ES1.1)を初めて触っています。
3Dではなく2D用として作ってるんですが、
2Dの描画したオブジェクト同士が重なっているかを調べる
ようないい方法はあるんでしょうか?
やはり、自力で重なっているか(衝突しているか)を
調べないとだめですよね?


387 :デフォルトの名無しさん:2009/01/09(金) 15:44:33
>>386
「ピックアップ OpenGL」でググると良いよ

388 :デフォルトの名無しさん:2009/01/09(金) 16:37:42
>> 387

なんか難しそうだけどやってみます!
サンクスです!


389 :デフォルトの名無しさん:2009/01/09(金) 18:07:10
>>387
悉皆判定したいので実は向かないと予想

390 :デフォルトの名無しさん:2009/01/09(金) 18:38:33
>> 387

だいたいピックアップの概要は分かったんですが
これって、回転してない矩形領域に対しての判定なので
重なり判定したいオブジェクトが回転してない状態に全体を
回転させて判断しないとだめですよね?

>> 389

どういう意味ですか?


391 :デフォルトの名無しさん:2009/01/09(金) 19:04:31
>>389
ああそうか、ある部位で重複があるかを調べるんじゃなくて、
どこが重なってるかを調べるのでは向かないか。

>>390
? 回転?

392 :デフォルトの名無しさん:2009/01/11(日) 14:39:58
>> 391
ピックアップって特定の矩形(回転なし)の部分にある
オブジェクトを取得できますよね。
調べたいのは矩形A(回転あり)と矩形B(回転あり)が
重なっているかどうかなんです。

なので、ピックアップを矩形Aに合わせて回転させて調べる
ということかなと思ったんです。

393 :386:2009/01/12(月) 18:57:20
ってかOpenGL ES(iPhone)って
セレクションがそもそもないですね。。。
やっぱりスクリーン座標から実際に計算しないとダメな気がしました。


394 :デフォルトの名無しさん:2009/01/13(火) 13:45:46
印刷用に高解像度レンダリングしたいんだけど、そういうときってどうしてる?
TBitmapに描画しようと思ったら激遅らしいし、
BitBltじゃディスプレイ解像度よりあげられないしで、
正直どうしようか迷ってる・・・

395 :デフォルトの名無しさん:2009/01/13(火) 18:54:23
レンダリングする領域を分割して適当に繋げればいいんでないかな

396 :394:2009/01/13(火) 20:35:48
>>395
そりゃそうだ
何で気づかないかな・・・

397 :デフォルトの名無しさん:2009/01/13(火) 20:41:39
3Dだとパースがあるから割とむずいよ

398 :394:2009/01/13(火) 22:31:43
>>397
正射影でやるからパースは割りと考えなくていいかもしれない
そうでもない?

399 :デフォルトの名無しさん:2009/01/13(火) 22:40:48
FBOじゃだめなん?

400 :デフォルトの名無しさん:2009/01/13(火) 23:00:57
GameProgrammingGemsの2と4に高解像度レンダリングについての項目があるので参考までに

401 :デフォルトの名無しさん:2009/01/14(水) 00:17:41
>>397
パースがあるとか関係ないよ簡単だよ。

>>399
FBOだと結局解像度の制限があるよ。


領域分割に対して何も利点無さそうだけど、ジッタドレンダリングした後に
ピクセルを組み替えてもいいかもね。
あ、それだとMIPMAPのレベルが適切にならないか・・・。

402 :デフォルトの名無しさん:2009/01/14(水) 00:43:06
ああglだと行列いじらなくてもビューポートの切り替えだけでできるのか
d3dだと範囲外を指定するとレンダリングされないんで勘違いしてた

403 :デフォルトの名無しさん:2009/01/14(水) 01:09:40
お前どっちもちゃんと仕様を理解してねーだろw

404 :デフォルトの名無しさん:2009/01/14(水) 20:16:52
お絵かきアプリを作ってるんですが、
スペックの低いモバイルマシンだと線が増えてくるとラグくなってきます。
画面更新毎に全ての線を描画し直しているのが問題だと思うのですが、
過去に引いた線はテクスチャとして残しておいて、
一気に書き込んでしまうというようなことはどうすればできるのでしょうか?

405 :デフォルトの名無しさん:2009/01/14(水) 20:43:42
2D上書きならわざわざGL使う必要もないし、テクスチャにレンダリング内容をコピーしたい、またはオフレンダリングしたいならすればいいだけだろう。
FBOでググレカス

406 :デフォルトの名無しさん:2009/01/14(水) 23:53:25
>>404
なんでわざわざOPENGLでやろうと思ったんだ?
要はペイントでいいわけだろ?

407 :デフォルトの名無しさん:2009/01/15(木) 00:36:20
いや、GLを2Dのペイントやドローに使うのも、十分にアリだと思うんだけど・・・。楽だし。
ピクセルごとの細かい制御をしようとすると難しいけど、シェーダ前提なら色々できるし。

>>404
で、405も言ってるけど、FrameBufferObjectというのを使うといいです。
※→FBOに(追加で)描画→画面をクリアした後、FBOの内容を画面に描画→※に戻る

一番単純に考えると、単に画面をクリアするのをやめて、シングルバッファで重ね描きしていけば
いいんだけど・・・VISTAとかみたいなスマートな画面ドライバモデルじゃないと、重なったウィンドウに
内容を破壊されちゃうかな。

408 :デフォルトの名無しさん:2009/01/15(木) 00:56:13
なんとなくiPhoneかなと思った俺

409 :デフォルトの名無しさん:2009/01/15(木) 02:24:57
逆に、OpenGL ESでプログラムできる実機が手軽に手に入るハードって
iPhone/iPod touch以外にあるんかいな

410 :デフォルトの名無しさん:2009/01/15(木) 20:35:37
Visual C++でCRectTrackerを使って画像内にドラッグで大きさ、位置が
変更可能な矩形を描画しようとしてるんですが、
矩形内の色が白に塗り潰されてしまいます。
枠だけ描画というのはどうやったらできるんでしょうか。

画像はrawで、OpenGLで描画されています。

OpenGLを使わずに描画したビットマップ上では枠だけ描画されたので、
OpenGLの問題かと思いこちらで質問させていただきました。

411 :デフォルトの名無しさん:2009/01/15(木) 23:04:22
で、ソースは?
エスパーじゃないんだから「お前の使い方が悪い」としか言えんぞ

412 :デフォルトの名無しさん:2009/01/16(金) 01:09:21
OpenGLの問題というよりOpenGL以前の問題のような

413 :デフォルトの名無しさん:2009/01/16(金) 04:00:14
>>410
塗りつぶされるのは、ポリゴンになってるからだ
矩形の枠だけなら、ラインで引いたほうがいいと思う

414 :デフォルトの名無しさん:2009/01/16(金) 09:49:00
>>410
OpenGLの描画の上にGDIで描画しちゃダメ
枠線もOpenGLで描いてください

415 :410:2009/01/16(金) 13:49:20
>>411-414

コメントありがとうございます。

ソースはこちらにうpしました。
ttp://www1.axfc.net/uploader/File/so/16918

DrawOpenGL()で画像の描画、InitializeOpenGL()で矩形の初期化(m_tracker)、
OnDraw()で矩形の描画の処理で
右クリックで矩形の描画、左ドラッグでトラッキングを行えるようにしています。

OpenGLでCRectTrackerと同様の機能のものを作るのは難しいでしょうか。

416 :デフォルトの名無しさん:2009/01/17(土) 05:16:56
ソース見る気は毛頭ないがSetPixelFormatでGDIフラグたてとけ。

417 :410:2009/01/18(日) 01:51:10
>>416
ありがとうございます。
なんとかやってみます。

418 :デフォルトの名無しさん:2009/01/18(日) 13:58:02
あーもしかしたら…矩形描画時にブラシで上書きしてんだっけか。
NULL_BRUSH選択してから矩形かいてみ。

419 :デフォルトの名無しさん:2009/01/18(日) 19:33:36
それで動いたとしてもVistaではOpenGL描画の上にGDI描画は御法度だからな

OpenGLで描くなら普通にGL_LINESなんかで線描いてglBlendFuncで描画先反転させるかな

420 :デフォルトの名無しさん:2009/01/21(水) 01:28:06
ボーン用のウェイトを塗り塗りするアプリを作りたいんだけど、
ぬりぬりするためには、どうしたらいいのでしょうか、
セレクションバッファ使えばできるような気がするけど、
塗り塗りしてるようなサンプルとかってどこかにないですかね、
よろしくおねがいします。


421 :デフォルトの名無しさん:2009/01/22(木) 13:20:32
glTexImage2D() の internalformat 引数に与えた値と、その時生成したテクスチャの
glGetTexLevelParameteriv( ... GL_TEXTURE_INTERNAL_FORMAT ... ) が返す値は
必ず一致するでしょうか?

422 :デフォルトの名無しさん:2009/01/23(金) 06:38:45
必ずしも一致しません

423 :デフォルトの名無しさん:2009/01/27(火) 23:43:14
ちょいと質問

1.
ポリゴンをframebufferに描画し
それをglReadPixelsで配列に読み込む

2.
新しくテクスチャを作って
今読み込んだ配列をglTexImage2Dで関連付ける

んでためしにそのテクスチャでテクスチャマッピングすると
真っ白になるんだけどなぜ?
真っ白というか正確には最後にglColorで設定した値になる

glTexParameterとかglTexEnvfは2でglTexImage2Dの前に設定してるんだけど・・・

読み込んだ配列の中身を書き出してみたら
一応期待した通りの値が入ってるんだ。わけわかめ


424 :デフォルトの名無しさん:2009/01/28(水) 00:00:31
配列の中身が正しいなら、1.jは関係無いところでまちがってるってことでしょ
普通にファイルから読んだデータで2.からやってみるとかで確認してみれば

425 :デフォルトの名無しさん:2009/01/28(水) 00:06:53
テクスチャがEnableになってないとか
TexGenをEnableにしっぱなしだったとか

426 :デフォルトの名無しさん:2009/01/30(金) 10:36:17
オブジェクトがビューポートの中に入っているかどうかを判定する方法はありますか?
視点変更をした際に,対象物が視野から外れてるかどうかを判定したいのですが….

427 :デフォルトの名無しさん:2009/01/30(金) 16:48:33
XPなんだけどデスクトップ上にキャラを書き出すってことは出来る?
例えば3Dモデルのハエを画面じゅう飛び回らせたり

428 :デフォルトの名無しさん:2009/01/30(金) 17:26:45
xroach を思い出したわ

429 :デフォルトの名無しさん:2009/01/30(金) 17:34:52
xroach懐かしい。
groachなんてあるんだな。

430 :デフォルトの名無しさん:2009/01/30(金) 19:07:03
質問があります。

始点から終点に書けてαブレンド値を下げて、透明になっていくような曲線を書きたいのですが、
そういった関数はOpenGLで用意されているでしょうか?



431 :デフォルトの名無しさん:2009/01/30(金) 21:03:35
http://uploadr.net/file/5aa0aea5d6

432 :デフォルトの名無しさん:2009/01/30(金) 23:51:53
glMapBufferって
VRAMにCPUから直接かけるの?

433 :デフォルトの名無しさん:2009/01/31(土) 00:15:50
PBOだっけ?DirectXのロックと同じだ。
で、FBOのほうがパフォーマンスいいよっと。使いやすいし。

434 :デフォルトの名無しさん:2009/01/31(土) 01:27:48
>>426
gluUnproject()をうまく使えばなんとかなる?

>>430
曲線は書けないので細かい直線をつなげていくしか。

435 :427:2009/01/31(土) 19:09:27
自己解決

436 :デフォルトの名無しさん:2009/02/01(日) 17:56:44
プログラムは分からないユーザー側の質問で申し訳ないのですが、質問させてください。
WindowsXP Intel865G環境で、OpenGLのスクリーンセーバーを使用したいと考えています。
しかしながら、スクリーンセーバーとしてはあまりに重く、カクカク状態です。
通常の実行ファイルとして実行した場合(拡張子.exeに変更、/s起動)は、ある程度高速に動作します。

Windowsのスクリーンセーバー起動の場合は、OpenGLが有効にならないバグ等あるのでしょうか?
原因をご存じの方が、いらっしゃいましたらお答えいただけると幸いです。

437 :デフォルトの名無しさん:2009/02/01(日) 18:33:35
分かるけどスレ違いだから教えない

438 :デフォルトの名無しさん:2009/02/01(日) 21:03:37
>>437
Windows環境でOpenGLを使用してスクリーンセーバーを作成しました
しかしハードウェアアクセラレーションが有効になりません
どうすれば改善できるか、教えて頂けないでしょうか?

439 :デフォルトの名無しさん:2009/02/01(日) 21:35:16
最近のグラフィックカードはだいたい
どのくらいのテクスチャユニット数ですか。
単純にマルチテクスチャするときの枚数として知りたいんですが。

440 :432:2009/02/01(日) 21:39:00
>>433
それでもあえてPBOを使う!

ところで、マップするって
VRAMからメインメモリに転送するという事?

441 :432:2009/02/01(日) 21:49:45
DirectXのロックと同じというけれど
あれはVRAMに直接書き込んでいるの・・?

442 :デフォルトの名無しさん:2009/02/01(日) 21:56:38
CPUがシステムメモリ以外に直接アクセスする手段はないの。
マップやロックは要するに、VRAM<->システムメモリで転送を行うこと。
読み出しならロック時にVRAMから転送。書き込みならアンロック時にVRAMに転送される感じ。
名前の似ているWindowsのメモリマップドファイルとは別物ね。

443 :デフォルトの名無しさん:2009/02/02(月) 10:55:07
作業用のメモリかと思ってました

444 :デフォルトの名無しさん:2009/02/02(月) 16:52:21
>>439
GeForce GTX280 だと4枚

445 :432:2009/02/03(火) 22:13:32
>>442
なるほど
よくわかった、ありがとう

PBO1の内容を読みながら
PBO2に書き込む方法ってある?
一旦glGetBufferSubDataしないと無理そう

446 :デフォルトの名無しさん:2009/02/03(火) 22:53:34
わかってねーだろw

447 :デフォルトの名無しさん:2009/02/07(土) 12:08:24
PBO1もPBO2もマップすればいいじゃない
と、とても遅レス

448 :デフォルトの名無しさん:2009/02/08(日) 08:56:19
PCによってgluUnProjectの挙動が違うので頭を抱えてたんだが…
グラフィックのアクセラレーションを切ったら正常になった.

コード以外に原因があるときの調査って大変だよねぇ.

449 :デフォルトの名無しさん:2009/02/08(日) 14:03:28
glReadPixelでアルファ値をGL_BRA_EXTで取得してHBITMAPに変換
それをDCに貼り付けてUpdateLayeredWindowで表示してるんだけど
うまく半透明にならない
glClearColorでアルファを0にしといて背景を透明にして
その上に半透明の物体を重ねていく、で最終的に合計のアルファ値で
画面に加算した結果を表示するというようにやりたいんだけど
出来ないの?

450 :デフォルトの名無しさん:2009/02/08(日) 15:26:41
できる
glReadPixelsで取得した値を直接BitmapにしてUpdateLayeredWindowに渡すんじゃなくて
いったんどこかに書き出してちゃんとアルファが取得できてるか確認したらどうかな
あと、描画した物でなくちゃんと透けるような値が入った配列をビットマップにして
ちゃんと透けるか確認する
glReadPixelsではちゃんと取得できてるが、CreateCompatibleDCで作ったDCが
24bitでアルファ無しになってて透けないことがあった

あと関係ないが、Chrome430GTではglReadPixelsがもの凄く重くて使い物にならなかったぜ

451 :デフォルトの名無しさん:2009/02/08(日) 16:42:11
2^nのサイズ以外のバッファに読み込むと何故か遅くなるというバグはRadeon系であったよ

452 :449:2009/02/09(月) 10:32:48
調べたらglReadPixelしたデータのアルファがFFになってた

ピクセルフォーマット定義
PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
32,
0, 0, 0, 0, 0, 0,
0,
0,
0,
0, 0, 0, 0,
32,
0,
0,
PFD_MAIN_PLANE,
0,
0, 0, 0
};

これが取得部分
glFinish();
glPushClientAttrib(GL_CLIENT_PIXEL_STORE_BIT);
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glReadBuffer(GL_BACK);
glReadPixels(0, 0, w, h, GL_BGRA_EXT, GL_UNSIGNED_BYTE, buf);
glReadBuffer(GL_FRONT);
glPopClientAttrib();
何か間違ってる?

453 :449:2009/02/09(月) 11:41:08
自己解決
ピクセルフォーマットのアルファビット数を1にしたら出来た

454 :デフォルトの名無しさん:2009/02/10(火) 08:07:33
生の画像を非圧縮でテクスチャにしてるんだけど
同じサイズのを2枚やると失敗する
メタデータでもせいぜい5MBくらいだと思うけどGeforce上のRAMは1Gある
テクスチャのメモリって制限か何かあるの?

455 :デフォルトの名無しさん:2009/02/10(火) 15:39:26
なんか知らんが俺も似た問題を抱えている。
しかも成功する時としない時がある。
9800GTXだったと思う。

456 :デフォルトの名無しさん:2009/02/10(火) 20:32:07
メタデータ???('ω`)

457 :デフォルトの名無しさん:2009/02/10(火) 23:37:58
失敗の内容を書かないとエスパー能力にも限界があるぜ
glGetErrorでエラーは出てないの?
ドライバでエラーチェックONにするのを忘れずに

458 :デフォルトの名無しさん:2009/02/11(水) 22:03:03
なんかタイミングの問題みたいだ
描画中のコンテキストに対してユーザー操作の別スレッドで割り込んで
テクスチャを作ろうとするとこけるらしい

459 :デフォルトの名無しさん:2009/02/12(木) 00:11:28
なんだ、ただの馬鹿か

460 :デフォルトの名無しさん:2009/02/12(木) 00:29:39
煽ってるカスはほっといて…

>>458
複数スレッドには対応していないぞ。

461 :デフォルトの名無しさん:2009/02/12(木) 23:04:46
マルチスレッドで操作するなら1スレッド1コンテキスト
共有コンテキストにすれば別コンテキストで作ったテクスチャも使えるしな
描画中のテクスチャをいじったらどうなるか知らん

462 :デフォルトの名無しさん:2009/02/14(土) 20:14:01
ステンシルを作るときにあるポリゴンの外側を1にするとかって出来る?
全部1にして中を0にするとかは無しで

463 :デフォルトの名無しさん:2009/02/14(土) 20:59:43
つ 両面ステンシル

464 :デフォルトの名無しさん:2009/02/15(日) 18:53:36
glutCreateWindowで作ったウィンドウのタイトルバー消すのはどうやるんですか?

ttp://groups.yahoo.co.jp/group/opengl-jp/messages/851?viscount=-15&expand=1
ぐぐって出てきたこの方法やろうと思ったんですがウィンドウハンドルの取得が
「glutCreateWindowから返ってくるint値がウィンドウハンドル」ではないみたいで。

465 :デフォルトの名無しさん:2009/02/15(日) 19:04:17
FindWindowでやるしかないんじゃ

466 :デフォルトの名無しさん:2009/02/15(日) 23:08:26
どこぞでDCFromWindowとか使うやり方みた気がする。
DCはHGLRCから取得。

467 :デフォルトの名無しさん:2009/02/16(月) 19:59:04
上でスレッド関係の話が出てましたが便乗で質問。
あるスレッドで作ったテクスチャを別スレッドで描画することはできますか?
現状うまくいってないんですが、それがwglCopyContextの使い方が悪いのか、
あるいはそもそもレンダリングコンテキスト間でテクスチャの共有ができないのか、
よく分かっていないのです。

468 :467:2009/02/16(月) 20:00:10
>>458を見落としてました。>>467はいったんなかったことに…。
もう少し考えます。

469 :デフォルトの名無しさん:2009/02/17(火) 00:02:04
ウィンドウの端っこに座標軸(X軸Y軸Z軸)を描画したいんだけど、どうしたらいい?
オブジェクトを回転させたらいまいちうまくいかなくて困ってる・・・

470 :デフォルトの名無しさん:2009/02/17(火) 00:35:29
オブジェクトを書くときは
glPushMatrixで微分を退避してglPopMatrixで戻すといいよ
というかそうしないとオブジェクトが複数重なったら計算がめんどいだけだ

471 :デフォルトの名無しさん:2009/02/17(火) 01:03:25
>>468
それは描画しながらテクスチャを作ろうとした場合の話であって
最初にまとめて作られたテクスチャを別々のスレッドで利用するのはまた別の話だぞ

472 :468:2009/02/17(火) 02:35:26
>>471
自分の用途に関しては以下のような感じでうまくいきました。

描画用スレッド内では↓こんな感じでテクスチャロード用スレッドを起動
HDC hdc = wglGetCurrentDC();
HGLRC hrc_for_loading_texture = wglCreateContext(hdc);
wglShareLists(hrc_for_rendering, hrc_for_loading_texture);
shared_ptr<ThreadObject> th(new ThreadObject(hdc, hrc_for_loading_texture);
boost::thread(*th);

テクスチャロード用スレッドは↓こんな感じ
ThreadObject::ThreadObject(HDC hdc, HGLRC hrc) : hdc_(hdc), hrc_(hrc) {} // コンテキストを受け取って
void ThreadObject::operator()(void) { // スレッド実行部
 wglMakeCurrent(hdc_, hrc_);
 ・・・テクスチャのロード(glBindTextureとか)・・・
}
ThreadObject::~ThreadObject() {
 wglMakeCurrent(hdc_, NULL);
 wglDeleteContext(hrc_);
}



473 :デフォルトの名無しさん:2009/02/18(水) 19:04:22
openGL +

474 :デフォルトの名無しさん:2009/02/18(水) 19:05:01
すみません、途中投稿しました
openGL + GLUTでプログラムを組んでいるのですが、
起動中に表示されるコマンドプロンプトを表示させないようにする方法はないのでしょうか?

475 :デフォルトの名無しさん:2009/02/18(水) 19:40:02
>>474
それは開発環境の問題じゃないの?

476 :デフォルトの名無しさん:2009/02/18(水) 19:52:42
コンソールでビルドしてんだろw

477 :デフォルトの名無しさん:2009/02/18(水) 20:00:36
>474
vcなら
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")


478 :デフォルトの名無しさん:2009/02/19(木) 02:15:37
OpenGLで使えるDXF読み込みとかが出来るライブラリでお勧めのものとかありませんか?


479 :デフォルトの名無しさん:2009/02/19(木) 15:41:14
>>478
Delphi2005プログラミングテクニックVol10にそのまんまなコードがあるよ
ライブラリではないけど

>>469の続きなんだけど、特定のウィンドウ座標にオブジェクトの表示はできたけど、
-Z方向のオブジェクトが描画されない・・・どうしたらいいか教えて欲しい
いまはglOrthoで視体積を取って、gluUnProjectでウィンドウ隅に対応するワールド座標を取得、
取得した座標分だけglTranslarefでオブジェクトを移動してる
オブジェクトを移動してみたりしたけどいまいち上手くいかない

480 :479:2009/02/19(木) 15:42:00
>>478
失礼
勝手にDelphiだと思い込んでた

481 :480:2009/02/19(木) 16:04:32
おk
自己解決した

取得した座標分じゃなくて係数かけて減らしたら見えるようになった
無理やりな気がしないでもないけど

482 :デフォルトの名無しさん:2009/02/19(木) 22:38:18
PixelBufferObject使うと本当にテクスチャの更新速度上がるの?

483 :デフォルトの名無しさん:2009/02/19(木) 23:37:28
ARB_pixel_buffer_objectの仕様のOverviewによると
通常テクスチャ更新には最低1個のコピーが必要だけどそれが消せるので速いという理屈らしい
俺にはいまいちよくわからない

484 :デフォルトの名無しさん:2009/02/20(金) 00:52:58
PBOにテクスチャじゃなく座標情報を渡して
その情報を元に一括で描画をさせると早いということでしょ

485 :デフォルトの名無しさん:2009/02/20(金) 02:32:04
テクスチャ画像を生成する関数Fがあったとして、
glTexImg2DとかだとFを実行した結果をメモリに格納しておかないといけない。
けど、PBOだとglMapBufferでゲッツしたアドレスに対してFを実行すればメモリに画像を保存しなくても直接buffer objectに書き込めるという事だと思う。
本当にglMapBufferでGPUのメモリに直接読み書きできるような実装があるかどうかは知らないが、
仕様書によると
If the GL is able to map the buffer object’s data store into the client’s address space, MapBuffer returns the pointer value to the data store.
って書いてあるぽ。



486 :デフォルトの名無しさん:2009/02/20(金) 02:38:16
>>484
Buffer objectをvertex buffer objectとして頂点情報を書き込んでレンダリングして結果をテクスチャに書き込むって事?
それだとPBOが無くてもVBOで事足りるじゃん。

487 :デフォルトの名無しさん:2009/02/20(金) 03:17:40
http://www.songho.ca/opengl/gl_pbo.html
イメージをmallocしたバッファなんかに一端格納するんじゃなくて、直接PBOに入れとけば
そこからVRAMへはOpenGLがノンブロッキングのDMA転送で送ってくれるということらしい。

ただ、さらに下のダブルバッファリングの例はOpenGLのレンダリングが最大何フレーム
遅延するかはわからないと思うから毎回新しいバッファを割り当ててやらないと
やっぱりブロッキングされる気がする

488 :デフォルトの名無しさん:2009/02/20(金) 06:18:35
ドライバの実装方法次第だと思うけど
PBOのDMA転送というのをGPUが実装してないと意味がない
そのくらいだったらドライバで偽装してCPUでやってる可能性のが高いけど

489 :デフォルトの名無しさん:2009/02/20(金) 14:58:14
あんまり適当な知識で語るなよお前ら。見てて恥ずかしい。

490 :デフォルトの名無しさん:2009/02/20(金) 16:29:49
あんまり適当な知識で語るなよお前。見てて恥ずかしい。






491 :デフォルトの名無しさん:2009/02/20(金) 19:08:29
茶化すだけのレスをつける人間がいるな・・・NGするからIDつけてくれ

492 :491:2009/02/20(金) 19:11:16
IDじゃなかったコテハンかトリップ

493 :デフォルトの名無しさん:2009/02/21(土) 19:02:43
int i = 1;
glEnable(GL_LINE_SMOOTH);
glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE);
glLineWidth( i );
glBegin(GL_LINE_STRIP);
glEnd();

iが10以上だとi=10と認識されて描画されてしまう。
この限界値ってどうやって変更するんです?
スペックによるの??

494 :デフォルトの名無しさん:2009/02/21(土) 19:17:14
ググッて5秒でわかることを何故調べない?

495 :デフォルトの名無しさん:2009/02/21(土) 21:15:47
>>493
限界値は限界値なので、それ以上は無理なのですよ。
ビデオカードorドライバによって決まるます。

496 :デフォルトの名無しさん:2009/02/23(月) 10:50:37
質問。
OpenGLで、ボーンアニメーション(スキンアニメーション)を扱うライブラリというのはありますか?
自前で作る前に、まずは実績のあるライブラリを探せ。とよく言われていたもので。

>>38の人が自前で実装していたのをみるに、「これ!」といったライブラリはまだないのでしょうか?

497 :デフォルトの名無しさん:2009/02/23(月) 12:21:48
>>496
D3DX

498 :デフォルトの名無しさん:2009/02/23(月) 12:43:50
何故にDirectX?

499 :デフォルトの名無しさん:2009/02/23(月) 12:55:40
実績のあるライブラリだろ?

500 :デフォルトの名無しさん:2009/02/23(月) 12:59:05
実績があるのは知ってるけど,OpenGLから呼び出してちゃんと使えるの?


501 :デフォルトの名無しさん:2009/02/23(月) 13:29:44
D3DXで頂点座標を計算→OpenGLで描画

502 :デフォルトの名無しさん:2009/02/23(月) 17:04:54
無駄が多すぎるなw
俺は使ったこと無いんだけどソースも公開されてるOgreはどうよ。

503 :デフォルトの名無しさん:2009/02/23(月) 18:56:26
>>496
FBX SDK

504 :デフォルトの名無しさん:2009/02/24(火) 23:22:47
ttp://developer.download.nvidia.com/SDK/10/direct3d/samples.html
Stencil Routed K-BufferってOpenGL2.1でも出来る?
シェーダー書くときは何を使うべき?

505 :デフォルトの名無しさん:2009/02/24(火) 23:37:34
あくまで推測だけど、d3d10のサンプルなら独自拡張を使わない限りgl3じゃないとおそらく無理だと思う
その世代だとシェーダは基本的にglsl一択、nVidiaのグラボならCgもアリ

506 :デフォルトの名無しさん:2009/02/24(火) 23:40:40
MSAAの個別サンプルを取得する必要があるらしいからOpenGL2.1標準じゃ無理
3.0標準でもたぶん無理
GeForceでGL_NV_explicit_multisample拡張使えばいけそうな気がする

シェーダはとりあえずNVIDIAなGPUで動けばいいというならCg
Radeonでも動いて欲しいならGLSL
制限ついてもいいからIntelやちょっと古いGPUでも動いて欲しいならCgでarbvp1/arbfp1プロファイル
CgはランタイムDLLが必要だが、GLSLはドライバ依存でドライバがアレだと酷いことになる
一長一短だな

507 :デフォルトの名無しさん:2009/02/25(水) 17:27:48
OpenGLって、スキニングアニメーションすら全部自前実装しなきゃならんのか?
いまどきすごいな

508 :デフォルトの名無しさん:2009/02/25(水) 17:34:54
D3D以外でAPI側が提供してくれる環境ってあるの?

509 :デフォルトの名無しさん:2009/02/25(水) 20:49:37
描画APIの仕事じゃないし何らおかしくないだろ
Direct3DでもD3DXとして分けてるくらいだ

510 :504:2009/02/25(水) 23:14:08
OpenGL Extensions Viewerで見てみたら、
OpenGLのバージョンは2.1と表示されている・・。3.0は使用不可?

multisampleって名前に入っている拡張は
GL_ARB_multisample
GL_EXT_framebuffer_multisample
WGL_ARB_multisample
の3つだけだった。

>Radeonでも動いて欲しいならGLSL
RADEON HD 2600XT,Windows XPだからGLSLじゃないと無理なのか・・
シェーダーの記述は何を使う?RenderMonkey市か使ったこと無いんだが

511 :デフォルトの名無しさん:2009/02/25(水) 23:33:14
OpenGL3.0だとglBeginとかglEndとかも使えなくなっちゃうらしいから
gl2.1と書いたのだけど・・
(そもそもどうやって移行するのか分からない)

512 :デフォルトの名無しさん:2009/02/25(水) 23:38:42
>>510
OpenGL Extensions Viewerで表示されるバージョンは
通常のコンテキストでのGL_VERSIONだから2.1になってしまう。
9.1だとプログラムが落ちたけど、Catalyst 9.2からは3.0コンテキストを
カレントコンテキストにしてからGL_VERSIONを見ればちゃんと3.0になるよ。
もっともHD2xxxがOpenGL 3.0に対応してるかどうかは知らないけど。

513 :デフォルトの名無しさん:2009/02/25(水) 23:48:18
>>511
前方互換コンテキストでなければ非推奨になった機能も使える。

int attribs[] = {
  WGL_CONTEXT_MAJOR_VERSION_ARB, 3,
  WGL_CONTEXT_MINOR_VERSION_ARB, 0,
  // 前方互換コンテキストを作るときはコメントを外す
  // WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,
  0, 0
};
HDC hdc = wglGetCurrentDC();
HGLRC hglrc = bShareData == GL_TRUE ? wglGetCurrentContext() : 0;
HGLRC hglrc3 = wglCreateContextAttribsARB(hdc, hglrc, attribs);
BOOL bCtx = wglMakeCurrent(hdc, hglrc3);
printf("OpenGL Version : %s\n", glGetString(GL_VERSION));

514 :デフォルトの名無しさん:2009/02/25(水) 23:51:51
glx拡張は使ったことないんで誰かよろしく。

515 :デフォルトの名無しさん:2009/02/26(木) 06:25:36
NV_explicit_multisample拡張はGeForceでも最近の物なのでRadeonでは対応なさそうだな
Extentions Viewerは3.0対応してれば3.0って返してくれるんじゃなかったっけ
最近のRadeonのドライバで3.0対応したからHD2400以上ならドライバ更新すればいけるはず

516 :デフォルトの名無しさん:2009/02/26(木) 09:56:05
GLX だとこんな感じ

int nelem;
int fbattribs[] = {
  GLX_RENDER_TYPE, GLX_RGBA_BIT, GLX_DOUBLEBUFFER,
  GLX_RED_SIZE, 1, GLX_GREEN_SIZE, 1, GLX_BLUE_SIZE, 1, None
};
GLXFBConfig *fbconf = glXChooseFBConfig(display, DefaultScreen(display), fbattribs, &nelem);
XVisualInfo *visual = glXGetVisualFromFBConfig(display, fbconf[0]);

...

int attribs[] = {
  GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
  GLX_CONTEXT_MINOR_VERSION_ARB, 0,
  //GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB,
  0
};
GLXContext context = glXCreateContextAttribsARB(display, *fbconf, 0, 1, attribs);
glXMakeCurrent(display, window, context);

らしいよ

517 :デフォルトの名無しさん:2009/02/26(木) 11:13:43
>>515
> Extentions Viewerは3.0対応してれば3.0って返してくれるんじゃなかったっけ
2.1コンテキストでGL_VERSIONやGL_[MAJOR/MINOR]_VERSIONを取っても2.1にしかならない。
そして既存のプログラムでは2.1コンテキストしか貰えないことが規格に明記されている。

The OpenGL® Graphics System: A Specification (Version 3.0 - August 11, 2008)
Appendix N
> Calling the older context creation commands will return an OpenGL 2.1 context.

現状では3.0コンテキスト作ってバージョン取得するソフトは皆無。
GPU Caps Viewerは1.7.0で対応予定。

518 :デフォルトの名無しさん:2009/02/27(金) 21:53:02
GLSLで質問なんですが、バーテックスシェーダーから
フラグメントシェーダーにvaryingで値を渡すと
補間がかかって値が変わりますよね?
値を全く変えないでバーテックスシェーダーから
フラグメントシェーダーに値を渡すにはどうすればよいでしょうか?

519 :デフォルトの名無しさん:2009/02/27(金) 22:24:16
変わらないならuniform変数で

520 :デフォルトの名無しさん:2009/02/27(金) 22:47:48
全点通して変えないなら>>519だが
補間して欲しくないということなら宣言にflatをつければよい
ただしOpenGL3.0(GLSL1.3)の機能だ

521 :デフォルトの名無しさん:2009/02/28(土) 00:46:01
お二人ともレスどうもありがとうございます。

>>519
uniformでVS→FS出来たんですね。
uniformはアプリからVSやFSに値を渡すものだと思ってました。
今環境が無いので試せないので今度試してみます。

>>520
書いてませんでしたが今使ってるのは2.1です。
OpenGL3.0ではflatなんてのがあるんですね。

522 :デフォルトの名無しさん:2009/02/28(土) 01:48:56
>>511
どっちかというと、赤本がどうなるのかが気になる。
いきなりVBOから始まるんじゃ入門者にとって敷居が高すぎるし…

523 :sage:2009/02/28(土) 02:15:19
OpenGLのソースコードって公開されてないのかな?

524 :デフォルトの名無しさん:2009/02/28(土) 03:07:26
mesa3d

525 :デフォルトの名無しさん:2009/02/28(土) 07:11:38
>>518-521
uniform変数でVertexShader→FragmentShaderは無理だろ
そもそもuniform変数はShaderではread-onlyなんだし。

526 :デフォルトの名無しさん:2009/02/28(土) 09:44:54
flatはVBOの最初の頂点の値がずっと有効になるってことなのかな。
それじゃ全点通して変わらないのと一緒=unformでアプリから渡すのと同じだから
三角形ごとに切り替わるのかな

527 :デフォルトの名無しさん:2009/02/28(土) 22:13:16
glBegin(GL_TRIANGLES);
for (int i = 0; i < num_triangles; ++i) {
  glNormal3fv(normals[i]);  // トライアングル一つにつき
  glVertex3fv(vertex[i][0]); // 法線を一つ指定
  glVertex3fv(vertex[i][1]);
  glVertex3fv(vertex[i][2]);
}
glEnd();

とか、

glBegin(GL_POINTS);
for (int i = 0; i < num_points; ++i) {
  glColor4ubv(color[color_index[i]]);  // 色と頂点で別の
  glVertex3fv(vertex[vertex_index[i]]); // インデクスを使う
}
glEnd();

みたいな描画って、頂点配列でできますか?
今は困ってないけど、GL3で頂点配列しか使えなくなると、
この辺の柔軟性が無くて困るような・・・。

528 :デフォルトの名無しさん:2009/02/28(土) 22:13:50
あ、GL2.1でもShadeModelをGL_FLATにすれば
gl_Colorとかでパラメータ渡せば補間無しにできるわ
GL3ではShadeModelがDeprecateだからflat使えということになるんだあ

529 :デフォルトの名無しさん:2009/02/28(土) 22:16:49
>>527
そういう頂点配列をいちいち作ればいい
glBegin/glEndの中ではそういうことやってるんだろうな

530 :デフォルトの名無しさん:2009/02/28(土) 23:50:31
>>527
GL_ARB_instanced_arrays / GL_EXT_bindable_uniform / Vertex Texture Fetch+GL_ARB_texture_float
/ GL_EXT_transform_feedbackで前処理 / CPUで前処理

お好きなのをどうぞ。そもそも3.0フルコンテキストならImmediateも使えると何度(ry

531 :デフォルトの名無しさん:2009/03/01(日) 10:35:05
ゲームで一定のアニメーションをさせる時にPCによって性能が違うから
FPSが変わってくるけどアニメーションは一定の速度にしたいのだけど
60FPSなら1000/60msでタイマーで割り込みを掛けると約16msで
割り込み速度が追いつかなくてのろのろになるんだけど
普通はどうやってやるの?
スレッドでループさせて16ms間隔のSleepをさせるとか?

532 :デフォルトの名無しさん:2009/03/01(日) 11:09:11
>>531
ゲームはFPSを一定にする必要は無いんじゃないか?


533 :デフォルトの名無しさん:2009/03/01(日) 11:10:31
フルスクリーンにしてリフレッシュレートをAPIで変更する

534 :デフォルトの名無しさん:2009/03/01(日) 11:44:46
1. 前のフレームから16ms経ったか調べる
2. Sleep(0)で一瞬寝る
3. 1に戻る
OpenGL関係ないやん

535 :デフォルトの名無しさん:2009/03/01(日) 12:03:06
>>534
sleep時間ゼロだと、ビジーループにならないか?


536 :デフォルトの名無しさん:2009/03/01(日) 12:12:55
WindowsではSleep(0)だと一旦他のプロセスに渡しはする
必要以上にCPU時間をとりはするけど思う程多くはないし
ゲームだったら多少無駄に喰うくらい問題ないだろう

537 :デフォルトの名無しさん:2009/03/01(日) 12:19:39
vsync割り込みに描画関数を設定するのが正攻法なんだろうけどね。
WinAPIを良く知らないので的確なアドバイスができない。

さすがに、ここまで低レベルの処理はGLUTには無いだろうし。


538 :531:2009/03/01(日) 12:21:31
FPSはアニメーションのフレーム数の意味
実際の描画フレームはもっといく
1秒間に60フレーム分の動作をさせて
描画は完全に独立したフレームにするから30だったり100だったりする
つーかゲームって普通そうだろ

>>ゲームだったら多少無駄に喰うくらい問題ないだろう
そうか?

539 :デフォルトの名無しさん:2009/03/01(日) 12:25:14
vsyncつかうとリフレッシュレートが60じゃない場合に面倒じゃない?
リフレッシュレートが85とかだとゲームが速くなるってのも同人ならよくあるが…

540 :デフォルトの名無しさん:2009/03/01(日) 12:26:16
フルスクリーンでリフレッシュレートをAPIで設定してvsync割り込みに同期して描画する
これが一番単純

541 :デフォルトの名無しさん:2009/03/01(日) 12:32:07
>>538
画面同期しなくていいなら、自分が良く使う方法は

long FRAME=20; // ゲーム周期(ミリ秒)
long prev; // 一つ前の時刻

// ゲームループ
game(){
  :
 ゲーム処理;
  :
 long now=その環境のミリ秒単位現在時刻取得関数();
 long wait=FRAME-(now-prev);
 if(wait<0) wait=0; // 処理落ちした場合ウェイトなし
 sleep(wait); // 指定したゲーム周期を待つ
 prev=now; // 直前の時刻を更新
}

こんな感じ。

542 :デフォルトの名無しさん:2009/03/01(日) 13:18:17
>>541
とりあえずそれでやってみる

543 :デフォルトの名無しさん:2009/03/01(日) 20:36:24
>>540
最近のノート用ゲフォ等では、低電力モード時にリフレッシュレート変更や
vsync同期非同期切替が出来なかったりする。

544 :デフォルトの名無しさん:2009/03/01(日) 20:41:57
そんなものは動作保障外にすればよいのだ

545 :デフォルトの名無しさん:2009/03/01(日) 22:52:01
オブジェクトの移動処理を
全てタイマーをもとにして行えばvsyncとか問題ない!

546 :デフォルトの名無しさん:2009/03/01(日) 23:14:38
なんか、ゲーム製作板みたいな内容になってきたな。
OpenGLの話題となると、ゲームの話が多くなるのは当然といや当然かもしれないが。

547 :デフォルトの名無しさん:2009/03/02(月) 13:26:45
compizみたいなのもあるっちゃあるがねえ

548 :デフォルトの名無しさん:2009/03/04(水) 22:36:20
ゲームの流れになってるから便乗して聞いてしまう。

ゲームを作るときは飛行機とか車とかをオブジェクトにするのが普通だと思うけど、
表示するモデルの座標を保持するときって、同次行列にしてる?
それともxyz+クォータニオンにしてる?

同次行列を持っていたほうが柔軟で応用が効きそうな気はするんだが、そうなると
回転処理のときにクォータニオンを自分で実装しなきゃいけないからやや面倒で。


549 :デフォルトの名無しさん:2009/03/06(金) 18:15:50
構造体または配列 [ x, y, z ]のメモリ配置が
列ベクトルないし純虚数のメモリ配置に直接マップできる状態なら、
どちらでも同じかなという気がする。
C99で<complex.h>が入ってたり、新言語でも複素数サポートが充実してるんで、
2次元の回転処理を大半複素数でやるようになってきたのだが、
ガウス平面上の回転も重視されるようになったのは最近とかなんとか。
まあ20世紀前半は物理学で線形代数が花盛りだったしなあと思うと、そんなものかもしれない。

550 :デフォルトの名無しさん:2009/03/06(金) 22:42:28
>>549
サンクス。
548だが、考えた結果行列で持つことにした。
OpenGL自体との相性がいいしね。

551 :デフォルトの名無しさん:2009/03/06(金) 22:51:54
>>550
四元数を自前実装するときに[ i, j, k, 1 ]にすれば、
そのメモリ配列そのままで四元数にできると思うよ

552 :デフォルトの名無しさん:2009/03/07(土) 17:36:09
質問です
glTexSubImage2Dを使ってテクスチャ画像をアップデートできるみたいなんですが
gluBuild2DMipmapsで作成したテクスチャにglTexSubImage2Dをやるとうまくいかないんでしょうか?

gluBuild2DMipmapsで最初に読み込まれた画像から全然変化しないのです

553 :デフォルトの名無しさん:2009/03/07(土) 19:04:49
全部のミップマップレベルを更新しないとだめよ
自前でやるのが面倒なら
GL_SGIS_generate_mipmap拡張があれば、テクスチャをバインドしたあとに
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_TRUE);
で自動ミップマップ生成が有効になる
あとはglTexSubImage2Dで全てのミップマップが更新されるんじゃないかな

554 :552:2009/03/07(土) 20:38:47
すいません自己解決しました、根本的な解決ではありませんが

gluBuild2DMipmapsをglTexImage2Dに置き換えたら成功するようになりました
最近のglTexSubImage2Dはピクセル数が2のべき乗じゃなくても成功するんですね

555 :デフォルトの名無しさん:2009/03/07(土) 22:31:19
>>553
前々から言われてるけど、RadeonはGL_GENERATE_MIPMAPもglGenerateMipmapも効かなくて困る。
うまくいってるって人の書き込みを参考にしてみたけどどれも駄目だった。
うまい次善策はないものだろうか。

>>554
つ GL_ARB_texture_non_power_of_two

556 :デフォルトの名無しさん:2009/03/10(火) 22:26:00
手っ取り早くジオメトリシェーダーを使うにはどうすればいいですか?

XP+RADEON HD 2600XTで以前glewinfoで調べたときは、
GL_EXT_gpu_shader4はありましたがGL_ARB_geometry_shader4がありませんでした。
Catalyst 9.2にした後はビデオカードが壊れてしまい調べられませんでした。

XP + RADEON HD 4830 + 最新Catalystでは使えるんでしょうか?

557 :デフォルトの名無しさん:2009/03/11(水) 00:11:24
手っ取り早くはGeForce買え
Catalyst 9.2でもジオメトリシェーダはまだっぽい

558 :デフォルトの名無しさん:2009/03/11(水) 00:33:14
ようやく仕様が公開されたGL_AMD_vertex_shader_tessellatorの中に
GL_EXT_geometry_shader4との関係が書いてあるから早晩実装されるでしょう。

559 :デフォルトの名無しさん:2009/03/11(水) 23:53:12
最初に2乗じゃないとだめだと決めた奴ってきっと馬鹿だ

560 :デフォルトの名無しさん:2009/03/12(木) 01:05:27
>>559
そういうことは、テクスチャフェッチ/フィルタリングユニットのマイクロコードを書いてから言えw

561 :デフォルトの名無しさん:2009/03/12(木) 18:04:23
計算機資源が豊富になったあとから後出し文句を言うのはフェアじゃない。
つか文句自体カッコ悪い。

562 :デフォルトの名無しさん:2009/03/15(日) 12:35:41
windowsでインストールされているopenglのバージョンを知るにはどうしたらいいでしょう?

563 :デフォルトの名無しさん:2009/03/15(日) 14:18:02
>>561
計算機資源豊富な今でも、2^nから外れるとパフォーマンスは急激に劣化するしなあ。


564 :デフォルトの名無しさん:2009/03/15(日) 14:19:28
>>562
OpenGLのバージョンはGPUとそれのドライバで決まる
OpenGL Extensions Viewerとかどうぞ

565 :デフォルトの名無しさん:2009/03/15(日) 18:04:49
>>560
その仕様が出来た頃はマイクロコードどころかFPGAとかで
実装していたわけで。テクスチャユニットが8個ならチップの
集まりが8組基盤の上に並んでいる。そういう時代。
物理的にロジックが実装されている以上柔軟性を持たせる
のにも限度があるから、2^nの制限もやむを得ないところ。

RealityEngine辺りの現物と論文を比べると結構面白い。
論文に書かれているブロックダイアグラムそのままにチップ
が大きな基盤に綺麗に並んでいるので非常に分かりやすい。

566 :デフォルトの名無しさん:2009/03/15(日) 18:32:38
openglってbmp画像を読み込む命令ってないんすか

567 :デフォルトの名無しさん:2009/03/15(日) 19:21:22
無いよ。全部自前でやるか、他の適当なライブラリ使って。

568 :デフォルトの名無しさん:2009/03/15(日) 23:12:27
>>564
無事opengl3.0がフルに使えるようになりました。
ありがとう。

569 :デフォルトの名無しさん:2009/03/16(月) 19:13:49
とりあえず、初心者は2.0の赤本を買っておけば大丈夫ですよね?。



あと、皆さんはどんな開発環境を使ってますか?。

570 :デフォルトの名無しさん:2009/03/18(水) 00:08:08
赤本があればいいが、それで初心者でも安心かはよくわからない

開発環境は主にiMacでgccとVIM
OpenGL Profilerが非常に便利だ
WindowsマシンはVistaでGeForceとRadeonとChromeを適宜差し替え
WindowsでもgccとVIM、たまにデバッグ用にVisual Studio
gDEBuggerが欲しいけど高い

571 :デフォルトの名無しさん:2009/03/19(木) 10:34:24
ははは

572 :デフォルトの名無しさん:2009/03/19(木) 12:15:03
ひひひ

573 :デフォルトの名無しさん:2009/03/19(木) 13:06:00
拡張機能を使い始めると赤本だけでは不十分な気がするのですが
(例えば、赤本に wglChoosePixelFormatARB() って載ってましたっけ…?)
拡張機能の学習にお勧めの書籍はありますでしょうか。
今のところ OpenGL Superbible あたりを買ってみようかと考えています。


574 :デフォルトの名無しさん:2009/03/20(金) 00:20:20
Superbibleはサンプルが多めでちょっと範囲が広い赤本という感じだったな
拡張もある程度載ってるけど、応用的なものは少ない
基本的なものを知りたいならいい本だけどね
洋書いけるならMore OpenGL Game Programmingが結構面白かった
ちょっぴり古いけどまだ参考にはなると思う

575 :573:2009/03/20(金) 20:56:45
>>574
ありがとうございます。そちらも入手してみます。

576 :デフォルトの名無しさん:2009/03/24(火) 00:34:59
Visual C# 2008EEでC# OpenGL Framework(OpenGL v1.2.1)を使っています。今回行列演算の順序の確認や、挙動を理解するために以下のコードを書きました。
起動時にgl.Frustum(-client_aspect, client_aspect, -1.0, 1.0, 1.0, 100.0);で視体積を設定し、あとは描画のみです。(gl.Frush()など省略している部分もあります。)

gl.Translated(-1.0, 0.0, -3.0);
gl.Rotated(45, 0.0, 1.0, 0.0);
gl.PushMatrix();
gl.Rotated(-90, 0.0, 1.0, 0.0);
gl.Translated(2.0, 0.0, 0.0);
gl.Begin(gl.POLYGON);
{
gl.Vertex3d(-1.0, -1.0, 0.0);
gl.Vertex3d(-1.0, 1.0, 0.0);
gl.Vertex3d(1.0, 1.0, 0.0);
gl.Vertex3d(1.0, -1.0, 0.0);
}
gl.End();
gl.PopMatrix();
gl.Begin(gl.POLYGON);
{
gl.Vertex3d(-1.0, -1.0, 0.0);
gl.Vertex3d(-1.0, 1.0, 0.0);
gl.Vertex3d(1.0, 1.0, 0.0);
gl.Vertex3d(1.0, -1.0, 0.0);
}
gl.End();

これで視線に対し、y軸を中心に45度傾いた四角形が2つ左右対称に描画されると思うのですが、実際には右の四角形が手前に来ている感じになってしまいます。
どこが間違っているのでしょうか。
OpenGLを始めて日が浅く質問内容に不備があったり、意味不明なことをしていたりするかもしれませんが、よろしくお願いします。

577 :デフォルトの名無しさん:2009/03/24(火) 00:37:02
>>570
すいません、ありがとうございます。

gccとvimですか、coolですね。

578 :デフォルトの名無しさん:2009/03/24(火) 01:13:25
>>576
Matrix演算順の問題だね。移動のベクトルが回転の影響を受ける場合、
Translate->Rotate と Rotate->Translate は結果が違ってくる。

上記のコードだと、2つのglTranslateがY軸回転の前後にあるので、まさにその状況。
Modelview Matrixを取得して値を見てみながら動作を確認すれば理解しやすいかも。


579 :デフォルトの名無しさん:2009/03/24(火) 10:12:30
>>578
ありがとうございます。行列確認しつつ試してみます。

580 :デフォルトの名無しさん:2009/03/24(火) 19:54:06
>>576
今実際に逐次行列を確認しながら、実行してみたところ挙動を理解することができました。
TranslatedやRotatedはワールド座標ではなくモデル座標で動作するんですね。Rotatedがワールドでもモデルでも差があまりないためTranslatedもつられて勘違いしていました。
ありがとうございました。

581 :デフォルトの名無しさん:2009/03/25(水) 08:07:51
モデル座標系とかワールド座標系とかの区別はOpenGL自体にはないよ
そこはどこからどこまでがモデル座標系なのかワールド座標系なのか自分で管理しないとだめ

そしてOpenGL 3.1 Released
ttp://www.khronos.org/opengl/

157 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)