OpenGLスレ Part17
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2011/11/15(火) 18:45:31.83現在のバージョンは4.1
http://www.opengl.org/
== OpenGLと一緒に使われるツール&ライブラリ ==
苦労したくなかったらとりあえず入れとけ。
・glx: XからOpenGLを使うためのライブラリ。普通は直接は使わず意識する事はない
・glut: クロスプラットフォームなツールキット。でもさすがに古くさい
・glew: これを入れないと拡張機能が使えないor使いにくい
・glxgears: 歯車が回るベンチマーク。-infoでOpenGLのバージョンが見られる。OpenGLの動作確認はこれで
・glxinfo: 自分の使っているカードのOpenGLの機能が全てリストアップされる。
・OpenTK C#からOpenGLを簡単に使えるようになる。VC#の強力なIntellisenseとあわせてサクサク開発可能。
== 必読書 ==
・OpenGLプログラミングガイド 原著第5版 (通称赤本)
・OpenGL(R) Reference Manual (通称青本)
・OpenGL Shading Language (通称だいだい本)
・OpenGL(R) SuperBible: Comprehensive Tutorial and Reference
・OpenGL ES 2.0 プログラミングガイド
・GLUTによるOpenGL入門
・GLUTによるOpenGL入門2 テクスチャマッピング
あると便利。
・ゲームプログラミングのための3Dグラフィックス数学
== チュートリアルサイト ==
床井研究室: http://marina.sys.wakayama-u.ac.jp/~tokoi/oglarticles.html
OpenGL de プログラミング: http://wiki.livedoor.jp/mikk_ni3_92/
NeHe: http://nehe.gamedev.net/
== 前スレ ==
OpenGLスレ Part16
http://hibari.2ch.net/test/read.cgi/tech/1309182662/
0931営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 14:34:40.62これ考えた人バカですか?
0932営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 15:05:58.37それを解説してあるいいHPないでしょうか?
0933営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 21:15:28.32glTexCoord2でコピー元の座標を指定して後は普通にコピー先テクスチャに
オフスクリーンレンダリングすればいいだけだろ
0934営利利用に関するLR審議中@詳細は自治スレへ
2012/04/02(月) 23:06:20.52ありがとです
そうなんですか はふぅ・・
0935営利利用に関するLR審議中@詳細は自治スレへ
2012/04/03(火) 10:00:55.97できるんですね。わかりました調べてみます。
0936営利利用に関するLR審議中@詳細は自治スレへ
2012/04/05(木) 14:58:57.80えらく難しいと思ってる自分は賢いのかいw
0937営利利用に関するLR審議中@詳細は自治スレへ
2012/04/05(木) 18:22:39.10生成したスレッドの最初に eglCreateContext の第3引数に
共有したいContextを入れてeglMakeCurrentしたのです。
これがGoogleのangleprojectではちゃんとレンダリングされたのですが、
QualcommのAdreno SDKやARMのOpenGL ES Emulatorでは上手くいきませんでした。
そもそもangleprojectで確認してたのが悪かったのですが、
レンダリング出来るようにするにはどうしたらいいでしょうか。
0938営利利用に関するLR審議中@詳細は自治スレへ
2012/04/05(木) 22:36:32.47一般的にはその方法で問題ないはず。
実装毎に上手くいかない場合にどうすればいいかはメーカに聞くしかないんじゃないかな。
あとエミュレータは細かいところまで実装されてない場合があるのであまり信用せずに実機で確認してくれ。
0939営利利用に関するLR審議中@詳細は自治スレへ
2012/04/06(金) 23:38:01.10「実例で学ぶゲーム3D数学」
OPEN GLで卒論制作するつもりで、数学的なところを
勉強したいんですけど、上の本わかりやすいですか?
結構数学苦手なので、困ってるんですけど…
何か他にもよさげな本があれば紹介お願いします。
0940営利利用に関するLR審議中@詳細は自治スレへ
2012/04/06(金) 23:59:05.090941営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 07:48:45.04高校〜大学の数学物理力学等の教科書は結構役に立った
0942営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 10:10:57.15Windows Vista 32bit、ATI Radeon HD 4850でGLSL のビット演算はできた
同じPCでWindows 7 64bitをデュアルブートしてドライバを確認するとHD 4800になっていて
ビット演算がサポートされていない模様
(シェーダのコンパイルは通るが入力に関係なく0が返ってきている)
ラデオンのHDバージョンがオペレーティングシステムによって変わって見えるものなの?
GLSLで確実にビット演算をさせる方法はある?
ちなみに後者は#extension GL_EXT_gpu_shader4 : enableも試してみたが駄目
0943営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 11:11:03.870944営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 13:15:04.48PC触れるようになったら確認してみます
0945営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 15:14:05.08>>941
939です。
レスありがとうです。関係している本買います。
0946営利利用に関するLR審議中@詳細は自治スレへ
2012/04/07(土) 17:29:18.94そんな馬鹿冗長な物ウザいだけだと、公式と証明羅列して、そこに補足入るくらいがシンプルでわかりやすい、って人もいるので
「何がわかりやすいか」 なんて、自分で読んでみないで他人に感想聞いた所で、正解なんてわからない
いや普通の話。
0947942
2012/04/08(日) 14:52:29.800948営利利用に関するLR審議中@詳細は自治スレへ
2012/04/08(日) 19:30:03.680949営利利用に関するLR審議中@詳細は自治スレへ
2012/04/09(月) 04:34:03.11お答えくださり、ありがとうございます。
なるほど、間違ってはいないはずですか。
まずはエミュでGL環境を整えてから実機で試そうとしてたので、
実際に実機で確認出来るようになったらまた色々と探ってみます。
0950営利利用に関するLR審議中@詳細は自治スレへ
2012/04/10(火) 12:44:27.70別々のシェーダーと言っても一部共通する部分があります
イメージとしてはこんな感じです(フラグメントシェーダー)
モデルX : 計算a + 計算b
モデルY : 計算a’ + 計算b
計算bはどちらのシェーダーにも共通する計算なのですが、
この様な場合でも二つのシェーダーのソースのどちらにも
同じ計算bを書く必要があるのでしょうか
0951営利利用に関するLR審議中@詳細は自治スレへ
2012/04/10(火) 20:02:00.330952営利利用に関するLR審議中@詳細は自治スレへ
2012/04/10(火) 21:19:43.29複数置かれることも普通にあり得るということですか
非常に無駄な感じがしますが、仕方ないのですね
これは仕方ないとして、せめてシェーダーのソースコード上では、
このようなコピペを回避する手段は何か無いのでしょうか
機能毎にモジュールに分けておいたソースをロードしてコンパイルし、
リンカがそれをひとつのシェーダーにリンクするとか
0953営利利用に関するLR審議中@詳細は自治スレへ
2012/04/10(火) 21:54:27.310954営利利用に関するLR審議中@詳細は自治スレへ
2012/04/10(火) 21:56:11.950955営利利用に関するLR審議中@詳細は自治スレへ
2012/04/10(火) 22:44:57.45私の >>952 へのレスですよね
VRAM上に全く同じ命令データが複数置かれることはないという意味でしょうか
それとも、コピペを回避する手段は無いといういみでしょうか
あるいは両方でしょうか
0956営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 00:18:15.31関数は全部展開されていた。
OpenGL4だと関数呼び出しができるらしいけど詳しくは知らん
0957営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 00:24:45.2611で動的リンカっぽい機能ついたけど使われてんだろか…。
マァ同じ命令データが複数置かれるといっても、画像に比べたら無いに等しいし、パフォーマンスへの影響の方がでかい。
とりあえずOpenGLでコード分割するには、#includeを自前で実装して、コンパイル前に展開するしかない。
異種バージョン間とか考えるとかなりめんどくさそうだが、
単純に文字列展開するだけで済ますならそんな難しいもんでもないよ。
0958営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 00:26:16.65共通に使われる関数を複数のGLSLのコードに自動的に配置するような処理が必要になる。
そこでオススメなのがboost::waveだ!
waveはC言語で使われるプリプロッサを実装したものだが
waveに付属の以下のサンプルはGLSLのコードを処理できるようになっている。
wave\samples\custom_directives
このサンプルコードを使えばヘッダファイルに共通処理を書いて
#include "common.glsl"
みたいな事がGLSLでできるようになる。
ちょっと話は変わるが、最近Revisionという大きなデモパーティが開催された。
http://revision-party.net/
ここで作品をダウンロード可能
http://pouet.net/party.php?which=1550&when=2012
ここのスレのみんなはメガデモに興味ないかい?
0959営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 00:35:48.280960営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 02:30:55.14横からだけど、boost::wave とかノーマークだった。
これいい。素敵。ありがとう
0961営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 07:20:20.95自分のマシンで使える OpenGL が 3.1 までなので、
GLSL の機能だけでコピペを回避するのは諦めざるを得ませんね
>>958
すいません、質問には関係ないと思って開発言語は伏せていました
Haskell でプログラムしてます
プログラムソース内で(所謂シェーダーツリーみたいに)
グラフでシェーダーを組み立てられる仕組みを作って、
それでコピペを回避する方向でがんばってみます
0962営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 14:29:21.760963営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 16:50:26.920964営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 18:56:56.63コピペ自体は簡単にできますが、コピペ元を変更した場合、
全てのコピペ先を同様に変更しなければならず、
その時に変更漏れしてしまう可能性があります
そういう事を防ぐのが、いろんなプログラム言語で実現されている
モジュール化機能の役割の一つだと学んできたので、
GLSL には少しショックでした
0965営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 19:17:41.750966営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 19:24:21.06実行時にコンパイルします
0967営利利用に関するLR審議中@詳細は自治スレへ
2012/04/11(水) 20:05:53.39後追いのくせに細かいところは結構gdgdだよなぁ
0968デフォルトの名無しさん
2012/04/11(水) 22:16:19.780969デフォルトの名無しさん
2012/04/11(水) 22:46:20.160970デフォルトの名無しさん
2012/04/11(水) 22:56:47.370971デフォルトの名無しさん
2012/04/12(木) 10:19:41.02attribute変数の定数として渡すのと、どう使いわけたらいいんでしょうか。
投影行列みたいなのはuniform変数が使われているサンプルをよく見かける
のですが、頂点ごとの計算に使うような定数は、attribute変数の定数として
渡した方がいいんでしょうか。 今一使い分けがわかりません。よろおねm(_ _)m
0972デフォルトの名無しさん
2012/04/12(木) 21:57:12.16レンダリングコンテキストAがカレントの時に VBO を作り、
頂点データをVRAMに転送します
別のレンダリングコンテキストBがカレントの時に別の VBO を作り、
先ほどと全く同じ頂点データをVRAMに転送します
これで2つの全く同じ頂点データを元にして、
同じ3Dモデルを別々のウィンドウに別々の角度で表示したりできるのですが、
この場合、VRAMには2つの全く同じデータがダブって入ってる事になりますよね
これではあまりに無駄なのですが、
頂点データをVRMA内で共有する方法は無いでしょうか
wglShareLists などはディスプレイリストは共有するけど、
VBO は共有できないような気がするのですが、共有できるのでしょうか
[環境]
OpenGL 3.1
0973デフォルトの名無しさん
2012/04/12(木) 22:15:42.70「wglShareLists VBO」でググるとできそうな感じだけど、ダメだった?
0974デフォルトの名無しさん
2012/04/12(木) 22:29:08.40いえ、開発言語がHaskellなのでwglShareListsそのものを試す環境にはないのですが、
Haskellで GTK + OpenGL の組み合わせを提供するライブラリに、
他のレンダリングコンテキストとリソースを共有するレンダリングコンテキストを作る関数があって、
それで試したところ上手くできなかったので、もっと根本的に別のやり方があるのかと思いました
同じようにレンダリングコンテキスト同士のリソースを共有するwglShareListsでできるのでしたら、
Haskellの方でもできると思うので、関数の使い方に問題があるのかもしれません
理屈では可能なのですね、もう少し考えてみます
ありがとうございました
0975デフォルトの名無しさん
2012/04/12(木) 23:07:47.230976デフォルトの名無しさん
2012/04/12(木) 23:37:43.03レスありがとうございます。attributeが頂点ごとのデータというのは理解しています。
自分が聞きたかったのは、glVertexAttribPointerではなくて、glVertexAttribで指定する変数の方です。
これは全頂点で同じ値になりますよね。これと、glUniform〜 で指定する変数との使いわけについてです。
説明が紛らわしくてすみません。
0977デフォルトの名無しさん
2012/04/12(木) 23:45:58.38それはglVertexとglVertexPointerと同じような関係じゃない?
つまり実用的にはglVertexAttribはあまり使わないんじゃ。
まぁ人によると思うが。
0978デフォルトの名無しさん
2012/04/12(木) 23:54:27.30あそうなんですか。
例えば頂点の色を全部同じにしたい時は、glUniform〜じゃなくて、glVertexAttribで指定する
ものなのかなと思ったりしたんたですが。
そういう場合でも、glUniform〜で渡してやる方が一般的なんですかね。
0979デフォルトの名無しさん
2012/04/13(金) 11:27:58.63glutInitDisplayMode(GLUT_RGBA|GLUT_SINGLE);
のGLUT_SINGLEとは何ですか
0980デフォルトの名無しさん
2012/04/13(金) 11:31:34.15つまりダブルバッファを使わないということ
0981979
2012/04/13(金) 11:48:19.26ダブルバッファを読んだらよくわかりました
ありがとう
レス数が950を超えています。1000を超えると書き込みができなくなります。