OpenGLスレ Part11

このエントリーをはてなブックマークに追加
143デフォルトの名無しさん
>>140
LGPL はスタティックリンクしてもソースは公開しなくて良いんだぜ。
他人が再リンク可能なようにする必要があるだけだから、リンク前の
オブジェクトファイルを同梱しておけばオーケー。ソースは隠しておけ。
144デフォルトの名無しさん:2007/06/16(土) 01:28:53
>>143
おおっ、トリッキーな情報さんきゅです。
確かにそんなこと書いてあった気がする。
これで恥ずかしい自コードを隠しておけそうですヽ(´▽`)/
145デフォルトの名無しさん:2007/06/16(土) 18:19:21
> LGPL はスタティックリンクしてもソースは公開しなくて良いんだぜ。

嘘はいけないよ、嘘は・・・
146デフォルトの名無しさん:2007/06/16(土) 18:28:43
>>145
釣りするつもりならもう少し工夫したらどうなんだ?
最近少し頑張りが足りないぞ。
147デフォルトの名無しさん:2007/06/16(土) 18:56:46
おいおい、LGPLは動的リンクでないとLGPLになるよ。

だから、みんな、DLLにしてるのに・・・
148デフォルトの名無しさん:2007/06/16(土) 19:09:54
>>147
gnu.org 逝って来い
思い込みだけで書き散らしてないで、原文をきちんと読め
149デフォルトの名無しさん:2007/06/16(土) 19:10:06
というかLGPLなのにソース公開されてないの?
150デフォルトの名無しさん:2007/06/16(土) 19:49:54
つうか、2007 年にもなって LGPL にソース公開義務があると
思っている人間がいたのが驚きだ…
151デフォルトの名無しさん:2007/06/16(土) 23:12:49
lgplを採用するプログラム(ライブラリ)自体にはソースの公開義務はあるだろうよ…
ソースの公開義務が無けりゃ、BSDとかわらんではないか…

俺は勝手にwikipediaのttp://ja.wikipedia.org/wiki/GNU_Lesser_General_Public_Licenseが正しいとか思ってるんだが、どうだろうか?
152デフォルトの名無しさん:2007/06/17(日) 15:41:18
for(i=0;i<WIDTH;i++){
for(j=0;j<HEIGHT;j++){
/* test source */
glGetDoublev(GL_MODELVIEW_MATRIX, model);
glGetDoublev(GL_PROJECTION_MATRIX, proj);
glGetIntegerv(GL_VIEWPORT, view);
glReadPixels(i, j, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &z1);
gluUnProject(i, j, 0, model, proj, view, &x1, &y1, &z1); //スクリーン上の座標をワールド座標で取得

/* test source */
}
printf(" at (%d, %d) --> ", i, j);
printf(" at unproject (%lf, %lf, %lf)\n", x1, y1, z1);
}

スクリーン上の各ピクセルが、ワールド座標上でどうなっているのか知りたくて
上のようなソースを書いたのですが、変な値が入ってきます。

視点を<10 10 -20>において、<10 10 0>を見ているときに
左端のX〜右端のXを表示しても 
at (0, 256) --> at unproject (10.552285, 10.465990, -19.000000)
at (255, 256) --> at unproject (9.672081, 10.465990, -19.000000)

画面の幅が縦横256なのに、こんな小さな差しか出てきません。
これだとスクリーンは左端〜右端までワールド座標中で約-0.5〜0.5の差でしかないということでしょうか


gluPerspective(45.0, (double)w / (double)h, 1.0, 1000.0);はこのようにしております。
スクリーンの点から空間の点を知る方法を教えてください
153デフォルトの名無しさん:2007/06/17(日) 15:54:22
スクリーン上の点を空間で表すと直線になるけどな。
154デフォルトの名無しさん:2007/06/17(日) 16:06:50
すみません。仰ってることがわからないです

上のことは、私の勘違いだったかもしれません
画角を90度にして、画面も正方形で作ってみました

そうすると距離が1離れているスクリーンは
左端が-1 右端が+1になりますねよね。

それで正しい値だと認識できました。
155デフォルトの名無しさん:2007/06/17(日) 17:02:30
>>152
とりあえず
gluUnProject(i, j, 0, model, proj, view, &x1, &y1, &z1);

gluUnProject(i, j, z1, model, proj, view, &x1, &y1, &z1);
じゃねぇかね?
156デフォルトの名無しさん:2007/06/17(日) 18:41:26
ワールド座標中でのスクリーンが欲しいときは0にすると以前教えていただきまして
z1だとこの場合スクリーンより奥の値になりますよね?

ここまでやって、スクリーンに向かって光線を打てると思ったのですが詰まりました…はぁ…

157デフォルトの名無しさん:2007/06/17(日) 19:42:18
>>156
>ワールド座標中でのスクリーンが欲しいときは0にすると以前教えていただきまして
はっきりいって間違ってるよ
158デフォルトの名無しさん:2007/06/17(日) 19:43:06
>>152
>これだとスクリーンは左端〜右端までワールド座標中で約-0.5〜0.5の差でしかないということでしょうか
そーゆーコトです。(gluPerspectiveに与えたwとhの比にもよりますが)

>gluPerspective(45.0, (double)w / (double)h, 1.0, 1000.0);はこのようにしております。
とのことなので、これはglFrustumでいえば
const double t = tan(22.5 / 180 * M_PI);
 glFrustum(
  -1.0 * t * w / h,
  1.0 * t * w / h,
  -1.0 * t,
  1.0 * t,
  1.0
  1000.0
 );
に相当しますから、nearクリック面の横幅はw/h*2tan22.5度、となります。

>スクリーンの点から空間の点を知る方法を教えてください
求められているように思えますが・・・。
159デフォルトの名無しさん:2007/06/17(日) 19:54:32
多分152さんは、前スレの915〜あたりの人ですよね。
もしいまだにnearクリップ面のことを「スクリーン」と呼んでるのなら、早く直した方がいいですよ。
独自の用語を使われると、意志の疎通以前に混乱を招きますので。

>>157
字面だけみると完全に間違ってる(笑)んですけど、
その辺の事情は前スレを見ないと分からないかと・・・。
160140:2007/06/17(日) 20:18:51
ライセンススレ化してすんません。原文読んできました。
スタリンクするものはLGPLの派生物となるが、例外として、
リバエン/改変などの告知をし、完全かつ機械読み取り可能なオブジェクトコードあるいはソースコー ド(どちらかでも可) と一緒にする。
この「オブジェクトコード」がglui.libを指すのであれば大丈夫ですな
161デフォルトの名無しさん:2007/06/17(日) 20:37:56
>>159さん
その節はありがとうございました。
一度他のことで時間を割かれてしまって、もう一度着手しているところです。
ご指摘もありがとうございます。手探りでやっている状態で、、、

上記の方法で、視点位置と、nearクリップ面とを結ぶ直線(レイ)を出そうとして
レイを単位ベクトルにしていざ使おうと思ったのですが
今度はそれと、立方体の面との交点の算出に苦戦しています。

ここはOPEN-GLじゃない、数学のレベルの問題なので、どうにかして頑張ります。
今日は帰れそうになさそうです(´;ω;`)
162デフォルトの名無しさん:2007/06/17(日) 21:00:36
>>160
>この「オブジェクトコード」がglui.libを指すのであれば大丈夫ですな
違う、アプリケーションを構成する.oファイル全てなので、
公開しないコードの部分も.oは公開しないといけない。
つまり、コードは無くても良いけどLGPLの部分が置き換え可能な状態で無ければいけない。
163デフォルトの名無しさん:2007/06/17(日) 21:28:27
>>161
交差判定は面倒ですね〜。
こことか参考になるかもですよ。
ttp://ft-lab.ne.jp/cgi-bin/wiki.cgi?page=%B8%F2%BA%B9%C8%BD%C4%EA_3DCG

日曜なのに大変そうですね。
がんばれ〜。・ω・`)ノシ
164デフォルトの名無しさん:2007/06/17(日) 21:30:40
>>162 が正解
LGPL 部分を自分で改変したバイナリで置き換えられる様に、.o を入手可能にする
必要がある。派生物の所持者が入手可能であれば良いから、世界に向けて公開する
必要は無いよ。
165140:2007/06/17(日) 22:45:24
>>162,164
両氏ともありがとうございました。
オブジェクトコード=.oだったんですね(;゚Д゚)
なるほど、派生物所持者が再びリンクできるようにってことですね。
>世界に向けて公開する 必要は無い
バイナリといえど、ちょっと抵抗があったので安心しました。
重ね重ね感謝ですヽ(´▽`)/
166デフォルトの名無しさん:2007/06/20(水) 20:36:52
>>163
どうにか無事にレイと面の交差判定、できました!

あとはそれの効率化で頑張ります。
本当にありがとうございました!
167デフォルトの名無しさん:2007/06/23(土) 08:15:38
c++でもextern"C"で頑張って、
dllやらsoを使うのが簡単な気がする。
168デフォルトの名無しさん:2007/06/24(日) 04:46:17
光源の明るさを0にして描画しても真っ暗になりません。
具合的には、
GLfloat lightAmb[4] = {0.0f, 0.0f, 0.0f, 0.0f};
GLfloat lightDif[4] = {0.0f, 0.0f, 0.0f, 0.0f};
GLfloat lightSpe[4] = {0.0f, 0.0f, 0.0f, 0.0f};
glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmb);
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDif);
glLightfv(GL_LIGHT0, GL_SPECULAR, lightSpe);

GLfloat mateAmb[4] = {1.0f, 1.0f, 1.0f, 0.0f};
GLfloat mateDif[4] = {0.0f, 0.0f, 0.0f, 0.0f};
GLfloat mateSpe[4] = {0.0f, 0.0f, 0.0f, 0.0f};
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mateAmb);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mateDif);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mateSpe);

にして描画すると、薄暗く (RGB=0.1, 0.1, 0.1 ぐらいの暗さ) 描画されてしまいます。
原因がわかる人おりますでしょうか?

環境は、GeForce 7900 GS です。
169デフォルトの名無しさん:2007/06/24(日) 10:16:44
GL_LIGHT_MODEL_AMBIENT
170デフォルトの名無しさん:2007/06/24(日) 11:42:49
>>169
ありがとうございます。原因わかりました。
デフォルトで環境光 0.2 が加わるなんて、知りませんでした。
171yd:2007/06/25(月) 19:05:50
だれかいますか?
172デフォルトの名無しさん:2007/06/25(月) 19:09:03
(@u@ .:;)ノシ
173yd:2007/06/25(月) 19:20:10
こんち

174yd:2007/06/25(月) 19:21:49
(x, y) = (0 + 0.557 * cos( 90 ), 0 + 0.557 * sin(90));
をFor文で回したいんですけどうまく逝きません;;


175yd:2007/06/25(月) 19:31:25
円上にポイントを64個、均等に置きたいんですm(__)m



176デフォルトの名無しさん:2007/06/25(月) 20:13:16
これはひどいマルチ
177デフォルトの名無しさん:2007/06/25(月) 21:16:28
>>175
int i;
float a;
const float b = 3.1415926535897932384626433832795028*2/64;

glBegin(GL_POINTS);
for(i = a = 0; i < 64; i++, a += b)
glVertex2f(cosf(a), sinf(a));
glEnd();
178デフォルトの名無しさん:2007/06/25(月) 22:55:22
足し算は駄目だろ…
179デフォルトの名無しさん:2007/06/26(火) 00:13:33
>>178
はあ?
180デフォルトの名無しさん:2007/06/26(火) 00:31:45
>>179
誤差が蓄積するからって言う意味だろ。
181デフォルトの名無しさん:2007/06/26(火) 00:45:55
>>180
でも差は、6.283185-6.283182=0.000003だけどな。
182yd:2007/06/26(火) 04:01:08
ありがとうございます。早速試してみますm(__)m
183デフォルトの名無しさん:2007/06/26(火) 04:04:36
どういたしまして
184デフォルトの名無しさん:2007/06/27(水) 00:20:17
フィールドシーケンシャル 3DをOpenGLで実装したいのですが、
方法はさておき、左右の画像を1/2に間引きして交互に合成すれば
いいのでしょうか。こんな感じに

右右右右右右右右右右右右右右
左左左左左左左左左左左左左左
右右右右右右右右右右右右右右
(繰り返し)
左左左左左左左左左左左左左左

資料があまりないので確証がとれません。どこかにありませんか。
英語サイト可です。
185デフォルトの名無しさん:2007/06/27(水) 00:51:01
立体視の話?
186デフォルトの名無しさん:2007/06/27(水) 00:58:43
そうです。

例えば、
640x480右画像
640x480左画像
  ↓
奇数行は右画像から
偶数行は左画像から
  ↓
640x480の(裸眼では見るに堪えない)画像

でいいのでしょうか。それをOpenGLでやりたいんですが。もちろん動画です。
187デフォルトの名無しさん:2007/06/27(水) 01:28:29
あなたがお使いのフィールドシーケンシャル方式のデバイスの
仕様に沿った形で画像データを渡せばよろしいかと思います。
188yd:2007/06/27(水) 12:11:18
円周上にうたれた点に対して、1個飛ばしに円弧で結んでいきたいんですが
直線ニナら結べるんですけど、円弧だとどうアプローチしていいかわかりません
やさしい人教えてください。
189デフォルトの名無しさん:2007/06/27(水) 21:25:16
ニナがキモイ
190デフォルトの名無しさん:2007/06/27(水) 21:44:06
円周上の点を円弧で結んだら1個飛ばしとか関係なく全部の点通るんじゃね?
それはともかくOpenGLでやるなら細かい直線に分けて書く
それも面倒ならgluPartialDisk
ニナって誰?
191Light:2007/06/27(水) 22:26:40
脳の視覚システムを研究している者です。
リンク先のような画像をOpenGLで作製したいのですが、うまくいきません。
http://en.wikipedia.org/wiki/Image:Monocular_rivalry.png

いまのアルゴリズムは、赤線を描いた後、緑線を描いているんですが、
それだと上描きしてしまうことになるので、リンク先の画像のように、
重なった部分が混ざり合ってぼけた感じになりません。

また、赤と緑を別々に描くと、僕のiMacだと後の方に描いた線が
バチバチします。計算量が無駄に多くなってしまっているのかもしれません。

何か良い解決方法はないでしょうか?
閃いた方、ぜひぜひご教授ください。
192デフォルトの名無しさん:2007/06/28(木) 00:22:00
混ぜるのは色のアルファを指定してBlendしてくれ
ブレンドについてはGL_BLENDとかglBlendFuncで調べれば出てくるはず
パチパチというのはよく分からないがZ比較してるんでないかい?
glEnable(GL_DEPTH_TEST)をやってたらglDisableにしてみれ

あとこのレベルの質問はくだすれOpenGLスレに書いた方が適切と思われる
193デフォルトの名無しさん:2007/06/28(木) 14:35:22
同業界人かよ
パチパチはvsyncに同期してないか、
ダブルバッファリング関係かどちらかかと思われる
194Light:2007/06/28(木) 23:39:57
>>192 & 193の方へ

回答、ありがとうございます。
GL_BLENDは可にしていたんですが、glBlendFuncのパラメーターが良くなかった
ようです。glBlendFunc( GL_SRC_ALPHA, GL_ONE );でうまく色を融合できました。
バチバチは、glutIdleFunc( idle ); を入れると起こってしまいます。
ただし、idle関数の中身は、glutPostRedisplay();です。
glutSwapBuffers()を使っています。
もう少し自分でやってみて、また判らなければ「くだすれOpenGLスレ」に
投稿したいと思います。
195デフォルトの名無しさん:2007/07/03(火) 02:15:15
手抜きOpenGlにあるサンプルが起動しません。
どうしたらいいのですか?
196デフォルトの名無しさん:2007/07/03(火) 02:44:55
>>195
どういうふうに起動しないのよ?
環境わからんからなんとも言えんけど、GLUTは適切にインストールされてる?
197デフォルトの名無しさん:2007/07/03(火) 08:25:16
【派遣ネガティブ根性チェック】

3つ以上、チェックがつけばアナタの性格はひん曲がっており、
ネガティブ負け組派遣人生を歩んでいます。

□派遣先正社員の作った糞開発ツールはたとえ腐っててもマンセーして使う
□派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする
□昼食は必ず派遣先の社員と行くべきだ
□自分の仕事で問題が発生しても解決するのは自分の仕事ではない
□派遣先から「いつまでもここで仕事してくださいね(安い金でw)」と言われて嬉しい
□自社で仕事なんてできるわけがない
□派遣労働の問題点の話題が出ると感情剥き出しにして反論する
□派遣労働の問題を指摘する人は嫌いだ
□派遣先には仕事だけでなくプライベートについてもグイグイ引っ張って欲しい
□奢ってくれる派遣先正社員を尊敬する
□自分の月額金額を知らないのは当然だ、単金を聞いてはいけない
□派遣先正社員より自分の生涯収入が低いのは当然だ
□チビは派遣先にかわいがってもらいやすから派遣には有利だ
198デフォルトの名無しさん:2007/07/03(火) 12:33:07
プログラマー板でやれ
199デフォルトの名無しさん:2007/07/03(火) 12:56:45
>>198
文句があるなら派遣を辞めてから言え
200デフォルトの名無しさん:2007/07/03(火) 15:51:08
HaskellでOpenGL使ってる人いる?
201デフォルトの名無しさん:2007/07/03(火) 18:44:55
いらない
202デフォルトの名無しさん:2007/07/03(火) 18:56:57
俺もいらね
203デフォルトの名無しさん:2007/07/03(火) 21:35:56
OpenGLなんて単独で使うもんだ
余計なもんなぞ糞
204デフォルトの名無しさん:2007/07/04(水) 18:55:12
何がいらないのかまったくわからないのですが
205デフォルトの名無しさん:2007/07/04(水) 19:12:14
そうですか
206デフォルトの名無しさん:2007/07/04(水) 19:48:52
>200-202の流れにはワラタけど
>203は全く意味がワカランなぁ・・・
OpenGL単独で一体何ができるってんだか。肝心の絵すら出ないよw
207デフォルトの名無しさん:2007/07/04(水) 20:07:38
OpenGLが自我をもって動き出す
行く先も分からぬまま
208デフォルトの名無しさん:2007/07/04(水) 20:40:07
行く先と言えばLongsPeakって出るの今月だっけ?
ほんとに出るのかな…
209デフォルトの名無しさん:2007/07/04(水) 21:58:55
>>206
ヒント
描画ロジックの分離
210デフォルトの名無しさん:2007/07/04(水) 22:35:51
>>209
…描画ロジックを分離するとOpenGL単独でいけるんだ。

…へェ。
211デフォルトの名無しさん:2007/07/04(水) 22:53:16
俺もOpenGL単独で使いたい!
極意を教えてください!!
212デフォルトの名無しさん:2007/07/04(水) 23:00:40
メンテナンス性を考慮してできるだけOpenGL単独になるように設計するだろ、普通
213デフォルトの名無しさん:2007/07/04(水) 23:20:20
>>200
Haskellみたいな純粋に近い関数型言語ってよく知らないんだけどさ、
OpenGLみたいなStateMachineとの相性って悪くないの?
あれかな、モナドとかいうやつを使ってむにゃむにゃするのかな?
214デフォルトの名無しさん:2007/07/05(木) 00:09:52
>>212
言語との組み合わせでどう?といわれているのに
単独とかわけの分からないこと言ってるから突っ込まれてるんだろ
215デフォルトの名無しさん:2007/07/05(木) 01:05:16
>>214
エスパー乙
216デフォルトの名無しさん:2007/07/05(木) 01:20:37
>>204
HaskellでOpenGL使ってる人
217デフォルトの名無しさん:2007/07/12(木) 00:10:34
ウィンドウとレンダリングコンテキストとフレームバッファがひとつに
くっついているのって扱いにくくないですか?
スレッドにカレントコンテキストを設定するのもグローバル変数のようで
プログラムが複雑になるような気がします。
218デフォルトの名無しさん:2007/07/12(木) 00:40:14
OpenGLのせいではありません。M$に文句言ってください。
219デフォルトの名無しさん:2007/07/12(木) 01:23:50
D3Dはそのへんちゃんと作ってるのがムカつくなw
220デフォルトの名無しさん:2007/07/12(木) 21:19:22
そうか?
D3DでもDeviceは一個しか作れんし、結局グローバル変数にしちゃわない?
デバイスを使用する関数にいちいち渡してたらそっちの方が複雑になるな

あとは次バージョンのOpenGLにご期待ください
221デフォルトの名無しさん:2007/07/12(木) 21:41:58
>D3DでもDeviceは一個しか作れんし
二個以上作れるしデバイスのAPIが複数スレッドからの
呼び出し可能にするオプションもあるんだなこれが。

ゲームはともかくツールとか作る時には未だにwgl*の適切な取り扱いがよーわからん。
222デフォルトの名無しさん:2007/07/12(木) 21:55:33
そうなのか、昔やった時は1個しか作れなかったからそういう物だと思ってた

確かにツールとか複数ウィンドウに描画する場合はコンテキストの管理が面倒だな
設定は独自管理にしてコンテキスト切り替え時に必ず設定するようにするのがいいのかな

しかしマルチコンテキストの場合は何が共有できるのか分かりづらいのが困る…
これが嫌でpbuffer諦めてFBOにしたしな
223デフォルトの名無しさん:2007/07/13(金) 11:40:57
内部で OpenGL を使うライブラリを作成するときに,ユーザーが
別に OpenGL を使っている可能性があるからライブラリの関数を
呼び出すごとにコンテキストの退避,切り替え,復元をしなけれ
ばならないから非効率
224デフォルトの名無しさん:2007/07/14(土) 20:53:03
それはそのライブラリの仕様が悪いだけのような…
225デフォルトの名無しさん:2007/07/15(日) 01:50:28
ライブラリの作り方をずっと考えてきたがうまいやり方が思いつかなかった。
OpenGL をライブラリ内部に隠蔽してユーザと同じスレッドで動かすライブラリ
の場合,ユーザが設定するコンテキストの影響を受けてもいけないし影響を
与えてもいけない。
結局ライブラリの関数に入ったときにこっそりコンテキストを切り替えて
関数から出るときに元のコンテキストに戻す方法しか思いつかなかった。
226デフォルトの名無しさん:2007/07/19(木) 15:32:06
OpenGL 3.0 は D3D10 とほぼ同じ API にしてくれないかな。
そのほうが学習も楽だし,GPU ベンダーも楽になるのに。
227デフォルトの名無しさん:2007/07/19(木) 17:17:03
それはない。何か(考えが)浅いな。
228デフォルトの名無しさん:2007/07/19(木) 17:24:16
Fahrenheitというのがあってな…。
229デフォルトの名無しさん:2007/07/19(木) 17:32:03
>226
今後はしばらくAPIの策定がD3D先行なのは間違いないから
インターフェイスはともかく出来ることはほぼ同じになるだろうね

少なくともD3Dで出来ることはGLでも出来るようになる(速度は知らんが
230デフォルトの名無しさん:2007/07/19(木) 20:57:40
なってくれないと困る
231デフォルトの名無しさん:2007/07/19(木) 23:25:16
OpenGL初心者の者です.言語はjavaを使っています.
修士研究で使用していますが,周りに使っている人がいないので聞けない状況
です.

解析で出た速度ベクトルを,glutSolidConeで描画したいと思っています.
流体なので,複数のベクトルがあり,陰影がついていないと見づらいのです.
for文で描画しようと思っています.

問題があり,glutSolidConeは,デフォルトでZ軸方向を向くようになっています.
これを回転させて,求めたベクトルの方向に向かせたいのですが,分かりません.
Z軸をこの方向に向かせたとして,他の2軸の向きがどうなろうと
かまわないのですが,Z軸に向かせるだけなのにできません.

調べたところクォータニオンというものがあり,便利ということですが,
あまり資料がありません.また,CGが研究の主題なのではなく,
描画自体はシンプルなものなので,ここまでやらなくてはいけないのか
悩んでいます.

良い方法があったらよろしくお願いしま
232デフォルトの名無しさん:2007/07/19(木) 23:35:07
>>231
回転行列の3列目に向かせたい方向のベクトル入れたらええんちゃうのん?
残りの2列は直交するように適当に
233デフォルトの名無しさん:2007/07/19(木) 23:42:29
それは,glRotatefを使用しない方法でしょうか?
詳しくないものですいません.
234デフォルトの名無しさん:2007/07/19(木) 23:45:39
>231
四元数でもいいけど、glMultMatrix()使うのが分かりやすいかと。
Z軸が (x, y, z) の方向を向いて欲しいなら、
  GLfloat m[16]={x0,x1,x2,0, y0,y1,y2,0, x,y,z,0, 0,0,0,1};
  glMultMatrixf(m);
  (glutSolidCone...)
て感じ。Cしか知らないので自分で適当にJavaに翻訳してね。

あ、事前に(x0,x1,x2)と(y0,y1,y2)と(x,y,z)は互いに直交するように
かつ正規化されているように設定する必要がありますヨ。
235デフォルトの名無しさん:2007/07/20(金) 00:04:27
ありがとうございます.
調べてやってみたいと思います.

>234
あ、事前に(x0,x1,x2)と(y0,y1,y2)と(x,y,z)は互いに直交するように
かつ正規化されているように設定する必要がありますヨ。

の部分がはっきりしないのですが,
(x0,x1,x2)と(y0,y1,y2)はどういったベクトルなのでしょうか?

・向かせたい方向(x,y,z)
・直行するベクトル→(x0,x1,x2)と(y0,y1,y2)は
 (x0,y0,z0),(x1,y1,z1)と解釈
でよろしいでしょうか?

かつ,(x,y,z),(x0,y0,z0),(x1,y1,z1)はそれぞれ正規化されたベクトル

ただし,今回は(x0,y0,z0),(x1,y1,z1)は適当に与えればよい.

でよろしいでしょうか?

236デフォルトの名無しさん:2007/07/20(金) 00:13:51
>234
教えていただいたことで分からない点がもう一つありました.
仕様が違うのかもしれませんが…

「glMultMatrixf(float[],int)は(float)に適用できません」と出てしまいました.
引数で,int型のある数が必要らしいのですが,知っていれば教えていただけませんか?
237デフォルトの名無しさん:2007/07/20(金) 01:10:16
>235
座標変換前のx軸とy軸が座標変換後に向く方向、って意味で(x0,x1,x2),(y0,y1,y2)って
名前にしましたけど、かえって分かりづらかったですか。w
まぁ、名前なんて(x0,x1,x2)だろうが(x0,y0,z0)だろうがどうでもいいんで気にしない方向で。
要は、座標変換後もxyz軸が直交して欲しいなら三つのベクトルを直交させないといけないし、
また座標変換後のxyz軸の大きさが変わらないで欲しいなら三つのベクトルが正規化されてないと
いけないわけです。GLと関係無い、数学の話ですね。

glMultMatrixf()の二番目の引数ってなんだろ。Cにはそんなの無いんですが。
てかAPIのリファレンスとかwebで調べれば良いだけの話では。
238デフォルトの名無しさん:2007/07/20(金) 01:25:37
>237
分かりました,ありがとうございます.
3次元の座標変換というものに慣れていないので,質問しました.
調べてみればみるほど,数学の話になるので仰るとおり理解するには
数学的にしっかり理解しなければいけないようです.

APIの方も見ようと思います.

ありがとうございました.
239デフォルトの名無しさん:2007/07/20(金) 16:00:04
>238
改めて考えてみたら、glMultMatrixを使うのは無駄多いかも。
要するにz軸(0,0,1)を任意の方向(x,y,z)に向けられればいいわけだから・・・
  Vz=(0,0,1)→V=(x,y,z)
回転軸Vr(rx,ry,rz)は
  Vr = Vz x V (外積)
回転角度aは
  a = arccos(Vz・V) (・は内積、Vは単位ベクトルとする)
このVrとaが、そのままglRotateの引数に使える、の、かな。

Vz = (0,0,1)を入れて具体的に計算すると、
  Vr = (-y, x, 0)
  a = arccos(z)
これを、速度ベクトル一個ずつに対応して保存しておけば、
描画するときにglRotate(a, Vr.x, Vr.y, Vr.z)でいけるはず。
ただしGLの角度表現はradじゃなく度なので注意。
あとV(x,y,z)がz軸に平行なときは計算が別になるけど、ま、それは分かるでしょ。
240デフォルトの名無しさん:2007/07/20(金) 22:22:24
>236
2 番目の引数は配列のオフセット。
C → glMultMatrixf( m + 10 );
Java → gl.glMultMatrix( m, 10 );
241デフォルトの名無しさん:2007/07/21(土) 00:03:45
>>239
直接基底作ってglMultMatrixのほうが明らかに計算量が少ないと思うが・・・
242デフォルトの名無しさん:2007/07/21(土) 01:25:26
昨日質問した者です.

>239
なるほど,そういう方法もあるんですね.glRotateの引数には,1.0fか0.0fを
入れる方法しか知りませんでした(汗)

>240
オフセットですか.APIを見ても???という感じでしたが,オフセットで調べたいと
思います.

みなさんありがとうございます.諦めかけていましたが,なんとかなりそうです.
243デフォルトの名無しさん:2007/07/21(土) 02:48:34
>>241
>glMultMatrixのほうが明らかに計算量が少ない
そうでもない。
・パラメータの転送量が多い
・(OpenGL内部での)逆行列計算が大変
てことで、glMultMatrixは負荷が大きいよ。
対してglTranslate,glScale,glRotateは逆行列の計算が速い。
ま、自分ではベンチとって比べてみたことは無いけど。一般的には、
MultMatrixを使うよりはTranslate/Scale/Rotateを使うべきと言われてるね。

それに事前の計算量もメモリ消費量も、このケースでは
234の方法 > 239の方法 だと思うけど・・・。
244薄汚い派遣の国、日本:2007/07/22(日) 17:53:13
最近、職場で「出戻り寄生派遣」という言葉が囁かれています。
派遣契約を切られたにもかかわらず「次の派遣先でも切られてしまって生活できません」
などと 言って泣き落としで現場責任者に一切話がないまま再契約した派遣のことです。
今月初め、半年前に切った派遣が出社してきてマネージャーも含めみんなびっくりしました。
影でコソコソ偉い人に泣きついて再契約したそうです。同じ部署の人には黙って・・・
そんなことまでして自宅の近くの派遣先にこだわって人間として恥ずかしくないのですか。
派遣でスキルアップ、派遣で収入アップとか言うなら一箇所にしがみつかず
複数の会社を渡り歩いてください。
ひとつの会社で派遣向けの単調な仕事をしていたらスキルアップなんてありえないでしょう。
身分不相応な商品のローンを払うために派遣だと当然足りない収入は親にも寄生して、
いつ切られるんじゃないかとビクビクしながら人事権のある人間とだけ仲良くし、
契約終了を通知されれば泣き落とし。悲惨な人生ですね。
氏んだほうがいいんじゃないですか。
245デフォルトの名無しさん:2007/07/26(木) 14:28:32
XPだとうまく動いてたプログラムが Vista だと glBindTexture での
テクスチャの切り替えがうまくいかねぇ・・・・
ググっても同様の症状は出ないので自分のコードのどこかが
行儀悪いんだろうが何がいけないのやらさっぱり・・・ orz
246デフォルトの名無しさん:2007/07/26(木) 20:39:33
とりあえずOpenGL-D3D Translatorで動かしてみたら?
247デフォルトの名無しさん:2007/07/26(木) 23:59:46
【派遣ネガティブ根性チェック】

3つ以上、チェックがつけばアナタの性格はひん曲がっており、
ネガティブ負け組派遣人生を歩んでいます。

□派遣先正社員の作った糞開発ツールはたとえ腐っててもマンセーして使う
□派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする
□仕様とは正社員から口伝されるものだ
□耳で聞いた仕様を正確に覚えていないのは自分の責任だ
□昼食は必ず派遣先の社員と行くべきだ
□自分の仕事で問題が発生しても解決するのは派遣の仕事ではない
□自社で仕事なんてできるわけがない
□派遣労働の問題点の話題が出ると感情剥き出しにして反論する
□派遣労働の問題を指摘する人は嫌いだ
□派遣先には仕事だけでなくプライベートについてもグイグイ引っ張って欲しい
□奢ってくれる派遣先正社員を尊敬する
□自分の月額金額を知らないのは当然だ、単金を聞いてはいけない
□派遣先正社員より自分の生涯収入が低いのは当然だ
□チビは派遣先にかわいがってもらいやすいから派遣には有利だ
248デフォルトの名無しさん:2007/07/27(金) 00:05:24
>>246
ども。試してみます。
249デフォルトの名無しさん:2007/07/27(金) 09:52:21
>>245
ここにVistaでOpenGLを使う時の注意点があるけどどうだろう
http://www.opengl.org/pipeline/article/vol003_7/
Aeroを使ってたら切って試してみるといいかもしんない
250デフォルトの名無しさん(245):2007/07/27(金) 10:40:19
245ですが原因わかりました。-_-;..
glBindTexture でテクスチャを切り替える時に、XPだと、

  glBindTexture( GL_TEXTURE_2D, テクスチャ1 );
    /* テクスチャ1有効 */
  glBindTexture( GL_TEXTURE_2D, テクスチャ2 );
    /* テクスチャ2有効 */

とダイレクトにバインドして問題ないんだけど、
Vista の場合、

  glBindTexture( GL_TEXTURE_2D, テクスチャ1 );
    /* テクスチャ1有効 */
  glBindTexture( GL_TEXTURE_2D, 0 );

  glBindTexture( GL_TEXTURE_2D, テクスチャ2 );
    /* テクスチャ2有効 */
  glBindTexture( GL_TEXTURE_2D, 0 );

と、名無しテクスチャに戻してやらないと他のテクスチャにバインドし直せなかったです。

うーん・・・ 赤本(原書第5版)の glBindTexture のサンプルコードは上の書き方だったけど
この辺何か文献でてましたっけ。  勉強が足らんなぁ・・・


>> 249
サンクス!!
OpenGL描画中にGDIはいじってないので大丈夫そうです。
自分の元のコードが Aero の On/Off に関わらず発症すること、
上記の修正をして Aero の On/Off に関わらず修正されたことを確認しました。

以上、お騒がせしてすんませんでした・・・・ orz
251デフォルトの名無しさん:2007/07/27(金) 11:06:45
>>250
BindTextureに0を指定することって普通無いと思うが、不思議な現象だな
まだVista用のグラフィックドライバがバグってるってだけかもしんないね
252デフォルトの名無しさん:2007/07/27(金) 16:03:10
おいらンとこではBindTextureで0をバインドしなくてもVistaで普通に動いてるよ。
てか今まで特に不具合は出てないな。
253デフォルトの名無しさん:2007/07/27(金) 16:32:41
>>250
定番だけどドライバを更新。もうやってそうだけど。
>>251
無名のテクスチャを指定するときに0を指定するんじゃなかったかな。
254デフォルトの名無しさん:2007/07/27(金) 18:17:26
Vista標準のドライバを使っているといったら、なぐる
255デフォルトの名無しさん(245):2007/07/29(日) 08:31:17
>>254
とはいえ、標準ドライバでも最低限まともに動くようになってないとね・・
なんせ「標準」ですからね・・

>>252
ですよねぇ。自分のOpenGL作法がおかしいんだろうなぁとは思うんですが、
テクスチャ以外は問題ないし、毎回 gllTexImage2D() する分にも問題ない。
glBindTexture だけが思うように動かない。謎です。

みなさんどもありがとです。m(_ _)m
256名無しさん@そうだ選挙に行こう:2007/07/29(日) 13:16:20
うちのプロジェクトでは、Vista添付のドライバでOpenGL動かしたら、
WindowsXPのベンダー提供ドライバ時の約6%しか、速度がでなかった。
Vista対応ドライバを入れると、解決した。
よって、Vistaの添付ドライバは全く信用していない
257名無しさん@そうだ選挙に行こう:2007/07/29(日) 13:37:48
遅いのはD3Dへのtranslatorだからってだけの話
信用云々とかあふぉくさ
258デフォルトの名無しさん:2007/07/30(月) 01:13:23
全然詳しくないので質問させてください。
いつも仕事中にWebばかり見てる派遣クンが
「OpenGLがプログラムどおりに動かない原因を調べるのは僕の仕事ではありません。」
と言っています。
彼のOpenGLプログラムが動かないのを調べるのは誰の仕事なのでしょうか?
259デフォルトの名無しさん:2007/07/30(月) 01:15:03
まともに論破する技量も無いお前の仕事
260デフォルトの名無しさん:2007/07/30(月) 01:18:15
こういうバカを論破しようとチャレンジするなんて尊敬するよ
俺なら論破以前に派遣契約を切るからな
261デフォルトの名無しさん:2007/07/30(月) 01:23:48
それスクリプト
262デフォルトの名無しさん:2007/07/30(月) 01:32:37
>>259-260
論破しようにもそういう奴って話通じないだろ
「僕は言われた通りにやりました!何で僕が調べないといけないんですか!」
なんて言われたひにゃ俺ならマジギレしそう
263デフォルトの名無しさん:2007/07/30(月) 01:50:00
>>262
話通じない奴が居るって時点でお前も話通じなそうだな
264デフォルトの名無しさん:2007/07/30(月) 01:57:43
>>263
日本語をしゃべってれば話が通じるなんて考えは甘いよ。
265デフォルトの名無しさん:2007/07/30(月) 02:04:33
>>263
お前ずいぶん恵まれた環境で仕事してるんだな
266デフォルトの名無しさん:2007/07/30(月) 03:06:58
マ板池
267デフォルトの名無しさん:2007/07/30(月) 05:45:57
>>258は、マルチ
268デフォルトの名無しさん:2007/07/30(月) 07:02:50
契約内容見直せよ。
269デフォルトの名無しさん:2007/07/30(月) 09:20:10
258はDirectXスレでも単語が変わっただけの同じのみたな
270デフォルトの名無しさん:2007/08/04(土) 19:23:43
MacでOpenGLやりたいんだけどXcodeでプログラミングすれば平気?
271デフォルトの名無しさん:2007/08/04(土) 19:28:32
>>270
XCode 使っても良いけど、↓これ見ておけば悩み無用。

ttp://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html
272デフォルトの名無しさん:2007/08/04(土) 23:02:22
CocoaでやんのかCarbonでやんのか知らんがまぁがんばれ
273デフォルトの名無しさん:2007/08/05(日) 23:56:10
今日から始めたんだが解説サイトとかすごく少なくて不安…
日本語で基礎からガッチリ固めたかったらあの高い赤本しかないの?

せめて5000円以下でないだろうか
274デフォルトの名無しさん:2007/08/06(月) 00:13:13
>>258
人材配置を見直してもらうか、仕事振ってるマネージャーを変えてもらえ
275デフォルトの名無しさん:2007/08/06(月) 11:39:09
>>273
学生なら学校の図書館とか、あるいは市町村の図書館でもあたってみては。
無いかもしれんが。
英語でよければ古い版の赤本を無料で読める http://www.glprogramming.com/red/
276デフォルトの名無しさん:2007/08/06(月) 16:11:22
やはり英語か…
覚悟きめてがんばるわ
277デフォルトの名無しさん:2007/08/06(月) 20:52:07
古い赤本はほんとうに古いから参考になるかどうか…
図書館は無ければリクエストしてみるといいかも
でも入るまでかなり時間かかるかな
278デフォルトの名無しさん:2007/08/06(月) 21:04:40
日本語の赤本もようやっと原著第5版になってるしね。
英語で格闘する労力と13k円の出費のトレードオフを考えてオレは買った。>赤本
279デフォルトの名無しさん:2007/08/06(月) 21:09:00
昔の赤本(初版)はもってるんだけど、最近のとどこが違うのでしょうか?

280デフォルトの名無しさん:2007/08/06(月) 21:10:38
図書館てOpenGLみたいなマニアな(?)専門書って置いてるものなの?
281デフォルトの名無しさん:2007/08/06(月) 22:12:54
比較的メジャーなマニア本だからな。
282デフォルトの名無しさん:2007/08/06(月) 22:42:51
>>279
Amazon.co.jp: OpenGLプログラミングガイド 原著第5版: 本: OpenGL策定委員会,松田 晃一
http://www.amazon.co.jp/dp/4894717239

> ■OpenGL バージョン1.5 で追加された以下の新しいコア機能:頂点配列のバッ
> ファオブジェクトへの格納/遮蔽問い合わせ/シャドウマッピング用のテクス
> チャ比較関数の追加/トークンの更新
>
> ■OpenGL バージョン2.0 で追加された以下の新しいコア機能:シェーダ記述言
> 語の追加/プログラマブルシェーダからの複数のカラーバッファへの異なる色の
> 出力/テクスチャマップに関する2 のべき乗のサイズ制限の緩和/テクスチャ
> マップされた点スプライトのレンダリング/前面と背面ポリゴンでのステンシル
> 処理の分離
>
> ■バグ修正

だそうです。
OpenGL1.5とOpenGL2.0についての追加と、訳の見直しが行われている模様。
俺もほしい
283デフォルトの名無しさん:2007/08/06(月) 23:10:14
第2版までは翻訳業者が訳してたから読みにくかったね
284デフォルトの名無しさん:2007/08/06(月) 23:29:29
>>279
・より赤くなった
・1,000円高くなった
285デフォルトの名無しさん:2007/08/07(火) 00:20:48
不覚にも笑ってしまった

しかしせめて8000円ぐらいに…
286デフォルトの名無しさん:2007/08/07(火) 02:27:06
>>284
1.5倍くらいは速くなってんのかな
287デフォルトの名無しさん:2007/08/07(火) 02:39:49
> 原著第5版
テクスチャへの描画とか、実際に使う際の普遍的なチップスとかって
載ってますのん?

そういうのは、Game Programming Gems買えって事かな?
(そろえたら、赤本よりたけええけどよぉおぉ)
288デフォルトの名無しさん:2007/08/07(火) 02:52:53
Gems にそんなの載ってたっけ
289デフォルトの名無しさん:2007/08/07(火) 03:18:43
>>287
テクスチャへのレンダリングにはGL_EXT_framebuffer_objectを使う。
この拡張機能はOpenGL 2.0の仕様に含まれていないから当然赤本には載ってない。
290デフォルトの名無しさん:2007/08/07(火) 22:16:01
ああ、使用に含まれてない=載ってないか・・・
そうだよなあ
291デフォルトの名無しさん:2007/08/07(火) 22:51:14
赤本は昔からextensionには触れないからね
292デフォルトの名無しさん:2007/08/13(月) 18:58:10
293デフォルトの名無しさん:2007/08/19(日) 23:15:27
よしはる別スレに今も登場中
294デフォルトの名無しさん:2007/08/19(日) 23:26:55
スレ違い、こっちでやれ↓

OpenGL 2.0 専用スレ
http://pc11.2ch.net/test/read.cgi/tech/1126268759
295デフォルトの名無しさん:2007/08/23(木) 18:42:39
296デフォルトの名無しさん:2007/08/23(木) 18:48:33
wwwwwwwwwwww
297デフォルトの名無しさん:2007/08/24(金) 05:32:42
ざまぁwww
298デフォルトの名無しさん:2007/08/24(金) 19:51:37
すみません。
OpenGLでなくGLSLでVertex texture fetchをしたいのですが、
テクスチャを取ってくるときの関数はフラグメントシェーダと同じように、
texture2Dやtexture2DRectを使うのでしょうか?
299デフォルトの名無しさん:2007/08/24(金) 21:08:31
>>298
確かそうだったと思う。
300デフォルトの名無しさん:2007/08/26(日) 01:18:20
GeForce8600GTにしてからたまに描画が異様に遅くなるんですが、似たような症状に遭って解決できた方いませんか?

VBOにデータ置いても直らず、シェーダやテクスチャはおろか、ライティングすらしてないモデルでも再現。
WindowsXPで、ドライバは最新(162.18)とベータ版(163.44)両方で発症。
GeForce6000系や7000系では問題は起きませんでした。
プログラムを何度も起動しなおしたら上手くいくこともあるのですが…。
301デフォルトの名無しさん:2007/08/26(日) 01:38:33
>>300
熱暴走してないか疑え
302デフォルトの名無しさん:2007/08/26(日) 21:53:14
盲点でした、が、マシン起動直後でも起きるので、単純に熱だけが原因ではなさそうです。
あとDirectXのゲームとかでは同様の問題は起きず。

# もう検証疲れた…。ドライバが腐ってるせいってことにしたいorz
303デフォルトの名無しさん:2007/08/26(日) 21:58:46
VBOに書き込む際のバッファオーバーランとか
304デフォルトの名無しさん:2007/08/26(日) 22:09:36
glInterleavedArray()/glVertexPointer()系 + VBO使用/未使用の組み合わせ、
glBegin()〜glEnd()、の5パターンで同じモデルを描いてみましたが、全てで発症しました。
モデルは立方体を1000個程描いてるだけです。
305デフォルトの名無しさん:2007/08/26(日) 22:12:00
とりあえずプログラムうp
306デフォルトの名無しさん:2007/08/26(日) 22:15:40
>>305
ちょっと公開したくない部分があるんで、
問題が起きる最小限のプログラム用意してみます。
307デフォルトの名無しさん:2007/08/26(日) 22:21:12
お、えらい。
大抵公開できない部分があるのでそこを何とかお願いしますとかが多いのに。
308デフォルトの名無しさん:2007/08/27(月) 01:40:12
http://a-draw.com/contents/uploader2/src/up0377.zip.html
DLKey: 0000

急拵えなんでバグってたらすみません。
グラフの単位はミリ秒で、上限20msです。
good.jpgは正常時、bad.jpgが異常に遅いときのスクリーンショットです。

これ作りながら検証したところ、どうも全体的な負荷が高い時程発症確率が上がってる感じがします。
立方体1000個にしてシェーダ使うと9割以上発症したり。
しかし500個シェーダ無しでも稀に遅くなったりで、根本的な対処法は依然分からず。
309デフォルトの名無しさん:2007/08/27(月) 02:23:56
>>308
解凍できないのは俺だけか?
310デフォルトの名無しさん:2007/08/27(月) 03:34:28
>>309
とりあえず解凍はできたぞ。
311デフォルトの名無しさん:2007/08/27(月) 11:02:23
>>309
安心しろ俺もだ
312デフォルトの名無しさん:2007/08/27(月) 11:40:18
unzip.dllが古いんじゃね
313デフォルトの名無しさん:2007/08/27(月) 12:07:05
WindowsXP標準の圧縮フォルダで展開できるZIP形式でお願いします。
314デフォルトの名無しさん:2007/08/27(月) 17:17:02
そのぐらいじぶんでやれよ
315デフォルトの名無しさん:2007/08/27(月) 19:33:23
>>308
解凍できません
316デフォルトの名無しさん:2007/08/27(月) 20:33:59
そのままで自動ダウソすると失敗するぽいお
リンク押してダウソしたら解凍できるんでないか
317デフォルトの名無しさん:2007/08/27(月) 20:47:07
unzip コマンドで普通に展開できたよ
318デフォルトの名無しさん:2007/08/29(水) 21:25:44
>>308
うちのgeforce8800gtxでもbad.jpgと同じぐらいのスピードになった。

GLexpertから何もメッセージがでてない(標準出力は起動時につくられるstdout.txtに出力されるんだよね?)
っぽいし、ソースコードをざっと読んだけど原因はよくわからなかった。

そういえば、geforce6000, 7000で毎framePBOにデータを送るようなプログラムを書いていたときに
数秒後に急に倍近くfpsが上がることがあった。

ドライバが消費電力を低くするために裏で負荷に合わせて使用するシェーダの数を調整したりしてるのか?
教えてエロ詳しい人
319デフォルトの名無しさん:2007/08/30(木) 21:39:21
上のに関連するが、Vista+GeForce8000だとむちゃくちゃ遅くならない?
うちだと>>308のbad.jpgより遅くなってる。

ttp://d.hatena.ne.jp/yaneurao/20061122
これとか見ると少なくとも7000だと問題ないみたいだが。
8000はまだOpenGLの実装が不完全と見た方がいいのかね。
320デフォルトの名無しさん:2007/08/31(金) 11:21:10
Vista
yaneurao
321デフォルトの名無しさん:2007/09/01(土) 13:24:30
>>308
ずっとこんな感じで推移。
http://gamdev.org/up/img/10058.jpg

たまにぐっと負荷がかかるようだが、見た目はスムーズ
たぶん常駐が多いせいだと思う

環境は、
CPU: Pen4 2.6GHz
メモリ: 1.5GMB
GPU: Sapphire RADEON X700

今時だと、さすがにプア環境でアレだが


しかし、きれいやねー参考にさせていただこう
322デフォルトの名無しさん:2007/09/01(土) 13:27:04
メンゴ書き忘れ
OS: Windows XP SP2 32bit
GPU DRIVER: ATI ver 8.342.0.0
323デフォルトの名無しさん:2007/09/05(水) 10:52:26
324デフォルトの名無しさん:2007/09/05(水) 11:09:26
OpenGL 3.0て具体的にはどんなんになるんだ。
325デフォルトの名無しさん:2007/09/05(水) 13:29:05
あれだろ
コンセプトだけ言って、具体的には何もできてないっての
326デフォルトの名無しさん:2007/09/05(水) 16:55:37
>>325
それは、もまえ、OpenGL自体を馬鹿にしているのかw
327デフォルトの名無しさん:2007/09/06(木) 00:03:47
むしろ、交差とか法線計算とかエッジ検出とか・・自動でやってくれるようにはならんかね。
楽したいんじゃ。ワシャ。
この前セレクション出来るようになったばっかなのに(^ω^;;)
328デフォルトの名無しさん:2007/09/06(木) 02:36:51
>>308
nVidiaのドライバの設定にあるtheaded optimizationがautoになってると遅くなったり速くなったりするようだ。
onにすると常に速く、offにすると遅くなるようだ。
このオプションはマルチコアCPUで複数スレッドを使って高速化するかどうかのオプションらしい。
fpsが60以上になるとだんだんとCPU側がボトルネックになってきてるんかな。

>>327
そういうのはwild magicとかなんとかライブラリを使えばいいんじゃない?
329308:2007/09/06(木) 08:33:45
>>328
うお、ありがとうございます。
ただ、うちだとoffにすると常に速くなるようになりました。
(FPS60超える/超えない関係なく)
なんかこれ不気味なオプションですね…。
330デフォルトの名無しさん:2007/09/23(日) 10:52:18
331デフォルトの名無しさん:2007/10/06(土) 23:02:51
glGenTextures()してgluBuild2DMipmaps()した画像のテクスチャが、
ウィンドウがリサイズされたときにSDL_setVideoMode()すると画像が無くなってしまうのですが、仕様ですか?
リサイズされたときビューポートをウィンドウと一致させたくて毎回SDL_setVideoMode()しているのですが、
glViewPort()を使ったほうがいいのでしょうか?
332デフォルトの名無しさん:2007/10/06(土) 23:26:38
カラーマップの使い方がいまいちわかりません
おしえてください
333デフォルトの名無しさん:2007/10/06(土) 23:40:53
>>331
ウインドウのサイズが変わるたびにglViewportするべき
だと俺は考える
334デフォルトの名無しさん:2007/10/07(日) 02:53:26
リサイズでビューポートとprojection matrix設定しなおしてるんだけど、
そうするとディスプレイリストが無効になることがあります。
リサイズのときにディスプレイリストを消して作り直すことにして回避したけど、
これはそういうものですか? それともどっかおかしい?
335デフォルトの名無しさん:2007/10/07(日) 03:19:00
>>334
俺の経験上、ウインドウのリサイズでディスプレイリストを作り直すってことは無いな…
glRasterPosとか使ってるのかな??
>>331ならglTexParameterのGL_TEXTURE_MIN_FILTERなり、GL_TEXTURE_MAG_FILTER
なり
と思ったりするけど、どうなんかなぁ〜
336デフォルトの名無しさん:2007/10/07(日) 05:05:44
ウィンドウ全体を FBO あるいは pBuffer でテクスチャに取り込んで、自前でダブルバッファリングをしようと考えています。
しかし、もしウィンドウのサイズが最大テクスチャサイズを超えてしまうとどうしようもありません。そういう場合どうすればいいのでしょうか?
337デフォルトの名無しさん:2007/10/08(月) 22:48:26
>>336
いくつかのテクスチャに分割するしか無いだろうな
338デフォルトの名無しさん:2007/10/08(月) 23:09:11
glTexImage2Dでは2^n乗のサイズしか指定できませんが、
gluBuild2DMipmapsではどんなサイズでも指定できることに関して、わからない点があります。

ミップマップは使う必要がない場合、例えば100*200の画像をglTexImage2Dでテクスチャ化しようとしたとします。
ここから128*256というサイズのテクスチャを作るところまではいいのですが、
そうした場合、100*200に対してはみ出ている部分も含めて、128*256のテクスチャがopenGLに渡されますよね。
そうすると、glTexCoord2fに指定する値は、(0〜100/128) * (0〜200/256) としなければ、
こっちが広げてやった余白(?)も表示されてしまいます。

しかし、gluBuild2DMipmapsで100*200を指定してやった場合は
glTexCoord2fに指定する値は、(0〜1) * (0〜1) でうまくいきます。

これはどういうことですか?glTexImage2Dを使ってテクスチャを作った後、
任意のサイズの元画像にたいして、glTexCoord2fに指定する値を(0〜1) * (0〜1) で操作できるようにする方法を教えてください。
339デフォルトの名無しさん:2007/10/08(月) 23:17:39
gluBuild2DMipmapsは任意のサイズの元画像を2^n乗のサイズに拡大縮小する

http://www.opengl.org/sdk/docs/man/xhtml/gluBuild2DMipmaps.xml
>Initially, the width and height of data are checked to see if they are a power of 2.
>If not, a copy of data (not data), is scaled up or down to the nearest power of 2.
340デフォルトの名無しさん:2007/10/09(火) 01:19:40
2.0以降ならgluBuild2DMipmaps使わんでも
非2^nのサイズ扱えるし、ミップマップも生成してくれる。(パラメータの設定次第
341デフォルトの名無しさん:2007/10/09(火) 12:35:09
>>331,334
Windows上のSDLだとsetVideoModeするとOpenGLのコンテキスト作り直される
設定やらディスプレイリストやらテクスチャは全部作り直す必要があるぞ
Windows以外ではどうなってるかわからん
342デフォルトの名無しさん:2007/10/09(火) 15:28:10
>>339
てことは内部で既に縦横比が変更されてるんですね。ありがとうございます。

>>340
>(パラメータの設定次第 
調べてみます。

>>341
ありがとうございます。やはりそうなんですね。ウィンドウリサイズにはglViewportだけ動かすようにしました。
343デフォルトの名無しさん:2007/10/11(木) 13:21:30
>>341
ゲッ!
もしかして、OpenGLで、DirectDraw使って全画面表示やってた時に、
環境によって、うまく動かなかった(画面真っ黒)のは、もしや、これのせいだったのか?

Geforceでは、うまく動いてたからなぞだったんだが・・・
344デフォルトの名無しさん:2007/10/15(月) 00:44:43
スキンメッシュについて学びたいんだけど、
いいサンプルとかない?
345デフォルトの名無しさん:2007/10/16(火) 23:54:45
OpenGLを使って作った画像の情報が欲しいんですが
キャプチャ以外で画像の情報(RGBなど)はとってこれるんでしょうか
346デフォルトの名無しさん:2007/10/16(火) 23:59:45
glReadPixels
347デフォルトの名無しさん:2007/10/17(水) 02:42:05
>>346
ありがとうございます。調べてみました。
いろんなサイトのサンプルを見てみたのですが
具体的にどのようにプログラムすればいいのかどうしてもわかりません・・
(出てきた画面をキャプチャしたいんですが、どうすればいいんでしょうか)
348デフォルトの名無しさん:2007/10/17(水) 16:20:56
>>347
少なくとも

unsigned char pBuffer = new unsigned char[WIDTH*HEIGHT*4]; // sizeof(RGBA)==4?
glReadPixels(0,0
WIDTH,HEIGHT
GL_RGBA,
GL_UNSIGNED_BYTE,
(GLvoid *)pBUffer);

この位は実験してみようや。
349デフォルトの名無しさん:2007/10/18(木) 00:50:11
オフスクリーンの DIB にOpenGLで描画してビットマップ参照しれ
350デフォルトの名無しさん:2007/10/18(木) 16:46:28
>>348
ありがとうございます、解決できました
351デフォルトの名無しさん:2007/10/20(土) 17:39:49
GPUレイトレっぽいことをやりたくて、バウンディングボックスの各面からレイを放って
各面に3次元テクスチャを並行投影したくて下記のようにしてるのですがどうも表示がおかしいのです。

確認したいのですが、これはちゃんと各頂点に、テクスチャ座標の0と1が対応されてマッピングされていますよね?

void vertex(float x, float y, float z)
{
glActiveTexture(GL_TEXTURE0);
glMultiTexCoord3fARB(GL_TEXTURE0_ARB, x, y, z);
glVertex3f(x,y,z);
}
void drawQuads(float x, float y, float z)
glBegin(GL_QUADS);
/* Back side */
glNormal3f(0.0, 0.0, -1.0);vertex(0.0, 0.0, 0.0);vertex(0.0, y, 0.0);vertex(x, y, 0.0);vertex(x, 0.0, 0.0);
/* Front side */
glNormal3f(0.0, 0.0, 1.0);vertex(0.0, 0.0, z);vertex(x, 0.0, z);vertex(x, y, z);vertex(0.0, y, z);
/* Top side */
glNormal3f(0.0, 1.0, 0.0);vertex(0.0, y, 0.0);vertex(0.0, y, z);vertex(x, y, z);vertex(x, y, 0.0);
/* Bottom side */
glNormal3f(0.0, -1.0, 0.0);vertex(0.0, 0.0, 0.0);vertex(x, 0.0, 0.0);vertex(x, 0.0, z);vertex(0.0, 0.0, z);
/* Left side */
glNormal3f(-1.0, 0.0, 0.0);vertex(0.0, 0.0, 0.0);vertex(0.0, 0.0, z);vertex(0.0, y, z);vertex(0.0, y, 0.0);
/* Right side */
glNormal3f(1.0, 0.0, 0.0);vertex(x, 0.0, 0.0);vertex(x, y, 0.0);vertex(x, y, z);vertex(x, 0.0, z);
glEnd();
}
drawQuads(1.0,1.0,1.0)
352デフォルトの名無しさん:2007/10/20(土) 17:44:18
要はこういうことをやりたくて
ttp://home.student.uu.se/cebl4603/thesis_html_m74d5f1f4.jpg

image planeのところをどうやったらいいのか四苦八苦しています
353デフォルトの名無しさん:2007/10/20(土) 17:52:30
3次元テクスチャを並行投影ってどういう状態?

そのコードだと、サイコロの各表面に2次元テクスチャを貼り付けてるのと大差ない気がするが。
3次元テクスチャの各表面を貼り付けてるだけで、内部は描画されていないが、そのへんは理解してるか?
354デフォルトの名無しさん:2007/10/20(土) 18:13:17
その辺は理解しています。

サイコロの各面から、内部に向かってレイを放ってテクスチャのピクセル色を決定して(フラグメントシェーダ)
それを貼り付ける、といったことをしようとしてこうなっています。

ttp://www.uploda.org/uporg1073971.jpg

これは0〜64までの3次元テクスチャに
4〜60まで、テクスチャ在りにしたものを、45度程度傾けたものなのですが
テクスチャがある部分を内側になればなるほど、緑〜赤のグラデにしたものです。

6面全体に一部分だけが表示されてしまって、立方体の形状が出てこなくて…
355デフォルトの名無しさん:2007/10/20(土) 22:57:00
>>351
各頂点にテクスチャ座標の0と1は渡ってるよ。
ActiveTextureは余計な気がするけどまぁいいか。
356デフォルトの名無しさん:2007/10/20(土) 23:05:47
>>355
ありがとうございます。
とりあえず3次元テクスチャが格納されている側面が写し取られている、と確信がもてて安心しました。

ということはフラグメントプログラムの方なのかな…
fragmentの方でfor文を使うと
error C6001: Temporary register limit of 32 exceeded; 201 registers needed to compile program

こんなエラーが出てきて、本来走査するべきところまでいけなくて64回繰り返すところを
4回くらいしか深度を進めなくなっています
ただ、CgじゃなくてGL_TEXTURE_3Dでも同じような表示がされてわけがわからんくなってます。

Cgで同じようなエラーが出たことがある方がいたら…
357デフォルトの名無しさん:2007/10/20(土) 23:30:55
よく知らないんだけどさ、文法上はforとか記述できるとしても、
実際はループ回数やテクスチャフェッチ回数には上限があるんじゃないの?
最新のグラフィックスカードを使えば、実行結果が変わったりとかー。
358デフォルトの名無しさん:2007/10/20(土) 23:33:57
吐き出されているエラーが明らかにハードウェア側のことなのでそうだと思うのですが
このエラーに関する記述がWEB上に4つほどしかなくて…
ttp://developer.nvidia.com/object/nvemulate.html
このエミュレーターでどうにかなるんじゃないか?と英語であったのですがそれを起動しても変わらず

nvidiaのカード買うしかないのか…お金ないや
359デフォルトの名無しさん:2007/10/21(日) 01:58:33
358ですが、シェーダを弄くって
テクスチャの投影部分ではなく、シェーダーで反復回数が足りないせいだと判明しました。

原因はAtiだからだと思います。for文をまわすたびにレジスタが使用されているのか、、、
360デフォルトの名無しさん:2007/10/27(土) 04:03:52
どのprofileのフラグメントシェーダを使うかにもよるがfor文はループ展開されてたりするよ。

何をしようとしているのかよくわかってないけど、GPUレイトレで3次元テクスチャをボリュームレンダリングするなら、
何故画面の各ピクセルからレイを飛ばさないの?
361デフォルトの名無しさん:2007/10/27(土) 04:59:27
ATIのカードだとCgでは事実上arbvp/arbfp以外の選択肢がないから
動的なループ、分岐やら新しい技術が使用できないのがきつい、というか終わってるね

最近触ってないけどGLSLだとその辺どんな感じなの?
362デフォルトの名無しさん:2007/10/27(土) 17:15:42
>>360
画面からするとバウンディングボックスとの交差判定が必要で
ものすごい遅くなっていたのです。

実際にarbvp1 arbfp1が選択されていました。

ATIしかない環境でCgを選択したのがマズイのですね…
nVidiaを購入するのに…10万か…お金が。。。ない
363デフォルトの名無しさん:2007/10/27(土) 17:47:04
ATIでもX1000系以降ならGLSL使えるよ
CgでもプロファイルのglslvとglslfでGLSLにコンパイルして使える
…が、使ったことはないしLatestProfileでも出てこないのであんまりお勧めはできないかも
つかGeForceで10万って何買うつもりだよwwww
364デフォルトの名無しさん:2007/10/27(土) 17:50:30
ぁ、ぃぇ
PCそのものを買わないといけなくて、結局10万くらい掛かるっていうことです。

glslv glslfについてちょっと調べてみます
365デフォルトの名無しさん:2007/10/27(土) 18:18:35
glslプロファイルは去年触ったけどnvidiaでは問題なく動くけど
ATIのドライバではコンパイルできないソース吐くから使うのあきらめたな

あれからだいぶ時間たってるからその辺直ってるといいね
366デフォルトの名無しさん:2007/10/27(土) 19:19:53
OpenGL3の続報がなかなか来ないな
367デフォルトの名無しさん:2007/10/28(日) 01:24:13
すいません質問させてください
openglのプログラムのビルドで、error C2381: exit' : 再定義〜とエラーが出てしまいます
何かstdlibとglutが関係ありそうなのですが、よくわかりません
解決策がありましたら教えてほしいのですが
368デフォルトの名無しさん:2007/10/28(日) 06:32:34
>>367
includeの順番入れ替えてみ
369デフォルトの名無しさん:2007/10/28(日) 06:54:27
いまさら気づいたんだけどGL関数群の日本語訳manあったんだねぇ・・・orz
http://man.sourcentral.org/debian-unstable/ja/
370デフォルトの名無しさん:2007/10/28(日) 12:42:06
367です
#include<stdio.h>
#include<cstdlib>
#include<GL/glut.h>
にしたら、解決しました

理由はわかりませんが・・・ありがとうございました
371デフォルトの名無しさん:2007/10/30(火) 16:12:14
学校の課題でOPENGL使ってなんか作らないとダメなんだけどいい感じのサンプルない?
インベーダーとかハノイとかルービックとか。。。
誰かおせーて
372デフォルトの名無しさん:2007/10/30(火) 16:53:14
なんだ、まぁ頑張れ。 とにかく頑張れ。
373デフォルトの名無しさん:2007/10/30(火) 17:28:53
>>371
OpenGLはあくまで動かすための道具なんだから基本は自分でできなきゃ
というか、たぶん基礎を調べるための課題だろ
がんばれ
374デフォルトの名無しさん:2007/10/30(火) 17:44:37
GLSLとCgどっちを使うべき?DirectXは使わない.
なるべくハード依存したくないならGLSL?
375デフォルトの名無しさん:2007/10/30(火) 18:22:17
>>371
超初心者スレに同じ質問があるからそっちみれ

>>374
GLSLはWindowsではIntelGPUで使えない。Macなら使えるがLinuxとかは知らん
あとRadeonとかでもドライバが古いと酷いことになる
CgはGL_ARB_vertex_programとかGL_ARB_fragment_programのアセンブリシェーダにコンパイルできるので
SM2.0に対応してればIntelでもRadeonでもつかえる。もちろんGeForceなら最新機能も使える
ただし配布するには別途ランタイムも配布する必要があるし、プロファイルによっては機能制限もある
あと書き方の違いもあるんで好みでどうぞ。
俺はCgの方が好きだがGLSLのランタイム不要な点も捨てがたいな
376デフォルトの名無しさん:2007/10/30(火) 19:17:12
なんでCgを標準にしなかったんだろうな
GLSLをプッシュしておきながら結局撤退した3DLabs死ねよ
377デフォルトの名無しさん:2007/10/30(火) 19:17:53
俺はインテル製はsm2.0に対応しててもfboやarb_fragment_shadow、
アンチエイリアシング、その他諸々が使えないから最初から無視してるな
378デフォルトの名無しさん:2007/10/30(火) 19:22:22
>>375
なるほどCgの方がハードには柔軟ですね
379デフォルトの名無しさん:2007/10/30(火) 23:59:22
RGBで取り込んだ画像データを表示したいのですが
何か関数は用意されてるんでしょうか?
380デフォルトの名無しさん:2007/10/31(水) 01:28:04
glDrawPixels
381デフォルトの名無しさん:2007/11/01(木) 01:17:23
ネットにあるOpenGLのサンプル書いて遊んでいたんですけど,普通に実行できます.
でも3Dデスクトップ効果の Compiz を起動させて実行すると,描画ができません.
窓枠がでなかったり色とかも変だし.
これって一緒には使えないものなんでしょうか?
使えるとすれば何かおまじないのようなものを書かないといけないとかあるんでしょうか?
教えてください.
382デフォルトの名無しさん:2007/11/01(木) 02:00:05
グラボのドライバが最新でも駄目ならVISTAを窓から(ry
383デフォルトの名無しさん:2007/11/01(木) 02:12:53
compizはvistaじゃないから・・・
compiz起動しながらOpenGLのアプリ動かしても
俺の環境では問題ないなー
どのサンプル?
384デフォルトの名無しさん:2007/11/01(木) 09:40:01
板違い
犬糞板池
385デフォルトの名無しさん:2007/11/01(木) 22:08:00
別にここでもいいだろ
386デフォルトの名無しさん:2007/11/02(金) 17:04:12
opengl 3d絵画の初心者用サンプルプログラムが多く置いてあるサイトありませんか?
解説もついているとありがたいです
387デフォルトの名無しさん:2007/11/02(金) 18:46:27
(#^ω^)
388デフォルトの名無しさん:2007/11/02(金) 20:30:16
絵画とはまた斬新な
389デフォルトの名無しさん:2007/11/03(土) 11:33:46
OpenGLで、絵画を書くのって難しいんじゃないの?

そういうシェーダーを書かないといけないような。
水彩シェーダーは、前に見かけた気がするが、
油絵ってみたことないな・・・
390デフォルトの名無しさん:2007/11/03(土) 11:36:45
>>376
3DLabsをせめないで。
すべてにおいて糞なクリエイティブを呪ってください。
391デフォルトの名無しさん:2007/11/03(土) 13:55:14
クリエイティブが3DLabsを駄目にした.
そしてWildeCatは死んだ,あのボードも波乱だよなIntergraphが死んだりして
392デフォルトの名無しさん:2007/11/04(日) 04:53:55
glDisplayFuncで指定した関数で
6000点ほどの頂点を取ってるのですが
起動して描画まではしてくれるのですが動作がとまってしまいます。
何か解決方法はないものでしょうか
393デフォルトの名無しさん:2007/11/04(日) 11:04:59
boxとかじゃなくpointで描画すれば60万点くらいは描けるよ

そういうのじゃないか
394デフォルトの名無しさん:2007/11/05(月) 00:23:50
>>392
>glDisplayFuncで指定した関数で
glDisplayFuncって何。glutDisplayFuncのこと?

>6000点ほどの頂点を取ってるのですが
頂点を取る、って何。意味不明。

>起動して描画まではしてくれるのですが動作がとまってしまいます。
動作が止まる、って何。意味不明瞭。
単に再描画がされないってだけなら、glutPostRedisplay()でも呼んでみれば。

>何か解決方法はないものでしょうか
ある。

  「正しい用語を正しい用法で使うこと」 これを必ず守れば良い。

なんでこれが解決方法なのか?の説明は面倒なので省く。
しかし、これを常に守る事を心掛けていれば、技術的な問題のうち半分以上は
君自身で答えを見つけられるはずだ。これはマジな話。
395デフォルトの名無しさん:2007/11/05(月) 00:48:53
Kusakabe(void)論法みたいだが
>>394の言うことは確か。

3D絵画とかじゃ当たらないし、状況を文字よりもキャプったりソース上げた方が確実。
396デフォルトの名無しさん:2007/11/05(月) 04:25:07
void氏は相手のバカの壁より常に一歩外側でしか喋らないからな。
横で見てる分には楽しめるんだが。
397デフォルトの名無しさん:2007/11/05(月) 21:14:48
ということにしたいのですね。
398デフォルトの名無しさん:2007/11/05(月) 21:42:43
そんな感じw
399初心者:2007/11/05(月) 23:33:29
はじめまして。プログラミングのことについて初心者です。
次のことについてどなたか教えていただけないでしょうか。

OpenGL+glutでシミュレーション結果を表示しようとしています。
VC++で作成し、コンパイルエラーはなかったのですが、実行してみると
何も起こらずに"終了にはキーを押してください"というような画面のみでした。
しかるべき場所にそれぞれのライブラリなど置いたつもりですが...
どのような原因が考えられるでしょうか。
400デフォルトの名無しさん:2007/11/05(月) 23:41:43
ソース
401初心者:2007/11/05(月) 23:49:25
すみません、わかりません。
402デフォルトの名無しさん:2007/11/05(月) 23:52:46
その作成したプログラムのソースファイルを見せろという意味だ
403デフォルトの名無しさん:2007/11/06(火) 00:07:18
デバックしても原因分かんないの?
404デフォルトの名無しさん:2007/11/06(火) 00:34:13
GLUTのメインループに入らないで、プログラム終了しちゃってるんじゃないの?
VisualStudioならデバッガが使いやすいし、最低限printfデバッグくらいはするべきだ。
405デフォルトの名無しさん:2007/11/07(水) 01:29:21
>400-402
ふいたw
406デフォルトの名無しさん:2007/11/12(月) 07:43:46
texture座標の自動生成を使うと
その前に使ったglColorの値がtextureの色と混じってしまうんだけど
glColorの値の影響を受けないようにするにはどうしたらいいですか
407デフォルトの名無しさん:2007/11/12(月) 08:42:15
glColor を白色にしとけばいい
408デフォルトの名無しさん:2007/11/12(月) 09:58:58
テクスチャ座標の自動生成とは関係なくて、
単にテクスチャ色とglColorの色が乗算(GL_MODULATE)されてるだけですねん。
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
を実行してやると、テクスチャの色だけが描画されるようになるよ。
409デフォルトの名無しさん:2007/11/12(月) 18:01:14
ありがとー
できました
410デフォルトの名無しさん:2007/11/12(月) 19:31:27
FreeBSD6.2R, Mesa 7.0.1をつかっているのですが
プログラム自体は動くのものの、実行時に

libGL warning: 3D driver claims to not support visual 0x4c

とでるのが気になります
どうすればいいんですかね?
411デフォルトの名無しさん:2007/11/12(月) 20:22:06
該当のglvisualをサポートしてないってだけだからwarningってだけ。
本気でやるならデバイスドライバをハックしてみよう。
もっともgpu側がサポートしてなかったらどうしようもないけどさ。
412デフォルトの名無しさん:2007/11/13(火) 22:18:58
413デフォルトの名無しさん:2007/11/13(火) 22:52:54
ほとんど自力というのがまたカーマックらしいな
414デフォルトの名無しさん:2007/11/17(土) 01:05:22
OpenGLの日本語リファレンスマニュアルってどっかでダウンロードできませんか?
本買わないとだめ?
415デフォルトの名無しさん:2007/11/17(土) 01:14:39
駄目
416デフォルトの名無しさん:2007/11/17(土) 01:26:24
やっぱりだめですか。
講座サイト漁ろう。
417デフォルトの名無しさん:2007/11/17(土) 12:20:43
赤本の英語版なら読めたんじゃなかった?公式で

最新かどうかわからんけど
418デフォルトの名無しさん:2007/11/18(日) 00:30:04
たしか読めるのは古い
419デフォルトの名無しさん:2007/11/20(火) 02:49:52
古いのでよければこちらへ。
ttp://www.opengl.org/documentation/red_book/ (v1.1)
ttp://www.opengl.org/documentation/blue_book/ (v1.0)
以前はここで pdf が落とせたような気がするが、今は html 化されてる模様。
420デフォルトの名無しさん:2007/11/20(火) 03:52:33
赤本はともかく、古い青本読むくらいなら最新の仕様書を読んだ本がいいね
421デフォルトの名無しさん:2007/11/20(火) 21:50:04
視点移動したらオブジェクトの一部が画面に現れないことがあるのですが
どうすれば解決できますか?
422デフォルトの名無しさん:2007/11/20(火) 22:33:54
>>421
オブジェクトが入るような視点にする
423デフォルトの名無しさん:2007/11/20(火) 23:02:42
znear,zfar
424デフォルトの名無しさん:2007/11/22(木) 12:07:50
objデータがバカでかいので
視界に入ってる領域だけ読み込んで表示できるようにしたいです


どうすればいいですか><
425デフォルトの名無しさん:2007/11/22(木) 12:27:02
データのフォーマットによるが、視界に入ってない領域を読み飛ばせばいいのでは
426デフォルトの名無しさん:2007/11/22(木) 13:02:58
視界に入ってるかどうかの領域はどうやって決めたらいいんですか><
427デフォルトの名無しさん:2007/11/22(木) 13:13:22
頂点単位ならLookAtとかPerspectiveに渡してるパラメータから視錐台を求めてそこに頂点が入ってるかどうか判別
ポリゴン単位なら視錐台とポリゴンの交差判定
フラグメント単位ならオクルージョンクエリーでも使ったら?
428デフォルトの名無しさん:2007/11/22(木) 13:41:33
ありがとうございます><

>>パラメータから視錐台を求めてそこに頂点が入ってるかどうか判別
>>ポリゴン単位なら視錐台とポリゴンの交差判定
これやるためには、バカでかいデータをメモリに載せないといけない気がするのですが載りません><

視錐台に入る座標をまとめてデータにして、それをファイルポインタで読み込むときに

1頂点読み込み→視錐台内の座標か判定→視錐台内ならメモリに格納
そんな流れになるのでしょうか><

オクルージョンクエリーという言葉初めて聴きました!見てみたら難しそうでした!
429デフォルトの名無しさん:2007/11/22(木) 16:39:36
オクルージョンクエリーは冗談だ。その用途では役に立たんと思うので忘れてくれ

やり方としてはそれでいいが、実際には1頂点ずつやってたら大変だわな
モデルデータを前もって適当に一度にメモリに載せられる範囲に区切っておいて
その範囲と視錐台が重なってるかどうか判定して重なってれば読み込む、
という感じである程度の頂点数を一気に処理した方が速いだろうな
430デフォルトの名無しさん:2007/11/22(木) 16:44:46
モデルデータのバウンディングボックスをあらかじめ計算しておく
431デフォルトの名無しさん:2007/11/22(木) 21:08:48
平面の方程式 Ax+By+Cz+D=0 の係数をパラメータにとって
平面を表示させるプログラムを作っています

今はyz平面上に立方体を平べったく伸ばして平面をつくって
そのあと原点回りに回転移動させてから平行移動をさせる方法で平面を表現しようと考えて
↓のような感じで組んでいます
-----
  dcos_x = A/sqrt(A*A+B*B+C*C);
  dcos_y = B/sqrt(A*A+B*B+C*C);
  dcos_z = C/sqrt(A*A+B*B+C*C);

  glPushMatrix();
  glColor4d(0.5, 0.5, 0.5, 0.8);
  glTranslated(trans_x,trans_y,trans_z);
  glRotated(dcos_x, 1.0, 0.0, 0.0);  // x軸に対する回転移動
  glRotated(dcos_y, 0.0, 1.0, 0.0);  // y軸に対する回転移動
  glRotated(dcos_z, 0.0, 0.0, 1.0);  // z軸に対する回転移動
 
  glScaled(1.0, height, depth);
  glutSolidCube(1.0);
  glPopMatrix();
-----
平行移動量trans_x,trans_y,trans_zはどう与えればよいのかがわからないので
trans_x,trans_y,trans_zは今のところ0.0で実質回転移動のみを行う形になっています

dcos_x,dcos_y,dcos_zの計算式はこれでいいのかどうか、
trans_x,trans_y,trans_zの与え方はどのようにすればいいのか
どなたか教えていただけませんでしょうか?

まあ・・・根本から間違っていたり、もっといい方法があるんでしょうけど・・・
432デフォルトの名無しさん:2007/11/22(木) 21:30:14
trans_x、trans_y、trans_zにはその平面上のどこか1点を与えてやればいいんでないの?
回転はよくわかんね

というか平面を描くなら立方体を変形させるより
平面上の4点とかを適当に求めてポリゴンで描いた方が楽だと思う
433デフォルトの名無しさん:2007/11/22(木) 21:47:52
>>432
平行移動はそれでいいね。
平面に平行な移動は無意味だから (trans_x, trans_y, trans_z) には2次元の自由度(任意性)がある。

回転については、三角関数を経由して回りくどいことしなくても、
元のyz平面の法線(=x軸)を (A, B, C) に移すような正規直交3x3行列を作ればいい。
つまり、(A, B, C) に直交する2つのベクトルを適当に選んでやればいいだけ。
こっちは法線まわりの回転について1次元の自由度ある。
434デフォルトの名無しさん:2007/11/28(水) 00:22:43
現在3Dゲームを製作中なのですが、学校から持ち帰ったものを家で動かそうとすると

1>fatal error C1900: 'P1' Version '20060201' と 'P2' Version '20050411' が一致しません。
1>LINK : fatal error LNK1257: コードの生成に失敗しました。

というエラーがでてきます。

思い当たる節としては
・「GLee」を入れてみた

これぐらいです。どなたか解決策をお願いします。
435デフォルトの名無しさん:2007/11/28(水) 01:30:12
「動かそうと」具体的に何をどうしたのか
「GLeeを入れる」とは具体的にどのファイルをどこに置いたのか
436デフォルトの名無しさん:2007/11/28(水) 02:02:36
>>434
学校と家のコンパイラのバージョンが違うんでないか
全プロジェクトをリビルドしてみ
437デフォルトの名無しさん:2007/11/28(水) 07:36:28
>>435
「GLeeを入れる」というのは
GLee.cをスタティックライブラリにして追加し
glBindBufferARBなどの関数を使っていることをいいたかったんです。

>>436
リビルドしてみましたが、同じエラーでとまってしまいました。
438デフォルトの名無しさん:2007/11/28(水) 11:35:57
>>434
ググったがVC++の環境がおかしくなってるみたいだな
解決策としてはVC++2005のSP1を入れてみる
ダメならVC++を再インスコ
それでもダメならOSから再インスコするくらいかな
439デフォルトの名無しさん:2007/11/28(水) 21:23:26
>>438
VC++2005のSP1を入れたらなおりました!!!!

課題の締め切りが明日までだったので、本当にうれしいです!!!
今日はこのうれしさをばねに、徹夜でやろうとおもいます。
440デフォルトの名無しさん:2007/11/29(木) 00:44:32
嬉しさをバネにって初めて聞いたww
441デフォルトの名無しさん:2007/11/29(木) 01:54:54
"嬉しさをバネに" の検索結果 約 1,480 件中 1 - 10 件目 (0.39 秒)
http://www.google.co.jp/search?hl=ja&q=%22%E5%AC%89%E3%81%97%E3%81%95%E3%82%92%E3%83%90%E3%83%8D%E3%81%AB%22&btnG=%E6%A4%9C%E7%B4%A2&lr=

結構出てきて吹いたw
さすがゆとり。
言葉の意味なんて考えたことないんだろうな。
442デフォルトの名無しさん:2007/11/29(木) 02:13:48
嬉しさのときは何て言えばいいの?
嬉しさを追い風にして?
443デフォルトの名無しさん:2007/11/29(木) 02:25:04
こういうの突っ込む奴は言い回しに気を取られて言葉の意味なんて考えたことないんだろうな
444デフォルトの名無しさん:2007/11/29(木) 07:39:58
喜びは 糧に でいーんでねーの。
445デフォルトの名無しさん:2007/11/29(木) 08:44:14
糧にするのも大概はネガティブなものだと思うが。
〜をバネには単なる反発、糧には消化して教訓とするって感じじゃないか。
446デフォルトの名無しさん:2007/11/29(木) 12:31:40
名誉返上、汚名挽回を思い出した。
447デフォルトの名無しさん:2007/11/29(木) 14:08:41
嬉しさを肥やしにして
448デフォルトの名無しさん:2007/11/29(木) 20:52:43
喜びなら「さめないうちに」とつなぐのがいいのでないの?
449デフォルトの名無しさん:2007/11/29(木) 21:00:13
確信犯
450デフォルトの名無しさん:2007/11/30(金) 04:09:52
>>449
さすがにその誤用をつっこむやつは最近なかなかいないが。
451デフォルトの名無しさん:2007/11/30(金) 10:05:47
役不足
452デフォルトの名無しさん:2007/11/30(金) 22:52:52
役不足だと言っているッ!
453デフォルトの名無しさん:2007/11/30(金) 23:18:12
流れ断ち切って悪いけど質問。

モデルビューの行列から視点、注視点、アップベクトルを求めたいんだけどいい方法無い?
gluLookAtの逆バージョンみたいなの

もう1つ質問で
頂点にウェイトをつけたいんだけど、OpenGLだとどうやってやるんだ?
454デフォルトの名無しさん:2007/12/01(土) 00:26:46
>>453
モデルビュー行列の左上3×3の各行が
それぞれ右方向ベクトル、上方向ベクトル、逆視線ベクトル。
モデルビュー行列の逆行列の4列目が視点。

のような気がする。
455デフォルトの名無しさん:2007/12/01(土) 01:52:18
>>453
>頂点にウェイトをつけたいんだけど、OpenGLだとどうやってやるんだ?
 
いまどきならシェーダを書く
456デフォルトの名無しさん:2007/12/01(土) 10:37:09
>>454
どうせ逆行列求めるなら、1〜4列目がそれぞれ
 右、上、逆視線、視点
でいいと思ったw

あと頂点ウェイトは
 glVertexWeightfEXT
かな。
457デフォルトの名無しさん:2007/12/01(土) 11:58:24
ARB_vertex_blend拡張はATIにしかなく
EXT_vertex_weighting拡張はNVIDIAにしかない
頂点ブレンドは汎用的な方法があんまりないから
シェーダでやるのが一番無難だろうな
458デフォルトの名無しさん:2007/12/01(土) 13:32:05
>>457
NVIDIAもARB_vertex_blend対応してるぞ。
459デフォルトの名無しさん:2007/12/01(土) 14:20:37
>>458
まじか
うちのGeForce8600GTでは無いみたいなんだけど…
もしかしてExtensionStringに出てこないけど使えんの?
460デフォルトの名無しさん:2007/12/01(土) 17:03:05
>>459
ソースはOpenGL Extensions ViewerのDatabase。
ちなみに8600は項目がなくてわからん。

8600Mならあるんだがなぁ
461デフォルトの名無しさん:2007/12/01(土) 17:12:26
あ、原因わかったかも。
OSのフィルタでWindowsに絞ったらNVIDIA全滅した。
MAC使えって話っぽい。
462453:2007/12/01(土) 21:56:23
>>454-461
サンクス

う〜ん、モデルビュー行列から完全に元には戻せないのかな
注視点を求めたいんだけど、さっぱりわからない

ウェイトの件はシェーダを使うのが無難みたいですね
463デフォルトの名無しさん:2007/12/01(土) 22:07:25
注視点は求まらんよ
見てる方向は求まるけど、その方向ですぐ目の前から無限遠までのどの点を見てるのかは失われる
奥行きをz=1とか適当に決めちゃって、そこを注視点ということにするくらいか
464453:2007/12/02(日) 01:39:56
やっぱり無理なのか
残念だけど諦めよう
465デフォルトの名無しさん:2007/12/02(日) 13:03:51
2Dテクスチャを2^nに限定しない関数ってありましたよね。
それの1Dテクスチャ・3Dテクスチャのものってありますか?
466デフォルトの名無しさん:2007/12/02(日) 18:16:40
GL_TEXTURE_RECT_ARBなんかのことか?
それなら2D版しかない
GL_ARB_non_power_of_two拡張があれば
特に何も考えずに1Dでも2Dでも3Dでも2の乗数じゃないサイズが使えるよ
467デフォルトの名無しさん:2007/12/02(日) 18:51:47
おお、知らない言葉が出てきた
ググります!
468デフォルトの名無しさん:2007/12/02(日) 22:55:54
GL_ARB_non_power_of_twoって環境によってはクソ遅いんじゃなかったっけ。
標準にはなってるけど当然古いカードだと使えないし。なんだかなーという感じだ。
469デフォルトの名無しさん:2007/12/02(日) 23:07:26
Radeon系だとクソ遅いらしいね。。
あとRadeonのドライバはOpenGLのバージョン2以降返しときながらGL_ARB_non_power_of_two対応してないこともあったり。
470デフォルトの名無しさん:2007/12/03(月) 01:19:37
nvidiaだと快適サクサク
8600GT。

つーかシェーダ組んだときのRadeonのクソっぷりにビックリした
俺、今度からNvidia住人になるよ
471デフォルトの名無しさん:2007/12/07(金) 16:30:01
ポリゴンを1000枚作って表示させたときと
ポリゴンを1枚作って表示させたとき

OPENGLではメモリの量違いますか?
472デフォルトの名無しさん:2007/12/07(金) 18:28:27
違う
473デフォルトの名無しさん:2007/12/07(金) 20:46:42
了解です!
474デフォルトの名無しさん:2007/12/07(金) 21:57:58
違わない処理系ってどれよ?
475デフォルトの名無しさん:2007/12/07(金) 22:28:03
描画領域のメモリは変わらんとか?
476デフォルトの名無しさん:2007/12/12(水) 10:39:47
すみません。教えてください。
cpadでopenGLを起動できないのですが、どうしたらいいですか?
実行ファイルが作れません。というエラーがでます。
477デフォルトの名無しさん:2007/12/12(水) 11:29:59
まず落ち着こう
次にCPadでOpenGLを使わないプログラムが実行できるか確認するんだ
それができたら「実行ファイルが作れません」の前にもエラーが出てるはずなのでそれを確認しよう
前に出てるエラーの原因が分からない、となってから質問しても遅くないと思うぞ
478デフォルトの名無しさん:2007/12/12(水) 15:03:05
お前らまだOpenGLなんか使ってんのかw
479デフォルトの名無しさん:2007/12/12(水) 15:25:36
個人的にはカーマックにその手の質問したら何て答えるのか非常に興味あるなw

そういえばPS3でGLやCgが採用されるってのは結局どうなったんだろ
480デフォルトの名無しさん:2007/12/12(水) 20:00:50
PS3ではOpenGLもCgも実装されてる
でもOpenGLはパフォーマンスが出ないからGPUのコマンド直に叩くのがほとんどと聞いた

最近はほとんどシェーダだしDirect3D10もGPU仮想化されてOpenGLとたいして違いがないし
どっちでもいいわな
481デフォルトの名無しさん:2007/12/12(水) 20:17:02
>>478
うん。組み込みとかそれしか選択肢がないの多いし…
482デフォルトの名無しさん:2007/12/12(水) 20:52:14
ゲーム機があります
PS3 Wii XBOX

Microsoftゲイツ様仕様のDirectXをPS3やWiiが使えると思ってるのかな。
選択肢としてOpenGL+GPU言語(Cg・GLSL)くらいしか無いでしょうに。
483デフォルトの名無しさん:2007/12/12(水) 21:27:02
誰に対して何の話をしてるのかわからない
484デフォルトの名無しさん:2007/12/12(水) 21:54:01
わからないお前の神経がわからない
485デフォルトの名無しさん:2007/12/12(水) 23:46:45
変な勘違いをして誰に対してるのか分からない見当外れな話をする誰かさんの神経が一番わからない
486デフォルトの名無しさん:2007/12/13(木) 01:15:25
gllogicopの使い方がわかりません!
ttp://www.arch.oita-u.ac.jp/povjp/povjp/ref7.8/prz8209.jpg
二つの物体あわせてこういうのが作れるってことですか!
作れたら、作り方教えて下しア!!!
487デフォルトの名無しさん:2007/12/13(木) 02:26:22
>>486
>二つの物体あわせてこういうのが作れるってことですか!
違う・・・
ググれ!
488デフォルトの名無しさん:2007/12/13(木) 11:17:11
どう違うのか教えてください(;;
489デフォルトの名無しさん:2007/12/13(木) 18:47:38
ぎろっぎこっプー
490デフォルトの名無しさん:2007/12/13(木) 18:51:28
powerpc版のLinux(Debian GNU/linux 4.0)で
OpenGLを実行したらこんな警告がでてくるんですが
どう解決すればよいのでしょうか?

*********************************WARN_ONCE*********************************
File r300_render.c function r300Fallback line 428
Software fallback:ctx->Line.SmoothFlag
***************************************************************************
491デフォルトの名無しさん:2007/12/13(木) 20:42:26
>>400
HWで対応してないからソフトウェアで処理すんぞってことでしょ
ビデオカードを換えるかglDisable(GL_LINE_SMOOTH)してみたらどうか
492デフォルトの名無しさん:2007/12/14(金) 00:15:04
1か月越しか
493デフォルトの名無しさん:2007/12/14(金) 00:59:11
シェーダーとかあるの?
494デフォルトの名無しさん:2007/12/14(金) 11:58:50
OpenGLでテキスト描画したい場合ってどうするの?
プラットフォーム非依存なんだから、とうぜん標準で glDrawText 関数なんてものは
ないんだと思うんだけど、テキスト描画したい人はやっぱりゴリゴリコード書いて、
フォントイメージ持って来てそれを自力で転送してるの?
495デフォルトの名無しさん:2007/12/14(金) 12:41:54
>>494
環境依存(任意のフォントでディスプレイリストを作成)
glXUseXFont
wglUseFontBitmaps
wglUseFontOutlines

環境非依存(フォントの種類が少なく、ディスプレイリストを作らないので遅い)
glutBitmapCharacter
glutStrokeCharacter
496デフォルトの名無しさん:2007/12/14(金) 14:02:41
ここでくだらん質問するまえにNeheみれ
497デフォルトの名無しさん:2007/12/14(金) 18:00:32
>>490
mesa-r300は色々と未実装なフォールバックになるやつが結構ある。
それもfglrxならフォールバックなしに使えたりする。
内部的にはlinesmoothはvs使って実相しているらしいが、
仕様公開後もっと開発が進むんじゃないかな。
498453:2007/12/14(金) 18:14:48
>>494
FTGLがおすすめ
499498:2007/12/14(金) 18:15:43
すまん、名前はミスだ
500デフォルトの名無しさん:2007/12/15(土) 07:48:28
二年前にCGのクラスでOpenGLを学んだが
忙しくてそれ以上続けられなかった俺様が
来年こそはと>>500をゲット
501デフォルトの名無しさん:2007/12/15(土) 08:18:14
>>500
大丈夫だ。若いんだから年末年始だけでOK
知的欲望全開で突っ走れ
502デフォルトの名無しさん:2007/12/15(土) 13:13:22
Dynabook A1/X85PMC(PenIII 450MHz メモリ384MB)
で、OPENGL動かそうとしたら、止まった


なぜ…研究が進められない
503デフォルトの名無しさん:2007/12/15(土) 13:22:36
>>502
随分古いマシンだな
とりあえずグラフィックスドライバ更新

でもOpenGLなんて所詮は最後に表示を担当するだけなんだから
研究は進められるんじゃ?
504デフォルトの名無しさん:2007/12/15(土) 13:25:01
http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=229374#Post229374
OpenGL 3 will not have support for the GL_DOUBLE token. This means it will not be possible to send double precision vertex data to OpenGL.

OpenGL3.0からGL_DOUBLEのサポートがなくなることは既出?
505デフォルトの名無しさん:2007/12/15(土) 13:27:53
doubleとか何に使うの?
506デフォルトの名無しさん:2007/12/15(土) 13:35:58
頂点シェーダのレジスタ精度が32/24/16/8bitしかないから無くても問題ないな
507デフォルトの名無しさん:2007/12/15(土) 13:36:48
>>503
画面サイズを小さくしたら出来ました。

研究室がいきなり工事やら停電やらで土日作業できず
自宅のはもらいもののノート。一応作業できますわ
508デフォルトの名無しさん:2007/12/21(金) 09:10:44
ラデのドライバを最新にしたらツールが立ち上がらなくなったんで調べてみたら
ARB_fragment program_shadowのサポートが無くなってやがった

AMD氏ね
509デフォルトの名無しさん:2007/12/21(金) 12:38:19
>>506
GL_FLOATが、16bitだよな?
32bitはなんだっけ?
510デフォルトの名無しさん:2007/12/21(金) 22:45:13
テクスチャについての質問なんですが、ちょっと前までテクスチャが張れたのに、
アプリを再起動したらそれ以降全くテクスチャが張れなくなるのって何が原因
なんでしょうか?
昨日作ったソフトが今日になって全くテクスチャが張れなくなってしまって
困っています。バイナリ、テクスチャの元画像共に昨日テクスチャが張れた
時から全くいじっていません。また、ドライバの更新等もしていません。
思い当たるとしたらノートンの更新ぐらいですが…
511デフォルトの名無しさん:2007/12/22(土) 01:03:45
Z座標が同じポリゴンが重なったときに重なった部分のアルファのあるテクスチャを
合成するにはどうしたらいいでしょうか?
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
は実行しているのですが、なぜか合成してくれません。

┌―――┐
|      |
|      |
|  ┌―┼―┐
└―┼―┘  |
    |      |
    |      |
    └―――┘


こんな具合です。
512デフォルトの名無しさん:2007/12/22(土) 02:46:14
テクスチャのinternalformatはちゃんとGL_RGBA(あるいはその他アルファを含むフォーマット)
にしてるかい??
513デフォルトの名無しさん:2007/12/22(土) 03:34:45
はい、Z軸を0.0000001とかほんの少しずらすとアルファは通っているので
大丈夫です。ただ、Z軸が重なるとなぜか合成されずに上書きになってしまう orz
514デフォルトの名無しさん:2007/12/22(土) 03:53:30
>>513
glDepthMask(GL_FALSE);
glDepthFunc(GL_LEQUAL);
描画
glDepthFunc(GL_LESS);
515デフォルトの名無しさん:2007/12/22(土) 20:22:14
>>514
遅くなりましたが、上手くいきました!
ありがとうごさいます。
516デフォルトの名無しさん:2007/12/22(土) 22:49:52
>>509
GL_FLOAT は float だから32ビット。
16ビットは GL_NV_half_float の GL_HALF_FLOAT_NV とか VGL_ARB_half_float_pixel の GL_HALF_FLOAT_ARB とか。
517デフォルトの名無しさん:2007/12/22(土) 22:50:46
×VGL_ARB_half_float_pixel
○GL_ARB_half_float_pixel
518デフォルトの名無しさん:2007/12/22(土) 22:59:39
>>516
float、32bitか。何年プログラマやっとんだ、アホか俺はw
519デフォルトの名無しさん:2007/12/24(月) 20:39:34
void display(void)
{
gluLookAt(3.0,2.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
glRotated(x,0.0,0.0,1.0);
glColor3d(0.0,1.0,0.0);
glutWireTeapot(0.5);
glFlush();
}

void myKbd(unsigned char key, int x, int y)
{
if(key == KEY_ESC)
exit(0);
else if(key == 'g'){
x += 1;
glutPostRedisplay();
}
}

void init(void)
{
int width = 500, height = 500;
double aspect = (double)width/(double)height;
glClearColor(0.0,0.0,0.0,1.0);
glutCreateWindow("Sample");
glutDisplayFunc(display);
glutKeyboardFunc(myKbd);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30.0,aspect,1.0,100.0);
}
520デフォルトの名無しさん:2007/12/24(月) 20:40:54
>>519
キーボードを押したらティーポットが回転するプログラムを書いたんですが、
ティーポットが回転してくれません。それどころかポットがどっかに移動して
しまいます。どうしたら良いですか? 教えてください。
521デフォルトの名無しさん:2007/12/24(月) 23:49:54
>>520
どう見てもコンパイルすら通りそうにないコードなんだが
C言語の基礎(変数のスコープとか)を勉強し直すことだな
522デフォルトの名無しさん:2007/12/25(火) 01:06:44
>>520
glRotated(x,0.0,0.0,1.0);
これでxを+1しても回転にならないぞw
523デフォルトの名無しさん:2007/12/25(火) 01:14:56
XP上のMicrosft VC++6.0でOpenGLを使いたいのですが、
どうもこうもOpenGL/gl.hが無いと言われます。
ググってみると、
XPはデフォルトであるから心配ないとしか書かれていないのです(泣)

GLUTはインストール済みです。

もしよろしければ、対応策を教えていただけないでしょうか。
524デフォルトの名無しさん:2007/12/25(火) 01:30:20
>>523
もし
#include <OpenGL/gl.h>
ってやってるなら、その行は削除。いらない。
525522:2007/12/25(火) 01:55:07
hahaha!
勘違いしたw 酔ってるので許せ。

>>520
描画のたびに
gluLookAt(3.0,2.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0);
で行列を掛けてるから、どっかへ飛ぶ。
526デフォルトの名無しさん:2007/12/25(火) 04:32:13
> void myKbd(unsigned char key, int x, int y)
で、
x += 1;
は、何も影響を及ぼさない気がする・・・
527デフォルトの名無しさん:2007/12/26(水) 19:22:57
質問です

物体(glutSolidSphereなど)を3次元空間で動かして
動かした三次元座標空間だけマスクして
動かせば動かすほど、画像が変わっていく(3次元空間がマスクされて、隠れている画像が出てくる)
ということをしたいのですが。

どうやればいいかヒントをください
528デフォルトの名無しさん:2007/12/26(水) 20:23:44
>>527
日本語でおk
529デフォルトの名無しさん:2007/12/26(水) 21:47:49
伝わりにくくてすみません

要は3次元空間にマスクをマウスで書き込んでいく、ということをしたいのです。
フォトショップとかの2次元空間でのクイックマスク処理を
3次元でやるイメージです
530デフォルトの名無しさん:2007/12/26(水) 22:09:50
3次元でマスクってのが良くわからない…

もしSculptみたいなことをやりたいならボクセルでも使うのが早いかなぁ
531デフォルトの名無しさん:2007/12/26(水) 22:30:36
>>530
まさしくそんな感じです。

固体を削り取っていって、削られた部分だけ別の物体の色になっていくという感じです。
それか、マウスの範囲内の物体の色(不透明度)を強制的に0にしていければ…同じように出来ると考えてるのですが

マウスでglutSolidSphereの範囲内のカラーを変えていく、ということ出来ますか?
532デフォルトの名無しさん:2007/12/26(水) 22:41:45
正直に脱がせゲーを作るといえばみんな協力するはず
533デフォルトの名無しさん:2007/12/26(水) 22:49:32
…その発想はなかった!!!!!

そっちにシフトします><
534デフォルトの名無しさん:2007/12/26(水) 23:45:14
もし531のようなことやるのに
参考になるサンプルとか考え方あったら、レスお願いします。
535デフォルトの名無しさん:2007/12/27(木) 01:04:05
2Dじゃなくて、3Dでか。

そもそも、サーフェスモデルが基本なので、
「削り取る」というのをどのように表現するか・・・だな
536デフォルトの名無しさん:2007/12/27(木) 01:18:27
削り取るよりも
>マウスでglutSolidSphereの範囲内のカラーを変えていく
こっちのほうを実装するほうが、やりたいことが出来そうな気がしてきました

まだ研究室で、2時くらいに帰るのですが
かなりてんぱってきました
537デフォルトの名無しさん:2007/12/28(金) 23:04:41
536ですが

アキュムレーションバッファで変更したい部分を上書きしてく、ということはできるでしょうか?
もし出来るなら、エリア内の画素のαを0にして上書き・エリアを動かして0にして上書き…で削り取れるかもと思ったのですが
538デフォルトの名無しさん:2007/12/28(金) 23:33:04
サンプル弄くってみて

エリア内の指定
全体が変化する

でアウトでした。
もう夜も眠れません
539デフォルトの名無しさん:2007/12/29(土) 01:58:55
ん、もしかして2Dでマスクできればいいのか?
それならStencilBufferでいいと思うけど
初心者スレにそんな話題が出てたぞ
540デフォルトの名無しさん:2007/12/31(月) 17:54:28
質問させて頂きます。
@FBOテクスチャに適当に描画。
A上のレンダリングテクスチャに、上のレンダリングテクスチャを別のオブジェクトに貼って描画。
としう事をしたいのですが、Aを行う際、@で作ったテクスチャを別のテクスチャにコピーする必要があると思います。
その、テクスチャを別のテクスチャにコピーをしたいのですがどのようにすればいいのでしょうか?
できれば、高速な方法が良いです。宜しくお願いします。
541デフォルトの名無しさん:2007/12/31(月) 17:55:05
すいません、くだすれと間違えました・・・。
542デフォルトの名無しさん:2008/01/06(日) 19:39:29
OpenGL Distilledの邦訳OpenGLの神髄が出てたな
さっと立ち読みしただけだがタイトル通り要点を押さえた本だった
神髄とか言うと上級向けっぽいがそうでもなく
いきなり赤本を読む前に読んでおきたい本だな
543デフォルトの名無しさん:2008/01/06(日) 21:41:32
とりあえず(あえて)7Yでポチった

DirectXとか汎用言語書は自称初心者向け(笑)が増殖してるが、
買うヤツがほとんどいないOpenGL本をあえて出すということはそれなりのクオリティであると期待してみる
544デフォルトの名無しさん:2008/01/06(日) 21:56:29
>>543
だが需要はあると思うぞ。俺も買った。
545デフォルトの名無しさん:2008/01/07(月) 07:55:58
原書で読んだよ。邦訳出たのか。神髄ってのは何か違う気が……。
各章サンプルはあるんだけどあるだけって感じなんで、初心者で
手を動かしながら理解したいって人は合わせて別のチュートリアル読んだ方がいいかも。
546デフォルトの名無しさん:2008/01/15(火) 17:31:13
OpenGLでバナナの腹筋はできますか?
どこかからサンプルコードはダウンロードできないでしょうか?
547デフォルトの名無しさん:2008/01/15(火) 17:37:40
そんな質問どこかで見たと思ったらこのスレの頭の方だった
できるけど、OpenGLのサンプルコードがあるかどうかは知らない
548デフォルトの名無しさん:2008/01/15(火) 18:09:29
ろぼっとアームをバナナに置き換えれば
549デフォルトの名無しさん:2008/01/15(火) 19:41:58
Cgとかのシェーダ言語のスレってないね
550デフォルトの名無しさん:2008/01/15(火) 20:27:55
あったと思ったら違ったw

CGプログラムやれや、お前ら
http://pc11.2ch.net/test/read.cgi/cg/1025138347/

昔はあったんだけどね
落ちちゃったのかな
551デフォルトの名無しさん:2008/01/15(火) 21:48:26
シェーダのスレならゲーム製作技術板だがあった
ついでに過疎ってるが
http://pc11.2ch.net/test/read.cgi/gamedev/1005185166/l50

このスレもOpenGL3が出ないから話題が無いしCgとGLSLならここでもいいんじゃね?
今時DirectXでわざわざCgを使ってる奴がいるとも思えんし

あとは3Dグラフィックスプログラミングスレとかかな
552デフォルトの名無しさん:2008/01/16(水) 04:27:47
ndsやってるかたいらっさいますか
553デフォルトの名無しさん:2008/01/16(水) 10:06:52
仕事の質問なら帰れ
趣味でやってるなら聞くだけ聞いてやる
554デフォルトの名無しさん:2008/01/16(水) 12:50:17
>>549
いっぱい有りますやん。
gpuでこの板検索してみそ。
555デフォルトの名無しさん:2008/01/16(水) 14:25:25
>>554
GPGPUのスレしか見つからないが
グラフィックでのシェーダと使い方大分違くないか?
556デフォルトの名無しさん:2008/01/16(水) 23:53:32
あっちで普通のシェーダ聞いたらすれ違い言われた
557デフォルトの名無しさん:2008/01/17(木) 01:28:03
そりゃ当然
558デフォルトの名無しさん:2008/01/17(木) 21:30:29
マウスで画面クリックしたら
3次元座標空間内の点が消える、という処理をしたいのですが


赤い○←クリック α値が0になって
αテストで画面内から消滅。という流れでやろうと思っています。

ただ、どうにもクリックしたオブジェクトの選択方法・クリックによる色・αの変換方法がわからず
どうにもわかりません。

参考サイトとかあったら教えてくださいませんか
559デフォルトの名無しさん:2008/01/17(木) 21:53:02
定期的に同じような質問が来るな。
αで消すよりポリゴンそのものの描画をカットしたほうが楽じゃないか?
ポリゴン選択なら
glRenderMode(GL_SELECT);
gluPickMatrix
あたりで検索するといいよ。
560デフォルトの名無しさん:2008/01/17(木) 23:01:02
>>559
ありがとうございます。

そこらでググって見ましたがいまいち、クリックしたオブジェクトを、消すというのが
どの時点で選択されているのかわからなく

ttp://wiki.livedoor.jp/mikk_ni3_92/d/%a5%b5%a5%f3%a5%d7%a5%eb%a5%b3%a1%bc%a5%c9%3a%3aOpenGL
ttp://son-son.sakura.ne.jp/programming/opengl_6.html

こちらを参考にしました。
消すのに、描画をカットする方法やαを0にするのがどこをいじくってよいのやら

無数に飛んでくる玉をクリック・クリックで消すというゲームを想定してます。
561デフォルトの名無しさん:2008/01/18(金) 01:42:23
それなら別にマウスピッキングなんかしないで、マウスポインタ座標と玉との距離で
処理すればいいんじゃない? 結構処理時間食うぞ、ピッキング。
他に意図があるなら別だけど。
562デフォルトの名無しさん:2008/01/18(金) 03:20:46
普通にやるならマウス座標とスクリーン座標に変換したオブジェクトのバウンディングスフィアとの衝突判定を
手前のオブジェクトから順に判定して行く感じかな

もはやOpenGL関係ないけど
563デフォルトの名無しさん:2008/01/18(金) 06:12:05
床井さん復活おめ。
564デフォルトの名無しさん:2008/01/18(金) 14:54:14
>>562
>もはやOpenGL関係ないけど
それが普通だよ。OpenGLの仕事は基本的に描画のみ。衝突判定やピッキングは別でやるのが当たり前。
セレクションモードとかは「場合によっては使えなくもない」ってだけの仕組み。

初心者は、無理してOpenGL使うより、適当なシーングラフライブラリを使ったほうがいいと思うんだよなー。
でも敷居の低いシーングラフってなかなか無いんだよなー。
565デフォルトの名無しさん:2008/01/18(金) 16:23:17
javaなら低レベルなJOGLか、高レベルなJava3Dっていう選択肢があるんだけどな。

と、JOGLをRhinoから遊んでる俺が言ってみる。
566デフォルトの名無しさん:2008/01/18(金) 17:37:50
JOGLってなんでGL.glHogeHogeみたくプレフィクスだぶらせてるんだ。
メソッドのglとか定数のGL_とか、クラス名があるんだから不要じゃん?
入力面倒だよ……。
567デフォルトの名無しさん:2008/01/18(金) 17:42:16
定数の GL. は static import すればいい
メソッドのはメンドイね
568デフォルトの名無しさん:2008/01/19(土) 02:43:39
下らない質問なんですが、
戦場の絆みたいなゲームって、
blenderみたいなソフトでモデル(ガンダム)を作って、
その情報を取り込んでOpenGLでプログラミングして動かしているのでしょうか?
569デフォルトの名無しさん:2008/01/19(土) 02:54:16
商業なら独自形式にエクスポートしたりしない?

絆のハード構成は最近のPCと同じ(チップセットがAMDでVGAがGF7800)でOpenGL使ってるからCg使ってるかもしれないけど。
570デフォルトの名無しさん:2008/01/19(土) 03:05:48
>>569
むむ、言ってることが難しくて分からないです。
自分が何でこんなこと思ったのかと言うと、
たとえばもうちょっと簡単な例で、同人ゲームとかで3Dな奴ありますよね。
でも、自分にはOpenGLであんな複雑な人の形を作るなんて、とっても大変だと思うんです。
それで、たとえば何かのCGソフト(blenderとか六角大王とか)で人間の形を作って、
その人間の形を出力して、OpenGLで取り込んでプログラミングして動かすのかなと思ったんです。
実際のところどうやって3Dゲームは人の形を動かしてるんでしょうか?
571デフォルトの名無しさん:2008/01/19(土) 08:35:42
>>570
基本はあってる。

3DCGソフト(ゲームなら、3DSMax、Maya、XSIあたり)でモデリングして、アニメーション付けて、
それを独自形式で適当に吐いて、
プログラムでデータとして読み込む。

後は、それをOpenGLなり、DirectXなりで画面に出力する。
572デフォルトの名無しさん:2008/01/19(土) 09:05:08
>>571
なるほど!
とてもよく分かる説明、ありがとうございます。
ちなみに、モデリングしてアニメーションつける人と
OpenGLなりDirectXで動かす人は普通別なんですよね?
573デフォルトの名無しさん:2008/01/19(土) 12:08:24
普通は別だろう
別である必要はないけど
技術的につらいし作業量的にも無理あるよな
574デフォルトの名無しさん:2008/01/19(土) 12:33:58
そこそこ以上の規模のゲームでは
前者はデザイナー、後者はプログラマーの仕事だよな
575デフォルトの名無しさん:2008/01/19(土) 12:52:20
今時の同人ソフトだってグラフィックデザイナとプログラマは別れてるんじゃないかな?

規模のでかいゲーム屋ならWebの募集要項の種類眺めるだけでも雰囲気つかめるんじゃないの>>572
576デフォルトの名無しさん:2008/01/19(土) 16:55:18
規模によるとしか言えない。1週間も3Dソフト触ればまずまずの絵は出てくるようになるよ。
ただゲームに適したポリーを吐くのは難しいときもある。
577デフォルトの名無しさん:2008/01/19(土) 21:25:19
GLUTによる「手抜き」OpenGL入門読んだら、次に読むべきお勧めの本は何かありますか?
赤本より簡単なやつで。
578デフォルトの名無しさん:2008/01/19(土) 21:30:35
>>577
続きという事なら、これはどうかな。俺もまだ読んでないけど。

GLUTによるOpenGL入門2 テクスチャマッピング
http://www.kohgakusha.co.jp/books/detail/978-4-7775-1332-1
579デフォルトの名無しさん:2008/01/19(土) 21:30:54
とりあえず自分で何か作ってみる、のがいいんじゃないかなぁ
太陽系の模型とか、三次元テトリスとか
580デフォルトの名無しさん:2008/01/19(土) 23:55:33
赤本は分厚いだけで難しくはないだろ。
581デフォルトの名無しさん:2008/01/20(日) 17:37:44
OpenGLで3次元で人体を描画するとしたら
各関節を座標で与えて表示することは可能でしょうか?
現在は例として肩から肘まではxyz座標でそれぞれの軸に何度回転しているかで
描画しているのですが…
よろしくお願いします
582デフォルトの名無しさん:2008/01/20(日) 17:49:17
座標から角度を計算すればいいだろ
583デフォルトの名無しさん:2008/01/22(火) 00:17:40
すいません、質問させて下さい。
今、複数のポリゴンに動画を貼り付けるようなことをやっているのですが、
どうしても8fps位しか出ず、複数のポリゴンと複数の動画を描画すると、0.5fps位になって
しまいます。なにか高速化のヒントだけでもいただけるとうれしいのですが…

テスト時の動画は400*400、処理は大体以下のような感じです。

1、カメラの設定
2、変換座標の設定
3、テクスチャの生成(1つの名前をglTexSubImage2Dで使い回し)
4、ポリゴン描画
1に戻る
584デフォルトの名無しさん:2008/01/22(火) 00:25:19
どこが遅いか調べればいいじゃないか。
エスパーは出張中だ。
585デフォルトの名無しさん:2008/01/22(火) 08:06:43
>>583
動画のデコードが遅いだけじゃないだろうな
動画でなく同じサイズの静止画を毎フレームglTexSubImageで設定してみて
遅いかどうかを確認してみなよ
586デフォルトの名無しさん:2008/01/22(火) 17:01:41
>>585
試したところ、無変形では静止画の方が速くなりました。
ところが、回転や移動をすると、なぜか静止画の方はフレームレートが
半分ぐらいにまで落ちたのに対し、動画の方は変わりませんでした。
これはデコード以外の別なところにもネックがあると考えた方がいいんでしょうか?
587デフォルトの名無しさん:2008/01/22(火) 18:05:51
>>ところが、回転や移動をすると、なぜか静止画の方はフレームレートが
>>半分ぐらいにまで落ちた

これはおかしいな。考えにくい。
プログラムうp。
588デフォルトの名無しさん:2008/01/22(火) 18:31:42
>>587
ちょっといろいろ処理がからみついていて長くなっているのでうpは出来ませんが、モデルビューや
プロジェクションの設定は動画と静止画の時は全く同じ処理で動いてます。
違うとしたら、動画から静止画を切り出すか、静止画をコピーするかの違いしかないのですが、
それは無変形の時に速度差が出てるので原因になってるわけ無いですし…
動画と静止画のサイズは一緒で、800*800ですが、サイズによっては高速に
動くようです。400*400では問題ありませんでした。
589デフォルトの名無しさん:2008/01/22(火) 18:36:51
>> 587
と、今もう一度試したところ、どうやらゴミがついていたようで、それを取ったら
ちゃんと問題なく速度を維持してました。
お騒がせしてすいません orz
590デフォルトの名無しさん:2008/01/22(火) 18:36:55
毎回すべてのデータを送りなおしているとか言って見る。
591デフォルトの名無しさん:2008/01/22(火) 18:37:30
>>589
>>587
安価… orz
592デフォルトの名無しさん:2008/01/22(火) 22:29:40
JOGLとJMFつかってJOGLに動画描画させたことあるが動画のデコードと動画の1フレーム毎にテクスチャオブジェクトに変換する処理に時間食ってるだけだったなぁ。
593デフォルトの名無しさん:2008/01/23(水) 08:22:39
テクスチャデータ設定が遅いのはPixelBufferObjectでなんとかならんかな
PBO2つ作って現在デコードしてるフレームの書き込み用と
テクスチャ設定用でダブルバッファリングするのが速い気がする
594デフォルトの名無しさん:2008/01/23(水) 22:13:25
>> 542

かめれす... 「OpenGLの神髄」買いました.
分かり易くってよいです.コメント参考になりました.ありがとです.
595デフォルトの名無しさん:2008/01/24(木) 15:46:41
NicoAE開発頑張ってね
596デフォルトの名無しさん:2008/01/24(木) 16:51:32
今更だけど個人でコツコツと何年もかけてソフト作るなら
基本的にインターフェース仕様が変わらないGLは相性いいね


GLそのものが衰退しないという前提はあるけど
597デフォルトの名無しさん:2008/01/24(木) 18:18:40
NicoAEの人かっ!!!がんばれー
598デフォルトの名無しさん:2008/01/24(木) 21:51:26
しかしOpenGL 3.0ではガラッと変わるようなことをどこかで見たような……
599デフォルトの名無しさん:2008/01/24(木) 22:04:54
3.0がでて今までのが動かなくなるわけじゃないんならいいんじゃね
600デフォルトの名無しさん:2008/01/25(金) 02:08:55
今までのはそのまま動く予定みたいだな
3.0は従来とは別のコンテキストを作るようになる
両方使ってもコンテキストが別なんで全く別に処理されるって寸法らしい
あと3.0の描画を2.1以前のテクスチャとして使える拡張も用意される…かもしれない
601デフォルトの名無しさん:2008/01/26(土) 16:46:14
初心者です。
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}

void init(void)
{
glClearColor(0.0, 0.0, 1.0, 1.0);
}

int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA);
glutCreateWindow(argv[0]);
glutDisplayFunc(display);
init();
なのですが、
init関数で塗りつぶす色を指定しているのに、
その前のglutDisplayFunc(display)で描画をしています。
何故init関数で色を指定する前にglutDisplayFunc(display)を実行しても
ウィンドウが塗りつぶされるのでしょうか?
逆なのではないのでしょうか?
602デフォルトの名無しさん:2008/01/26(土) 17:21:35
glutDisplayFuncはコールバック関数を「登録」する関数です。
603デフォルトの名無しさん:2008/01/26(土) 17:22:13
initよりdisplayが後に実行されてるからだよ。
604デフォルトの名無しさん:2008/01/26(土) 17:23:53
glutなんとかかんとかFunc は、コールバック関数を登録しているだけだから。

実際に登録した関数が実行されるのは、例えば
glutDisplayFunc なら画面の再描画時、
glutMouseFunc ならマウスがクリックされたとき等など。

どの命令でどのタイミングのコールバック関数を登録するかはマニュアルを参照すること。
605デフォルトの名無しさん:2008/01/26(土) 17:23:55
なんですと?
登録する関数?
じゃあ、glutMainLoopが描画してるんですか?
606デフォルトの名無しさん:2008/01/26(土) 17:26:39
MainLoopは名前のとおり中でぐるぐる回ってる。
そのなかでイベントに応じてコールバック関数を呼び出してる。
607デフォルトの名無しさん:2008/01/26(土) 19:00:56
OpenGLというよりコールバック関数の勉強した方がいいんじゃないか?
いまどき、コールバック関数ないのはHSPくらいだぞ。
608デフォルトの名無しさん:2008/01/26(土) 21:39:54
んなこたーない
大量にある
609デフォルトの名無しさん:2008/01/27(日) 02:39:21
>表示図形のサイズをビューポートの大きさにかかわらず一定にするには,
>glOrtho() で指定するの領域の大きさをビューポートの大きさに比例するように設定します.
>例えばワールド座標系の座標軸が上記と同様に l, r, t, b, n, f で与えられており,
>もともとのウィンドウの大きさが W×H, リサイズ後のウィンドウの大きさが w×h なら,
>glOrtho(l * w / W, r * w / W, b * h / H, t * h / H, n, f) とします.
>上のプログラムでは, ワールド座標系の2点 (-1, -1), (1, 1) を対角線とする矩形領域を
>200×200 の大きさのウィンドウに表示した時の表示内容の大きさが常に保たれるよう設定しています.
ここの意味が良くわかりません。
例えばW×H 200×200 (-1,-1) (1,1)をw×h 400×400にすると(-2,-2) (2,2)となって、
ウィンドウのリサイズに比例して表示画像も大きくなるような気がするのですが...
610デフォルトの名無しさん:2008/01/27(日) 03:45:37
>>609
縮尺を一定にしたいという話なんだからそれで正しいだろ
611デフォルトの名無しさん:2008/01/27(日) 08:15:08
GLUTを使って3Dアニメーションを作っているのですが、
現在表示している画面を画像ファイルに吐いてくれるような関数を探してます。
ありましたらぜひ教えてください。
612609:2008/01/27(日) 09:37:39
>>610
やっぱり良くわからないです?
ttp://upload.fam.cx/cgi-bin/img-box/a2g80127093410.jpg
のようになって、表示される画像の大きさが
ウィンドウをリサイズしたら比例しして大きくなりそうな気がするんですが。
613デフォルトの名無しさん:2008/01/27(日) 10:00:19
>>612
考えてないでやってみるとわかる。
614609:2008/01/27(日) 10:43:14
>>613
すいません。
考えないでやってみて不思議だから考えてるんですけれど...
そんな公式暗記しろみたいな事いわれても
615デフォルトの名無しさん:2008/01/27(日) 11:05:26
>表示図形のサイズをビューポートの大きさにかかわらず一定にする
この文章をどう理解するかという問題のような気がする
616デフォルトの名無しさん:2008/01/27(日) 11:10:35
>>612
おまえが作ったその図を見る限り
「表示図形のサイズをビューポートの大きさにかかわらず一定にする」
がめでたく実現されているようだが、いったい何が問題なんだ?
617609:2008/01/27(日) 11:41:21
>>615,616
すいません。自分の説明の仕方が悪かったみたいです。
ttp://upload.fam.cx/cgi-bin/img-box/7o080127113738.jpg
の赤い丸のような状態になるんじゃないかなと思ってるんです。
だって、
「表示図形のサイズをビューポートの大きさにかかわらず一定にする」
というのは、ビューポートに表示される図形の割合がリサイズしても変わらない
という意味ではないのでしょうか?
618デフォルトの名無しさん:2008/01/27(日) 12:45:02
>>617
どこに「割合」なんて書いてあるんだよ。
サイズと言ったらサイズだろ。
619609:2008/01/27(日) 13:00:54
わかった!
今やっと分かったっす。
自分の日本語読解能力な無かったんです。
ありがとうございました。
620デフォルトの名無しさん:2008/01/27(日) 13:55:06
>>619
わかったことをわかりやすく図に示してくれ
俺も不思議になってしまった
621609:2008/01/27(日) 14:27:22
>>620
つまり、そのまんまですよ。
自分の日本語読解能力が低かったんです。
円の大きさがウィンドウリサイズしたときに、
リサイズしたウィンドウの大きさに合わせて大きくなったり小さくなったりする場合が、
(ttp://upload.fam.cx/cgi-bin/img-box/7o080127113738.jpgの赤い円の状態)
glOrtho(-w / w , w /w , -h /h , h /h , -1.0, 1.0);
で常に表示される割合が一定で投影される範囲が(-1, -1), (1, 1)に固定。
ウィンドウの大きさにを変えても円の大きさが固定の場合が場合が、
(ttp://upload.fam.cx/cgi-bin/img-box/7o080127113738.jpgの黒い円の状態)
glOrtho(l * w / W, r * w / W, b * h / H, t * h / H, -1.0, 1.0);
でウィンドウをリサイズすると、合わせて(-2,-2)(2,2)...と投影される範囲が大きくなるから
逆に考えて円の大きさは変わらない。
みたいな理解で良いんでしょうか?
622デフォルトの名無しさん:2008/01/29(火) 15:37:35
C言語でOpenGLをつかって物体の動く軌跡を描くプログラムをつくるにあたって2つ質問があります。

一つは、
OpenGLでアニメーションをするときにダブルバッファをいれても
アニメーションのコマ毎に物体のオブジェクトが
制止している状態であっても点滅している風になってしまう場合があるのですが
どのように解消すればよいのか。

もう一つは、
軌跡を描くということで再描画の際にも軌跡を表現するオブジェクトは
そのまま残しておかなければならないと思うのですが
この処理はどのようにコーディングすればよいのか。

この2点なのですが、ご教授のほどよろしくお願い致します。
623デフォルトの名無しさん:2008/01/29(火) 17:45:27
>>622
glSwapBuffer()のタイミング。
windowsで使用しているなら、windowsでの再描画系のチェック。

軌跡に関してはopenGL関係ねえ。
適当に軌跡を保持しておけばいいんじゃない?
624デフォルトの名無しさん:2008/01/29(火) 21:54:33
バッファをクリアしないだけで勝手に軌跡にならないか?
625デフォルトの名無しさん:2008/01/29(火) 22:00:15
Zバッファなしで、奥から描画するように上書きすればそれっぽくなるかもね。
626デフォルトの名無しさん:2008/02/02(土) 15:22:29
glBegin(GL_POINTS)を使い、glPointSize(size)で指定したsize*sizeの
四角形を描画したいのですが、四角形にならず円形しか描画されません。
GL_POINT_SMOOTHになってるのかと思い、Disableにしてみましたが
結果は変わりませんでした。

glDisable(GL_POINT_SMOOTH);
glPointSize(10);
glBegin(GL_POINTS);
glVertex2f(x, y);
glEnd();

GL_POINTSで四角形のpixelを描画するにはどうすれば良いのでしょうか?
ご教授を宜しくお願いします。
627デフォルトの名無しさん:2008/02/02(土) 16:09:14
GL_QUADSを使えば済むと思うけど。

どうしてもというなら、円が重なるようにたくさん打てば良いんじゃないか。
628626:2008/02/02(土) 16:41:23
>>585
確かにGL_QUADSでも良いのですが、GL_POINTSの方がポリゴンを描画するよりも高速だったので
GL_POINTSで四角形の点を表示したかったのです。(数万個のパーティクルを扱いたいので)
とりあえずGL_QUADSで処理する事にします。どうもありがとうございました。

昔のグラボで試したところ四角形で点が表示されました。
うーん、ハードウェアの問題なんでしょうか…?ELSA GLADIAC 786GTを使用してます。
629デフォルトの名無しさん:2008/02/02(土) 16:45:26
赤本に描画を高速化するコツが載ってるよ。
630629:2008/02/02(土) 16:52:15
ごめん違った。
赤本じゃなくて、OpenGLの真髄でした。最近出た本です。
631デフォルトの名無しさん:2008/02/04(月) 02:25:38
GLdouble color[7]
for (i=0; i<7; i++)
color[i] = (GLdouble)i/6.0;
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
for(i = 0 ; i < 7 ; i ++){
for(j = 0 ; j < 7 ; j ++){
glColor3d(color[i], color[i], color[i]);
glVertex2f(-1.0+i*0.3, -1.0+j*0.3);
glColor3d(1.0, color[i], 0.0);
glVertex2f(-0.8+i*0.3, -1.0+j*0.3);
glColor3d(0.0, 1.0, color[j]);
glVertex2f(-0.8+i*0.3, -0.8+j*0.3);
glColor3d(color[i], 0.0, 1.0);
glVertex2f(-1.0+i*0.3 , -0.8+j*0.3);
}
}
glEnd();
みたいなコードって、
forの中身を
glColor3d(color[i], 0.0, 1.0);
glVertex2f(-1.0+i*0.3 , -0.8+j*0.3);
glColor3d(color[i], color[i], color[i]);
glVertex2f(-1.0+i*0.3, -1.0+j*0.3);
glColor3d(1.0, color[i], 0.0);
glVertex2f(-0.8+i*0.3, -1.0+j*0.3);
glColor3d(0.0, 1.0, color[j]);
glVertex2f(-0.8+i*0.3, -0.8+j*0.3);
と順番をいろいろ入れ替えただけで
描画される形や色が変わるんですけど、同じ場所に同じ色で指定しているのに
なんで順番を変えただけでグレデーションが変わってしまうのでしょうか?
632デフォルトの名無しさん:2008/02/04(月) 02:44:43
7 X 7 のループにしないと再現しないのか?
聞きたいことを再現する最小限のコードを載せてくれよ。
だいたい、グレデーションってどこのよ?
633デフォルトの名無しさん:2008/02/04(月) 11:21:25
>>631
頂点の順序は重要
その順番に繋いで形にするんだから
634デフォルトの名無しさん:2008/02/04(月) 11:45:54
>>631は確かに論点がわかりにくいコードだが、要するに

glColor3d (1)
glVertex2f (1)
glColor3d (2)
glVertex2f (2)
glColor3d (3)
glVertex2f (3)
glColor3d (4)
glVertex2f (4)

の順序を

glColor3d (4)
glVertex2f (4)
glColor3d (1)
glVertex2f (1)
glColor3d (2)
glVertex2f (2)
glColor3d (3)
glVertex2f (3)

に変えたと言ってるわけで、
GL_QUADSの定義からして特に問題はないように見えるんだよね・・・。
635デフォルトの名無しさん:2008/02/04(月) 11:59:08
「順番をいろいろ入れ替えた」 って言ってるから、
やっぱりでたらめにいろいろ入れ替えてるんじゃないのかなぁ

あとは、四角形を内部で三角形2枚に分割して処理してたりすると、
形や色の具合が変わることがあるかもしんない
636デフォルトの名無しさん:2008/02/04(月) 12:08:33
ああ、確かにグーローシェーディングの補間結果は変わってくるな。
637631:2008/02/04(月) 12:25:38
>>632
すいません。
ttp://www2.uploda.org/uporg1233762.jpg
に再現画像をのせました。
>>633
予測する方法は無いのでしょうか?
>>634
自分の言いたい事を分かりやすくいって頂いて有り難うございます。

えっと小さな四角形をグラデーションでたくさん表示したいなと思ったんですが、
プログラムを書いてる最中に「このグラデーションで表示したい」と思って
プログラムを書いているのに思っている物と違う物が表示されてしまって、
順番をかえると思った物が表示される事に気づきました。
色と点は同じ指定しているのに、順番を変えるだけで表示される画像が
かわってしまうので、最終的に表示される画像がどのようなグラデーションになるか、
法則?(色の補完の法則?)みたいなものは無いのでしょうか?
638デフォルトの名無しさん:2008/02/04(月) 12:35:08
GL_QUADSやめてGL_TRIANGLESで描くようにすればいいかと
639デフォルトの名無しさん:2008/02/04(月) 15:57:50
glVertexいじらずに色の順番だけ変えればいいじゃん
640デフォルトの名無しさん:2008/02/04(月) 16:33:41
ポイントスプライトとかじゃだめなの?
641デフォルトの名無しさん:2008/02/04(月) 20:06:26
どうみても学習始めたばかりの人にそれはない
642デフォルトの名無しさん:2008/02/04(月) 20:42:08
床井先生のとこによさげなサンプルがあるよ。
OpenGL point sprite でググったら一番上にでてきた。
643デフォルトの名無しさん:2008/02/04(月) 20:42:46
ageちまった。スマン。
644デフォルトの名無しさん:2008/02/04(月) 22:22:33
GLUTでワールド座標系とデバイス座標系とマウスの座標の質問です。
「デバイス座標系とワールド座標系ではglutMouseFuncに渡されるマウスの座標の上下が反転している 」
というのがいまいち理解できません。
glutMouseFunc(mouse);
void mouse(int button, int state, int x, int y){
static int x0, y0;

switch(button){
case GLUT_LEFT_BUTTON:
if(state == GLUT_UP){
glColor3d(0,0,0);
glBegin(GL_LINES);
glVertex2i(x0,y0);
glVertex2i(x,y);
glEnd();
glFlush();
}else{
x0 = x;
y0 = y;
}
   break;
printf("(%d %d)¥n",x,y);
というプログラムで、
glOrtho(-0.5,w - 0.5,w-0.5,-0.5,-1,1);
とやって上下を逆転させてやると正しく線が引ける事
glOrtho(-0.5,w - 0.5,-0.5,w-0.5,-1,1);
とやると引かれる線の状態が鏡のように反転する事を確認しました。
でもprintf("(%d %d)¥n",x,y);で渡されるxとyは、glOrthoで上下反転してもしなくても、左上が(0,0)で右下は(w,h)であるようです。
それに上下反転させると絵も下のように逆転しそうな気がするのですが...
http://tune.ache-bang.com/~vg/outitem/up/img/18549.jpg
上のように絵は逆転しないのでしょうか?なぜ上下が反転しているのに、printf("(%d %d)¥n",x,y)で渡される値は正しいのでしょうか?
645デフォルトの名無しさん:2008/02/04(月) 22:24:55
対照物を行ったり来たりさせる代表的なアルゴリズムを教えてくれ!
ifとかつかっても俺の頭では行きっぱなししかできん!
646デフォルトの名無しさん:2008/02/04(月) 22:33:43
sin
647644:2008/02/04(月) 22:38:35
すいません。絵は上下逆転しますね。
でも、マウスをクリックして渡される座標は左上が(0,0)で右下が(w,h)で良くわかりません。
それとプロの方々はこのようにワールド座標系とデバイス座標系が逆転する時は、
わざわざ逆転したとき用にプログラムを書いているのでしょうか?
648644:2008/02/05(火) 01:39:33
分かったぁ。
デバイス座標系では左下が(0,0)なのに、
ワールド座標系では左上が(0,0)になるから、書いた線が鏡に書いたように逆転するんだ!
下の絵のような感じで。
ttp://www2.uploda.org/uporg1234742.jpg
絵に描けばすぐ分かったのに、なんでグダグダ頭の中で考えてたんだ、自分の馬鹿。
649デフォルトの名無しさん:2008/02/05(火) 04:49:27
よくわかんないけど、自演乙
650デフォルトの名無しさん:2008/02/05(火) 05:16:26
OPENGLでつくったアニメーションをスクリーンセイバーにできますか?
WindowsでVisual C++でつくりました。
651デフォルトの名無しさん:2008/02/05(火) 05:52:05
もちろんできますよ!
652デフォルトの名無しさん:2008/02/05(火) 07:01:29
.exe を .scr にする。
ほらできた!
653デフォルトの名無しさん:2008/02/05(火) 16:35:17
最近勉強始めたんですけど、
OpenGLってHCLの道具として役に立つんですか?
654デフォルトの名無しさん:2008/02/05(火) 17:33:34
塩酸?
655デフォルトの名無しさん:2008/02/05(火) 17:38:45
>>652
ありがとう!できた!でもめちゃくちゃ重くなった!
656デフォルトの名無しさん:2008/02/05(火) 18:31:26
スクリーンセーバーは正しい作り方があるからggr
657デフォルトの名無しさん:2008/02/05(火) 22:37:18
>>653
HCLがなんだかさっぱりわからんけど
OpenGLは3D*描画用*のAPIだ
それが役に立つなら役に立つんじゃね?
658デフォルトの名無しさん:2008/02/06(水) 11:29:26
>657
HCLじゃなくてHCIでした。単なる読み間違いでした。
659デフォルトの名無しさん:2008/02/06(水) 11:50:12
>>658
HCIがなんだかさっぱりわからんけど
OpenGLは3D*描画用*のAPIだ
それが役に立つなら役に立つんじゃね?
660デフォルトの名無しさん:2008/02/06(水) 15:17:41
ワロタ

俺もHCIがよくわからんのでググッタカス
だがわからん
661デフォルトの名無しさん:2008/02/07(木) 22:55:12
Human Computer Interaction とか Interface とかじゃないかなぁとまじれす。そして結論は >659
662デフォルトの名無しさん:2008/02/09(土) 06:34:16
glEnable(GL_COLOR_LOGIC_OP);
glLogicOp(GL_INVERT);
glBegin(GL_LINES);
線を引く
glend();
glDisable(GL_LOGIC_OP);
というプログラムなのですが、
GL_COLOR_LOGIC_OPは「図形の描画の際に,ウィンドウに既に描かれている色と,
これから描こうとする色の間で論理演算を行うことができるようにします」
という解説が有りました。
「GL_INVERT はウィンドウに描かれている内容の, これから描こうとする図形の領域を反転します」
とあります。
つまりコレは、以前引いてある同じ色の線の色を反転して、新しい線をまた反転した色で引くプログラムという
理解で良いのでしょうか?
「ウィンドウに描かれている内容の, これから描こうとする図形の領域を反転します」の意味がいまいち理解できないんです。
663デフォルトの名無しさん:2008/02/09(土) 08:31:55
白地に青で書くと黄色になる。
664デフォルトの名無しさん:2008/02/09(土) 10:51:47
>>662
黒が白に、白が黒になるのが反転
GL_INVERTは「これから描こうとする色」は使われない
「すでに描かれている色」を反転するのみ

>以前引いてある同じ色の線の色を反転して

以前に線を引いてある必要はない
たとえば真っ白のところにGL_INVERTで線を引くと黒い線になる
真っ黒のところにGL_INVERTで線を引くと白い線になる

>>663
それはGL_XORだろう
665デフォルトの名無しさん:2008/02/10(日) 16:33:56
>>662
ちがうよ
666デフォルトの名無しさん:2008/02/15(金) 02:21:24
人間の顔の表面の形状を表した座標点のデータがあるのですが、これをポリゴンを使ってサーフェスモデルみたいにしたいのですが、これってどうやったらいいのでしょうか?
667デフォルトの名無しさん:2008/02/15(金) 03:03:19
手作業でがんがれ!
668デフォルトの名無しさん:2008/02/15(金) 03:17:11
点群をトライアングルメッシュに直してくれるソフトとかあるよ
超高いけど
669デフォルトの名無しさん:2008/02/15(金) 03:19:02
>>668
お金がないので、フリーか、もしくはプログラミングの方法があればお願いします。
670デフォルトの名無しさん:2008/02/15(金) 08:03:56
Delaunay法使ったら?
vtkとかMayaViに逃げるとか。
671デフォルトの名無しさん:2008/02/15(金) 09:52:25
>>670
ありがとうございます!
試してみます。
672デフォルトの名無しさん:2008/02/15(金) 14:06:08
ドロネー図を書く場合って、どんな関数を使えばいいですか?
673デフォルトの名無しさん:2008/02/15(金) 23:30:35
>>672
vtkならサンプルがある。
フルスクラッチで書く技量が無いなら取り敢えず他人のソースを参考にしろ
674デフォルトの名無しさん:2008/02/23(土) 11:48:59
投影と射影って同じ意味ですか?
本を読んで勉強しているのですが、
「射影変換には、射影変換には透視射影と平行射影が〜」
または、
「投影変換には大きくわけて、透視投影と平行投影が〜」
みたいに、どう見ても同じ無いようなのに、ころころ文によって
射影と投影が使われていてとても疑問なんです。
675デフォルトの名無しさん:2008/02/23(土) 11:55:21
一緒
どっちも projection の訳語
676デフォルトの名無しさん:2008/02/23(土) 13:21:48
トンです。
677デフォルトの名無しさん:2008/02/24(日) 23:44:52
VisualStudio2005でglpngを導入してテクスチャーをやりたいのですが
glpng.hを設定しただけでは上手くコンパイルが通りませんでした。
調べたところd.hatena.ne.jp/minami_SC/20070425/1177462910
のページが出てきて
この通りにやってみたのですが
ここでもコンパイルが通らずエラーを吹いてしまいます。

VisualStudio2005でのglpngを導入方法はできないのでしょうか?
できるのでしたら方法をご教授ください。
678デフォルトの名無しさん:2008/02/25(月) 01:34:10
         |:;:;:;:;:;:;:;:;:;:;:;:;:;:i;:;:;:;:;:;:;:;:;:;:;:;:;|
           |;:;:_:;:_:;:_:;:_;:;_:;:l:;_;:_:;:_:;:_:;:_;:_;|
        |______|_____|
        | 三|  _     _   |三 !
        | 三|  三シ   ヾ三  |三 |
        | 三′  .._     _,,..  i三 |
        ト、ニ| <でiンヽ  ;'i"ィでiン |三.|   エラー内容も貼らずに質問とな!!
        ', iヽ!  、 ‐' /  !、 ーシ |シ,イ
         i,ヽリ    ,' :  !.     |f ノ
         ヾ!    i ,、 ,..、ヽ   lノ
          |      _ _    イ l
            l    ,ィチ‐-‐ヽ  i /、
             ゙i、   ゝ、二フ′ ノ/'"\
              | \  ー一 / /   _,ン'゙\
          ,ィ|、  \     /_,、-'" _,.-''´ `丶、__
       _, イ  | ヽ_ 二=''" _,. -''´  """""´´  ``ー
679デフォルトの名無しさん:2008/02/25(月) 01:54:29
>>677
d.hatena.ne.jp/minami_SC/20070425/1177462910
にある方法は使わずに、VS2005で普通に試してみた。
libc.lib のエラーがでたけど、無視するようにしたら、うまくいったよ。
それ以外のエラーだったら知らん。
680デフォルトの名無しさん:2008/02/25(月) 11:11:49
すみません、エラー内容はこれです。

error LNK2019: 未解決の外部シンボル _main が関数 ___tmainCRTStartup で参照されました。 LIBCMT.lib

無視する方法とかあるんですか?
681677.688:2008/02/25(月) 11:55:04
自己解決しました

最初の設定が悪かったみたいですorz
682デフォルトの名無しさん:2008/03/03(月) 20:11:07

梅宮辰夫の歌に、シンボルロックいうのがあってな

シンボル
シンボル
外部のシンボルぅぅ〜

って
683デフォルトの名無しさん:2008/03/03(月) 20:58:40
なんの誤爆だwww
リンケージの話か??

しかもぐぐったら歌詞違うじゃん
684デフォルトの名無しさん:2008/03/03(月) 21:00:09
ってうあおおぉ勘違いしてんの俺じゃんorz orz orz
くだすれとごっちゃになってたorz
685デフォルトの名無しさん:2008/05/16(金) 11:59:47
OpenGL 3.0
686デフォルトの名無しさん:2008/05/16(金) 14:31:32
出たのかと思ってびっくりしたじゃないか
>Don’t miss the great updates on OpenGL3 at the SIGGRAPH BOF!
あと三ヶ月程待て
687デフォルトの名無しさん:2008/05/16(金) 17:13:21
すみません。話題がないので悪戯してみました。
688デフォルトの名無しさん:2008/05/16(金) 19:01:00
>>687
ショボーン
689デフォルトの名無しさん:2008/05/26(月) 22:55:40
> OpenGL BOF August 13th 6pm - 8pm Wilshire Grand Hotel - Wilshire Room
俺はSIGGRAPH行けないので後は頼んだ…!
690デフォルトの名無しさん:2008/05/28(水) 00:52:45
キューブマップもテクスチャ座標生成も無いOpenGL ES 1.1で
環境マップっぽいことをする方法は……無いよな……
691デフォルトの名無しさん:2008/05/28(水) 10:18:56
つGL_OES_texture_cube_map
692デフォルトの名無しさん:2008/05/28(水) 13:56:26
環境マップするだけなら球状マップかなにかにして
テクスチャ座標だけ自前で毎フレーム計算して渡してやればいいな

しかしES1.1な環境のCPUでそれをやるとなると……
693デフォルトの名無しさん:2008/06/09(月) 19:28:49
OpenGLを使うんじゃなくてmesaみたいにソフトウェアで実装したいのですが、
参考になるソースを紹介していただけないでしょうか?
なるべくシンプルで簡単なのがいいです。
(mesaは大きすぎる)
694デフォルトの名無しさん:2008/06/09(月) 19:53:24
OpenGL関係ねー!!

スキャンライン、レンダリングとかでググってみてください
レイトレで良ければMiniLightとか
ttp://www.hxa7241.org/minilight/minilight.html
695デフォルトの名無しさん:2008/06/10(火) 00:04:29
OpenGLやDirectXのようなAPIが出る前に書かれた
3DCGの解説書はだいたい>>693みたいのばっかりだ。
696デフォルトの名無しさん:2008/06/12(木) 19:04:15
垂直同期待ってくれないので、ネットで垂直同期待つ関数をググったら
wglSwapIntervalEXT
という関数があるのはわかりましたが、
それを利用する方法がわかりません
#include <gl/wgl.h>
と書いても存在しないといわれます。
どうすればいいでしょうか?
697696:2008/06/12(木) 19:14:41
事故解決しました
698697:2008/06/12(木) 19:23:12
嘘です。
glewInit();でエラーが出ました。
699デフォルトの名無しさん:2008/06/12(木) 19:42:31
エラーメッセージは?
700デフォルトの名無しさん:2008/06/12(木) 20:31:03
glewInitはウィンドウ作ってから呼ぶんだぜ
glewInit後wglSwapIntervalEXTに1を渡すと同期あり、0を渡すと同期無しになる
しかしデフォルトは1のはずなんでドライバの設定いじってない限りは
同期取るはずなんだが、設定確認した方が良くないか?
701デフォルトの名無しさん:2008/06/12(木) 20:51:49
この間Ubuntuで初めてOpenGLアプリ書いてみたら
VSyncがオフになっててちょっとびっくり

拡張サポートはGLEEの方が個人的に好きです
702698:2008/06/13(金) 14:09:21
>>699
1です。

>>700
ウィンドウ作って呼ぶと行けました。
ありがとうございます。

>同期
glutInitDisplayMode を GLUT_SINGLE で設定してたので非同期でした。
GLUT_DOUBLE で同期しました。のでwglSwapIntervalEXTは、必要なくなりました><

まあ、でもglewは、今後お世話になりそうなので良かったです。
ありがとうございます。
703デフォルトの名無しさん:2008/06/23(月) 00:39:42
くだすれが落ちてるけど、ここのネタも無いしいいか
704デフォルトの名無しさん:2008/06/23(月) 18:35:21
OpenAge
705デフォルトの名無しさん:2008/06/25(水) 23:26:09
RADEON HDはXPだとジオメトリシェーダーOpenGLでも使えないみたいですが、
Linuxでは使えるんでしょうか?
あげ
706デフォルトの名無しさん:2008/06/25(水) 23:30:47
使えません
707デフォルトの名無しさん:2008/06/26(木) 19:55:46
使えるだろ

4.0プロファイルで
708デフォルトの名無しさん:2008/06/26(木) 19:58:02
っていうかジオメトリシェーダとは言わない

primitive shader
709デフォルトの名無しさん:2008/06/26(木) 20:45:16
ピクセルシェーダーとバーテックスシェーダーは
フラッグメントシェーダーとプリミッチブシェーダーになったのか
710デフォルトの名無しさん:2008/06/26(木) 21:10:05
使わないので自信ないが、結局ジオメトリーシェーダーなんじゃない?
GL_EXT_geometry_shader4

>>705
くだすれでRADEON HDはドライバがどうのでダメとか言ってたような。
glGetStringとかで拡張が使えるか調べてみればわかるのでは

つか何に使ってます?ステンシルシャドウ以外の使い道がよくわからない
711デフォルトの名無しさん:2008/06/26(木) 22:48:40
Fragment Shader
Vertex Shader
Primitive Shader
712デフォルトの名無しさん:2008/06/26(木) 23:44:13
たしかに2006年ごろはそう呼ぶ予定だったっぽいが、
今はopenGL.orgのForumでもGeometry Shaderしか聞いたことない。
正式には調べが付かなかったが、Geometry Shaderでいいんじゃね。
713デフォルトの名無しさん:2008/06/27(金) 21:57:25
ウィンドウズでOpenGLのプログラムを書いていて文字を描画しようと思っています。
以前はwglUseFontOutlinesを使ったフォントクラスを自作していたのですが、
FTGLを使おうと思い立ち既存コードを変更しています。

それで困ったのが、フォントをフォント変更ダイアログから変更する場合で、
これまではChooseFontで得たLOGFONT構造体からフォントを作り、
wglUseFontOutlines→ディスプレイリスト作成という流れで問題なかったのですが、
FTGLの場合はFTGLオブジェクトのコンストラクタにフルパスでフォント名のみを
指定するようになってます。両者で全然勝手が違うのですが、
LOGFONT構造体の情報をFTGLのフォントに簡単に反映させる方法というのは
ないでしょうか?
714デフォルトの名無しさん:2008/06/28(土) 22:55:26
無い
LOGFONTにはFont自体の情報が入ってないみたいだし無理だね
FTGLというかFreeTypeではファイル名か、ファイルの中身自体を指定するしかないよ
それかなんとかしてタイプ名からファイル実体を拾ってくるのをWindowsAPI使ってやるか
715デフォルトの名無しさん:2008/06/29(日) 21:35:21
突然ですが質問があります。WindowsでOpenGLやっています。

glTranslatef(0.0,0.0,5.0*sin(theta*PAI/180));
図形

というのをコンパイルすると、図形が5.0*sin(theta*PAI/180)上を移動しますよね?
で、その移動を制御するにはどうすればいいのでしょうか。例(10秒だけ関数上を動く)

分かりにくい質問文で申し訳ございません。どなたか分かる方がいらしたら
教えてくださいm(_ _)m
716デフォルトの名無しさん:2008/06/29(日) 22:22:42
10秒だけ動かしたらいいんじゃない。
質問の意味もどのレベルの質問かもわからない。
アニメーションの基礎ならGLUTのサンプルでも見てみたらどうでしょう
717705:2008/06/30(月) 22:09:46
>>710
XPでもLinuxでもジオメトリシェーダー使えないんですか!?つまりVistaのみ?
ATI何やってんだ!!
今XP起動中なのでLinux対応はそのうち調べます。
>つか何に使ってます?ステンシルシャドウ以外の使い道がよくわからない
確かに使い道が・・
718デフォルトの名無しさん:2008/07/01(火) 00:21:34
GeometryShaderは拡張だから対応してなくても責められるもんでもないけどな
使えるとなれば使い途は意外にあるもんだぜ
GeForce8系では遅いって話だけどなー
719デフォルトの名無しさん:2008/07/01(火) 01:25:36
GF2x0すらHD2900に負けるらしいけど、DX10でしか使えないのは何とかならんのかなぁ。
720713:2008/07/01(火) 04:20:04
>>714
ないですか。ないということを知ったのが収穫でした。
ダイアログからイタリックやボールド、フォントサイズ等を指定できればと思ったんですが、
LOGFONT構造体で得た情報をFreeType側に反映させるのは
全部自前でやらないといけないわけですね。面倒だなぁ・・・。
721デフォルトの名無しさん:2008/07/02(水) 21:35:59
20msおきにセンサから計測、計算して結果をGLで表示するプログラム作ってます。

「20msおきにセンサから計測、計算」はdisplay()関数の中で
「前回display関数が呼び出されたときから20ms経過してたら計測、計算」ってやろうと思ってるんですが
なんかそもそもアイドル時GlutPostRedisplay()呼ぶようにしてても
display()が呼ばれる周期が20msより遅いように感じます。
1msおきくらいでdisplay()呼ぶ方法ないですか?
(描画自体はもっと更新レート遅くていいんですが)
722721:2008/07/02(水) 21:43:49
もうちょっと言いますと
プログラム起動してmain関数の中でglutMainLoop()に入っちゃった時点で
その後のコードはプログラム終了時まで実行されない、という点さえ何とかなれば
描画部分のみGLのdisplay()関数で行って
20msごとの計測や計算はMain関数の中で
for(;;)
{
20ms経過してれば計測と計算
}
みたいな無限ループ作ってやりたいなと思ってるんですが。
723721:2008/07/02(水) 21:50:02
なので理想系はglMainLoop()使わず処理のループは
for(;;)
{
前回から20ms経ってたら計測計算描画
}
みたいにやりたいです。
要はGLが常時ループで回ってるんじゃなくて
必要なときだけ一瞬仕事してほしい(GDIでLineToで線描くような感覚で)です。
724デフォルトの名無しさん:2008/07/02(水) 21:50:23
displayは表示だけにして
idleの中で時間待ち・計測・計算するとか
725デフォルトの名無しさん:2008/07/02(水) 23:00:22
計測計算を別スレッドにすればいいんじゃね
726デフォルトの名無しさん:2008/07/02(水) 23:05:38
GLUTはそういう用途に向いてないので別なの使うといいよ
glfwなんかが手軽でいい感じ
727デフォルトの名無しさん:2008/07/03(木) 02:29:50
コリジョンの本が高くて買えません。
良質なサンプルとかありませんか?
728デフォルトの名無しさん:2008/07/03(木) 02:35:10
>>721
個人的には、725→726の順で考えるのか良いかと。
boost::threadが手軽(?)に使えていいよ。
729デフォルトの名無しさん:2008/07/04(金) 18:20:26
グラフィックドライバのOpenGL設定についてなのですが、
3Dゲームをなるべく高フレームレートで動かすことを考えて設定するとどうするのが良いですか?
以下に設定項目を書きますのでアドバイスお願いします。

非同期反転: オフ / オン
トリプルバッファ: デフォルト / オフ / オン
フリッピングポリシー: フリップ / ブリット
深度バッファ ビット深度: デフォルト / 16ビット深度バッファ / 24ビット深度バッファ
S3TC テクスチャ圧縮の強制: オフ / オン
FXT1 テクスチャ圧縮の強制: オフ / オン
ドライバメモリフットプリント: 標準 / 低 / 高
テクスチャ色深度: デスクトップ色深度 / 16ビットテクセル / 32ビットテクセル
異方性フィルタ: アプリケーションコントロール / オフ / オン
730デフォルトの名無しさん:2008/07/04(金) 19:04:06
731デフォルトの名無しさん:2008/07/04(金) 19:16:27
「スレッドした最適化」(?)を問答無用でオフ
732デフォルトの名無しさん:2008/07/04(金) 21:15:31
>>730
それのコピペなんですが本当にこの自己解決した回答であってるんですか?
733デフォルトの名無しさん:2008/07/04(金) 21:38:31
ここはプログラム板なのでユーザはスレチ
プログラムの質問にしてネ!
734デフォルトの名無しさん:2008/07/05(土) 23:25:40
こんなもん初歩の初歩じゃねーか
初心者スレで乞食してろ
735デフォルトの名無しさん:2008/07/07(月) 10:45:17
■CPU : Intel(R) Pentium(R) 4 CPU 3.20GHz
VenderID : GenuineIntel
CPUの数 : 2
CPUのスピード : 3188.7MHz
■OS : Microsoft Windows XP Service Pack 2 Ver 5.01.2600
■メインメモリ容量 : 502 MB
空きメモリ容量 : 171 MB
■ハードドライブの容量 :
C:\ : 空き容量: 54.90 GB 総容量: 213.17 GB
D:\ : 空き容量: 18.92 GB 総容量: 19.72 GB
■DirectX : DirectX 9.0c installed
■サウンドカード : Realtek AC97 Audio
■グラフィックカード : Intel(R) 82915G/GV/910GL Express Chipset Family
VidMemTotal : 116 MB
GetAvailableVidMem : 116 MB
VRAM : 128.0 MB
DriverVersion : 6.14.0010.4764

このVRAM容量なんですがこれは3Dゲームをやるときにトリプルバッファを消したほうがいいですかね?
736デフォルトの名無しさん:2008/07/07(月) 11:29:34
それはプログラム技術の質問か?
737デフォルトの名無しさん:2008/07/07(月) 11:52:23
>>735
誘導
PCゲーム
http://game13.2ch.net/game/
738デフォルトの名無しさん:2008/07/08(火) 12:35:25
単純な質問ですみません。
glslにおいてですが、現在フラグメントシェーダ内で数千回のループであれば描画されるのですが、
数万回、数十万回になると黒塗りのオブジェクトあるいは何も描画されない状況になってしまいます。
for文の繰り返しに制限はあるのでしょうか?
739デフォルトの名無しさん:2008/07/08(火) 15:06:28
いつもCgだし、そんなloopしたことないので外してるかもだけど
for文の制御してる変数がoverflowしてるとかは?
65535回までならうまくいくとか、二重ループにするとうまくいくとかないだろか。
740デフォルトの名無しさん:2008/07/08(火) 16:14:37
実行できる命令の数っていうのもあるよ
GLSLだと命令と文が対応しないから明示されてないけど、ARB_fragment_programの制限を見るとなんとなくわかると思う
でも最近のGPUだと制限がかなり緩いんだっけか?
あとVistaだとあんまり長いことGPUに仕事させるとハングしたと思ってGPUの強制リセットがかかるから注意な
741デフォルトの名無しさん:2008/07/08(火) 23:10:41
レスありがとうございます、返信が遅くなってすみません
オーバーフローに関しては言われた通りだったので、ループ変数の型を変更しました。
しかしどうやら根本の原因はループ以外で起きているようです。

おおまかな処理としては1次元配列テクスチャとして色データを送り、その要素をループして足し合わせ計算しています。
この1次元配列テクスチャの要素数が2の15乗を超えると、描画がおかしくなることが新たにわかりました。

もう少し自分で調べてみて、また何か変化があれば質問しますのでよろしくお願いします。
742デフォルトの名無しさん:2008/07/09(水) 10:47:47
GL_MAX_TEXTURE_SIZEを調べるんだ!
というか最大のテクスチャサイズが8192を越えるGPUなんて見たことないぞ
どうしてもというならGL_EXT_texture_buffer_objectなら2^23サイズまでいけるようだ
ただし、普通のテクスチャと使い方がちょっと違うのとGeForce8以降でしか使えない
743デフォルトの名無しさん:2008/07/09(水) 11:57:29
返信ありがとうございます
やはりテクスチャサイズが8192を超えるとだめなんですね
教えていただいた方法を含め、何か別の方法を考えてみます
744デフォルトの名無しさん:2008/07/15(火) 06:17:02
OpenGLのくだすれがねぇ…
ここに質問しちゃうお!
745デフォルトの名無しさん:2008/07/15(火) 06:30:40
はいどうぞ
746デフォルトの名無しさん:2008/07/15(火) 06:47:58
元々質問以外に大した話題があるわけでもないしなw
747デフォルトの名無しさん:2008/07/15(火) 08:04:34
glBindTexture(GL_TEXTURE_2D, 0);はどういう必要があるときに使われるんだお!
↓のコードがあって

glGenTextures(1, &texid); //テクスチャオブジェクト名を生成

glBindTexture(GL_TEXTURE_2D, texid); //
テクスチャオブジェクトを作成
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, imWidth, imHeight,0, GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL);
//グラボメモリにテクスチャをロード
glBindTexture(GL_TEXTURE_2D, 0);//←????????

グラボのテクスチャメモリにロードしたらバインドを解除してもいいのか.....
というかバッファオブジェクトについて詳しいサイトはどこかにないでしょうか。。。
748デフォルトの名無しさん:2008/07/15(火) 10:43:45
>>747
OpenGL1.0の頃は、glBindTexture()でテクスチャオブジェクトを切り替えることができなかったんだヨ。
で、そのデフォルトのテクスチャが、OpenGL1.1以降ではテクスチャオブジェクトの0番になった。
0番だけが他のテクスチャと区別があるわけでもないので、glBindTexture(GL_TEXTURE_2D, 0);は
「バインドを解除」じゃなくてバインドを0番に戻すだけ。

どういう必要があるときに使われるかっていうと・・・0番のテクスチャに切り替えたい時に使われるね。
そのままだけどw
749デフォルトの名無しさん:2008/07/15(火) 19:07:57
質問です。
glRotateを複数回使って物体を回転させているのですが、
回転後の頂点座標が必要なので、仕方ないので自分で計算しています。

任意軸中心の回転をする必要があるので
http://www5d.biglobe.ne.jp/~noocyte/Programming/Geometry/3DRotation.html
の「ベクトルによる表現」を参考に回転をしようとしているのですが、
計算式にベクトルと三角関数の積があって一体どうやって計算していいものかわかりません。

微妙にスレ違いかもしれませんが、もっといい方法などありましたらそれも含めて
教えていただけるとありがたいです。よろしくお願いします。
750デフォルトの名無しさん:2008/07/15(火) 19:13:05
ヒント: glGetFloatv
751デフォルトの名無しさん:2008/07/15(火) 23:11:58
>>749
そのページわざわざ難解に書いてる感じ
本屋か図書館行って自分が理解できる本を探すのが一番でしょう
3Dグラフィックスの本とベクトルの教科書を中心に
こんなところで説明するのは量的にとても無理
752デフォルトの名無しさん:2008/07/16(水) 10:57:24
>>749
> 計算式にベクトルと三角関数の積があって一体どうやって計算していいものかわかりません。

普通にベクトルとスカラーの積ですが何か?
何がわからんのかわからん。高校数学の教科書読み直した方がいい。
(最近高校でどこまで教えているのか知らんけど。)

そのページはいちいち細かい説明してないけど、3次元の内積と外積、
2次元の回転行列がわかっていれば理解できるはず。

最後の回転行列成分の式はちょっとテンソルとか使ってて上記の
範囲外だけど、これは理論計算するときに便利なだけであって
実際のプログラムには使わない方がいいので気にしなくていい。
(エディントンのイプシロンが入った式をそのまま計算するのは
プログラム上効率が悪い。)

わからなければそのページにあるリンク(↓)もたどってみた方がいい。

Mini Tips 1:任意軸周りの回転行列を求める (Java サンプル付)
http://www004.upp.so-net.ne.jp/hiromu-i/tips001.html

OpenGL ES の glRotatef, glRotatex のマニュアル (英語、行列成分が書いてある。)
http://www.khronos.org/opengles/documentation/opengles1_0/html/glRotate.html
753デフォルトの名無しさん:2008/07/16(水) 12:09:46
まぁそうなんだろうけど、glRotateで回転してんなら>>750のようにglGetでMODELVIEWを拾ってくればいいような
VIEW座標じゃいやなら、カメラ設定後にMODELVIEW(=VIEW)を保存しといて逆行列にしてかければワールドになるし
もちろん行列計算の基礎は知ってて当然だけど
754デフォルトの名無しさん:2008/07/16(水) 12:15:15
>>750
一応リファレンスを全部読んでみましたがどう使ったらいいんでしょう??

>>752
ちょっと本借りてきます。ありがとうございます。

>>752
PcosθならPのそれぞれの成分にそれぞれcosθをかければよい、
ということでしょうか?それだとうまくいきませんでした。
計算が間違っているのかもしれませんが・・・・。
リンク先も参考にしてみます。
755デフォルトの名無しさん:2008/07/16(水) 12:17:54
GLfloat matrix[16];
glGetFloatv(GL_MODELVIEW_MATRIX, matrix);
756デフォルトの名無しさん:2008/07/16(水) 12:31:13
>>753
なるほど・・・。そういう方法があるんですね。勉強不足であまり理解できていませんが・・・。
少し勉強してみます。ありがとうございます。
757デフォルトの名無しさん:2008/07/16(水) 12:34:02
>>755
わざわざありがとうございます。
もしかしてこれで取得した行列にもともとの座標をかければ
ワールド座標上での回転後の座標になりますかね?
>>754の人の話だとそう簡単じゃないか。
どちらにせよ勉強不足のようですね。みなさんありがとうございました。
758752:2008/07/16(水) 13:13:25
>>754
> PcosθならPのそれぞれの成分にそれぞれcosθをかければよい、
> ということでしょうか?それだとうまくいきませんでした。
> 計算が間違っているのかもしれませんが・・・・。

それでいいはずなんだけど…。間違っている可能性としてまず思いつくのは,
回転軸方向のベクトルaがちゃんと単位ベクトルになっていないんじゃないかな?
(glRotate() は単位ベクトルじゃなくても自動的に正規化して計算してくれる。)

次に思いつくのは回転方向が逆とか。(これは表示させればすぐわかると思う。)

それでもだめなら,ソース晒してみれば?
759デフォルトの名無しさん:2008/07/16(水) 13:19:25
>>757
>>753の言っているように、>>755の行列をかけるとワールド座標を飛ばしてビュー座標まで変換されちゃう。
OpenGLはモデル変換(ローカル→ワールド)とビュー変換(ワールド→ビュー)を区別せずに、
MODELVIEWという1つのスタックで管理してるからね。

ということで、これまた>>753の繰り返しになるが、
gluLookAt等でカメラを設定した直後にglGetでモデルビュー行列(=ビュー行列)を保存しておき、
あとでその逆行列をかけてやればいい。

[ワールド座標] = [ビュー行列の逆行列]×[モデルビュー行列]×[ローカル座標]
760デフォルトの名無しさん:2008/07/16(水) 19:15:51
ttp://www.asahi-net.or.jp/~yw3t-trns/opengl/samples/texjpeg/index.htm
このプログラムをダウンロードしたんですが
「入力ファイル'jpeg-6b\libjpeg.lib'を開けません」とコンパイルエラーが出ます。
libjpeg.libはネット上で発見してダウンロードし、
それを入れたフォルダにパスを通した(VCのツール→オプション→プロジェクトで設定)したのですが
やっぱりエラーが出ます。
何がいけないのでしょうか?
(普通に「libjpeg.libが見つかりません」と言われる場合はこれでよかったと思うのですが
「jpeg-6b\libjpeg.libが見つかりません」の場合は違うのでしょうか)
761デフォルトの名無しさん:2008/07/16(水) 19:28:34
762デフォルトの名無しさん:2008/07/16(水) 21:04:52
> libjpeg.libはネット上で発見してダウンロードし、

よーそんなこえーことできるなー
763749:2008/07/17(木) 23:15:46
>>758
ありがとうございます。
今はとりあえず>>759の方がおしえてくださった方法でやろうとしているのですが、
いずれ必要になると思うのでそのときまた質問させていただくかもしれませんが
そのときはよろしくお願いします。

>>759
丁寧にありがとうございます。
色々なHPを参考にしてビュー行列の逆行列を計算しようとしたのですが、
どのプログラムを使っても正しく逆行列を求めることができませんでした。

たとえば↓を使うと、
http://www.toyokeizai.co.jp/pub/c_download/program/program2.txt
途中でminv_row_transが0を返してしまい
「singular matrix」と出力されてしまいます。

もうすでにOpenGLというよりは行列計算の話になってしまっていますが、
どなたかご指導お願いします。
764デフォルトの名無しさん:2008/07/18(金) 00:14:39
そのプログラムについてはわからないけど(floatの配列をdoubleを受け取る関数に渡してたり?)
ビューマトリックスは回転と移動しかしてないから、回転部分を転置行列にして逆移動成分を掛けたのが逆行列に。
でもとりあえずWindowsならD3DXMatrixInverseを使っちゃえば?
765デフォルトの名無しさん:2008/07/18(金) 01:24:10
766749:2008/07/18(金) 17:03:51
わざわざプログラムまで示してくださってありがとうございます。
申し訳ないのですが実行してみたところやっぱりだめでした。
実行すると結果の行列のそれぞれの要素が他のプログラムで実行したとき同様に
-1.#INDと表示されてしまいました。
関数内のLU分解のところで計算に失敗しているようです。
ビュー行列は、
1 0 0 0
0 0 1 0
0 -1 0 0
0 0 -80 1
に今なっているのですが、これが正則行列ではないので逆行列が求められないのでしょうか。
質問ばかりですみませんがよろしくお願いします。
767デフォルトの名無しさん:2008/07/18(金) 17:09:24
どう見ても正則じゃん
768デフォルトの名無しさん:2008/07/18(金) 17:24:31
本当にビュー行列がその値になってるのかprintfでもなんでも出力してみた?
その行列なら手でも簡単に逆行列出せちゃうぜ
769デフォルトの名無しさん:2008/07/18(金) 17:58:29
764だけどちょっと書いてみた。逆回転して逆移動してるだけだから、Viewマトリックス限定。
void getInverseVMatrix(float src[], float inv[])
{
for(int x=0;x<3;++x){
for(int y=0;y<3;++y){
inv[y*4+x] = src[x*4+y];
}
}
inv[3] = inv[7] = inv[11] = 0.0;
inv[12] = (-src[12]) * inv[0] + (-src[13]) * inv[4] + (-src[14]) * inv[8];
inv[13] = (-src[12]) * inv[1] + (-src[13]) * inv[5] + (-src[14]) * inv[9];
inv[14] = (-src[12]) * inv[2] + (-src[13]) * inv[6] + (-src[14]) * inv[10];
inv[15] = 1.0;
}
770デフォルトの名無しさん:2008/07/20(日) 01:48:42
(このスレでいいのかな)
Symbian OS上での携帯電話ソフトウェアの開発(C++)に関わっているのですが、

これからの業務でOpenGL ESを覚えないといけなくなりました。(普通のOpenGLも触ったこと無い)

無印OpenGLの資料ならぐぐればいくらでもあるんですが、

ESが付くほうは断片的にしか情報が無い、英語でしかない、という状況で、何から覚えればいいのかサッパリ。

無印OpenGLの資料もある程度は参考になるんですが、ESでは実装されていない関数があったりで難航しております。

2ちゃん見ても専用スレも無いようだし、手がかりも無さ過ぎて途方にくれています。どこかいい資料ありませんか?

あるいは、「こうやって習得した」など、経験者の方いらっしゃったらアドバイスいただけませぬか・・





いま悩んでいる問題について。
ある1平面を色がグラデーションになるように着色したいのですが、
ちょうどこんな感じに。
http://www.ccad.sist.chukyo-u.ac.jp/~mito/ss/program/C/DialogBase/openGL/model/index.htm
上記資料を見ると、glColor3f()で「頂点ごとの色指定」して、glShadeModel(GL_SMOOTH)に指定すれば中間色を計算して塗ってくれるようですが。
ESではglColor3f()は実装されていないようで・・・
771デフォルトの名無しさん:2008/07/20(日) 02:10:40
頂点ごとの色は glColorPointer で色配列を指定して glEnableClientState(GL_COLOR_ARRAY) で有効化するといいよ
772デフォルトの名無しさん:2008/07/20(日) 02:19:11
>>770
まずはkhronosの資料読むしかねーだろ
http://www.khronos.org/opengles/
概観つかむならここがよさげ
http://www.asahi-net.or.jp/~yw3t-trns/opengl/opengles/index.htm
773デフォルトの名無しさん:2008/07/20(日) 02:26:19
glColor3fとかがないのはESだったらもっとオーバーヘッドの小さいもの
使えってことじゃないかと。
まずはOpenGL Distillerとか読んでOpenGLの大体の感触を掴んだらどうでしょ。
774デフォルトの名無しさん:2008/07/20(日) 04:48:36
仕事でGL触れる人裏山視す
775デフォルトの名無しさん:2008/07/20(日) 09:04:46
>>770
ESは基本的に頂点配列での描画じゃない?
glDrawArrays, glDrawElements辺りを調べればいいんじゃないかと。
776デフォルトの名無しさん:2008/07/20(日) 13:56:24
OpenGL ESゲーム開発技法っつー本があるよ
ただしOpenGLを知っている人向けに書かれてるのでOpenGL知らないと難しいかもな
777デフォルトの名無しさん:2008/07/20(日) 16:57:12
#define glColor3f(r,g,b) glColor4f(r,g,b,1.0)
778デフォルトの名無しさん:2008/07/20(日) 23:22:42
そーゆー問題じゃないだろw
779デフォルトの名無しさん:2008/07/21(月) 17:24:08
両端が丸まっていて、太くアンチエイリアシングが効いているラインを書きたいんだけど、GL_LINES に作用する何らかのモードがあったりしない?

なければストリップで書くのだけど・・・。
780デフォルトの名無しさん:2008/07/21(月) 22:42:46
端にアンチ効いたポイント置くのは?
781デフォルトの名無しさん:2008/07/21(月) 23:06:05
質問なんですが…

GLSLで描画コール(glDrawElements())に対してシェーダーを記述しているのですが、
この一連の描画を使うシェーダーを更にセットしたい場合、

glUseProgram()でそのシェーダーをセットして…
あれ?最初の描画コール用のシェーダーセットしたら、シェーダー上書きしちゃう?

って感じなのですが、何かやり方があるのでしょうか?
よろしくお願いします。
782デフォルトの名無しさん:2008/07/22(火) 01:06:39
目眩がするような質問だな。
783デフォルトの名無しさん:2008/07/22(火) 09:10:29
>>780
その発想は無かった。やってみる。ありがと。
784デフォルトの名無しさん:2008/07/23(水) 00:43:14
あんたらすげぇぜ
785デフォルトの名無しさん:2008/07/23(水) 03:45:35
>>778
いや、実際こう書けるんだからglColor3fいらないよね、ってのがESのポリシーなわけで
786デフォルトの名無しさん:2008/07/23(水) 04:21:52
質問者はグラデーションしたいって話なんで、
ESにはglBegin()が無いんだからglColor4fでどうこうなるってもんでもないんじゃ

787デフォルトの名無しさん:2008/07/23(水) 08:45:21
2つの異なるスプライン曲線で囲まれた内側を塗りつぶしたいのですが、
glBeginとglEndの内側で↓のようにエバリュエータを切り替えることは
できなかったと思います。良い方法はないでしょうか。

glBegin(GL_POLYGON); // ポリゴン描画開始
glMap1d(..., &ctrlpoint0[0][0]); // スプライン曲線その1
glEnable(GL_MAP1_VERTEX_3);
for (int i=0; i<=30; ++i) glEvalCoord1d((GLdouble)i/30.0); // プロット
glDisable(GL_MAP1_VERTEX_3); // その1終わり
glMap1d(..., &ctrlpoint0[0][0]); // スプライン曲線その2
glEnable(GL_MAP1_VERTEX_3);
for (int i=0; i<=30; ++i) glEvalCoord1d((GLdouble)i/30.0); // プロット
glDisable(GL_MAP1_VERTEX_3);
glEnd(); // ポリゴン描画終了
788デフォルトの名無しさん:2008/07/23(水) 08:52:01
そもそもGL_POLYGONは凸型の形状しか塗れないと知ってる?
凹んでる頂点があったらアウト
789デフォルトの名無しさん:2008/07/23(水) 09:24:57
>>787
2本の曲線で囲まれた内側とか言われても困るんで、
赤本の「エバリュエータとNURBS」のとこ読んでください
790787:2008/07/23(水) 09:49:13
>>788
例え話です。

>>789
うまく伝わらなかったかもしれませんが、
「端点A0〜端点A1」という曲線と「端点B0〜端点B1」という曲線があったとき、
A0         A1
  ■■■■■■
B0         B1
こんな形のリボンを描きたいと思っています。
つまり■で示したA0〜A1〜B1〜B0〜A0という領域を塗りつぶそうとしています。(曲線内部が潰れることは今は考えない)
各セグメントの座標がわかればA0からB1に向かってTRIANGLE_STRIPで
A、B、A、B…と交互に点を打っていけば目的は達成できるのですが、
エバリュエータから座標を取得する関数はOpenGLにはなかったように思います。
自前でベルンシュタイン関数を計算してもたかが知れてるのでそうしてもいいのですが、
その前によい案があればと思い質問しました。
赤本は手元にないのですが…解決方法が載っているならそちらを参照します。
791デフォルトの名無しさん:2008/07/23(水) 10:38:05
openGLでやる方法がわからないのもあるけど、
自分だったら自前で計算するかな。そのほうが簡単で融通も利くような気がするし。
アニメーションしなければ1度の計算ですむし、アニメーションするならねじれた場合の再分割を処理できる
792787:2008/07/23(水) 13:26:29
ぐはぁ。末尾のようなコードを書きましたが毎回生成するとエバリュエータ使うより数倍遅いです…。
>>791 glTranslateやglScaleを使って端点の移動を効率良く反映させる方法を考えないといけなさそうです。

template <int N> struct power { static double value(double base) { return base*power<N-1>::value(base); } };
template <int N, int M> struct factorial { static double value(void) { return N*factorial<N-1,M-1>::value(); } };
template <int N, int M> struct combination { static double value(void) { return factorial<N,M>::value()/factorial<M,M>::value(); } };
template <int N, int M> struct bernstein_weight {
 static vector<double> value(double par) {
  vector<double> retval(1, combination<N,M>::value()*power<N-M>::value(1.0-par)*power<M>::value(par));
  vector<double> tmp(bernstein_weight<N,M+1>::value(par));
  retval.insert(retval.end(), tmp.begin(), tmp.end());
  return retval;
 }
};
template <int N> vector<vec2<double> > generate_spline_points(const vector<vec2<double> >& ctrlpoints, int number_of_segments) {
 assert(ctrlpoints.size()==N+2); // +2は端点
 vector<vec2<double> > retval(number_of_segments+1);
 for (int i=0; i<=number_of_segments; ++i) {
  vector<double> weight(bernstein_weight<N+1,0>::value(double(i)/number_of_segments));
  for (int j=0; j<N+2; ++j) retval[i] += weight[j]*ctrlpoints[j];
 }
 return retval;
}
793デフォルトの名無しさん:2008/07/23(水) 14:59:03
なんかすごい遅そうなコードなんだが。Cで書いてみれば?
794749:2008/07/23(水) 18:41:04
レスが遅くなって申し訳ありません。
>>769
わざわざ関数まで作っていただいてありがとうございます。
>>759の方を参考に関数を使ってみたのですがうまく使うことができませんでした。
ビュー行列が
1 0 0 0
0 1 0 0
0 0 1 0
0 0 -80 1
その逆行列が
1 0 0 0
0 1 0 0
0 0 1 0
0 0 80 1
になりました。
(続きます)
795749:2008/07/23(水) 18:41:49
モデルビュー行列が、
1 0 0 0
0 1 0 0
0 0 1 0
0 0 -90 1
これは、ためしにglTranslateで-10だけz軸方向にずらしたものです。
逆行列とビュー行列の積が、
1 0 0 0
0 1 0 0
0 0 1 0
0 0 -10 1
になりました。
これをローカル座標にかけると上の行列の4行目が無視されて、
結局座標が移動されないことになってしまいます。
とりあえず縦、横逆にして掛けちゃえ、と思いましたが、
それだと回転がうまくいかないようです。
何度もすいませんがご指導お願いします。
796デフォルトの名無しさん:2008/07/23(水) 19:28:53
>>795
ローカル座標を縦ベクトルとして、行列を左からかけてるってことだよね?
その場合、OpenGLの行列の解釈は次のようになる。

┌ m[0] m[4]  m[8]. m[12] ┐
│ m[1] m[5]  m[9]. m[13] │
│ m[2] m[6] m[10] m[14] │
└ m[3] m[7] m[11] m[15] ┘

赤本にも書いてある基本中の基本だね。

もし>>794-795の行列表記のままで行きたいなら、
座標を横ベクトルにして、行列を右からかけないと駄目。
その場合、>>759の掛け算の順序も全部逆になるから注意。
(DirectXのヘルプの流儀はこっち)

まあ、これはあくまで頭で考えるときの表記上の問題で、
コーディング的にはどっちもまったく同じことだけど。
797769:2008/07/23(水) 23:56:55
>>795
>>796さんの言われてるとおり、

元の座標位置を p ( x, y, z, 1 )、モデルビューマトリックスをMv 逆ビューマトリックスをIvとすると
p * Mv * Iv がワールド座標位置になる

表記の違いで、移動成分を第4列に書く(openGL流)なら、位置がたてベクトルになって全部逆に書くが、
プログラム的にはなにも変わらない

赤本の付録F 「同時座標と座標変換行列」の所読めばわかるよ
798デフォルトの名無しさん:2008/07/24(木) 22:19:50
すごいぜあんたら
799デフォルトの名無しさん:2008/07/24(木) 23:31:28
すみません、3次元空間上で、BMP画像を貼り付けたテクスチャが手前と奥に2つあるんですが、
BMPの特定の色だけ、透過色に指定して、手前に配置されたテクスチャの透過色の部分から、
奥に配置されたテクスチャに貼り付けられたBMP画像が見えるようにするには、
どうしたらいいんでしょうか? よろしくお願いします。
800デフォルトの名無しさん:2008/07/25(金) 01:31:52
長方形にテクスチャマップしたものを
台形に変えたときに斜線が入った感じにテクスチャマップされるのを
解消するにはどうしたらいいですか。
801デフォルトの名無しさん:2008/07/25(金) 01:34:44
>>800
トランスフォーム済み頂点でやってるならXYZRHWのrhwをどうたらこうたら
802801:2008/07/25(金) 01:36:18
すまん、DirectXじゃなくてOpenGLのスレだった。
なんにしても、Perspective Correctが関係していると思う。
803名無しのせんべえ:2008/07/25(金) 01:50:58
OPENGL初心者です。
お伺いします。
OSはVISTA、開発ツールはVisualC++2008 ExpressEditionです
GLUT関連のファイルがあるホームページからglut-3.7.6-binをダウンロードし、
指定のディレクトリにそれぞれのファイルを置いたのですが、コンパイルが
うまくいきません。エラー内容は以下になります。おたすけください。。
Shogi3DCon.obj : error LNK2019: 未解決の外部シンボル __imp____glutInitWithExit@12 が関数 _glutInit_ATEXIT_HACK@8 で参照されました。
C:\PRG\SHOGI\Shogi3DConsoleThree\Shogi3DCon\Debug\Shogi3DCon.exe : fatal error LNK1120: 外部参照 1 が未解決です。
804749:2008/07/25(金) 02:37:26
>>796>>797
行列の表記法が間違っているとは思いませんでした。
無事に変換後の座標を取得することができました!
今までレスしてくださったみなさんも含めて本当にありがとうございましたm(_ _)m
805デフォルトの名無しさん:2008/07/25(金) 04:12:07
806デフォルトの名無しさん:2008/07/26(土) 13:23:30
MFC + OpenGL で組んでいるアプリがあるんだけど、本体となるSDIとモードレスダイアログがあり、
それぞれ両方のウインドウにOGL領域を持ち、OGLコンテキスト(主にテクスチャ)を共有したいのだけど、可能だろうか?

単純に、それぞれの領域に同じPIXELFORMATDESCRIPTORでOGL領域を作り、
wglCreateContext(SDI_DC)で作ったコンテキストのIDをモードレスダイアログと共有したんだけど、
モードレスダイアログ側の挙動が不可解な状態に陥るのみだった。(何故か、glClearColor のステートだけは有効)

何か、助言や参考になる資料などないだろうか?
807デフォルトの名無しさん:2008/07/26(土) 14:01:05
コンテキストは別々に作って wglShareLists でテクスチャオブジェクト共有すればいいんじゃない
808名無しのせんべえ:2008/07/26(土) 15:52:18
>>803
解決しました。
解決方法はプログラムソースがあるディレクトリに
glut32.libがありましたので、そちらを削除しました。
おさわがせしました
809デフォルトの名無しさん:2008/07/27(日) 00:05:00
glGetString()についての質問なんですが、レンダリングコンテキストを作成し、
wglMakeCurrent()でカレントコンテキストを設定した後にglGetString(GL_EXTENSIONS)
を実行するとAccessViolationが発生してしまいます。
カレントコンテキストを設定しない場合はNULLが帰ってくるのですが…
何が原因なんでしょうか?
810デフォルトの名無しさん:2008/07/27(日) 17:01:04
今, TurboC++でOpenGLを学習中です。下のソースコードで, Coneを青色にするには, どうしたらいいんでしょうか?
テクスチャの色と同じ赤色になって困っています。よろしくお願いします。
GLfloat blue[] = { 0.0, 0.0, 1.0, 1.0 };
void __fastcall TForm1::Display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glCallList(listid);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, blue);
glColor3f(0.0, 0.0, 1.0);
glutSolidCone(1.0,0.5,3,3);// 青色にしたい
glFlush();
}
void __fastcall TForm1::MakeDisplayList()
{
listid=glGenLists(1);
glBindTexture(GL_TEXTURE_2D,texname);
glNewList(listid,GL_COMPILE);
glBegin(GL_POLYGON);
glTexCoord2d(0.0,0.0); glVertex3f(1.0,-0.5,0.0);
glTexCoord2d(1.0,0.0); glVertex3f(2.0,-0.5,0.0);
glTexCoord2d(1.0,1.0); glVertex3f(2.0,0.5,0.0);
glTexCoord2d(0.0,1.0); glVertex3f(1.0,0.5,0.0);
glEnd();
glEndList();
}
811810:2008/07/27(日) 17:36:38
glutSolidCone()の前にglDisable(GL_TEXTURE_2D);でいけました。
おさわがせしました
812デフォルトの名無しさん:2008/07/29(火) 22:26:15
>>809
特に発生しないぞ。
wglCreateContext();
が失敗しているとか。

MFC使ってません?
C○○App::InitInstance()の中で、glGetString(GL_EXTENSIONS)する場合、
タイミングによっては、glGetString(GL_EXTENSIONS)が失敗する。
813デフォルトの名無しさん:2008/07/30(水) 14:12:08
>>812
すいません、自己解決しました。
実際にはglGetString()で発生しているのではなく、マーシャリングを失敗しているのが原因でした。
VSの例外アシスタントがなぜか機能しなかったため、自分が勘違いしてたみたいです orz
814デフォルトの名無しさん:2008/08/02(土) 10:45:47
スイマセン、2D画像表示の方法がイメージ掴めないんです
板ポリにはっつけて描画するのは分かるんですが
LookAtで視点変えちゃうと傾くし、拡縮されるし・・・
815デフォルトの名無しさん:2008/08/02(土) 10:58:25
>LookAtで視点変えちゃうと傾くし、拡縮されるし・・・

だったら視点を変えなければいいと思うよ
816デフォルトの名無しさん:2008/08/02(土) 11:40:40
>815
そしたら3Dオブジェクトの描画が
817デフォルトの名無しさん:2008/08/02(土) 11:47:59
パースで視野角をめちゃめちゃ小さくすればいいんじゃないの。
でもどんなに頑張っても若干はゆがむ。目に見えない程度にはできるはず。
818デフォルトの名無しさん:2008/08/02(土) 11:49:02
2Dの時と3Dの時とそれぞれ適切なカメラ位置にすればいい
819デフォルトの名無しさん:2008/08/02(土) 11:57:12
>>817
>>818
ありがとう、もう少しで解決できそうだ
2D描画の時と3D描画の時で射影行列もろもろを再設定してる
820デフォルトの名無しさん:2008/08/02(土) 19:40:18
Perspective じゃなくて、素直に Ortho を使えって。
821デフォルトの名無しさん:2008/08/03(日) 00:01:10
2D表示にパース付き射影行列使う男の人って…
822デフォルトの名無しさん:2008/08/03(日) 00:41:29
ステキ!
823デフォルトの名無しさん:2008/08/03(日) 19:37:51
素朴な疑問なんですが

glTranslated(x, y, z);
glBegin(GL_POINTS);
glVertex3d(0, 0, 0);
glEnd();


glBegin(GL_POINTS);
glVertex(x, y, z);
glEnd();

では後者の方が速いですよね?
824デフォルトの名無しさん:2008/08/03(日) 19:42:23
glTranslatedの呼び出し1回がない分、後者の方が速いだろうな
825デフォルトの名無しさん:2008/08/03(日) 19:46:16
レベル低い質問に答えて頂いてありがとうございました
826デフォルトの名無しさん:2008/08/03(日) 20:23:59
gl*っつー関数は(全部じゃないが)ドライバと通信するコストがかかるので、なるだけ呼ぶ回数は減らした方がよい。
が、コードの再利用をするならある程度処理を使い回せるようにした方がよい。
そしてgl*コールの関数を1つ減らすよりはもっと大枠を見直した方がずっと高速になる。

なので関数1つの有無に拘るのはやめといたほうがいい。老婆心ながら。
827デフォルトの名無しさん:2008/08/04(月) 00:36:59
823の場合は、関数呼び出しのコストよりむしろ
行列操作のコストの方が大きな問題になる気がする。
まぁ、並行移動なら、逆行列の生成も早いだろうけど・・・。
828デフォルトの名無しさん:2008/08/04(月) 01:49:16
アルゴリズムの改善はハードの進歩に優る
829デフォルトの名無しさん:2008/08/04(月) 22:25:44
いいこと言うなぁ
830デフォルトの名無しさん:2008/08/05(火) 20:55:45
テクスチャのサイズに関する質問なんですが、テクスチャの最大サイズを取得する場合、
glGetInteger(GL_MAX_TEXTURE_SIZE, &size)
などとして取得すると思うのですが、2Dのテクスチャを使用する場合、この後に環境によっては2や4で
割らなければいけない環境もあるらしいのですが、そういう環境なども考慮して最大サイズを割り出す
にはどうしたらいいでしょうか?
GeForce7600GSでは最大サイズがそのまま使えたりするので、単純に2で割ればいいというわけではない
みたいなのですが…
831デフォルトの名無しさん:2008/08/05(火) 21:02:41
テクスチャプロキシ
832デフォルトの名無しさん:2008/08/05(火) 21:45:50
>>831
ありがとうございます。うまくサイズを取得できました。
しかし、ついでにNPOTテクスチャも使用してみようと思ったのですが、最大サイズからとりあえず-1して

GLint maxTeSize = 4096;//取得した最大サイズ
GLint width = 0;
maxTexSize -= 1;
glTexImage2D(GL_PROXY_TEXTURE_2D, 0, 4, maxTexSize, maxTexSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);

とすると4095が帰ってくるのですが、試しに4095x4095なイメージをでテクスチャを作ろうとしても
うまく作成できません。4096x4096なテクスチャは作成できるのですが…
833デフォルトの名無しさん:2008/08/05(火) 21:56:29
うまく作成できませんだけじゃ何もわからないよ。
問題が再現する最小限のコードか、せめてglGetErrorの結果を貼ろうよ。
834デフォルトの名無しさん:2008/08/05(火) 22:39:49
>>833
すいません、>>832を書いた後にOpenGLの設定をいじって遊んでいたら4095x4095のテクスチャが
作成できるようになり、また、以前の設定に戻しても作れるようになってしまいました orz
どうやらこちらの環境依存の問題だったようです。
もうちょっといじってみてまた作成できなくなったらちゃんとglGetError()の結果を張りにこようと思います。
お手数をおかけしてすいませんでした orz
ありがとうございました。
835デフォルトの名無しさん:2008/08/06(水) 13:12:30
何がすいませんだ,何を叱られてるのか全然分かってないな
「以前の設定」を具体的に書かないと情報として(他の人の)役に立たないだろ
同じミスを二度しちゃダメだ
836デフォルトの名無しさん:2008/08/07(木) 00:12:27
あっそw
837デフォルトの名無しさん:2008/08/07(木) 04:45:58
自分からテスト専門です、って宣言してる派遣テスターって何なの?

将来プログラマとかSEになりたい、とかならわかるけど。
向上心ないよね、頑固だし。
そういう派遣テスターって、仕様書は読めない、
テスト仕様書も作れない、テストプログラムも作れない
やれることは「テキトーにプログラムを触る」ことだけ。

俺は派遣プだけどさ、こういう派遣テスターがいると
派遣全体がバカにされるんだよ。
テスト専門派遣なんて氏んで欲しいよ、まったく。

今日も正社員の人が派遣テスターに仕様書を読んで
テスト仕様書を作ってください、って説教してたよ。
その派遣は頑固に「何故、仕様書が必要なんですか?」って
反論してたから、きっとテスト専門派遣テスターだな。
仕様書も読まず、テスト仕様書も作らず、ただテキトーに
プログラム触るだけで給料もらおうなんて頭おかしいんじゃねーの?

あ〜あ、あの派遣テスターが3ヵ月後に切られるまで、
仕様書も読まねーでテキトーにテストしたバグ票がまわってくんのかよ。
そんな糞なもん、読んで処理する派遣プの身にもなってくれよ。
うわ〜、しかもそいつが切られる3ヵ月以内に中間納品あるじゃねーか!
テスト仕様書もなしにテキトーにテストして納品か。
中間納品後にソッコウクレームでデスマ必至だな。俺の休みも返上かよ。

派遣専門テスターさんよ、少しは向上心持てよ!
頑固な性格直して仕様書読めよ!テスト仕様書作れよ!
838デフォルトの名無しさん:2008/08/07(木) 08:42:16
スレタイ読めよ!
まで読んだ
839デフォルトの名無しさん:2008/08/07(木) 11:38:37
向上心がないから派遣やってるんじゃないの?
840デフォルトの名無しさん:2008/08/07(木) 11:40:06
>>839
コピペに反応するなよ
841デフォルトの名無しさん:2008/08/07(木) 12:17:10
向上心もなくまともにテストができない派遣なんて切ればいいだろ
842デフォルトの名無しさん:2008/08/07(木) 12:43:38
843デフォルトの名無しさん:2008/08/09(土) 01:02:46
俺は日曜SWだけど俺は向上心ありすぎて仕事じゃできないだろうなぁ
844デフォルトの名無しさん:2008/08/10(日) 21:05:21
簡単な光源の勉強をして、プログラムを組んだのですが、動きません。
いろんなサイトを見てもこれで動くような気がするんですが、環境的な問題でしょうか。
コンパイラはBorland C++ 5.5.1です。

#include <windows.h>
#include <GL/glut.h>

const GLfloat lightPos[] = { 3 , 0 , -2 , 0 };
const GLfloat lightCol[] = { 1 , 0 , 0 , 1 };

void disp( void ) {

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glBegin(GL_POLYGON);
glNormal3f(1.0 , 1.0 , 1.0);
glVertex3f(0.0 , 0.0 , 1.0);
glVertex3f(0.0 , 1.0 , 0.0);
glVertex3f(1.0 , 0.0 , 0.0);
glNormal3f(-1.0 , -1.0 , -1.0);
glVertex3f(0.0 , 0.0 , -1.0);
glVertex3f(0.0 , -1.0 , 0.0);
glVertex3f(-1.0 , 0.0 , 0.0);
glEnd();

glFlush();
}
845デフォルトの名無しさん:2008/08/10(日) 21:06:20
int main(int argc , char** argv) {

glutInit(&argc , argv);
glutInitWindowPosition(50 , 50);
glutInitWindowSize(400 , 400);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);

glutCreateWindow(argv[0]);
glutDisplayFunc(disp);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(1 , -1 , -1 , 1 , 2 , 10);

glLightfv(GL_LIGHT0 , GL_POSITION , lightPos);
glLightfv(GL_LIGHT0 , GL_DIFFUSE , lightCol);

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);

glutMainLoop();
return(0);
}
846デフォルトの名無しさん:2008/08/10(日) 21:16:50
モデルビュー行列が初期化されてない。
847デフォルトの名無しさん:2008/08/10(日) 21:34:37
disp()内でglClear()の次の行にglLoadIdentity()を入れてみましたがエラーで止まります。
848デフォルトの名無しさん:2008/08/10(日) 21:49:14
glMatrixMode(GL_MODELVIEW);
ってfrustumの下にでも書いてみ。
849デフォルトの名無しさん:2008/08/10(日) 21:51:35
やっぱりだめです
850849:2008/08/10(日) 22:04:20
すいません解決しました。
851デフォルトの名無しさん:2008/08/11(月) 00:32:53
なんでこう、人にものを尋ねておきながら、分かった後は
「解決しました」の一言で放ったらかしな人間が多いのかねぇ・・・。
理解に苦しむわ。
852デフォルトの名無しさん:2008/08/11(月) 01:22:04
全く
何をどうしたら解決したかを書くのは最低限のマナーというか
掲示板のルールなんだが
853デフォルトの名無しさん:2008/08/11(月) 01:25:43
あっそw
854デフォルトの名無しさん:2008/08/11(月) 03:53:33
この内容では要らないだろう。
欲しいのか?>>652
855デフォルトの名無しさん:2008/08/11(月) 07:21:30
内容の程度によらず書くべき。
856デフォルトの名無しさん:2008/08/11(月) 09:27:07
カンマの前にスペースって新しいな
857デフォルトの名無しさん:2008/08/12(火) 12:32:22
OpenGL3.0来てる
ttp://www.khronos.org/opengl/

なにこの最新拡張取り込んだだけの3.0は…
ゆっくりした結果がこれかよ!

ものすごい数のAPIは削除されてるけどな
858デフォルトの名無しさん:2008/08/12(火) 15:57:54
OpenGLで、テクスチャ座標の補間についての質問なのですが、
正方形のテクスチャを台形のような形に張った場合に、線形に変形するのではなく、
Photoshopの変形の遠近法みたいな補間をしてくれる拡張があると
ちらっと聞いたような気がするのですが、そんなものはないのが正解でしょうか。
つまり、上が狭い台形に張った場合に、下から上に向かって縦の座標もどんどん狭く
変形されていってほしいのですが。
859デフォルトの名無しさん:2008/08/12(火) 16:19:01
>>858
テクスチャ座標の4番目の要素 (q座標) を狭さ・広さにあわせて調節する
860デフォルトの名無しさん:2008/08/12(火) 16:20:11
>>858

>>805のやり方で物足りないならフラグメントシェーダーでやるのが簡単じゃ
861デフォルトの名無しさん:2008/08/12(火) 16:29:09
>>859-860
ありがとうございます!
まさにそれで出来ました。感謝感激です!

OpenGLのテクスチャ座標は(s, t, r, q)で表されて、
最終的に使われる座標は(s/q, t/q, r/q)になる、という話ですよね。
で、glTexCoord2fで(x,y)とかすると、s=x, t=y, r=0, q=1になる、と。
助かりました。
862デフォルトの名無しさん:2008/08/14(木) 12:44:53
Driver 177.89 - OpenGL 3.0
http://developer.nvidia.com/object/opengl_3_driver.html
Desktop: GeForce 8000 series or higher; GeForce GTX 260, 280; Quadro FX 370, 570, 1700, 3700, 4600, 4700x2, 5600
Notebook: GeForce 8000 series or higher; Quadro FX 360M, 370M, 570M, 770M, 1600M, 1700M, 2700M, 3600M, 3700M
863デフォルトの名無しさん:2008/08/16(土) 18:07:45
void display(void)
{
glPolygonMode(GL_FRONT,GL_LINE);
glPolygonMode(GL_BACK,GL_LINE);
glLineWidth(2.0f);
glColor3f(0.0f,0.0f,1.0f);
glTranslatef(0.0f,5.0f,0.0f);
glRotatef(30.0f,0.0f,0.0f,1.0f);
glScalef(10.0f,10.0f,10.0f);
myglWireCube(); <-6面体のポイントとラインだけの
              ワイヤーフレームモデルの配列
}*/

こんなプログラムでワイヤーフレームの六面体をアフィン変換して空間上での
回転・並進・スケールチェンジをして絵としては出力できるのですが、アフィ
ン変換後の各頂点のX,Y,Z座標を数字で抜き出すにはどうすればいいのでしょ
うか?

要はグラフィック処理ではなく、空間上の任意のポイントの座標をアフィン変
換した後の座標を求める作業に流用したいわけですが。
864デフォルトの名無しさん:2008/08/16(土) 18:36:42
GL_FEEDBACK
865デフォルトの名無しさん:2008/08/16(土) 19:14:41
>>864
早速有りがd。そんな手があったか。
昨日届いたばかりの赤本にめっけたので読んでみる。
866デフォルトの名無しさん:2008/08/17(日) 11:19:12
OpenGLの描画速度について伺いたいことがあります。
WinXP, GLUTを使ってポリゴン描画をやってるのですが、以下の状況のときにfpsが大きく落ちます。
・ポリゴン数を増やし(300程度)、画面全体に隙間なく配置する。
・ウィンドウを拡大(1600,1200,あるいは640,480のフルスクリーン)する。
ちなみに、ポリゴンを小さくした場合速度の低下が緩やかになります。

どこが原因なのかと以下のコードで検証した結果、画面の拡大に伴い
idle関数終了から次にidle関数が呼ばれるまでの時間が増加(30ms程度)することが分かりました。
glutPostRedisplay関数自体どの条件でも1ms程度で終わるので遅くなる
直接的な原因が謎ですが、ご存知のかたいらっしゃらないでしょうか?
開発環境がビデオカードのしょぼいノートPCなのでそれが原因とも思いますが、
改善案がないかと思い相談させていただきました。

DWORD static t1 = 0;
void idle()
{
printf("%d : ",timeGetTime()-t1); //idle終了から次が発生するまでの時間
DWORD t = timeGetTime();

static DWORD prevTime = timeGetTime()*3; // fpsを60に保つ
while(timeGetTime()*3 - prevTime < 50);
prevTime += 50;

glutPostRedisplay(); // 描画関数

t1 = timeGetTime();
printf("%d\n", timeGetTime() - t); // 描画にかかった時間
}
867デフォルトの名無しさん:2008/08/17(日) 11:39:16
glutPostRedisplayはキューにDeisplayイベントをPostするだけだから一瞬で終わる
実際に描いてるのはdisplayコールバック関数内部
whileのループは無駄にCPUを消費するからSleep()を噛ますなり、タイマー割り込み使うなりしたほうが良いかと
可能性は低いかもしれないが60fpsが突然30fpsになるなら垂直同期が強制ONになってるとか
868デフォルトの名無しさん:2008/08/17(日) 12:20:08
>>867
ありがとう御座います。

timeGetTimeによる時間計測をglutPostRedisplay();終了後を基準として、
displayイベントの関数開始と終了に配置して調べてみました。
結果、glutPostRedisplay()を呼び出してから、実際にdisplayイベントが発生するまでの時間が
865の状況下で大幅に遅くなっていたようです。

この原因は、glutSwapBuffers();関数もglutPostRedisplay();関数同様に、
制御はすぐに返すものの、実際に画面が更新されるまで時間がかかることと感じます。
ポリゴンの描画面積に応じてSwap速度が変化するってのは若干すっきりしませんが一歩前進できました。

垂直同期に関しては、wglSwapIntervalEXTをサポートしていない腐れビデオカードなので
安西先生・・・垂直同期したいです・・・。と泣きたい状況です。
fps60に固定してもティアリングが軽減されるだけでやっぱり気持ち悪い。
ティアリングを感じないOpenGLのソフトもあるのだけど、どうやって対策してるのか不思議です。
869デフォルトの名無しさん:2008/08/17(日) 13:11:59
使い方間違っているくさいけど、面倒なんで詳しくは指摘しない
870デフォルトの名無しさん:2008/08/17(日) 14:40:49
>>869
うーん。
glewInit();は成功で、
glewGetExtension("WGL_EXT_swap_control")
でこけてるから無理かな〜と思ったんだけど間違ってたかなorz
ネットで拾ったvsyncのサンプルプログラムも全滅したんで諦めてました。
もし間違ってたらヒントくらい教えてもらえませんか?

ちなみに速度の問題はどうしようもなさげです。こっちは他のアプリケーションでも
かなりカクカクになることを確認したのでノートPCが原因っぽ。
871デフォルトの名無しさん:2008/08/17(日) 15:25:51
さらに検証結果の追記です。

どうやらglVertex3d関数はSwap()と同じキューにタスクを放り込んで即制御を戻す気がします。
加えて、俺のPCだと計算時間はポリゴン数じゃなく、
glVertex3d関数で書き換わるバックバッファのピクセル数に比例するみたい。

・画面外に馬鹿でかいポリゴンを表示しても速度に影響しない(バッファに影響しないため?)
・画面全体を埋めるポリゴンだと3枚くらいでfpsが60を切る。
・上記より小さいポリゴン100枚(glVertex3d関数の呼び出し回数も100倍)のほうが圧倒的に早い。

キューにポリゴン表示によるバッファの書き換えも蓄積し、その後Swapが行われるから遅いってことかな。
こう考えればidle関数が2度目呼び出されるまで大幅に遅れるのも納得できる気がします。
初心者の戯言なので、間違ってたら指摘してください。
872デフォルトの名無しさん:2008/08/17(日) 15:32:28
glGetString(GL_RENDERER) も検証してみて
873デフォルトの名無しさん:2008/08/17(日) 15:52:05
>>872
Intel 965/963 Graphics Media Accelerator
って帰ってきました。

関数を調べてたらGL_EXTENSIONSってので拡張機能を分かるっぽいので見てみたら多すぎて泣けた。
GL_WIN_swap_hintってそれっぽい気がするのでちょっと調べてくる。

ついでにGL_VERSIONって入れてみたら1.5.0 build 6.14.10.4864とか出てきた。
何か強烈に嫌な予感がする。これも調べてみる。
874デフォルトの名無しさん:2008/08/17(日) 18:14:48
というわけでOpenGLのVersionを最新にしようと思って格闘してはや2時間。
本家のページにSDKってあるのにどこからダウンロードしたらいいか分からんとか
俺どんだけゆとりなんだorz

目痛くなってきたんでちと休憩
875デフォルトの名無しさん:2008/08/17(日) 19:04:22
スレに日記レス書き込む前にちゃんとチュートリアルとか読んだら?
876デフォルトの名無しさん:2008/08/18(月) 00:57:57
>>873

おそろくし、勘違い暴走している。

> ついでにGL_VERSIONって入れてみたら1.5.0 build 6.14.10.4864とか出てきた。
> 何か強烈に嫌な予感がする。これも調べてみる。

これ、普通。

赤本でも買って勉強するがよろし。
877デフォルトの名無しさん:2008/08/18(月) 18:22:30
>>871
なんだかよくわからないが、描画時間は描画ピクセル数にだいたい比例するぞ。
ポリゴン数ではなくて。
3角形ホリゴン100個・三角形一つの大きさが10ピクセルなら、
vertex shaderが300回、fragment shaderが1000回計算。
3角形ホリゴン1個・三角形の大きさが10000ピクセルなら、
vertex shaderが3回、fragment shaderが10000回計算。

画面外の場合は、ラスタライザがカットしてるんじゃないか?(よく知らないが)
878デフォルトの名無しさん:2008/08/18(月) 22:24:41
赤本注文しました。修行してから出直します。

>>877
最初はglVertex3d関数を呼び出す回数に比例するんかなと思ったんだけど
関数呼び出し自体のコストは微々たるものだったという壮大な勘違いでしたorz
879デフォルトの名無しさん:2008/08/19(火) 02:55:07
>>878
プログラム上だけで試行錯誤するよりも、本格的にGLを勉強するなら
やはり赤本が近道だと思う。がんばれ。

解決済みかもしれないけど、OpenGLのVersionを最新にするには
GPUベンダのドライバを更新することで実現します。

ただし、IntelのChip set内蔵GPUは、シェーダアーキテクチャでも
OpenGL 2.Xには対応していないので、最新GPUとドライバでも1.5まで。
880デフォルトの名無しさん:2008/08/20(水) 09:23:56
持ってる赤本が古くて(確か1.0か1.1相当)、
俺もOpenGLの勉強しなおししようと思うのですけど、
赤本ってこれでいいんですよね?

Amazon.co.jp: OpenGLプログラミングガイド 原著第5版: OpenGL策定委員会, 松田 晃一: 本
http://www.amazon.co.jp/OpenGL%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%AC%E3%82%A4%E3%83%89-%E5%8E%9F%E8%91%97%E7%AC%AC5%E7%89%88-OpenGL%E7%AD%96%E5%AE%9A%E5%A7%94%E5%93%A1%E4%BC%9A/dp/4894717239

あと、シェーダーの本が一冊ほしいのですが、お勧めがあったら教えてください
881デフォルトの名無しさん:2008/08/20(水) 10:41:40
> 赤本ってこれでいいんですよね?
新しい赤本ってこれでいいんですよね?
882デフォルトの名無しさん:2008/08/20(水) 10:54:27
それでok
883デフォルトの名無しさん:2008/08/20(水) 11:28:16
>>880
Cgでよければ、
http://www.amazon.co.jp/3D‐CGプログラマーのためのリアルタイムシェーダー-理論と実践―「古典的ライティング・モデル」から「グローバル・イルミネーション」まで-I・O-BOOKS-金谷/dp/4777510875/ref=sr_1_1?ie=UTF8&s=books&qid=1219199126&sr=1-1

あんまりいい本ではないが、ほかに入門書がない、と思う。
884デフォルトの名無しさん:2008/08/20(水) 14:12:55
日本語の資料が良いならシェーダーの勉強だけDirect3Dでやるのも悪くない
885デフォルトの名無しさん:2008/08/20(水) 18:35:32
>>883
これですね。
Amazon.co.jp: 3D‐CGプログラマーのためのリアルタイムシェーダー 理論と実践―「古典的ライティング・モデル」から「グローバル・イルミネーション」まで (I・O BOOKS): 金谷 一朗: 本
http://www.amazon.co.jp/dp/4777510875/

関連書籍にもおもしろそうなのがありました。

あと、洋書ならオレンジブックってのもありましたけど、GLSLだから2.0になってしまうんでしょうか?
Amazon.co.jp: Open Gl Shading Language: Marc Olano, Randi J. Rost, John M. Kessenich, Barthold Lichtenbelt: 洋書
http://www.amazon.co.jp/dp/0321197895

>>884
なるほど、Direct3D関連なら書籍がたくさんありますものね。
886デフォルトの名無しさん:2008/08/20(水) 23:57:24
まったくの最初からでCgでいいなら、NVIDIAの日本語マニュアルが入門書代わりになんじゃないかな
ttp://developer.nvidia.com/object/cg_toolkit.html
シェーダーだけをFX Composerで色々いじってみるってのもいいかもしれないし
887デフォルトの名無しさん:2008/08/22(金) 06:38:56
redbookってpdfでダウンロードできるのにわざわざ場所とる本かうの?
888デフォルトの名無しさん:2008/08/22(金) 09:11:54
1,pdfが参照しやすさで書籍に相当劣る。
2,英語読めない(´・ω・`)
889デフォルトの名無しさん:2008/08/22(金) 10:42:54
>>887
この頭の悪そうなレスはなんだろう?・・・
890デフォルトの名無しさん:2008/08/22(金) 22:39:12
OpenGLを使っているアプリケーションのレンダリング画像
ビデオメモリから直接取り出したり出来ますか?
891デフォルトの名無しさん:2008/08/22(金) 23:00:05
自分で描いた画像を自分で取り出すだけなら glReadPixels
892デフォルトの名無しさん:2008/08/22(金) 23:05:10
自分で作ったのでないアプリケーションの画像は?
893デフォルトの名無しさん:2008/08/22(金) 23:19:19
フック汁
894デフォルトの名無しさん:2008/08/23(土) 00:07:06
PrintScreen
895デフォルトの名無しさん:2008/08/23(土) 00:12:31
手動w
896デフォルトの名無しさん:2008/08/23(土) 00:13:39
俺用メモ

GLSL -OpenGLのシェーダ言語。コンパイラがドライバに依存してるため癖がある。日本語資料はそこそこ
Cg -OpenGL、Direct3Dで使える。HLSLのルーツで構文が柔軟かつ簡単。日本語資料少なめ。将来性はぁゃιぃ
HLSL-Direct3Dのシェーダ言語。Cgと構文がほぼ同じ。サンプル及び日本語資料大量。バグに悩まされることが非常に少なく初心者向き
897デフォルトの名無しさん:2008/08/24(日) 03:54:07
redbookってpdfでダウンロードできるのにわざわざ場所とる本かうの?
898デフォルトの名無しさん:2008/08/24(日) 03:56:02
>>889
煽りに釣られる低脳な自分に気づかない男の人って・・・
899デフォルトの名無しさん:2008/08/24(日) 05:50:25
>>897, 898
煽ってないで、巣に帰れ
900デフォルトの名無しさん:2008/08/24(日) 11:34:47
赤本のPDFダウンロードについて詳しく
1.1のならいらね
901デフォルトの名無しさん:2008/08/25(月) 07:54:35
コンテキスト作ったのと別のスレッドでテクスチャの作成とか出来ないのきついな〜
MSなんとかしろ
902デフォルトの名無しさん:2008/08/25(月) 09:15:12
それはMSに言ってもしょうがない
903デフォルトの名無しさん:2008/08/25(月) 14:52:46
教えて下さい。
Win/C++ Builderでアプリ作りましたがOpenGL使った場合、
ライセンス表示とか必要なんでしたっけ?
GLUTは使っていません。
904デフォルトの名無しさん:2008/08/25(月) 19:06:33
DelphiでOpenGLやってるんですが、
Form.Canvas.Handle: HDC などのウインドウやコントロールなどのHDCをOpenGLに渡してやると
きちんと画面に描画できるのですが、
TBitmap.Canvas.Handleなどのように画像のHDCを渡すと正しく描画されません。
このようなものなのでしょうか?

オフスクリーンで画像を得たい場合は、
FBO、pbuffer, CopyTexImage2Dなどを使うしかない?のでしょうか。
905904:2008/08/25(月) 19:15:24
正しく描画されない、を探ってみましたところ、
初期化時にTBitmap.Canvas.Handleを渡したところ、SetPixelFormat に失敗し、
仮に他の(Form.Canvas.Handle)HDCなどで初期化した後、
BitmapのHDCを wglMakeCurrent に渡しても失敗するようです。
906デフォルトの名無しさん:2008/08/25(月) 19:51:15
PIXELFORMATDESCRIPTOR の dwFlags に PFD_DRAW_TO_BITMAP が必要なんでない?
907デフォルトの名無しさん:2008/08/25(月) 22:30:20
PolygonとSegmentの当たり判定の方法を教えて頂けないでしょうか。
コード付きだと最高です。よろしくお願いします。
908デフォルトの名無しさん:2008/08/26(火) 00:39:17
>>907
GL関係ないやん。
自分で勉強しなさい。
909デフォルトの名無しさん:2008/08/26(火) 01:29:53
メインはGLで作ってます。ぜひヒントでも。
910デフォルトの名無しさん:2008/08/26(火) 03:11:37
ヒント:関係ない
911デフォルトの名無しさん:2008/08/26(火) 03:12:09
ケチ
912デフォルトの名無しさん:2008/08/26(火) 03:15:52
計算幾何の話しだしな。
913デフォルトの名無しさん:2008/08/26(火) 03:31:05
知識はタダじゃない。
履き違えるな。

他人に教えを乞うときはそれ相応の礼儀が必要ということだ。
914デフォルトの名無しさん:2008/08/26(火) 03:32:46
例えそれが2chだろうと関係なくな。






で、幼女どこ?
915デフォルトの名無しさん:2008/08/26(火) 05:51:15
>>906
ありがとうございます。試してみます!
しかし、基本的なことを聞いてしまった気がします。
赤本どこいったんだろ・・・
916デフォルトの名無しさん:2008/08/26(火) 08:26:30
>>907
「三角形 線分 交差判定」でぐぐればすぐ出てくるよ
917デフォルトの名無しさん:2008/08/26(火) 08:48:34
 >>903 もヨロ!
918デフォルトの名無しさん:2008/08/26(火) 10:30:10
>>915
赤本には載ってないと思うよ。白本じゃね?
919デフォルトの名無しさん:2008/08/26(火) 12:09:39
>>918
これですか。Windows向けのOpenGL本ってあったんですね。

Amazon.co.jp: Opengl Programming for Windows 95 and Windows Nt: Ron Fosner: 洋書
http://www.amazon.co.jp/dp/0201407094
http://images-jp.amazon.com/images/P/0201407094.09.MZZZZZZZZZ.jpg

ここも参考になりました。
T.Teranishi:OpenGL:samples:offscrn
http://www.asahi-net.or.jp/~YW3T-TRNS/opengl/samples/offscrn/index.htm

ただ、当たり前のようですが PFD_DRAW_TO_BITMAPだとハードウェアアクセラレーションが効かないんですね・・・
大丈夫だろうか
920デフォルトの名無しさん:2008/08/26(火) 18:11:21
二つのテクスチャマップした板の重なり部分をテクスチャの色でブレンディングしたいのですが、
重なり部分はうまくブレンディングできているようですが、
重なりでない部分が背景色とブレンディングされてしまうのですが、どうしたらよいですか。

またサンプルコードとかありましたら教えてください
921904:2008/08/26(火) 18:45:52
PIXELFORMATDESCRIPTOR の dwFlags に PFD_DRAW_TO_BITMAP を指定してみたのですが、
Windowに描画するコードと同じコードでは描画時に毎回行う wglMakeCurrentに失敗します。

原因を探っていましたところ、DelphiのTBitmap.Canvas.Handleで得られるHDCは
ことあるごとに生成、解放されるようでして、
何故か描画時に wglMakeCurrent だけでは失敗するようです。
 ChoosePixelFormat、SetPixelFormat、wglCreateContext、wglMakeCurrent
まで全部やってしまうと、OKなのですがそうすると、コンテキストを引き継げず
SetViewportなどを一通り全部を描画の度にやらないといけません。

異なるHDCに描画したい場合は、wglMakeCurrent だけ毎回すればよいと思っていたのですが、
こんなもんなのでしょうか?

それとも、Delphiの変な仕様のTBitmapを捨てて、DIBSection自前でやるべきなのでしょうか?
922904:2008/08/26(火) 18:48:16
x SetViewport
o glViewport

> まで全部やってしまうと、OKなのですがそうすると、コンテキストを引き継げず
まで全部、描画時に毎回やってしまうと、OKなのですがそうすると、コンテキストを引き継げず

あとライブラリのソース読んだところ、変な仕様なのはTBitmapのせいというより TBitmap.Canvas(つまり、TCanvas)の仕様のようでした。
923904:2008/08/26(火) 19:04:49
とりあえず、対処療法的な発想で TBitmap.Canvas.Handle のHDCが変わらないようにすることにしました。
変わらないようにするには、TBitmap.Canvas.LockすればOKのようです。
これには、こちらのサイトが参考になりました。

2.5 Canvas
http://www.asahi-net.or.jp/~ha3t-nkmr/vcl2-5.htm
More Secrets
http://www.asahi-net.or.jp/~HA3T-NKMR/DGS/more_secrets.htm#Secret5

思い切り Delphi依存の話で終わりアレですが、聞く場をあたえて下さったみなさんに感謝いたします。


> 異なるHDCに描画したい場合は、wglMakeCurrent だけ毎回すればよいと思っていたのですが、
> こんなもんなのでしょうか?

とりあえずはこれで回避しようと思いますが、これだけがちょっと解せない点ではあります。
924デフォルトの名無しさん:2008/08/26(火) 19:15:35
>>920
背景色を黒にしとけばいいんじゃね
925920:2008/08/26(火) 19:56:49
背景色は黒です。説明不足でした。
板が重なった部分だけをテクスチャの色をあるα値でプレンディングしたいんですが、
重なっていない部分がα値で原色されてしまっている状況なのです。
926デフォルトの名無しさん:2008/08/26(火) 23:50:38
ポイントスプライトは正方形だけなのでしょうか?
長方形のポイントスプライトを作りたいのですが
927デフォルトの名無しさん:2008/08/27(水) 00:36:12
長方形の絵を描いたテクスチャを貼ればいいかと
928デフォルトの名無しさん:2008/08/27(水) 00:37:46
>>917
gl.hとかににSGIのライセンスがどうとか書いてある
だが俺には読んでもよくわからなかったのでGLeeを使った
実際のところどうすればいいのか俺も知りたい

>>925
板1を不透明で描く
板2をその上から不透明で描く
板1をα付きで描く
これでよくね?

>>926
正方形だけ
長方形は自分で描いてください
それかテクスチャを長方形になるようにαで抜くとか
929デフォルトの名無しさん:2008/08/27(水) 11:28:03
質問です
3Dtextureのサイズについて何か制限があるのでしょうか

元データ480x480x96→動かない
周囲黒ピクセル480x480x128→動く
2の倍数かなと思ったのですがx,yの座標は違いますし…コンパイルは通るのですがアプリケーションを実行中に
0x693a1273 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x000003a4 を読み込み中にアクセス違反が発生しました。
と出て止まります。止まる位置は
// Render enclosing rectangles
glCallList(listName);
でListは
glNewList(listName, GL_COMPILE);
glDrawArrays(GL_QUADS, 0, nElements);
glEndList();
です。
OS:WindowsVista
toglinfo:
GL_VERSION: 2.0.6479 Release
GL_RENDERER: ATI Mobility Radeon X1400
GL_VENDOR: ATI Technologies Inc.
EXTENSION: GL_EXT_texture3D
GL_MAX_3D_TEXTURE_SIZE_EXT: 2048
よろしくお願いします

930デフォルトの名無しさん:2008/08/27(水) 23:41:00
>>929
メモリ関連で、変なところ書き込んじゃってるんじゃないか?
他に思いつかない

931デフォルトの名無しさん:2008/08/28(木) 00:00:42
ドライバがおかしいというのも大いにありうる
最新のドライバにしてみる、もし可能なら別なグラボやPCで動かしてみるとどうだろう
932デフォルトの名無しさん:2008/08/28(木) 00:11:33
>>929
RadeonはGL_VERSIONが2.0以上でも2のn乗テクスチャ対応してないことが多いから、そこが疑わしい気がする。
480x480x128はたまたま動いてるだけって可能性も。
933デフォルトの名無しさん:2008/08/28(木) 01:02:43

OpenGLで花びら大回転というやつをしてみたいんですが、
どのようなコーディングをすればきもちよくなれますか?

934デフォルトの名無しさん:2008/08/30(土) 00:56:12
おまいらGLでボーンとかどうやって実装してる?
モデリングソフトでCOLLADAファイルに書き出したモデルのボーンをパースして利用する感じ?
935デフォルトの名無しさん:2008/08/30(土) 12:10:32
GLfloatとGLdoubleのどちらを使えば最適な速度が得られるのでしょうか?
OpenGLのデフォルトはGLfloatの場合が多いのでGLfloatかと思うのですが…
gl.hをみると以下のようになっています

typedef double GLdouble;
typedef double GLclampd;

素のdoubleとfloatだとdoubleの方が速いんですよね?
936デフォルトの名無しさん:2008/08/30(土) 12:18:52
>>935
>素のdoubleとfloatだとdoubleの方が速いんですよね?

ANSI以前のCだとfloatはdoubleに変換するから遅いんだっけ?今はそんなことないはず。
float使ってコンパイルフラグでSSEの使用をONにしときなさい。
937935:2008/08/30(土) 12:56:33
>>936
SSEがなにか勉強してきます
ありがとうございました
938920:2008/08/30(土) 13:24:22
ありがとうございます。できました。
ただ、同じものを2回描画しなきゃならないのがちょっと…
なにかいい方法はないものか
939デフォルトの名無しさん:2008/08/30(土) 14:59:13
>>938
>>二つのテクスチャマップした板の重なり部分をテクスチャの色でブレンディングしたいのですが、
>>重なり部分はうまくブレンディングできているようですが、
>>重なりでない部分が背景色とブレンディングされてしまうのですが、どうしたらよいですか。

普通の alpha 合成なら
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
だが、
alpha 値を、裏にある色を透過させる割合、としたいならば、
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
にすべき。たぶん君がやりたいのはこっち。

裏にどういう物体が存在するかで、光学特性を変えようとするなら、
そりゃあめんどくさいことになるよ。
940デフォルトの名無しさん:2008/08/30(土) 15:51:18
>>934
そんな感じ
ただCOLLADAはけっこうめんどくさい
BVHがシンプルだがスキン付きのモデルの方をどうするか悩む
941デフォルトの名無しさん:2008/09/01(月) 12:14:36
>>936
floatは演算プロセッサが処理する時にdoubleに変換されてるので、
最初からdoubleを使った方が効率いい。
942デフォルトの名無しさん:2008/09/01(月) 13:37:38
アフォか?スループットはfloatのほうが良いケースが多いだろ
943デフォルトの名無しさん:2008/09/01(月) 14:05:35
>>941
太古の昔にどこかで聞いた言葉の受け売りか?
944デフォルトの名無しさん:2008/09/01(月) 16:47:19
Linux/Cygwin/Mac OS Xで./configureしただけでOpenGLのプログラムがmakeできるように
configure.inを書きたいのですが、方法が全く分からなくて困っています。
すでにそこらへんのプラットフォームでコンパイルできるように調整されたソフトウェアのconfigure.inを
参考にしようと思っているのですが、そんなソフトウェアご存知ないでしょうか?
945デフォルトの名無しさん:2008/09/01(月) 21:11:38
求めてるものとは少しずれてるかもだけど、確かabuse-sdlってゲームがconfigureのなかでOpenGLのチェックしてた。
でも、configureはコピペで動かすのも結構大変なんだよね・・・。
gnuに拘ってるんじゃないならcmakeを検討してみるのもいいかもよ。
configureよりビルドが速いし、VisualStudioのプロジェクトも作ってくれるし。
946デフォルトの名無しさん:2008/09/01(月) 22:37:36
>944
お望みの環境で全部動くかどうか知らないが、
ttp://autoconf-archive.cryp.to/ax_check_gl.html
辺りを参考にしてみれば?
必要なら近辺の GLU とかも参考に。
947デフォルトの名無しさん:2008/09/02(火) 10:33:37
>>942
64ビットマシンではdouble圧勝。
948デフォルトの名無しさん:2008/09/02(火) 11:42:03
64bitマシンでdoubleが圧勝するというソースか再現可能な環境を示して。
949デフォルトの名無しさん:2008/09/02(火) 17:20:05
GLSLでフラグメントシェーダから深度値とレンダリングバッファを取得したいのですが、
どのようにして値をセットすればいいのでしょうか?
FBOを使うとシェーダからでも深度値の取得が出来るらしいのですが、
単純にglUniform1iABRで0を入れてみてもその数字はテクスチャユニットの番号になってしまうみたいですが…
950デフォルトの名無しさん:2008/09/02(火) 21:52:31
直接は読めないから深度値のテクスチャ作ってそれをサンプリングするんだ
FBOの深度バッファにDEPTHCOMPONENTのテクスチャをアタッチすれば深度値をテクスチャに入れられる
あとは普通にテクスチャとしてそいつをサンプリングすればok
951デフォルトの名無しさん:2008/09/02(火) 23:42:56
>>950
教えてくださったとおり、テクスチャをFBOに関連付けたものをglBindTextureし、
その後glUniform1iABRを実行してみたのですが、なぜか入ってるのは
深度値ではなくポリゴンに貼り付けるテクスチャでした orz
これは全く別問題でしょうか?
952デフォルトの名無しさん:2008/09/03(水) 10:31:04
どこから間違ってるのかよくわからんからまずFBOは諦めてみるか
テクスチャを作ってglBindTextureしたあと、
glCopyTexImage2DでinternalFormatにGL_DEPTH_COMPONENTとかを指定すると
画面の深度値をテクスチャに簡単にコピーできるから、そいつをサンプリングだ
953デフォルトの名無しさん:2008/09/03(水) 13:15:51
>>952
うまく行きました!
glActiveTextureした後にglBindTexture、glCopyTexSubImage2Dでシェーダに深度値を
渡せました。

しかし、深度値をとった後に

depht.r

とするのと、

depth.x

とでは値が違うみたいなのですが、これは単純にvec4の値の取り出している位置が
違うだけなのでしょうか?
それと、テクスチャとデプスバッファからコピーしたテクスチャのサイズは同じはずなのに、

gl_Color = vec4(texture2D(tex, gl_TexCoord[0].st).xyz, texture2D(depthTex, gl_TexCoord[0].st).r);

とすると、同じサイズのポリゴンを重ねたときに、上のポリゴン全体の
アルファが変わるのではなく、中心部分しか半透明になりません。
これは何故でしょうか?
954デフォルトの名無しさん:2008/09/03(水) 21:56:10
vec4のrとxは同じはずなんだけどな
あとの中心だけってのもよくわからない
とりあえず自分のプログラムのバグを疑って確認するんだ
それでもおかしいようなら最新のドライバを試してくれ
もし古いドライバ使ったりするとGLSLなんかはひどくバグってたりする
955890:2008/09/03(水) 22:27:02
超亀レスですいませんが、
>>891
glReadPixelsでも充分な速度出ますか?テクスチャをロックしたときのように
直接アクセスは出来ないんでしょうか。
>>893
ttp://ruffnex.oc.to/kenji/text/api_hook/
のような方法でglFlushのときに画像取得処理をすればいいんでしょうか
956デフォルトの名無しさん:2008/09/04(木) 01:09:14
>>954
試してみたところ、rはzと同じ値になっていたようですが、もう一度
確認してみるとrとxが同じ値だったので、見間違いしてたんだと思います orz
テクスチャの方もこちらの単純ミスが原因でした orz

最後に1つだけ…
テクスチャ座標を求めるために、テクスチャのサイズをuniform vec2な変数に
入れようと、glUniform2fvで代入したのですが、なぜか0しか入らず、テクスチャ座標を
求めることが出来ません。
ちゃんと変数へのハンドルは取得されており、代入前や代入後にglGetInfoLogARBを
しても特にエラーはなく…
テクスチャの方はちゃんと代入
されているのですが。

聞いてばかりで本当にすみません orz
957デフォルトの名無しさん:2008/09/04(木) 04:41:47
>>956
どうやってshader側に渡されたuniform値を確認しているのかが
よく見えないが、

Textureサイズ(widthとheightのこと?)をuniformで渡している点から
推測してサンプリング座標を操作しているだろうから、texture2Dに
渡している s,t まわりのfragment shaderを確認してみては?としか。

GL仕様でいうところの(s,t)→(u,v)変換がtexture2D内部で実行されるのは
認識しているよね、念のため。
958デフォルトの名無しさん:2008/09/04(木) 10:04:03
>>945-946
ありがとうございます。参考にしてconfigureしてみます。
959デフォルトの名無しさん:2008/09/04(木) 10:44:14
>>957
まず、値がちゃんとセットされるかどうかを確認するために、

uniform vec2 texSize;

void main(void)
{
    gl_FragColor = vec4(texSize.x / 640.0, texSize.y / 480.0, 1, 1);
}

というのを書き、glUniform2ivで(640, 480)を渡したのですが、texSizeにこの値が入っていれば
白い単板になるはずなのになぜか真っ青に… orz

gl_FragColor = vec4(texSize, 1, 1);

として(1, 1)を渡しても真っ青でした。

>GL仕様でいうところの(s,t)→(u,v)変換
glTexCoord2などの引数からST=UVかと思っていましたが…
ST座標が(1.5, -0.5)などとなっていたときに、(0.5, 0.5)と1〜0の間に戻す計算のことでしょうか?
960デフォルトの名無しさん:2008/09/04(木) 21:04:34
すいません、自己解決しました。
値のセットがうまくいかなかったのはglUniform2ivではなく、glUniform2fvでしたが、
texSizeをtexWidth、texHeightに分けてglUniform1fvで1つずつ渡すことにより解決できました。
これでなんとかなりそうです。

今までくだらない質問に答えていただき、本当にありがとうございました (';ω;`)
961デフォルトの名無しさん:2008/09/06(土) 23:14:21
基礎の基礎ですまんが、ズームってどうやって実装したらいいんだろう?
いまはglOrthoで空間を定義して、glScalefで拡大縮小してるんだけど、
これだと一定以上に拡大したときにオブジェクトの端が切れちゃう。
CADみたいな感じで無段階拡大縮小ってどうやったらいいかな?
962デフォルトの名無しさん:2008/09/06(土) 23:20:58
頭を前後させれば良いじゃん。
963デフォルトの名無しさん:2008/09/06(土) 23:27:03
(よし、俺面白いこといった!)
964デフォルトの名無しさん:2008/09/06(土) 23:31:07
>>961
orthoのnear/farも一緒に動かしたらいいんじゃね?
965デフォルトの名無しさん:2008/09/07(日) 08:35:17
>>961
glOrthoで指定するleft〜rightとbottom〜topの幅を小さくすればいいんだヨ。
見る範囲を半分にすれば、見える大きさは2倍になるでしょ?

>>964の方法でもいい(というかやってることは本質的に変わらない)けど、
プログラムは面倒臭くなると思うw
966デフォルトの名無しさん:2008/09/07(日) 14:38:16
>>962-965
できた!
お前ら愛してる!
967デフォルトの名無しさん:2008/09/09(火) 10:10:04
勉強中の初心者です。
GL_TEXTURE_2Dで作ったフルカラーのテクスチャを表示したいのですが、
16bitカラーみたいな色むらが表示されます。
どのようにすれば奇麗に表示されるんでしょうか?
968デフォルトの名無しさん:2008/09/09(火) 10:28:19
OpenGLの初期化のときに16ビットカラーを選択してしまっているとか
969デフォルトの名無しさん:2008/09/09(火) 10:52:00
>>968
レスありがとうございます。
サンプルコードをベースにしているので初期化の状況すら把握できていないのですが、
どのようにすれば初期化時に色数を指定できるんでしょうか?

970デフォルトの名無しさん:2008/09/09(火) 13:52:29
OpenGLはmulti-threadできないのかな

OpenGLともうひとつ画面だしてmulti-threadで表示すると
(OpenGLの画面+OpenCVの画面)
OpenCVのほうが止まる…

どうすればいいものか…
OpenGLで2画面ってだせるんでしたっけ…
971デフォルトの名無しさん:2008/09/09(火) 14:52:10
マルチスレッドには対応していない

2画面は出せると思う
972デフォルトの名無しさん:2008/09/09(火) 15:04:28
>>969
環境は?
OSとかglut使用とか
973デフォルトの名無しさん:2008/09/09(火) 20:56:03
glslで動的に配列を作りたいのですが、どうしたらいいですか?
できますか?

uniform int aaa;
として
vec3 bbb[aaa];
とするとエラーになります。
974デフォルトの名無しさん:2008/09/09(火) 22:38:13
>>970
規格としてはマルチスレッドについてはなにも定めてないので実装依存
描画は一つのスレッドでまとめてやるのが無難
NVIDIAの何かのドキュメントではマルチスレッドで描画するにはスレッドごとに別コンテキストにしろって話だった
975デフォルトの名無しさん:2008/09/09(火) 22:45:41
>>973
残念ながら無理だ
定数として埋め込んでその都度コンパイルしなおす、
充分大きな配列を作っておいて一部だけ使うようにする、
テクスチャにしてしまう、
なんかで対処してくれ
976デフォルトの名無しさん:2008/09/10(水) 17:16:37
質問よろしいでしょうか。

glVertexPointer や glTexCoordPointer などの引数がnewやmallocで確保した通常のメモリーへのポインタなのですが、
OpenGLでは頂点配列などをVRAM上に配置することはできないのでしょうか?

大きな頂点配列を持つハイポリな人間モデルなどは、VRAMを食ってでもVRAM上に配置して速度を稼ぎたいのですが・・・。
977デフォルトの名無しさん:2008/09/10(水) 17:23:46
>>976
VBOでぐぐる
978デフォルトの名無しさん:2008/09/10(水) 17:28:25
>>977
ありがとうございます
さっそくiPhoneでも使えるか試してみるとします〜
979973:2008/09/10(水) 18:37:21
了解しましたー。ありがとうございます。
980デフォルトの名無しさん:2008/09/11(木) 00:32:43
アルファチャンネル付き2Dテクスチャを半透明にしたくて
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
としたんですが、エッジが黒く縁取りされたようになてしまいます。
これはテクスチャの作り方が悪いんでしょうか?
981デフォルトの名無しさん:2008/09/11(木) 02:22:00
>>980
エッジというのがテクスチャのボーダーという意味なら、WRAPを
GL_CLAMP_TO_EDGEやGL_REPEATで指定。

エッジが半透明と完全透明の境界という意味なら、透過テクセルの
RGBが0だからそう見えている。テクスチャのサンプリング時にバイリニア
/トライリニアで、透過テクセルのRGBもフィルタリングされているから。

フィルタ不要ならポイントサンプル(GL_NEAREST)にするだけでいいし、
フィルタリングするならエッジに隣接した透過テクセルのRGBを
正しい値で作っておく必要があるかと。
982デフォルトの名無しさん:2008/09/11(木) 03:04:28
RGBの値が常にAを超えることがなく、A=0(完全透過)の場合にRGB=(0,0,0)になるような
アルファの解釈の仕方は、いわゆる "pre-multiplied alpha" というやつだね。
映像業界のポスプロの合成なんかで昔からよく使われている流儀。

この場合、ソースRGBにアルファを再度かけてやる必要はないから、
半透明合成は glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) になる。
983デフォルトの名無しさん:2008/09/11(木) 17:56:55
質問です。
1からOpenGLを始め、ライティングの利用にとりかかりました。
ただうまくいかず、とりあえず

glEnable(GL_LIGHTING);
glDisable(GL_LIGHT0);
glDisable(GL_LIGHT1);
以下、7まで無効化。

として「これなら真っ黒になるはずだよな」と思ったのですが、なぜかモデルの色が暗くですがはっきりと色づきます。
RGB(255,0,0)のモデルなのですが、RGB(32,0,0);くらいの色で見えるのです。

GL_EMISSIONのような自己発光は行わせていません。
なぜライトがすべて無効であっても、うっすらモデルが見えるのでしょうか?

また、もちろんglEnable(GL_LIGHTING);しなければ、モデルは真っ赤で描画されます。
984デフォルトの名無しさん:2008/09/11(木) 18:11:20
float ambient = { 0,0,0,0 };
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
でどう?
985デフォルトの名無しさん:2008/09/11(木) 18:13:40
モデルのMaterialのambientが見えてる
986980:2008/09/11(木) 21:44:29
>>981,982
ありがとうございました。
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)で出来ました。感謝!
987ahonoko:2008/09/11(木) 22:05:22
直線の描画について
関数 glBegin()の内部処理について知ることは出来ませんでしょうか?

出来るとすれば、どのソースファイルを読めば良いのでしょう?

助けて下さい。
988デフォルトの名無しさん:2008/09/11(木) 22:10:52
>>987
ソースを見たければMesaというオープンソースなOpenGLの実装がある。
でも、なぜ直線の描画の処理を知りたいのか書いた方がいいんじゃね。
単に直線の描画アルゴリズムが知りたいのか、何かライブラリの内部処理を
知らないといけない事情があるのか。
989デフォルトの名無しさん:2008/09/11(木) 22:17:34
実装はドライバごとに違うから中で何やってるかはわからない
参考実装で良ければMesa3Dについて調べるといい
なんでそんなのを知りたいか書けばもっと適切なアドバイスが出来るかもしれないよ
990ahonoko:2008/09/11(木) 22:44:33
>>988, 989さん
返信ありがとうございます。

知りたいのは、直線の描画アルゴリズムです。
言葉が足りずに申し訳ありません。


例えば、縦×横=10×10の画像を考えてみます。
そこで、2点(0, 0)と(2,9)を結ぶ直線を描画したいような場合についてです。
(0,0)と(9, 9)は綺麗に引けると思います。
しかし、例のような場合で、”ディザ”って言うのですかね?
傾きがぴったり1ではないので、
単純に直線の式から求めた座標ではなく、
描画すべき(x, y)の組み合わせが変わってくると思います。
例のように(0, 0)と(2, 9)を結びたければ、
(0, 0)、(0, 1)、(0, 2)、(1, 3)、(1, 4)、(1, 5)、(1, 6)、(2, 7)、(2, 8)、(,2,9)
といった感じの座標になるのでしょうか。


分かりにくい文章で申し訳ありません。

ご教授お願いします。
991デフォルトの名無しさん:2008/09/11(木) 22:49:42
それならOpenGLの実装を調べるなんてまわりくどいことしないで
直線 描画 アルゴリズム
とかでググった方がいいぜ
992ahonoko:2008/09/11(木) 22:57:04
>>991さん
本当ですね。
皆さん、ありがとうございます。

アホな質問をして、申し訳ありませんでした。
貴重なお時間をありがとうございます。

またよろしくお願いします。
993デフォルトの名無しさん:2008/09/11(木) 22:58:20
昔はブレゼンハムとかソフトで実装してたな。何もかも懐かしい・・・。
994デフォルトの名無しさん:2008/09/11(木) 23:20:52

>>984-985
今手元に環境がないのですが、
984さんので直りそうな雰囲気ですね

GL_LIGHT_MODEL_AMBIENT でぐぐったら、初期値が(0.2、0.2、0.2、1.0)とありました。

Materialのambientは0,0,0,1でしたので、こちらではなさそうです。
お二人ともありがちございました。
995デフォルトの名無しさん:2008/09/11(木) 23:27:24
PS2はDDA
996デフォルトの名無しさん:2008/09/12(金) 09:10:33
デジタル微分解析とかなつかしす
997デフォルトの名無しさん:2008/09/12(金) 17:56:29
次スレまだたってない?
998デフォルトの名無しさん:2008/09/12(金) 18:33:18
998 !!!!!
999デフォルトの名無しさん:2008/09/12(金) 19:27:42
999
1000デフォルトの名無しさん:2008/09/12(金) 20:10:57
1000get
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。