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


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

OpenGLスレ Part11



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

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

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


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

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

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

152 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 15:54:22 ]
スクリーン上の点を空間で表すと直線になるけどな。

154 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 18:41:26 ]
ワールド座標中でのスクリーンが欲しいときは0にすると以前教えていただきまして
z1だとこの場合スクリーンより奥の値になりますよね?

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



157 名前:デフォルトの名無しさん [2007/06/17(日) 19:42:18 ]
>>156
>ワールド座標中でのスクリーンが欲しいときは0にすると以前教えていただきまして
はっきりいって間違ってるよ

158 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 19:54:32 ]
多分152さんは、前スレの915〜あたりの人ですよね。
もしいまだにnearクリップ面のことを「スクリーン」と呼んでるのなら、早く直した方がいいですよ。
独自の用語を使われると、意志の疎通以前に混乱を招きますので。

>>157
字面だけみると完全に間違ってる(笑)んですけど、
その辺の事情は前スレを見ないと分からないかと・・・。

160 名前:140 [2007/06/17(日) 20:18:51 ]
ライセンススレ化してすんません。原文読んできました。
スタリンクするものはLGPLの派生物となるが、例外として、
リバエン/改変などの告知をし、完全かつ機械読み取り可能なオブジェクトコードあるいはソースコー ド(どちらかでも可) と一緒にする。
この「オブジェクトコード」がglui.libを指すのであれば大丈夫ですな



161 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 20:37:56 ]
>>159さん
その節はありがとうございました。
一度他のことで時間を割かれてしまって、もう一度着手しているところです。
ご指摘もありがとうございます。手探りでやっている状態で、、、

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

ここはOPEN-GLじゃない、数学のレベルの問題なので、どうにかして頑張ります。
今日は帰れそうになさそうです(´;ω;`)

162 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 21:00:36 ]
>>160
>この「オブジェクトコード」がglui.libを指すのであれば大丈夫ですな
違う、アプリケーションを構成する.oファイル全てなので、
公開しないコードの部分も.oは公開しないといけない。
つまり、コードは無くても良いけどLGPLの部分が置き換え可能な状態で無ければいけない。


163 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 21:30:40 ]
>>162 が正解
LGPL 部分を自分で改変したバイナリで置き換えられる様に、.o を入手可能にする
必要がある。派生物の所持者が入手可能であれば良いから、世界に向けて公開する
必要は無いよ。

165 名前:140 [2007/06/17(日) 22:45:24 ]
>>162,164
両氏ともありがとうございました。
オブジェクトコード=.oだったんですね(;゚Д゚)
なるほど、派生物所持者が再びリンクできるようにってことですね。
>世界に向けて公開する 必要は無い
バイナリといえど、ちょっと抵抗があったので安心しました。
重ね重ね感謝ですヽ(´▽`)/

166 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 20:36:52 ]
>>163
どうにか無事にレイと面の交差判定、できました!

あとはそれの効率化で頑張ります。
本当にありがとうございました!

167 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 08:15:38 ]
c++でもextern"C"で頑張って、
dllやらsoを使うのが簡単な気がする。


168 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 10:16:44 ]
GL_LIGHT_MODEL_AMBIENT

170 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 11:42:49 ]
>>169
ありがとうございます。原因わかりました。
デフォルトで環境光 0.2 が加わるなんて、知りませんでした。



171 名前:yd [2007/06/25(月) 19:05:50 ]
だれかいますか?

172 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 19:09:03 ]
(@u@ .:;)ノシ

173 名前:yd [2007/06/25(月) 19:20:10 ]
こんち



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




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





176 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 20:13:16 ]
これはひどいマルチ

177 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 22:55:22 ]
足し算は駄目だろ…

179 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 00:13:33 ]
>>178
はあ?

180 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 00:31:45 ]
>>179
誤差が蓄積するからって言う意味だろ。



181 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 00:45:55 ]
>>180
でも差は、6.283185-6.283182=0.000003だけどな。

182 名前:yd [2007/06/26(火) 04:01:08 ]
ありがとうございます。早速試してみますm(__)m


183 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 04:04:36 ]
どういたしまして

184 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:20:17 ]
フィールドシーケンシャル 3DをOpenGLで実装したいのですが、
方法はさておき、左右の画像を1/2に間引きして交互に合成すれば
いいのでしょうか。こんな感じに

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

資料があまりないので確証がとれません。どこかにありませんか。
英語サイト可です。

185 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:51:01 ]
立体視の話?

186 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 00:58:43 ]
そうです。

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

でいいのでしょうか。それをOpenGLでやりたいんですが。もちろん動画です。


187 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 01:28:29 ]
あなたがお使いのフィールドシーケンシャル方式のデバイスの
仕様に沿った形で画像データを渡せばよろしいかと思います。

188 名前:yd [2007/06/27(水) 12:11:18 ]
円周上にうたれた点に対して、1個飛ばしに円弧で結んでいきたいんですが
直線ニナら結べるんですけど、円弧だとどうアプローチしていいかわかりません
やさしい人教えてください。

189 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 21:25:16 ]
ニナがキモイ

190 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 21:44:06 ]
円周上の点を円弧で結んだら1個飛ばしとか関係なく全部の点通るんじゃね?
それはともかくOpenGLでやるなら細かい直線に分けて書く
それも面倒ならgluPartialDisk
ニナって誰?



191 名前:Light [2007/06/27(水) 22:26:40 ]
脳の視覚システムを研究している者です。
リンク先のような画像をOpenGLで作製したいのですが、うまくいきません。
en.wikipedia.org/wiki/Image:Monocular_rivalry.png

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

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

何か良い解決方法はないでしょうか?
閃いた方、ぜひぜひご教授ください。

192 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 00:22:00 ]
混ぜるのは色のアルファを指定してBlendしてくれ
ブレンドについてはGL_BLENDとかglBlendFuncで調べれば出てくるはず
パチパチというのはよく分からないがZ比較してるんでないかい?
glEnable(GL_DEPTH_TEST)をやってたらglDisableにしてみれ

あとこのレベルの質問はくだすれOpenGLスレに書いた方が適切と思われる

193 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 14:35:22 ]
同業界人かよ
パチパチはvsyncに同期してないか、
ダブルバッファリング関係かどちらかかと思われる

194 名前:Light [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 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 02:44:55 ]
>>195
どういうふうに起動しないのよ?
環境わからんからなんとも言えんけど、GLUTは適切にインストールされてる?

197 名前:デフォルトの名無しさん [2007/07/03(火) 08:25:16 ]
【派遣ネガティブ根性チェック】

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

□派遣先正社員の作った糞開発ツールはたとえ腐っててもマンセーして使う
□派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする
□昼食は必ず派遣先の社員と行くべきだ
□自分の仕事で問題が発生しても解決するのは自分の仕事ではない
□派遣先から「いつまでもここで仕事してくださいね(安い金でw)」と言われて嬉しい
□自社で仕事なんてできるわけがない
□派遣労働の問題点の話題が出ると感情剥き出しにして反論する
□派遣労働の問題を指摘する人は嫌いだ
□派遣先には仕事だけでなくプライベートについてもグイグイ引っ張って欲しい
□奢ってくれる派遣先正社員を尊敬する
□自分の月額金額を知らないのは当然だ、単金を聞いてはいけない
□派遣先正社員より自分の生涯収入が低いのは当然だ
□チビは派遣先にかわいがってもらいやすから派遣には有利だ


198 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 12:33:07 ]
プログラマー板でやれ

199 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 12:56:45 ]
>>198
文句があるなら派遣を辞めてから言え

200 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 15:51:08 ]
HaskellでOpenGL使ってる人いる?



201 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 18:44:55 ]
いらない

202 名前:デフォルトの名無しさん mailto:sage [2007/07/03(火) 18:56:57 ]
俺もいらね

203 名前:デフォルトの名無しさん [2007/07/03(火) 21:35:56 ]
OpenGLなんて単独で使うもんだ
余計なもんなぞ糞

204 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 18:55:12 ]
何がいらないのかまったくわからないのですが


205 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 19:12:14 ]
そうですか

206 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 19:48:52 ]
>200-202の流れにはワラタけど
>203は全く意味がワカランなぁ・・・
OpenGL単独で一体何ができるってんだか。肝心の絵すら出ないよw

207 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 20:07:38 ]
OpenGLが自我をもって動き出す
行く先も分からぬまま

208 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 20:40:07 ]
行く先と言えばLongsPeakって出るの今月だっけ?
ほんとに出るのかな…

209 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 21:58:55 ]
>>206
ヒント
描画ロジックの分離

210 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:35:51 ]
>>209
…描画ロジックを分離するとOpenGL単独でいけるんだ。

…へェ。



211 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:53:16 ]
俺もOpenGL単独で使いたい!
極意を教えてください!!

212 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:00:40 ]
メンテナンス性を考慮してできるだけOpenGL単独になるように設計するだろ、普通

213 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:20:20 ]
>>200
Haskellみたいな純粋に近い関数型言語ってよく知らないんだけどさ、
OpenGLみたいなStateMachineとの相性って悪くないの?
あれかな、モナドとかいうやつを使ってむにゃむにゃするのかな?

214 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 00:09:52 ]
>>212
言語との組み合わせでどう?といわれているのに
単独とかわけの分からないこと言ってるから突っ込まれてるんだろ

215 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 01:05:16 ]
>>214
エスパー乙

216 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 01:20:37 ]
>>204
HaskellでOpenGL使ってる人

217 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 00:10:34 ]
ウィンドウとレンダリングコンテキストとフレームバッファがひとつに
くっついているのって扱いにくくないですか?
スレッドにカレントコンテキストを設定するのもグローバル変数のようで
プログラムが複雑になるような気がします。


218 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 00:40:14 ]
OpenGLのせいではありません。M$に文句言ってください。

219 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 01:23:50 ]
D3Dはそのへんちゃんと作ってるのがムカつくなw

220 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 21:19:22 ]
そうか?
D3DでもDeviceは一個しか作れんし、結局グローバル変数にしちゃわない?
デバイスを使用する関数にいちいち渡してたらそっちの方が複雑になるな

あとは次バージョンのOpenGLにご期待ください



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

ゲームはともかくツールとか作る時には未だにwgl*の適切な取り扱いがよーわからん。

222 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 21:55:33 ]
そうなのか、昔やった時は1個しか作れなかったからそういう物だと思ってた

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

しかしマルチコンテキストの場合は何が共有できるのか分かりづらいのが困る…
これが嫌でpbuffer諦めてFBOにしたしな

223 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 11:40:57 ]
内部で OpenGL を使うライブラリを作成するときに,ユーザーが
別に OpenGL を使っている可能性があるからライブラリの関数を
呼び出すごとにコンテキストの退避,切り替え,復元をしなけれ
ばならないから非効率

224 名前:デフォルトの名無しさん mailto:sage [2007/07/14(土) 20:53:03 ]
それはそのライブラリの仕様が悪いだけのような…

225 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 01:50:28 ]
ライブラリの作り方をずっと考えてきたがうまいやり方が思いつかなかった。
OpenGL をライブラリ内部に隠蔽してユーザと同じスレッドで動かすライブラリ
の場合,ユーザが設定するコンテキストの影響を受けてもいけないし影響を
与えてもいけない。
結局ライブラリの関数に入ったときにこっそりコンテキストを切り替えて
関数から出るときに元のコンテキストに戻す方法しか思いつかなかった。

226 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:32:06 ]
OpenGL 3.0 は D3D10 とほぼ同じ API にしてくれないかな。
そのほうが学習も楽だし,GPU ベンダーも楽になるのに。

227 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 17:17:03 ]
それはない。何か(考えが)浅いな。

228 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 17:24:16 ]
Fahrenheitというのがあってな…。

229 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 17:32:03 ]
>226
今後はしばらくAPIの策定がD3D先行なのは間違いないから
インターフェイスはともかく出来ることはほぼ同じになるだろうね

少なくともD3Dで出来ることはGLでも出来るようになる(速度は知らんが

230 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 20:57:40 ]
なってくれないと困る




231 名前:デフォルトの名無しさん [2007/07/19(木) 23:25:16 ]
OpenGL初心者の者です.言語はjavaを使っています.
修士研究で使用していますが,周りに使っている人がいないので聞けない状況
です.

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

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

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

良い方法があったらよろしくお願いしま

232 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 23:35:07 ]
>>231
回転行列の3列目に向かせたい方向のベクトル入れたらええんちゃうのん?
残りの2列は直交するように適当に

233 名前:デフォルトの名無しさん [2007/07/19(木) 23:42:29 ]
それは,glRotatefを使用しない方法でしょうか?
詳しくないものですいません.

234 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 22:22:24 ]
>236
2 番目の引数は配列のオフセット。
C → glMultMatrixf( m + 10 );
Java → gl.glMultMatrix( m, 10 );



241 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 00:03:45 ]
>>239
直接基底作ってglMultMatrixのほうが明らかに計算量が少ないと思うが・・・

242 名前:デフォルトの名無しさん [2007/07/21(土) 01:25:26 ]
昨日質問した者です.

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

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

みなさんありがとうございます.諦めかけていましたが,なんとかなりそうです.

243 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 14:28:32 ]
XPだとうまく動いてたプログラムが Vista だと glBindTexture での
テクスチャの切り替えがうまくいかねぇ・・・・
ググっても同様の症状は出ないので自分のコードのどこかが
行儀悪いんだろうが何がいけないのやらさっぱり・・・ orz

246 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 20:39:33 ]
とりあえずOpenGL-D3D Translatorで動かしてみたら?

247 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 23:59:46 ]
【派遣ネガティブ根性チェック】

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

□派遣先正社員の作った糞開発ツールはたとえ腐っててもマンセーして使う
□派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする
□仕様とは正社員から口伝されるものだ
□耳で聞いた仕様を正確に覚えていないのは自分の責任だ
□昼食は必ず派遣先の社員と行くべきだ
□自分の仕事で問題が発生しても解決するのは派遣の仕事ではない
□自社で仕事なんてできるわけがない
□派遣労働の問題点の話題が出ると感情剥き出しにして反論する
□派遣労働の問題を指摘する人は嫌いだ
□派遣先には仕事だけでなくプライベートについてもグイグイ引っ張って欲しい
□奢ってくれる派遣先正社員を尊敬する
□自分の月額金額を知らないのは当然だ、単金を聞いてはいけない
□派遣先正社員より自分の生涯収入が低いのは当然だ
□チビは派遣先にかわいがってもらいやすいから派遣には有利だ


248 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 00:05:24 ]
>>246
ども。試してみます。

249 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 09:52:21 ]
>>245
ここにVistaでOpenGLを使う時の注意点があるけどどうだろう
www.opengl.org/pipeline/article/vol003_7/
Aeroを使ってたら切って試してみるといいかもしんない

250 名前:デフォルトの名無しさん(245) mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 11:06:45 ]
>>250
BindTextureに0を指定することって普通無いと思うが、不思議な現象だな
まだVista用のグラフィックドライバがバグってるってだけかもしんないね

252 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 16:03:10 ]
おいらンとこではBindTextureで0をバインドしなくてもVistaで普通に動いてるよ。
てか今まで特に不具合は出てないな。






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

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

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