[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 03/15 21:29 / Filesize : 177 KB / Number-of Response : 703
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

OpenGLスレ Part11



1 名前:デフォルトの名無しさん [2007/04/26(木) 02:43:38 ]
クロスプラットフォーム 3D API OpenGLに関する話題を扱うスレッド。

禁止事項
・「OpenGL終了」系のまず価値否定ありきの主観発言(客観的な懸念要素を挙げた上での建設的議論は可)
・学歴・理系か文系かに関連する差別発言
・その他の荒らし全て
これらは付き合うだけ無駄なので無視しましょう。

- 前スレ -
OpenGLスレ Part10
pc11.2ch.net/test/read.cgi/tech/1141034983/


- 関連サイト -
www.opengl.org/
www.mesa3d.org/

developer.nvidia.com/
www.ati.com/developer/
developer.3dlabs.com/

- 過去スレ -
Part 9: pc8.2ch.net/test/read.cgi/tech/1132403929/
Part 8: pc8.2ch.net/test/read.cgi/tech/1126267690/
Part 7: pc8.2ch.net/test/read.cgi/tech/1118151979/
Part 6: pc8.2ch.net/test/read.cgi/tech/1105612993/
Part 5: pc5.2ch.net/test/read.cgi/tech/1100085657/
Part 4: pc5.2ch.net/test/read.cgi/tech/1091724463/
Part 3: pc5.2ch.net/test/read.cgi/tech/1067529308/
Part 2: pc2.2ch.net/test/read.cgi/tech/1039984523/
Part 1: pc3.2ch.net/tech/kako/981/981044659.html (dat落ち)

29 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 06:10:09 ]
>>19のせいで>>25がバナナの腹筋にしか見えなくなった

30 名前:デフォルトの名無しさん mailto:sage [2007/06/02(土) 12:23:27 ]
>>25
バナナワロタ


31 名前:おしえてちゃん mailto:sage [2007/06/03(日) 14:34:46 ]
質問です。

点を二つ作り、その点の大きさをgl_PointSizeを使って
大きくしたら、点が重なりました。その重なった部分の混合色は
どのようにつくられるのですか?

1,(vertex + fragment シェーダでの処理を一単位と考えて)
二度シェーダプログラムを呼んで色の混合を作る。
2,(上と同じ考えで)一度で処理する。
3,そのほか

同じカーネルに、複数の色を叩き込むということなので、
その色の混合処理の方法がわからないのです。

一体どれなんでしょうか?

32 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 14:55:32 ]
マルチしすぎだボケッ

GPGPUをやる前に、OpenGLの基礎をちゃんと勉強しなさい。
話はそれからだ!

33 名前:おしえてちゃん mailto:sage [2007/06/03(日) 17:10:14 ]
赤本に載ってるのかなぁ・・・

独学でやったからよく判らないんだよねぇ・・・

34 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 18:59:58 ]
>>33
透明の時?

35 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 19:48:59 ]
一度ブレンドでGL_ONE,GL_ONEとか設定してみると理解できるんじゃなかろうか。

ブレンドの混合色はどのように作られるんですか、とかはここで聞く前に
OpenGL ブレンド とかでググってくらさい。


36 名前:おしえてちゃん mailto:sage [2007/06/05(火) 19:15:30 ]
透明のときです>>34

GL_ONEについて調べてみました。
GL_ONEってfragmentしぇーだですよね。(だと思う。)
それでそのしぇーだの内容を調べさせてもらったらただ単純に

結果の色 = 新しい色 * 1 + 元の色 * 1

みたいなことを、してるそうだとわかりました。
この場合、2度色をインプットしなければ混合色を作れません
でなければ、しぇーだの内容が

結果の色 = 新しい色(1つめ) * 1 + 新しい色(2つめ) * 1 + 元の色 * 1

みたいな感じになってるはずです。
でも2番目のようなソースは見たことがありません。
やっぱり"順番をつけて"2度シェーダを呼んで
混合色を作っているってことなんでしょうか?

どっかでトンデモな間違いをしてそうですが、そこらへんは勘弁してください。

37 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 19:56:27 ]
OpenGLの基礎をちゃんと勉強しなさい。



38 名前:デフォルトの名無しさん [2007/06/05(火) 21:42:20 ]
GL_ONEというか最終的なカラーブレンドはシェーダでないよ
古い方でもいいから赤本を図書館でもなんでも見付けて読みなさい

39 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 22:06:26 ]
>>36

ブレンド処理はバックエンドのラスタオペレーションなので、フラグメントシェーダは関係無いです。
最初の
>結果の色 = 新しい色 * 1 + 元の色 * 1
が正しいです。
「新しい色」てのが今処理してるポリゴンのフラグメント、「元の色」はフレームバッファの色ですね。

>この場合、2度色をインプットしなければ混合色を作れません
その通り、混合色を作るには、ポリゴンを複数回重ね合わせます。

40 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 22:47:10 ]
Windows Vista上でOpenGLはネイティブサポートされているのでしょうか?

Aero Glassでは、DirectX 9をベースにしているため、
基本的にはOpenGLはDirect3Dにマップする形をとるような話が過去にあり、
それを裏付けるようなベンチマーク 結果
www.tomshardware.com/2007/01/29/xp-vs-vista/page6.html

製品FAQ?
jp.wiki.mcneel.com/default.aspx/McNeel/RhinoOnVista.html
www.housenetworks.jp/vista.html


がある一方、

2007.04.20 Khronos OpenGL ARB ワーキング グループ
khronos.jp/wp-content/uploads/opengl200704.pdf

にあるような許容範囲内の速度で動くような話も出ています。
Driverしだい... ということでしょうか?

フルスクリーンではなく、ウィンドウ内への描画を行っておりまして、
Aero Glassとの併用がどの程度のオーバーヘッドで実現できるのか
解らずにおります。

#開発PCにVistaがなく、私は嫌なのですが、
#今後、導入が計画されていまして...。

41 名前:デフォルトの名無しさん [2007/06/06(水) 06:55:27 ]
メーカーのDirever入れてないVistaのOpenGLはめちゃくちゃ遅かったな。
確か、Geforce。
アプリは、ゲームだったんだが、ゲームにならないほど遅かった。
FPSはちょっと覚えていないが、10以下。
Driver入れたら、ちゃんと規定の速度で動いた。

42 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 08:59:03 ]
またGeforceか。

43 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 12:13:16 ]
要はVista用の新しいドライバがあれば大体同じ速度で動く。
そうでなければDirectXのラッパーとして動かして
OpenGL1.4までサポート・パフォーマンスはだいたい半減、
またはDWMを切って今まで通りに動かす。

44 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 20:02:46 ]
void disp( void ) {
float f;
glClear(GL_COLOR_BUFFER_BIT);

glPushMatrix();
for(f = 0 ; f < 1; f += 0.1) {
// glColor4f(0 , f , 0, 0.2);
glCallList(DISP_LIST_INDEX);
}
glPopMatrix();

glFlush();
}

void setDispList( void ) {
glNewList(DISP_LIST_INDEX , GL_COMPILE);
glBegin(GL_POLYGON);
glVertex3f(-0.1 , -0.1 , -0.1);
glVertex3f(-0.1 , 0.1 , -0.1);
glVertex3f(0.1 , 0.1 , -0.1);
glVertex3f(0.1 , -0.1 , -0.1);
glEnd();
glTranslatef(0 , 0 , 0.1);
glEndList();
}

ポリゴンをミルフィーユのように重ねたものを表示したいのですが
このようにやってみて、一応重なったのですが、なんとなくスマートではありません

-0.1〜0.1の正方形のポリゴンを10枚重ねて表示するにはどうやったらいいのでしょうか
また、その1枚1枚に別々のテクスチャを貼っていきたいのですが
御指導お願いします

45 名前:デフォルトの名無しさん [2007/06/06(水) 22:24:23 ]
> ポリゴンをミルフィーユのように重ねたものを表示したいのですが

そもそもこれがわからない

46 名前:デフォルトの名無しさん mailto:sage [2007/06/06(水) 22:32:01 ]
glTranslatefを外に出す

for(){
glTranslatef(0 , 0 , 0.1);
glCallList(hoge);
}
こんな感じ

テクスチャーが10枚とも固定されているなら、DisplayListに
描画命令を埋め込んでもいいと思うが、動的に変更されるなら、
DisplayListは使用しないほうがいいと思う。

あと、GL_BLEND, glBlendFunc あたりを押さえておく必要があります。

47 名前:40 mailto:sage [2007/06/07(木) 01:27:22 ]
>>41
>>43

なるほど。参考になりました。ありがとうございました。
新しいドライバが出ているビデオカードでの開発になると思いますので、大丈夫そうですね。




48 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 12:53:15 ]
>>46
ありがとうございます
テクスチャが10枚とも別のものなので
1枚1枚別のを指定しないといけなくて…そこでも躓いてしまっています

DisplayListを使わないやり方ですと
頂点を1個1個書いていくのでしょうか?
glbeginのところにfor文を入れたらエラーになってしまって、DisplayListを使いました


49 名前:デフォルトの名無しさん [2007/06/07(木) 16:20:53 ]
> glbeginのところにfor文を入れたらエラーになってしまって、DisplayListを使いました

別にglbeginをfor文で囲ってもエラーにはならないよ。
実際の コードだしてみないと、わからない

50 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 17:58:43 ]
void disp( void ) {
float i;
glClear(GL_COLOR_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D , texName);
for(i=-0.5;i<0.5;i+=0.1){
glBegin(GL_POLYGON);
glTexCoord2f(0 , 0); glVertex3f(-0.5 , -0.5 , i);
glTexCoord2f(0 , 1); glVertex3f(-0.5 , 0.5 , i);
glTexCoord2f(1 , 1); glVertex3f(0.5 , 0.5 , i);
glTexCoord2f(1 , 0); glVertex3f(0.5 , -0.5 , i);
glEnd();
glBegin(GL_POLYGON);
glTexCoord2f(0 , 0); glVertex3f(-0.5 , i , -0.5);
glTexCoord2f(0 , 1); glVertex3f(-0.5 , i , 0.5);
glTexCoord2f(1 , 1); glVertex3f(0.5 , i , 0.5);
glTexCoord2f(1 , 0); glVertex3f(0.5 , i , -0.5);
glEnd();
}
glFlush();
glutSwapBuffers();
}
すいません…勘違いをしていて、これで表示が出来ました
これに1枚ごとにテクスチャを変えていけると、なんとか出来そうなのですが


51 名前:デフォルトの名無しさん [2007/06/07(木) 18:45:26 ]
そこまでできたなら、あとは、プログラミング言語の習得の問題だね

テクスチャーを配列に入れて、ループ内で、BindTextureすればいいんでないの。

52 名前:デフォルトの名無しさん mailto:sage [2007/06/07(木) 18:51:50 ]
その貼り付けたいものが
1枚ずつ(積み重ねているものの下〜上までで)違っていて
さらに縦方向(1回目のglbegin)と横方向(2回目のglbegin)で異なっていて
そこで、どう組んでいけばよいか躓いてしまいました

ただ…あと少しという感じがしているので、もう少しテクスチャマッピングの項を見て勉強します。


53 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 03:06:58 ]
質問させてください
科学シミュレーションで行う温度の可視化のようなものをしようと考えています

(▽こんな雰囲気)
www.mathworks.com/access/helpdesk/help/techdoc/visualize/volvis_sliceplane2.jpg

表示する色の与え方についてOpenGLのサンプルを
探してみたのですが見つからず、とりあえず素人考えで

「可視化対象の変数値分布を0-1の範囲に変換」
→「HSV色空間におけるHの0度(赤)-240度(青)に割り振り」
→「HSV->RGB変換して表示」

と試してみたところ、まあまあイメージ通りのものができました・・・

が、他にもっと優れた方法やサンプルがあれば教えて頂きたく存じます
どうぞ宜しくお願いします


54 名前:デフォルトの名無しさん [2007/06/08(金) 03:58:20 ]
GDI、OpenGL、Direct3D、ソフトウェアの描画で2D、3Dの軽さに順位をつけるなら?

55 名前:デフォルトの名無しさん [2007/06/08(金) 08:48:31 ]
>>54
環境によるが

2D、3Dとも
Direct3D ≒ OpenGL >>>>>>>>> ソフトウェア描画 > GDI

56 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 08:49:33 ]
3DはOGLのほうが綺麗だろう

57 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 12:02:14 ]
綺麗とかナンセンス。どっちも大体同じこと出来るから。



58 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 14:01:10 ]
基本的にD3DとGLの速度比較ならD3Dのほうが少し軽いと思って間違いないよ
もちろん例外はあるけど最近のハードならほぼ間違いない

59 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 18:33:45 ]
理由は?

60 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 19:51:07 ]
D3DはMSだから重いよ

61 名前:デフォルトの名無しさん [2007/06/08(金) 19:54:40 ]
D3Dの方が軽いと見るのが普通。

62 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 20:50:40 ]
理由は?

63 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 20:52:04 ]
>>53

> 「可視化対象の変数値分布を0-1の範囲に変換」
> →「HSV色空間におけるHの0度(赤)-240度(青)に割り振り」
> →「HSV->RGB変換して表示」

なんとなくこの部分は1次元テクスチャーを先に作って割り振ったほうが負荷がかからんのじゃないかと思う。
もしかしたらそうやってるのかもしれんけど。


64 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 21:24:17 ]
すいません
BMPのある1色(黒)をマスクのように抜きたいのですが
glBlendFunc(GL_ONE , GL_ONE );だと
後ろが極端に白くなってしまいます

ただ、抜くだけにはどうすればいいのでしょうか

65 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 22:11:30 ]
>62
自分でd3d/glの切り替え可能な描画エンジン組めばわかるよ

66 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 22:15:23 ]
GL_ONE,GL_ONEだと加算合成。
GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHAだと普通のアルファ合成。

ちなみに一色だけで抜きたいというのであれば、
ブレンドは使わずにAlphaTestのほうが高速。

67 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 22:28:37 ]
具体的な理由が思いつかなくて逃走ですかね。



68 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 22:40:55 ]
そうですね^^

69 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 23:01:39 ]
>>65
どうせ環境依存だし実際にどっちが速いかはそんなに気にならないけど、
どうして D3D の方が確実に速いと思ったかにはとても興味がある。

70 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 23:12:11 ]
どうこう言ってもドライバー次第だと思うけどなぁ


71 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 23:20:09 ]
D3Dのドライバはかなりの共通部分を部分をマイクロソフトがライブラリの一部として提供しているのに比べ
GLのドライバは全てベンダが提供しなければならない(シェーダコンパイラでさえも!!

さらに速度が最も重要視されるゲーム市場においてシェアに圧倒的な差がつけられている

結果的にどちらのドライバが信頼性、速度において洗練されるか言うまでもない

72 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 23:25:00 ]
>結果的にどちらのドライバが信頼性、速度において洗練されるか言うまでもない
OpenGLと言うまでも無いな

73 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 23:26:58 ]
そうですね^^

74 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 23:30:14 ]
>>66
AlphaTestで色々ためしていたのですが
どうも色が抜けなくて

床井さんの所では、画像の抜きたいところを透明に処理してから使ったりで
やりたいのは黒(っぽい)ところを、黒ければ黒いほど透明にしたいのです

RGB=000 ならαも0
RGB=111 ならαも1
といった感じで。。。

75 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 23:39:52 ]
3Dの軽さ
Direct3D>ソフトウェア>OpenGL>GDI
2Dの軽さ
ソフトウェア>Direct3D>OpenGL>GDI

76 名前:デフォルトの名無しさん [2007/06/08(金) 23:41:06 ]
>>71-72
まあまあ^^;
ここはOpenGLスレなんだからその辺にしといてくれよ。

77 名前:デフォルトの名無しさん [2007/06/08(金) 23:41:52 ]
>>74
Alha Testするには、黒とかの色じゃなくて、
アルファが重要なのはわかる?



78 名前:デフォルトの名無しさん mailto:sage [2007/06/08(金) 23:53:49 ]
>>77
はい。
ポリゴンに白黒のテクスチャを貼り付けているので
それ自体にα値が無いのでAlphaTestが出来ないのはわかっています

こういう場合はどうやって抜けばいいのでしょうか…

79 名前:デフォルトの名無しさん [2007/06/09(土) 00:30:25 ]
>>78
・テクスチャー生成時に、抜きたい色のα情報をテクスチャに書き込む

・シェーダーでゴニョゴニョ(アホ

80 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 00:47:26 ]
共通のシェーダコンパイラってGPUごとの最適化が利かないんじゃなかったっけ?

81 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 00:51:01 ]
白黒のテクスチャーだったら、DSTにGL_SRC_COLORとか試してみるといいんじゃないの?
GL_DST_COLORとかあるんだっけ?
まあ、自分でやってないのでどうなるかはわかんないけど。


82 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 01:04:52 ]
本当に究極までドライバの最適化を極めれば仕様上GLのドライバのほうが早くなる
何故なら全てのカードごとに最適化されたドライバを書くことすら出来るからだ

実際に固定機能時代のnVIDIAのカードのパフォーマンスはD3Dを上回った
これはQuakeエンジン等のGLベースエンジンの活躍が大きな要因だろう

しかしその後のAPI仕様の肥大化、プラットフォームの多様化等のせいで
個別の最適化どころかそこそこの速度と信頼性を維持するのがやっとというのが現状

83 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 01:30:24 ]
結論をいうと、本格的にやるならOpenGL。
お遊び程度ならD3D。

84 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 01:33:57 ]
本格的なら両方やっとけ

85 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 01:49:18 ]
2Dならソフトウェアのほうが軽いのか?

86 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 01:55:01 ]
んなわけない
ハードウェアに依存しないから昔のマシンでもそこそこの速度で安定して動くんで使いやすいという程度

87 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 02:03:55 ]
実際OGLやD3Dに比べりゃソフトウェアの方が軽い。



88 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 02:05:38 ]
そうですね^^

89 名前:53 mailto:sage [2007/06/09(土) 02:18:37 ]
>>63
なるほど、1次元テクスチャですかー
その辺あまり詳しくないので調べてみようと思います
どうもありがとうございます

90 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 02:39:21 ]
>>85
Mac のデスクトップは 2D も OpenGL で描画してるよ

91 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 02:46:53 ]
ここで言うソフトウェアってのは画像描画、ブレンド、ラスタライズその他諸々をCPUでやるってこと
MacでもGLの出番はクライアント領域への描画だけ

92 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 02:48:41 ]
そりゃ描画処理切り替えやハード依存を無くす為だろ

93 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 02:55:58 ]
90=92?
何が言いたいのかわかんないんだけど

MacでデスクトップがソフトウェアでもGLで描画していようとも
ソフトウェアレンダリングするなら速度に影響しないからどうでもいいでしょ?

94 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 02:58:34 ]
ここでソフトウェアレンダリングって言うと紛らわしいな
○ソフトウェアでラスタライズ

95 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 03:03:21 ]
ああ、わかった

>90はデスクトップ描画に使うくらいGLは軽いって言いたかったのかな?
もしそうならすまんかった

96 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 03:10:38 ]
OGLはスペック要求されるから重くなるのは必然

97 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 03:15:25 ]
>>89
わかってるかもしれませんが、1次元テクスチャによる色変換は
いわゆる依存(従属)テクスチャ処理になるからシェーダが必須ですよ〜。



98 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 03:23:39 ]
>>91-95
何がしたいんだ?

99 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 03:32:43 ]
(´・ω・`)知らんがな

100 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 11:07:42 ]
>>81
glBlendFunc(GL_ONE ,GL_ONE_MINUS_SRC_COLOR);
で上手く黒が消えて、白いところだけ出てきました!
ありがとうございました。。。なんか涙出てきた

101 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 11:09:18 ]
OpenGLは最後に塗るとき以外、使い物にならないといいたいんだろう。

102 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 11:26:19 ]
さすがにブレンドはGPU上じゃろう

103 名前:デフォルトの名無しさん [2007/06/09(土) 12:19:06 ]
>>85
2Dなら、むしろ、画質向上のためアルファ付きテクスチャーを多く描画することになると
想定すると、Zバッファが使えなくなって、重くなることもある。

まさか、いまどき、2Dで、ジャギジャギのドット絵スプライトの描画なんて、そうそうねーし。

まあ、場合によりけるだが・・・

104 名前:デフォルトの名無しさん [2007/06/09(土) 12:20:54 ]
>>82
懐かしいなー。
前世紀は、Quake3時代だよな
メーカーが、こぞって、OpenGL対応をうたってて、OpenGLの方ががメチャ速い(気のせいかも)時代だった

105 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 13:02:18 ]
大量のテクスチャを大量に貼り付けるとき

 for(i =0; i < 枚数(512〜); i++)
    {

           glBindTexture(GL_TEXTURE_2D, texture[i]);
}

のように、番号を保管するtexture[]配列を作らないとだめでしょうか?
forの中で、順次貼り付けるテクスチャを更新していって
貼り付けて描画→次のを貼り付けて描画→…終わりまで
で texture 変数を更新するだけでやるのは可能でしょうか。


106 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 13:06:20 ]
出来るけどかなり遅いよ

107 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 13:14:53 ]
>>106
配列でやるよりも遅くなるのですか。。。
枚数がたくさんになりそうなので(512×3 や 1024×3)あまりメモリを使いたくなくて…

for(i =0; i < 枚数(512〜); i++)
{
 SetTexture(i);//テクスチャを連番で取得する関数
 glBindTexture(GL_TEXTURE_2D, texture[i]);
 //i枚目テクスチャを貼り付け
}

というやり方を考えていました。




108 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 13:18:05 ]
ごめん、テクスチャの中身を更新するのと勘違いした
そのやり方が普通だよ

109 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 13:36:06 ]
ありがとうございます!
これで迷い無く組めそうです。

あと、上のは少し違っていました
glBindTexture(GL_TEXTURE_2D, texture);

こうやっていくつもりでした。


テクスチャの中身を更新、というのは具体的にどういうことなのでしょうか
私のは中身を更新、していないのですか?
すみません…何回も何回も

110 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 13:44:04 ]
最初glBindTextureの代わりに毎回glTexImage2Dで画像をロードするのかと思ったんだよ
これだと劇的に遅くなる代わりにメモリはテクスチャ1枚分しか使わないから

111 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 14:06:13 ]
] 授業単元:プログラミング実習
2] 問題文(含コード&リンク): 2教科のテストの点数を入力し、その2つの点数に
任意の点数を加算する関数を、ポインタを使って定義し、以下のように出力するコー
ドを提出しなさい。
例)2教科分の点数を入力してください。
  78
  65
  加算する点数を入力してください。
  12
  12点加算したので
  科目1は90点になりました。
  科目2は77点になりました。

[3] 環境
 [3.1] OSLinux
 [3.2] コンパイラ名とバージョン:gcc 3.4
 [3.3] 言語:C
[4] 期限:6月11日17時まで
[5] その他の制限: 配列を関数までならいました。ポインタは初めてです
とにかく初心者です。
よろしくお願いします(><)



112 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 14:06:30 ]
おそらく私がやろうとしているのは、そうなっています
SetTextureのところで、毎回違う画像(BMP)を拾ってきて、それをテクスチャにして
ポリゴンに貼り付けていくので…



113 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 14:12:51 ]
>112
それだとglBindTextureはいらないよ

glBindTextureは時間のかかるglTexImage2Dなどのテクスチャロード処理を事前にやっておき
描画を高速にするためのものだから

114 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 15:44:51 ]
OpenGLの勉強を始めたい大学生ですがCygwinでも大丈夫でしょか?
それともVisual studioを買って勉強したほうがいいでしょうか?
自分のパソコンにはCygwinが入っていて大学だとVisual studioなのですが。
何か違いが出てきますか?

115 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 18:05:14 ]
Cygwinだとどうなるのかは知らないけど、
今はVisualC++2005 ExpressEditionという無料のバージョンがあるよ
OpenGL用のSDKが追加で入るのかは知らないけど


116 名前:デフォルトの名無しさん mailto:sage [2007/06/09(土) 18:32:15 ]
ExpressEditionだったら、プラットフォームSDKをいっしょに入れればOpenGLのSDKもついてくるよ。
ダウンロードするページにプラットフォームSDKを一緒に使いましょうみたいなお知らせがあるし、
でないとwindows.hもつかえないんじゃなかったっけ?

117 名前:デフォルトの名無しさん mailto:sage [2007/06/10(日) 00:04:20 ]
ttp://plaza.rakuten.co.jp/kojimatch/diary/200606290000/

ここに導入方法が



118 名前:デフォルトの名無しさん mailto:sage [2007/06/10(日) 00:56:00 ]
Cygwinでも大丈夫だし、そっちのほうが後々Linux等で動かしたくなったときに
楽かもしれないよ。大変かもしれないけど。

119 名前:デフォルトの名無しさん mailto:sage [2007/06/10(日) 12:34:18 ]
> 楽かもしれないよ。大変かもしれないけど。

どっちだよ

120 名前:デフォルトの名無しさん mailto:sage [2007/06/10(日) 13:14:25 ]
だってwin32API使ってたら互換性ないしさ

121 名前:デフォルトの名無しさん mailto:sage [2007/06/10(日) 19:29:45 ]
すいません109で聞いたものなのですが
テクスチャを大量に貼り付けるのに、このようにしたのですが、何も貼られなくて進めなくなっています…
床井先生のところをみながら、手探りでやっています。
static void SetTexture(int i){
/* テクスチャの読み込みに使う配列 */
GLubyte texture[TEXHEIGHT][TEXWIDTH][3];
FILE *fp;
sprintf(texture1,"texture%04d",i); //連番でテクスチャ読み込み
/* テクスチャ画像の読み込み */
if ((fp = fopen(texture1, "rb")) != NULL) {
fread(texture, sizeof texture, 1, fp);
fclose(fp);
}
else {
perror(texture1);
}
/* テクスチャ画像はバイト単位に詰め込まれている */
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
/* テクスチャの割り当て */
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TEXWIDTH, TEXHEIGHT, 0,
GL_RGB, GL_UNSIGNED_BYTE, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
}
ディスプレイ関数側ではこのように呼び出しています
for(i=1;i<=SLICE_NUM;i++){
glBegin(GL_QUADS);
SetTexture((int)i);
/* テクスチャマッピング開始 */
glEnable(GL_TEXTURE_2D);
glTexCoord2d(0.0, 1.0); glVertex3d(-1.0, -1.0, i/SLICE_NUM);glTexCoord2d(1.0, 1.0); glVertex3d( 1.0, -1.0, i/SLICE_NUM);lTexCoord2d(1.0, 0.0); glVertex3d( 1.0, 1.0, i/SLICE_NUM);glTexCoord2d(0.0, 0.0); glVertex3d(-1.0, 1.0, i/SLICE_NUM);
glEnd();}

122 名前:デフォルトの名無しさん mailto:sage [2007/06/10(日) 20:22:34 ]
121ですが、色々みて
initやmain関数で先にテクスチャを確保しないとダメっぽいということがわかりました…

動的にディスプレイ関数の中で確保する方法とかないでしょうか

123 名前:デフォルトの名無しさん mailto:sage [2007/06/10(日) 20:48:19 ]
glBindTextureってどこでやってんの?


124 名前:デフォルトの名無しさん mailto:sage [2007/06/10(日) 21:02:36 ]
glBindTextureは使っていません
テクスチャに関係している部分はココだけです。

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TEXWIDTH, TEXHEIGHT, 0,
GL_RGB, GL_UNSIGNED_BYTE, texture);

ここで、開いたテクスチャが割り当てられると思ってやっていたのですが…


125 名前:デフォルトの名無しさん mailto:sage [2007/06/10(日) 21:44:27 ]
glEnableはglBeginとglEndの中に書いちゃダメだよ
というか設定系はglBeginの前に全部終わらせといて
Begin〜Endの中にはglVertexとかglTexCoordとかだけにしよう

126 名前:デフォルトの名無しさん [2007/06/10(日) 21:58:30 ]
>>111
オメエ、mixiで手当たり次第に、マイミク登録して、聞いていただろう

>>125
え!それ知らなかった。
それってどこかに書いてある?



127 名前:デフォルトの名無しさん mailto:sage [2007/06/10(日) 21:58:50 ]
>>125さん
できました。
本当に、ただ、そこだけだったんですね
SetTextureをBeginから出しただけで、思ったとおりに出来ました

これだけのことなのに、ずっと悶々ググッていました
すみません、ほんと助かりました
これでようやく帰れます。。。ありがとうございました・゚・(ノД`)・゚・。



128 名前:デフォルトの名無しさん mailto:sage [2007/06/11(月) 00:40:12 ]
>>126
OpenGL SDKのリファレンス、glEnableのErrorsの欄にあった
たぶん青本でも書いてあると思うよ

129 名前:デフォルトの名無しさん mailto:sage [2007/06/11(月) 01:01:03 ]
>>126
常識だぜ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<177KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef