トップページ⇒tech
1001コメント351KB

OpenGLスレ Part11

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/04/26(木) 02:43:38
クロスプラットフォーム 3D API OpenGLに関する話題を扱うスレッド。

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

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


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

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

- 過去スレ -
Part 9: http://pc8.2ch.net/test/read.cgi/tech/1132403929/
Part 8: http://pc8.2ch.net/test/read.cgi/tech/1126267690/
Part 7: http://pc8.2ch.net/test/read.cgi/tech/1118151979/
Part 6: http://pc8.2ch.net/test/read.cgi/tech/1105612993/
Part 5: http://pc5.2ch.net/test/read.cgi/tech/1100085657/
Part 4: http://pc5.2ch.net/test/read.cgi/tech/1091724463/
Part 3: http://pc5.2ch.net/test/read.cgi/tech/1067529308/
Part 2: http://pc2.2ch.net/test/read.cgi/tech/1039984523/
Part 1: http://pc3.2ch.net/tech/kako/981/981044659.html (dat落ち)
0153デフォルトの名無しさん2007/06/17(日) 15:54:22
スクリーン上の点を空間で表すと直線になるけどな。
0154デフォルトの名無しさん2007/06/17(日) 16:06:50
すみません。仰ってることがわからないです

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

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

それで正しい値だと認識できました。
0155デフォルトの名無しさん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);
じゃねぇかね?
0156デフォルトの名無しさん2007/06/17(日) 18:41:26
ワールド座標中でのスクリーンが欲しいときは0にすると以前教えていただきまして
z1だとこの場合スクリーンより奥の値になりますよね?

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

0157デフォルトの名無しさん2007/06/17(日) 19:42:18
>>156
>ワールド座標中でのスクリーンが欲しいときは0にすると以前教えていただきまして
はっきりいって間違ってるよ
0158デフォルトの名無しさん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度、となります。

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

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

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

ここはOPEN-GLじゃない、数学のレベルの問題なので、どうにかして頑張ります。
今日は帰れそうになさそうです(´;ω;`)
0162デフォルトの名無しさん2007/06/17(日) 21:00:36
>>160
>この「オブジェクトコード」がglui.libを指すのであれば大丈夫ですな
違う、アプリケーションを構成する.oファイル全てなので、
公開しないコードの部分も.oは公開しないといけない。
つまり、コードは無くても良いけどLGPLの部分が置き換え可能な状態で無ければいけない。
0163デフォルトの名無しさん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

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

あとはそれの効率化で頑張ります。
本当にありがとうございました!
0167デフォルトの名無しさん2007/06/23(土) 08:15:38
c++でもextern"C"で頑張って、
dllやらsoを使うのが簡単な気がする。
0168デフォルトの名無しさん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 です。
0169デフォルトの名無しさん2007/06/24(日) 10:16:44
GL_LIGHT_MODEL_AMBIENT
0170デフォルトの名無しさん2007/06/24(日) 11:42:49
>>169
ありがとうございます。原因わかりました。
デフォルトで環境光 0.2 が加わるなんて、知りませんでした。
0171yd2007/06/25(月) 19:05:50
だれかいますか?
0172デフォルトの名無しさん2007/06/25(月) 19:09:03
(@�u@ .:;)ノシ
0173yd2007/06/25(月) 19:20:10
こんち

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


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



0176デフォルトの名無しさん2007/06/25(月) 20:13:16
これはひどいマルチ
0177デフォルトの名無しさん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();
0178デフォルトの名無しさん2007/06/25(月) 22:55:22
足し算は駄目だろ…
0179デフォルトの名無しさん2007/06/26(火) 00:13:33
>>178
はあ?
0180デフォルトの名無しさん2007/06/26(火) 00:31:45
>>179
誤差が蓄積するからって言う意味だろ。
0181デフォルトの名無しさん2007/06/26(火) 00:45:55
>>180
でも差は、6.283185-6.283182=0.000003だけどな。
0182yd2007/06/26(火) 04:01:08
ありがとうございます。早速試してみますm(__)m
0183デフォルトの名無しさん2007/06/26(火) 04:04:36
どういたしまして
0184デフォルトの名無しさん2007/06/27(水) 00:20:17
フィールドシーケンシャル 3DをOpenGLで実装したいのですが、
方法はさておき、左右の画像を1/2に間引きして交互に合成すれば
いいのでしょうか。こんな感じに

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

良い方法があったらよろしくお願いしま
0232デフォルトの名無しさん2007/07/19(木) 23:35:07
>>231
回転行列の3列目に向かせたい方向のベクトル入れたらええんちゃうのん?
残りの2列は直交するように適当に
0233デフォルトの名無しさん2007/07/19(木) 23:42:29
それは,glRotatefを使用しない方法でしょうか?
詳しくないものですいません.
0234デフォルトの名無しさん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)は互いに直交するように
かつ正規化されているように設定する必要がありますヨ。
0235デフォルトの名無しさん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)は適当に与えればよい.

でよろしいでしょうか?

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

「glMultMatrixf(float[],int)は(float)に適用できません」と出てしまいました.
引数で,int型のある数が必要らしいのですが,知っていれば教えていただけませんか?
0237デフォルトの名無しさん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で調べれば良いだけの話では。
0238デフォルトの名無しさん2007/07/20(金) 01:25:37
>237
分かりました,ありがとうございます.
3次元の座標変換というものに慣れていないので,質問しました.
調べてみればみるほど,数学の話になるので仰るとおり理解するには
数学的にしっかり理解しなければいけないようです.

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

ありがとうございました.
0239デフォルトの名無しさん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軸に平行なときは計算が別になるけど、ま、それは分かるでしょ。
0240デフォルトの名無しさん2007/07/20(金) 22:22:24
>236
2 番目の引数は配列のオフセット。
C → glMultMatrixf( m + 10 );
Java → gl.glMultMatrix( m, 10 );
0241デフォルトの名無しさん2007/07/21(土) 00:03:45
>>239
直接基底作ってglMultMatrixのほうが明らかに計算量が少ないと思うが・・・
0242デフォルトの名無しさん2007/07/21(土) 01:25:26
昨日質問した者です.

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

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

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

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

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

□派遣先正社員の作った糞開発ツールはたとえ腐っててもマンセーして使う
□派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする
□仕様とは正社員から口伝されるものだ
□耳で聞いた仕様を正確に覚えていないのは自分の責任だ
□昼食は必ず派遣先の社員と行くべきだ
□自分の仕事で問題が発生しても解決するのは派遣の仕事ではない
□自社で仕事なんてできるわけがない
□派遣労働の問題点の話題が出ると感情剥き出しにして反論する
□派遣労働の問題を指摘する人は嫌いだ
□派遣先には仕事だけでなくプライベートについてもグイグイ引っ張って欲しい
□奢ってくれる派遣先正社員を尊敬する
□自分の月額金額を知らないのは当然だ、単金を聞いてはいけない
□派遣先正社員より自分の生涯収入が低いのは当然だ
□チビは派遣先にかわいがってもらいやすいから派遣には有利だ
0248デフォルトの名無しさん2007/07/27(金) 00:05:24
>>246
ども。試してみます。
0249デフォルトの名無しさん2007/07/27(金) 09:52:21
>>245
ここにVistaでOpenGLを使う時の注意点があるけどどうだろう
http://www.opengl.org/pipeline/article/vol003_7/
Aeroを使ってたら切って試してみるといいかもしんない
0250デフォルトの名無しさん(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
0251デフォルトの名無しさん2007/07/27(金) 11:06:45
>>250
BindTextureに0を指定することって普通無いと思うが、不思議な現象だな
まだVista用のグラフィックドライバがバグってるってだけかもしんないね
0252デフォルトの名無しさん2007/07/27(金) 16:03:10
おいらンとこではBindTextureで0をバインドしなくてもVistaで普通に動いてるよ。
てか今まで特に不具合は出てないな。
■ このスレッドは過去ログ倉庫に格納されています