【超初心者】くだすれOpenGL2.0【質問用】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/09/24(月) 05:26:47もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
OpenGL使いが優しくコメントを返しますが、
お礼はOpenGLの布教と初心者の救済をお願いします。
OpenGL・Home・Page
http://www.opengl.org/
0002デフォルトの名無しさん
2007/09/24(月) 12:01:130003デフォルトの名無しさん
2007/09/24(月) 12:18:10死ね
OpenGLスレ Part11
http://pc11.2ch.net/test/read.cgi/tech/1177523018/
0004デフォルトの名無しさん
2007/09/24(月) 12:18:44死ね!
くだすれOpenGL(超初心者用)
http://pc11.2ch.net/test/read.cgi/tech/1131208166/
0005デフォルトの名無しさん
2007/09/24(月) 13:27:400006デフォルトの名無しさん
2007/09/24(月) 14:18:47荒らすなよボケ
0007デフォルトの名無しさん
2007/09/24(月) 16:28:13ただ、スレタイにopengl2.0と入っているのはちょっとどうかと思う
まあ、
乙!
0008デフォルトの名無しさん
2007/09/24(月) 17:22:210009デフォルトの名無しさん
2007/09/24(月) 17:53:22でも乙乙>>1
0010デフォルトの名無しさん
2007/09/26(水) 22:15:30GLSLで使いたいです
0011デフォルトの名無しさん
2007/09/26(水) 23:25:57http://www.opengl.org/registry/specs/ARB/texture_float.txt
0012デフォルトの名無しさん
2007/09/27(木) 17:45:18次は何をやったらいいでしょうか?
いまいち何が不足しているのかわかりません。
参考書籍やウェブサイトも教えていただけると嬉しいです。
大学2年生で、実行環境はCygwinです。
0013デフォルトの名無しさん
2007/09/27(木) 17:55:07作りたいものがなければ、知識も身に付かないしやる気もおきないと思うよ。
001412
2007/09/27(木) 18:32:38目標ですが何にしたらいいかわかりません。
どの程度なら丁度良いのか漠然としすぎていて。
まだまだ基本中の基本しか出来ていないと思います。
いろいろサイトを見てプログラムを真似していくのも一つの手かなと思いますが。
0015デフォルトの名無しさん
2007/09/27(木) 19:00:19まあ、ただ何となく勉強しましたってのもありだと思うけど。
0016デフォルトの名無しさん
2007/09/27(木) 19:11:200017デフォルトの名無しさん
2007/09/27(木) 23:46:58次のステップとしてここらが参考になると思う。
http://marina.sys.wakayama-u.ac.jp/~tokoi/?blogcategory=OpenGL
http://nehe.gamedev.net/
この本は買うべき。絶対元は取れる。
http://www.amazon.co.jp/OpenGLプログラミングガイド-原著第5版-OpenGL策定委員会/dp/4894717239
第5版を買うように!これ以前の版は内容がかなり古い。
0018あ
2007/09/28(金) 12:11:11シェーダでマルチテクスチャ処理をしてるんですけど、
テクスチャが304*1728と19*360と19*2376にするとエラーが出ます。
これはテクスチャサイズの問題ですか??それとも
他の問題ですかね?
ちなみにGL_MAX_TEXTURE_SIZE 4096です。
0019あ
2007/09/28(金) 12:17:520020デフォルトの名無しさん
2007/09/28(金) 12:27:430021デフォルトの名無しさん
2007/09/28(金) 17:46:040022デフォルトの名無しさん
2007/09/28(金) 18:01:07もともと2のn乗サイズじゃなくて動いてるらしいから関係なくね?
ARB_texture_non_power_of_twoがあるか2.0以上なら問題無い
0023デフォルトの名無しさん
2007/09/28(金) 18:04:370024デフォルトの名無しさん
2007/09/28(金) 22:12:11GL_MAX_TEXTURE_SIZE 4096 でRGBなら
実際のサイズは、4096*4096 / 3 のルートの 2365 が上限
だと思ったが・・・違ったっけ?
0025デフォルトの名無しさん
2007/09/28(金) 23:06:31そんな半端なわけが・・
0026デフォルトの名無しさん
2007/09/28(金) 23:32:32確かに半端だが、GL_MAX_TEXTURE_SIZE は1テクセルあたり8bitの場合の数値なので、
たとえばRGBA8bitだったら、実際に使用できるのは、テクセル数で1/4になる。
最大サイズがどうなるかは、知らん。適当にルートになると思ってた。
誰か実験してくれ。
0027デフォルトの名無しさん
2007/09/29(土) 00:05:43赤本を確認したがGL_MAX_TEXTURE_SIZEが1テクセルあたり8bit云々ってのは無かったな
フォーマットの違いを気にしないから、容量がでかいフォーマットだとメモリ足りんかもしれないから気をつけてみたいなことは書いてあったけど
しかしどんなエラーが出てるのか分からないとテクスチャのサイズが問題なのかどうかも分からんな
0028あ
2007/09/29(土) 00:35:07あと、GL_MAX_TEXTURE_SIZEが4096のときに
4枚のテクスチャを処理するときって
4枚とも4096*4096サイズ(RGB)までいけるってことですかね??
0029デフォルトの名無しさん
2007/09/29(土) 06:52:07ごめん。ちょっとうろ覚えで適当に書いてた。
あらためて調べてみたが、
OpenGLプログラミングガイド-原著第5版の p363 下部の
GL_MAX_TEXTURE_SIZEによる問い合わせは〜のくだりとか
http://chihara.naist.jp/people/STAFF/imura/computer/OpenGL/texture_speed_test/disp_content
辺りを見ると、どう解釈していいのかよくわからない。
0031デフォルトの名無しさん
2007/09/29(土) 12:20:020032あ
2007/09/29(土) 17:34:14何度もすいませんが、最後の質問させてください。
GL_MAX_TEXTURE_SIZEの変更はできますかね??
4096から増やしたいんですが・・
0033デフォルトの名無しさん
2007/09/29(土) 20:01:174K以上のテクスチャを扱いたいなら、複数のポリゴンに貼って並べるのが普通。
0034あ
2007/09/30(日) 06:25:100035デフォルトの名無しさん
2007/10/01(月) 13:16:41・3Dモデルをスクリーン上に変換した後の頂点の座標をGLの関数かなにかで取得することはできないのでしょうか?
・GLUquadricで生成した球や円柱などから頂点配列やインデックス配列を取得することはできないのでしょうか?
どなたか教えて下さい。
0036デフォルトの名無しさん
2007/10/01(月) 16:08:20・知らない
0037デフォルトの名無しさん
2007/10/01(月) 22:50:10各色32bitのfloatだったらもっと少なくなっちゃうジャン
0039デフォルトの名無しさん
2007/10/02(火) 21:17:19法線ベクトルを頂点配列で扱う方法がいまいちわかりません。
六面体を書くのに今は
glNormal3f(0.0,0.0,1.0);
glDrawElements(GL_POLYGON,4,GL_UNSIGNED_BYTE,frontIndics); //正面
glNormal3f(1.0,0.0,0.0);
glDrawElements(GL_POLYGON,4,GL_UNSIGNED_BYTE,rightIndics); //右面
以下略
という風に書いてます。
法線ベクトルをglDrawElements()に含めるなど、頂点配列でうまいこと扱う方法があれば教えてください
0040デフォルトの名無しさん
2007/10/02(火) 22:20:33それと同じように、法線の場合はglNormalPointerを使うんよ。
(もちろん、glEnableClientState(GL_NORMAL_ARRAY)するのを忘れないように)
0041デフォルトの名無しさん
2007/10/02(火) 22:35:56二番目
OpenGLのコールをフックするライブラリを描いてやればおk
でもスタブを書くのがめんどくちゃい
004239
2007/10/03(水) 08:18:19それらの使い方はわかったのですが
法線ベクトルの配列での扱い方で詰まりました
Vertexの場合は頂点座標を8個用意して各面を描画する為にさらに6つの配列でglDrawElements()の第4引数に使用していて、色も頂点の数だけ用意して対応したのですが
法線ベクトルはわからなくて悩んでいますorz
正確には色も頂点にしか対応してないので各面を別の色で描画出来たらと思っているのですが…
0043デフォルトの名無しさん
2007/10/03(水) 08:30:36当然法線ベクトルも頂点の数だけ用意する。
39はそれまでのやりかたがOpenGLがステートマシンだから機能したってことの
理解がいまいちあやしそう。
0044デフォルトの名無しさん
2007/10/03(水) 11:47:53座標が同じでも、色や法線が異なる場合は、別の頂点だと考える
各面の色が別々なサイコロを描くには、24頂点が必要
0045デフォルトの名無しさん
2007/10/03(水) 14:24:32名前が思い出せないorz
004639
2007/10/03(水) 18:41:27法線ベクトル用に頂点を24個用意して試したところイマイチうまくいかず、頂点座標も8個から24個に増やして試したら無事正常に描画する事が出来ました
ひとまず結果オーライなのだけど頂点座標が8個だとうまく法線ベクトルが引けない理屈がよくわかりません…
俺はもしかしたらとんでもない勘違いをしていたのかもしれない…!
0047デフォルトの名無しさん
2007/10/03(水) 19:08:29glDrawElements が i 番目の頂点を参照するときは、
頂点配列の i 個めの座標と、
法線配列の i 個めの法線と、
色配列の i 個めの色と、
テクスチャ座標配列の i 個めのテクスチャ座標を、
1組の頂点データとして取り出す。
つまり頂点配列、色配列、法線配列、テクスチャ座標配列はすべて同数の要素が必要。
頂点座標と法線ベクトルの対応関係を指定した覚えないだろ?
0048デフォルトの名無しさん
2007/10/03(水) 20:00:56DirectXはゲームとかで聞くのですが、GLはあまり聞かないので。
0049デフォルトの名無しさん
2007/10/03(水) 21:05:54てかDirectXついてねーし。
0050デフォルトの名無しさん
2007/10/03(水) 21:25:07Windows以外は大体OpenGL(とかES)
0051デフォルトの名無しさん
2007/10/03(水) 21:38:24どんなところに就職してるんだ?
0052デフォルトの名無しさん
2007/10/03(水) 22:29:06仕事は広告関係
0053デフォルトの名無しさん
2007/10/04(木) 00:12:23SGI
0054デフォルトの名無しさん
2007/10/04(木) 00:26:28ちょっw
なんでこんなところにいるwww
0055デフォルトの名無しさん
2007/10/04(木) 01:18:44零細ソフトウェア会社
0056デフォルトの名無しさん
2007/10/04(木) 13:37:47ゲームで使ってます。
しかし、算術演算ライブラリとか整備してくると、正直DirectXで言い気がしたw
0057デフォルトの名無しさん
2007/10/06(土) 02:04:02げーむや
0058デフォルトの名無しさん
2007/10/06(土) 07:46:18無名CAD屋
0059デフォルトの名無しさん
2007/10/06(土) 20:56:06研究でGPGPU
0060デフォルトの名無しさん
2007/10/08(月) 21:15:21K平均法を高速化しなきゃならなくて英語の論文見っけて碌に読まずに手を出したが、
2ヶ月浪費した後でよく読んでみると高速化できたのは別のクラスタリングという結論に読めるなぁハハハ
0061デフォルトの名無しさん
2007/10/09(火) 10:55:470062デフォルトの名無しさん
2007/10/09(火) 11:25:120063デフォルトの名無しさん
2007/10/10(水) 20:34:59glPopMatrix();
この組み合わせが何をやっているのかイメージできません…
どなたかわかりやすく教えていただけませんか
0064デフォルトの名無しさん
2007/10/10(水) 21:28:25さっき取っておいた行列を持ってくる
「スタック」って言葉は知ってるかな?
やってることは、まさにそれなんだけど。
0065デフォルトの名無しさん
2007/10/10(水) 21:29:330066デフォルトの名無しさん
2007/10/10(水) 21:53:15その行列がglMatrixMode(GL_MODELVIEW);といったモデルビューの単位なのか
glMatrixMode(GL_MODELVIEW);に掛け合わせたglrotateといった類のものなのかがわからなくて
よくわからなくなってるのですが、「今使っている行列」がどこを指すのかわかってなくて
0067デフォルトの名無しさん
2007/10/10(水) 22:14:28glMatrixMode は、どの行列を操作するかを切り替える。
glMatrixMode で設定した、操作する対象の行列が、今使ってる行列。
glRotate は、今使ってる行列を回転させて、新たな今使ってる行列にする。 古い行列は捨て去る。
C言語的に書くと
今使ってる行列 = 今使ってる行列 * 回転行列;
みたいな感じ。
glTranslate とか glScale とかも一緒。
みんな今使ってる行列を変化させる。
だから、今使ってる行列っていったら、それしかない。
glPushMatrix は、今使ってる行列をスタックに保存しておく。
glPopMatrix は、保存したものを取ってきて今使ってる行列に戻す。
おk?
0068デフォルトの名無しさん
2007/10/10(水) 22:28:11glMatrixMode(GL_MODELVIEW);
回転行列
glPushMatrix();
glMatrixMode(GL_TEXTURE);
拡大行列
glPopMatrix();
という風になった場合、popの後は
MODELVIEWで回転されてる状態、ということですか?
ようやく、頭の中が整理されてきました。
回転行列とかをスタックにぶち込むものとか考えてしまって
ありがとうございます!ばっちり、すっきり、ニッコリです!
0069デフォルトの名無しさん
2007/10/10(水) 22:55:16glMatrixMode はそのままで、現在の行列を保存/復元するだけ。
スタックも行列の種類ごとに別々にある。
つまり MODELVIEW 行列用のスタックと、PROJECTION 行列用のスタックと、TEXTURE 行列用のスタックがある。
>>68 の例でいくと、
glPushMatrix は回転した MODELVIEW 行列を 「MODELVIEW 行列用のスタック」 に保存する。
glPopMatrix は 「TEXTURE 行列用のスタック」 から TEXTURE 行列を取り出す。
0070デフォルトの名無しさん
2007/10/10(水) 22:57:08いや、その、なんだ、全然違ってるぞw
それだと、最初の状態と比べて
・MODELVIEW行列は回転してる
・かつその回転した行列がMODELVIEW行列スタックに一段積まれた
・TEXTURE行列は拡大した
・しかしその拡大した行列はTEXTURE行列スタックから取り出した行列で上書きされた
・MatrixModeはTEXTUREになった
ちなみに上のシーケンスをTEXTURE行列スタックが空の状態でやると、GLエラーが起こる。
行列スタックは、MatrixModeごとに別のスタックが用意されてるんよ。
スタックに保存できる行列の個数もそれぞれ違う。
・・・って69の書き込みの方が早かったか。でもいいや送信エイ
0071デフォルトの名無しさん
2007/10/10(水) 23:16:45ありがとうございます
つまり
model tex projec
|| || ||
|| || ||
 ̄  ̄  ̄
みたいなスタックがあって、それごとに別々に保存されていて
glPushをすると、今のモードで弄くってる行列が保存されて
glPopをすると、スタックからそのモードの行列を取り出して「上書き」する、ということですね
上書き、ということはpopする前の行列はあまり意味がないのかな…
なんとかスッキリしてきたのでソースをちゃんと読むことができそうです
それとは別に、今メモリ(テクスチャ?)が解放されなくて
glutPostRedisplay();をするたびにメモリが増加していく現象が発生して悩まされています…
0072デフォルトの名無しさん
2007/10/10(水) 23:28:06何にも使わないんなら、そりゃ意味はない。
0073デフォルトの名無しさん
2007/10/10(水) 23:33:51毎フレームglGenTextures&glBindTextureしちゃってるとか?
てか先にGL以外の部分を疑った方がいい気もするけど
0074デフォルトの名無しさん
2007/10/10(水) 23:51:55おっしゃるとおりです。
popの前にモードを変えて、何かするのが普通なのですよね。
>>73さん
毎フレームglGenTextures&glBindTextureは以前やってしまったのでそこは注意してました
init的な初期設定のところでテクスチャを読み込んでいるので大丈夫だと思います。
どうも色々見てみたのですが、手本にしたサンプルでも同様の現象が出るみたいです。
0075デフォルトの名無しさん
2007/10/10(水) 23:57:22小さいソースならどっかにうp
0076デフォルトの名無しさん
2007/10/11(木) 00:02:41行列もわかっていない身のくせにCgを使っているので
長いソースになってしまっています。
どうもCgでアニメをさせると徐々にメモリが増えていってしまうみたいです
0077デフォルトの名無しさん
2007/10/11(木) 00:04:120078デフォルトの名無しさん
2007/10/11(木) 00:12:23(トライアングルを一枚くるくる回してるだけの)プログラムで、SwapBuffersするたびに
メモリが少しずつ増えてく現象に悩まされた事があったなァ・・・。
で、数十KBだか数百KBだかメモリが増えた時点で、メモリ消費の増加が止まるんだこれが。
わけがわからん。
10分くらい動かしてみて、メモリ増加が止まるんなら気にしなくていいんじゃない??
(ちなみに、nVIDIAのボードだった)
0079デフォルトの名無しさん
2007/10/11(木) 00:22:11サンプルを動かしているとまさしくその状態です。
あるところで止まるのですが
自作のものでFPSを表示させていると止まらなくなってしまっていて
450MBから初めて780MB 最悪1GBまでメモリが増えていっています。
>保持しているテクスチャデータのサイズがグラフィクスメモリの容量を超える場合,
>テクスチャデータはメインメモリーに格納され, テクスチャは描画に使われる度にグラフィ
>クスカードに転送される.
論文でこういうのを見つけたのですが、小さいテクスチャで試しても増加するみたいです
ATIのせいかと思っていたのですがnvidiaもそうなのですね
0080デフォルトの名無しさん
2007/10/11(木) 00:22:19ループ毎にオブジェクト生成とかやってるんじゃ?
0081デフォルトの名無しさん
2007/10/11(木) 00:32:57状況がよくわかんないな
ATIのグラボでCg動かしてるの???
ソース見ないと確かなことは言えないが
450MBから始まって1GBまでいっちゃうのは
常識的に考えてプログラムミスだと思うぞw
0082デフォルトの名無しさん
2007/10/11(木) 00:39:29もしよろしかったらCgのサンプルの
07_two_texture_accesses でアニメーションしたときのメモリの様子を見ていただけませんか?
私の環境だとこのサンプルでも増加していってしまって
538MB→560MBで増加中という…
0083デフォルトの名無しさん
2007/10/11(木) 00:45:48XpHome,GF7800GTX,163.71_forceware_winxp_32bit
0084デフォルトの名無しさん
2007/10/11(木) 00:52:27サンプルを動かしてみて473→500 増加中です。
Win2k ATI RadeonXpress200(128MB) 32bit Athron64 メモリ1GBでした。
オンボードGPUでATIというのが原因なのかもしれません。。。
0085デフォルトの名無しさん
2007/10/11(木) 01:03:33デスクトップマシン買った方がいいんじゃないかな
ソース見たけど少なくともCgはメモリリークの原因じゃないよ
0086デフォルトの名無しさん
2007/10/11(木) 01:05:480087デフォルトの名無しさん
2007/10/11(木) 01:07:27とりあえずglsl乗り換えをお勧めしておくよ
0088デフォルトの名無しさん
2007/10/12(金) 19:31:07どうしたらいいですか?光源とかは使っていません。
どなたか教えてください。
※つまり、板の、ある場所(座標)から視点へのベクトルによって
テクスチャを変えたいということです。
0089デフォルトの名無しさん
2007/10/12(金) 23:03:20switchとかelse ifで
settexture( vec );
みたいな関数を作って、テクスチャセットとか。
0090デフォルトの名無しさん
2007/10/12(金) 23:12:41GLSLが使えるなら、話は簡単。
使えないなら、プログラム書いていちいちやるしかないかなぁ・・・。
視点からの距離が一定なのならミップマップを利用できるカナ、とかも思ったけど。w
009188
2007/10/12(金) 23:42:28GL_nomal?みたいなのがあるんですか?
一応、GLSLを使っています。(使えているかは別ですが)
0092デフォルトの名無しさん
2007/10/12(金) 23:52:37眼点座標系の視点位置は(0, 0, 0)
でおk?
009388
2007/10/14(日) 00:46:13ことですね!
ありがとうございます!とりあえずがんばってやってみます!
0094デフォルトの名無しさん
2007/10/14(日) 02:59:41固定関数はそうなるけど…
Cgやgglslは本人次第というかなんというか…
0095デフォルトの名無しさん
2007/10/14(日) 11:43:15こちらのソースのようにテクスチャに描いたものを映すということをしたいのですが
映したい対象が3次元テクスチャです
そうなったときにteximage3dとかにしても、上手くモノが映し出されません
こういうばあいはどうやるのでしょうか
0096デフォルトの名無しさん
2007/10/14(日) 11:56:50実際に何をどうしてみた?
0097デフォルトの名無しさん
2007/10/14(日) 12:12:46それをテクスチャとして読み込んで、同じように-1〜1の平面に投影しようとしました
texture2Dの部分を単純に全部3Dにしてマッピングできるかと思っていたのですが
0098デフォルトの名無しさん
2007/10/14(日) 12:38:41どうでもいいけど、そのサンプルはinit()内でスタック破壊してるね。大丈夫かいな。
で、95と97を何度読んでもイマイチ意味が分からない・・・。
とりあえず適当にいくつか挙げてみる。
・3Dテクスチャのデータはどう作ってどう転送したの?
・ちゃんとglEnable(GL_TEXTURE_3D);してる? (2Dじゃないよ)
・3Dテクスチャのテクスチャ座標は当然3次元なんだけど、ちゃんとglTexCoord3?();使ってる?
てなとこでしょうか。
0099デフォルトの名無しさん
2007/10/14(日) 14:38:44人にわかるように説明できないならソースうpれ
0100デフォルトの名無しさん
2007/10/14(日) 20:14:39solidcubeなどを描いたものをポリゴンに描くのではなく
for(i<10)for(j<10)for(k<10) texture[i][j][k][4]=1
みたいな感じで作った1辺10の、点の集合体としで立方体をあらわしているテクスチャを
ひとつの平面に映し出すということをしたいのです
>・ちゃんとglEnable(GL_TEXTURE_3D);してる? (2Dじゃないよ)
>・3Dテクスチャのテクスチャ座標は当然3次元なんだけど、ちゃんとglTexCoord3?();使ってる?
これはちゃんとやりました。teximage3Dは
PFNGLTEXIMAGE3DPROC glTexImage3D;
glTexImage3D =
(PFNGLTEXIMAGE3DPROC)wglGetProcAddress("glTexImage3D");
で呼び出しています。
急に体調が悪くなって今まで横になっていました。レスしてもらっていたのにすみません
0101デフォルトの名無しさん
2007/10/14(日) 20:45:03■ このスレッドは過去ログ倉庫に格納されています