OpenGLスレ Part14at TECH
OpenGLスレ Part14 - 暇つぶし2ch420:デフォルトの名無しさん
10/05/19 02:03:34
>>419
setcolorってのがなんだかわからんけど、普通RGB順だろうから赤から緑のグラデーションで合ってるんじゃ?
赤青にしたいなら0.0を2番目にしてみたらー
つか学校の授業のサンプル?ずいぶん荒っぽいなぁ

421:デフォルトの名無しさん
10/05/19 08:45:47
>>419 森先生の所の宿題なら、このページの「2-9:実験2-3:カラーグラデーション」をそのままコピれば終わりじゃないか。
URLリンク(www.mlab.im.dendai.ac.jp)
setcolor(r,g,b)の説明を読むと、"r, g, bは赤緑青の値を格納するdouble型変数である。"
と書いてあってr,g,bは0~255ではなく0~1.0な。
x=0で setcolor(1,0,0)
x=511で setcolor(0,0,1)



422:デフォルトの名無しさん
10/05/19 08:48:03
ごめん提出者の名前だった。×森

423:デフォルトの名無しさん
10/05/19 14:43:54
木を見て森を見ずまさにこのことだな

424:406
10/05/19 22:04:24
>>420
弄ってみたらどうやらサンプルが間違えているようです。
ですがなぜか赤から青へのパターンが生成できませんでした。
青から緑は出来たのですが。

ウインドウの方も生成されませんし。

>>421
その課題じゃありません。
しかも試しに動かしてみたらエラーでました・・・


425:デフォルトの名無しさん
10/05/19 22:13:40
>>424 お前の感想はどうでもいい。
まず
1. 画面全部をR1色で塗りつぶす
2. 画面全部をG1色で塗りつぶす
3. 画面全部をB1色で塗りつぶす
をやってみ。お前はまず基本的な所がまったくわかっていない。
だから他人にも説明できない。
ウィンドウが生成されないならお前はどうやって色を確認してるんだ。



426:デフォルトの名無しさん
10/05/19 22:33:06
>>424
ウィンドウの生成ができないのに赤から青はどこに出てるんだよw
あとなんでどこをどう変えたら青から緑になったとか書かないの?
こと細かく書けば物好きが答えてくれるのにw
(setcolorとかincmc.hとかいう中にあんだろうけど、それがわかんないとなんともだろうが)

つか課題なら講師に聞けばいいじゃん。授業料払ってんでしょ?

427:406
10/05/19 22:39:35
>>425
setcolor(x/2, 0.0, 0.0);で黒から赤
setcolor(0.0, x/2, 0.0);で黒から青
setcolor(0.0, 0.0, x/2);で黒
でした。

ウインドウが生成されないでプログラムが動いてるって意味です。
外観の設定で視聴効果を切ればウインドウが生成されます。
パッケージが何かしら足りてないのでしょうか

428:406
10/05/19 22:46:17
>>426
勉強ですがとりわけ何かの課題ってわけじゃないです。

そもそもプログラム自体の質問がしたかったわけではなく
正常に動作しないのはUbuntuに問題があるのではないかと
(パッケージが足りない等で)考えたんですが、
Ubuntuのスレで聞いたら、プログラム板行けって言われたんで
こっちで質問したわけです。

429:デフォルトの名無しさん
10/05/19 22:46:47
俺OpenGL知らないUbun厨。>>419のサンプルがDLできないよ。

430:425
10/05/19 22:51:18
>>427
お前は何も分かっていない。他人に聞かれていることをことごとく外している。
いいからグラデーションとか考えないで画面全体を1色で塗りつぶしてみろ。
お前以外の人間はsetcolor(r,g,b)、引数は(0-255 or 0-1)だと推測しているが、
お前の説明はそれと矛盾する。通常のOpenGLではお前の言う通りには「絶対に」ならない。
一番考えられるのはお前の説明が間違えている。
お前の説明は意味不明だからソースを出せといわれている。

だからウィンドウが生成されないならお前はどうやって色を確認しているのか。





431:デフォルトの名無しさん
10/05/19 22:52:52
>>428
426だけど
linux環境ないんで想像だけどさ、(421のページから上いって課題臭いとこいってダウンロードしてincmc.h拾ってきたが)
void setcolor(r,g,b)

int r,g,b;

{

glColor3d(((double)r)/255,((double)g)/255,((double)b)/255);

}

なってんだよね。そうなってる?

最近C++ばっかで忘れちゃったんだけど、Cって引数の型チェックってしないんだっけ
だとsetcolorの引数に0.0とか渡すとスタックがずれるか?(ここが興味あったのでレスしてみた)

setcolorに渡してる 0.0 を 0 に変えてみたらどうだろうか

432:406
10/05/19 23:09:42
>>429
すいません。
もう消しちゃいました。

>>430
不精しました。すいません。
for(x=0;x<512;x++)
{
setcolor((511-x)/2, 0, x/2);
for (y=0;y<512;y++)
{
setpixel(x,y);
}
}
これ出せば分かってもらえますかね?

>だからウィンドウが生成されないならお前はどうやって色を確認しているのか。
ウインドウだけ生成されないんです。
メモ帳を開いたら外枠なくて文字打つ白地の部分だけ表示されてる見たいな感じです。

>>431
0にしてみたらちゃんとグラデーション出来ました。

433:デフォルトの名無しさん
10/05/19 23:19:18
解決してないのになぜ消した
もう知らん

434:425
10/05/19 23:29:46
>>432
何で0にして「ちゃんとグラデーション出来ました」と言うのだお前は。
0なら黒だろ。
いいからまず画面全体を1色で塗りつぶせ。
r,g,bの3回やれば全部推定できるから。
お前の説明は何をやったら何が起きたのか、さっぱりわからん。


435:デフォルトの名無しさん
10/05/19 23:42:04
406氏の中では枠のないウインドウはウインドウではないということはわかった。
こりゃエスパーも大変だな。

436:406
10/05/19 23:49:44
>>434
3回塗りつぶししましたけど
setcolor(255, 0.0, 0.0)で赤
setcolor(0.0, 255, 0.0)で青
setcolor(0.0, 0.0, 255)で黒になりました。

0.0を0で
setcolor(255, 0, 0)で赤
setcolor(0, 255, 0)で(黄)緑
setcolor(0, 0, 255)で青
と正常?に動きました。

>>435
枠をウインドウって呼ぶもんだと勝手に思い込んでました。

437:425
10/05/19 23:49:53
>>431 が正解っぽい。昔のその書き方だと型チェックをしないみたい(知らんかった……)
#include <stdio.h>

void setcolor (r,g,b)
int r, g, b;
{
printf ("r = %f\n", ((double)r)/255);
printf ("g = %f\n", ((double)g)/255);
printf ("b = %f\n", ((double)b)/255);
}

int main (int argc, char** argv)
{
setcolor (0, 0, 0.0);
return 0;
}

を表示すると、

r = 0.000000
g = 0.000000
b = 6788705.349020

bの値は毎回違う。

438:425
10/05/19 23:57:18
念のため。
setcolor (0.0, 0.0, 0.0);
のときは
r = 0.003922
g = 4240451.482353
b = 4240451.545098

原因がこれだとしてもきれいなグラデーションにはならないと思うのだが……
まあいいや、俺もこれ以上は知らん。


439:デフォルトの名無しさん
10/05/22 02:11:33
質問です。

頂点法線をスムース化したいのですが
高速な方法(GLでの)・アルゴリズムというのはあったりするのでしょうか?

基本的なやり方だと頂点を共有する面法線を調べて
平均化して頂点法線とする、という方法だと思います。

ただあまりにも計算量が多いと思うのですが
これしかやり方は無いのでしょうか?

よろしくお願いします。

440:デフォルトの名無しさん
10/05/22 02:27:02
計算量が多いって、頂点数10^10とかか?

441:デフォルトの名無しさん
10/05/22 02:32:59
速度は知らんが綺麗な平均化方法ならどこかにっと、これか
URLリンク(ci.nii.ac.jp)
とりあえずメモとして貼り付け

442:デフォルトの名無しさん
10/05/22 02:33:16
10^8ぐらいですね。

ただマイフレ動的に生成したいので
そこの部分がひっかかるのです。


443:デフォルトの名無しさん
10/05/22 02:43:05
>>441
有り難うございます。

ざっと目を通してみましたが
球面に近似することで正確な法線がとれる理由がイマイチ理解が追いつきませんw
まだ実装はしていないので速度の点は何とも言えませんが
凸面形状に限っての論文のようで
不定形モデルである自分の場合では上手く使えないかも知れません。
とりあえず簡単に試してみようかと思います。



>>442
自己レス
10^7ですね。
8は限界テスト中にで出そうとしたデータでした。
メモリ消費が半端ない。

444:デフォルトの名無しさん
10/05/22 14:00:32
1000万頂点で毎フレーム動的計算って、
最終的にはどれくらいの速度を目指してるの?

445:デフォルトの名無しさん
10/05/22 14:15:35
最低でも300fpsは欲しいですね。

446:デフォルトの名無しさん
10/05/22 15:04:13
そうですか..

447:439
10/05/22 15:29:32
439です。445は偽物です。

>>444
15fぐらいなら現実的かな、と思っています。

448:デフォルトの名無しさん
10/05/24 12:48:16
OpenGLに使う幾何学って何幾何学っていうんですか?

449:デフォルトの名無しさん
10/05/24 13:05:36
ジオメトリ・シェーダー?

450:デフォルトの名無しさん
10/05/24 13:44:48
いいえ、位相幾何学とかユークリッド幾何学とか代数幾何学とか色々あるじゃないですか?
そのなかのどれなのかなあと思ってます。

451:デフォルトの名無しさん
10/05/24 13:51:14
計算機科学。

452:デフォルトの名無しさん
10/05/24 13:51:34
計算幾何学。

453:デフォルトの名無しさん
10/05/24 13:57:02
計算幾何学。

454:デフォルトの名無しさん
10/05/24 14:02:01
ふざけないで真面目に教えてください。
よろしくお願いします。本当に困ってます。

455:デフォルトの名無しさん
10/05/24 14:34:29
おっちんちんびろーん^^

456:デフォルトの名無しさん
10/05/24 16:10:59
>>450
ユークリッド幾何学
射影幾何学
微分幾何学
解析幾何学
計算幾何学
これくらい押さえておけばOK

457:デフォルトの名無しさん
10/05/24 16:18:53
そうでしたか、微分幾何学しかよくわからないので。
とりあえず解析幾何学を勉強しようと思います。
ユークリッド幾何学はその次に勉強します。
有難うございました。

458:デフォルトの名無しさん
10/05/24 16:28:04
てか、単純に OpenGLで使う幾何学とか言われても
何やりたいのかで変わるんじゃね。じゃなかったらざっくり >>456 みたいな返事しか出来ないんじゃね
OpenGLはただのグラフィクスライブラリで、それ使って何をやるかなんて
自分が何やるか次第っていう基本、ド基礎はどこいった


459:デフォルトの名無しさん
10/05/24 16:33:38
OpenGLのライブラリーの中で使われている幾何が何かと言うことです。
OpenGLを作るために必要な幾何学といいうことでもあります。

460:デフォルトの名無しさん
10/05/24 16:38:40
日本語読めないのかおめーは

461:デフォルトの名無しさん
10/05/24 16:41:25
自分で何に対して何を聞いてるのか意味わかってるのか
ライブラリってそもそも、それぞれ関連する処理を都合で集めた関数群なんだぞ

座標空間での捉え方って話で言えば>>456も書いてるがユークリッド幾何学とかそういう大きな返事しか出来ないし、
そもそも中で使われているって、単機能ソフトウェアとかじゃないから、普通に答えづらくね
単に座標空間って言葉でもハミルトン数の空間もあるし、元の質問自体前提が適当すぎ

462:デフォルトの名無しさん
10/05/24 16:44:52
もういいです。
偉そうな態度の人に何を言っても無駄でしょう。
この書き込みの跡に私を罵倒する書き込みがあるとおもいますが、一切無視します。
さようなら。

463:デフォルトの名無しさん
10/05/24 16:49:00
まさかのマジキチ。

464:デフォルトの名無しさん
10/05/24 16:49:36
>>462
もういいですじゃねぇよ。 悪いのはお前。
無知な中学生二年生は言葉の響きで満足なんかしてないで、
真面目に意味を勉強して、実践して理解しろ

465:デフォルトの名無しさん
10/05/24 16:53:11
なんで偉そうとか思ったんだろうなww
多分何もわからないけどプライドだけ高くて、言葉で知的な気分味わって勝ち誇りたかったのに、
マジレスされて傷ついたから何も返事しないで 偉そうとか言って逃げたんだろうなw


466:デフォルトの名無しさん
10/05/24 16:58:28
勝間和代とかこんなイメージだな
プライドはあるし、自分の中の妄想で期待する答えがあるから相手の話をあまり聞いていない

467:デフォルトの名無しさん
10/05/24 17:16:46
本当に何か知りたい質問だったら、この後に罵倒する書き込みがあるだなんて、普通そんな謎な想像はしないよな

468:デフォルトの名無しさん
10/05/24 17:19:36
偉そうな態度の人に何を言っても無駄でしょう。
さようなら。

469:デフォルトの名無しさん
10/05/24 17:24:04
ロールプレイが足りないな。
そこは丁寧かつ遠まわしにチクリとやり返しておく場面だ。

470:デフォルトの名無しさん
10/05/24 17:33:57
>>455

471:デフォルトの名無しさん
10/05/24 17:56:22
久しぶりにスレが伸びていると思ってのぞいてみれば…
もっとOpenGLの話をしようぜ

472:デフォルトの名無しさん
10/05/24 18:23:52
小僧はニュー速のつもりで書き込んでるのかもしれないな
まじめに答えて損しちゃったよ


473:デフォルトの名無しさん
10/05/25 00:26:39
書き込めるぅ

474:デフォルトの名無しさん
10/05/25 19:16:46
質問です。
gl_line_strip/loopで線を引く時と、ポリゴンを描画するときで1ピクセルずれますよね?
これを一致させる方法はありますか?
ない場合、全体の座標系は、どっちに都合がいいように合わせるのが一般的でしょうか。

475:デフォルトの名無しさん
10/05/25 19:44:15
面白いギャグだ。

476:デフォルトの名無しさん
10/05/25 20:01:50
OpenGLの座標系はピクセルの中心ではなくピクセル境界に合うようになっているので
GL_LINE_STRIPで線を引こうとすると、(ピクセルと一致する座標系にしている場合は)
+0.5しないと正確に目的のピクセルを通らない。
で、ちょうど境界上の座標を指定した場合の切り詰め方が負方向なので
例えば画面左端ギリギリに1ピクセル幅の線を引こうとした場合、1ピクセル右を指定することになる。
(ポリゴンを描くときは画面左端の座標をそのまま指定すれば当然思い通りに塗られる)

このずれをなんとかしたいのです。
GL_LINE_STRIPでの境界上の点の扱いを正方向に倒すような機能があるかどうか?
そういう機能が無いとして、このずれを補正する目的でglTranslatedするのは一般的なのか?

477:デフォルトの名無しさん
10/05/25 20:04:21
ん 0.375 の話じゃなくて?


478:デフォルトの名無しさん
10/05/25 20:10:08
0.375?

479:デフォルトの名無しさん
10/05/25 20:30:34
URLリンク(www.opengl.org)

これか。サンキュー。

480:デフォルトの名無しさん
10/05/25 21:12:05
なんで0.375なの?

481:デフォルトの名無しさん
10/05/25 21:33:26
0.25だと0と0.5のどっちに倒れるかわからないので0.25と0.5の中間……ということじゃね?わからん。
ついでにGL_FLAT必須だね。SMOOTHと併用するとテクスチャとか色々ぼける。

482:デフォルトの名無しさん
10/05/26 20:18:03
日本一わかりやすいボーンのプログラムを作ってください。

483:デフォルトの名無しさん
10/05/26 20:57:08
作りました

484:デフォルトの名無しさん
10/05/26 23:48:36
俺も作りました

485:デフォルトの名無しさん
10/05/27 00:15:34
たぶん俺のが日本一だと思うよ

486:デフォルトの名無しさん
10/05/27 00:22:56
俺のは残念だけど日本二だ・・・

487:デフォルトの名無しさん
10/05/27 00:34:49
マジレスすると俺のが日本で一番分かりやすいと思う。

488:デフォルトの名無しさん
10/05/27 00:54:10
負けた・・・orz

489:デフォルトの名無しさん
10/05/27 20:58:15
では、そのプログラムを見せてください。

490:デフォルトの名無しさん
10/05/27 21:17:59
OK
300万くらいでいいか?

491:デフォルトの名無しさん
10/05/27 21:20:49
ものをみてみないと何ともいえないな。
動画とかでアップしてみてくれる?

492:デフォルトの名無しさん
10/05/27 23:29:06
あ、コードじゃ駄目なんだ・・・じゃあ俺はおいとましますよ

493:デフォルトの名無しさん
10/05/28 00:20:28
コードでいいよ

494:デフォルトの名無しさん
10/05/28 12:20:47
delete from このスレ where num>=482 and num<494 and text not like '%日本%'
commit


495:デフォルトの名無しさん
10/05/28 12:33:06
SQL文を複数打つ時は、文末に;「セミコロン」をいれないとダメでつよ

496:デフォルトの名無しさん
10/05/28 23:15:04
Frame Buffer objectと深度値を記録するテクスチャを用いて
ポストフィルタの作成をしています。
描画プロセスの途中、ある立体のみの深度値が必要だったので、
Frame Buffer objectに描画対象を切り替えて物体を描画しました。

当然この物体の描画以前の深度値とこの物体の深度値は二つに
分かれているのですが、これらを統合することは可能でしょうか?

テクスチャに深度値は格納しているので、デフォルトのフレームバッファに対して
深度値を書き込むことが出来れば実現出来ると考えているのですが、
どなたかご教示していただけないでしょうか?


497:デフォルトの名無しさん
10/05/29 01:12:26
GLSLだとgl_FragDepthに出力すればどうにかなるんじゃないかな

498:デフォルトの名無しさん
10/05/30 15:34:46
GL_COLOR_ATTACHMENT0_EXT にデフォルトのフレームバッファ
GL_COLOR_ATTACHMENT1_EXT にある立体用のフレームバッファ
にして同時に描画


499:デフォルトの名無しさん
10/05/31 20:14:51
496です。レスが遅れてしまって申し訳ありません。

>>497
レスありがとうございます。
レスをいただいてからgl_FragDepthを試してみたのですが、
あまり上手く行かずorz (gl_FragDepthに出力してもなぜか反映されない)

gl_FragDepthは以前にも一度試したことがあるのですが、
その時もあまり上手く行かず、投げ出してしまったことがあります。
深度バッファをレンダーバッファではなく、テクスチャを用いて
作成しているのが問題なのでしょうか。
もう少し色々と試してみます。

>>498
レスありがとうございます。
そういえばMRTという手がありましたね・・・。
でも、深度バッファは同時に複数アタッチ出来なかったと思うのですが、
可能なのでしょうか・・・?調べてきます。

MRTは今回書き込んだ箇所以外に適用することで
問題解決の糸口が見いだせそうな気がします。こちらのほうも模索してみます。

レス本当にありがとうございました。
最後に、返信が遅れてしまったことをお詫びします。

500:439
10/05/31 23:49:56
flag...?


501:デフォルトの名無しさん
10/05/31 23:52:18
ワリィ、JavaスレのHN残ってた。

502:498
10/06/02 18:14:55
>>499
>>でも、深度バッファは同時に複数アタッチ出来なかったと思うのですが

そういえばそうだった orz



503:デフォルトの名無しさん
10/06/02 22:33:14
アタッチ馬鹿よね~ お馬鹿さんよね~♪

504:デフォルトの名無しさん
10/06/02 22:34:39
う深度ゆ~び う深度ゆ~び さされ~ても~♪


505:デフォルトの名無しさん
10/06/03 09:16:26
面白いと思ってレスしてるんだろうけどさぁ・・・

506:デフォルトの名無しさん
10/06/03 14:19:32
高井麻巳子は神

507:デフォルトの名無しさん
10/06/03 15:01:01
何の?

508:デフォルトの名無しさん
10/06/03 16:34:47
>>506
うしろ指さされ組とか今の子は本当に知らない
てかもういい加減スレチだww

509:デフォルトの名無しさん
10/06/03 23:43:54
どこで質問すれば良いのか分からないのでUNIX質問スレに一度書き込んだのですが、
スレ違いのような気がしてきたのでここで再度質問させてください。
Ruby/GtkGlExtで3Dの描画をしたいと思っているのですが、
(Open GLやGtkGlExtを使うのは初めてです、RubyやGtkを使って個人用の小物を作ったことは何度かあります)
その際スクリーンに表示し、かつ必要に応じて保存したいと思っているので、Gdk::Pixmap(GdkPixmap)の使用を考えています。
ところが、断片的な資料を色々当たりながら組んでみたところ、
Gdk::GLContext(GdkGlContext)の設定の仕方が悪いのか、ライト等の設定が全く効きません。
問題を再現する(たぶん)最小のソースコードが以下なのですが、(1)をコメントアウトして代わりに(2)を実行させると正常な挙動を示します。
(1)はどこがまずいのでしょうか?

require 'gtk2'
require 'gtkglext'

def draw
GL.Clear(GL::COLOR_BUFFER_BIT)
Gdk::GL.draw_sphere(true,0.2,20,20)
GL.Viewport(0,0,200,200)
GL.Light(GL::LIGHT0, GL::DIFFUSE, [1,0,0,1])
GL.Light(GL::LIGHT0, GL::POSITION, [0.5,0.5,-1,0])
GL.Enable(GL::LIGHTING)
GL.Enable(GL::LIGHT0)
GL.ClearColor(1,1,1,1)
GL.Flush
end

Gtk::GL.init
glconfig = Gdk::GLConfig.new(Gdk::GLConfig::MODE_RGB)
window = Gtk::Window.new
window.set_size_request(200,200)
window.realize

510:509
10/06/03 23:44:50
#=begin (1)
wingc = Gdk::GC.new(window.window)
pixmap = Gdk::Pixmap.new(window.window,200,200,-1)
glpixmap = pixmap.set_gl_capability(glconfig)
glcontext = Gdk::GLContext.new(glpixmap,nil,true,Gdk::GL::RGBA_TYPE)
glpixmap.make_current(glcontext)
draw
window.signal_connect("expose_event") do
window.window.draw_drawable(wingc, pixmap, 0, 0, 0, 0, -1, -1)
end
#=end

=begin (2)
drawing = Gtk::DrawingArea.new
drawing.set_size_request(200,200)
drawing.set_gl_capability(glconfig)
window.add(drawing)
glcontext = drawing.gl_context
gldrawable = drawing.gl_drawable
gldrawable.make_current(glcontext)
drawing.signal_connect("expose_event"){draw}
=end

window.signal_connect("delete_event"){Gtk.main_quit}
window.show_all
Gtk.main

511:デフォルトの名無しさん
10/06/04 05:39:34
def draw
GL.Viewport(0,0,200,200)
GL.ClearColor(1,1,1,1)
GL.Clear(GL::COLOR_BUFFER_BIT)
GL.Enable(GL::LIGHTING)
GL.Enable(GL::LIGHT0)
GL.Light(GL::LIGHT0, GL::DIFFUSE, [1,0,0,1])
GL.Light(GL::LIGHT0, GL::POSITION, [0.5,0.5,-1,0])
Gdk::GL.draw_sphere(true,0.2,20,20)
GL.Flush
end

だとおもう。

512:デフォルトの名無しさん
10/06/04 08:14:39
glut使ってんですが、わからないことが。
基本3Dで描画してるビューのスクリーン上の座標を指定して線とかを書きたいんですが
方法がわからんから教えてくれないか。
( 0, 0 ) ( 100, 100 ) を結ぶ線分を描く、みたいな感じで


513:デフォルトの名無しさん
10/06/04 08:27:03
射影行列を
ビューと同じサイズの正射影と入れ替えればいいんじゃね?

514:512
10/06/04 08:56:37
>>513
ありがと、でも初心者だからよくわからないお

↓↓こんな感じ?でもその肝心の「なんか」のところがピンときません

glPushMatrix();
glMatrixMode( GL_PROJECTION );

// なんか

glBegin( GL_LINES );
glVertex2d( 0, 0 );
glVertex2d( 100, 100 );
glEnd();

glPopMatrix();

515:デフォルトの名無しさん
10/06/04 09:18:46
>>514
glPushMatrixは行列モードを変えてからやらないと
ビューのサイズが(0,0,800,600)なら

glMatrixMode( GL_PROJECTION );
glPushMatrix();
glLoadIdentity();
glOrtho(0 , 800, 600 , 0 , -1.0 , 1.0);// ニアとファーのプレーンは適当
glBegin( GL_LINES );
glVertex2d( 0, 0 );
glVertex2d( 100, 100 );
glEnd();
glPopMatrix();


必要ならあらかじめ
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
しておく事

516:512
10/06/04 09:33:25
>>514
できた!超ありがとう!
一つ学習できたよ

517:512
10/06/04 09:34:36
>>515 でした。失敬

518:デフォルトの名無しさん
10/06/04 20:46:11
directxと、どっちが速い?

519:デフォルトの名無しさん
10/06/04 23:04:44
x

520:デフォルトの名無しさん
10/06/05 08:24:53
o

521:デフォルトの名無しさん
10/06/05 09:15:31


522:デフォルトの名無しさん
10/06/05 09:28:19


523:デフォルトの名無しさん
10/06/07 00:50:22
3Dモデルファイルを読み込む場合に、3角ポリゴンに分割した方が効率良いのかな?

524:デフォルトの名無しさん
10/06/07 01:31:26
四角が混ざってると描画が面倒。


525:デフォルトの名無しさん
10/06/07 03:19:16
でもクアッドの方が描画は早い。
まぁ現実的ではないので基本は3角。

526:デフォルトの名無しさん
10/06/07 05:55:30
WGL_ARB_multisampleで16xマルチサンプリングを使うとテクスチャサンプリングがおかしくなるみたいなんですが同じ現象が出る方いますか?
x8以下で設定した場合やnvidiaコントロールパネルで設定した場合は発現しません

VistaとGF9600GTで最新ドライバを使用しています

527:デフォルトの名無しさん
10/06/07 06:03:14
追記、エラー等は出ていません
具体的な現象としてはサンプリング誤差が出てスプライト用途の画像がぼやけたり
ClampToEdgeを使用しているのに逆サイドのピクセルを読んだりします

528:デフォルトの名無しさん
10/06/07 06:47:11
おにゃんこワロタ

529:デフォルトの名無しさん
10/06/07 08:22:15
>>511
遅くなりましたが、ありがとうございます。
順番が効いてくるのですね。
もう一度勉強し直します。

530:デフォルトの名無しさん
10/06/07 10:09:47
>>523
インデックスバッファが使えない環境だと、
とにかく頂点数を減らすためにクアッドストリップ使ったりした。
ただクアッドは意図しないカリングが起きたりもした。

PCならインデックスバッファ使ったトライアングルリストが効率良いし使いやすいよ。

531:デフォルトの名無しさん
10/06/07 18:50:53
マテリアル単位で読み込むと効率良いかな?

532:デフォルトの名無しさん
10/06/07 19:36:08
OpenGL ES はPC向けのAPIもでまわってるのかな?
出来ればPCで開発したい。

533:デフォルトの名無しさん
10/06/09 19:53:16
glutのウィンドウに表示される内容をVC++のpictureboxに描画する方法ってある?

534:デフォルトの名無しさん
10/06/10 02:54:36
質問したいことがあるのですが、長いので2レスに分けさせていただきます。

URLリンク(wisdom.sakura.ne.jp)
このサイト様を見て、破線を表示するプログラムを作成したのですが、
破線が期待される通りに表示されません。

サイト様の説明では↓のように破線の三角形が表示されることが期待されるのですが、
URLリンク(wisdom.sakura.ne.jp)
↓のように斜めの破線が複数本表示されてしまいます。
URLリンク(fx.104ban.com)

ソースは次のレスで示させていただきますが、
元のサイト様のものとほぼ同一で、
#include <windows.h> の行だけ削除してあります。

OSはUbuntu 9.10です。
openGLはfreeglut3の2.4.0-6.1ubuntu1をインストールしました。

コンパイル時のコマンドは
gcc -lglut source.c
です。

破線が複数本表示されてしまう原因を知りたいのですが、
何かお分かりになる方が居られましたらご教示いただけると嬉しいです。
よろしくお願いします。

535:534
10/06/10 02:57:06
上で質問させていただいたものですが、使用したソースです。

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

void disp(void) {
 glClear(GL_COLOR_BUFFER_BIT);
 glEnable(GL_LINE_STIPPLE);
 glLineStipple(1, 0xF0F0);
 glBegin(GL_LINE_LOOP);

 glVertex2f(0, -0.9);
 glVertex2f(-0.9, 0.9);
 glVertex2f(0.9, 0.9);

 glEnd();
 glFlush();
}

int main(int argc, char **argv) {
 glutInit(&argc, argv);
 glutInitWindowPosition(100, 50);
 glutInitWindowSize(400, 300);
 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);

 glutCreateWindow("Kitty on your lap");
 glutDisplayFunc(disp);

 glutMainLoop();
 return 0;
}


536:534
10/06/10 02:59:50
申し訳ありません、一つ言い忘れたことがあります。

glEnable(GL_LINE_STIPPLE)
の行を削除すると破線ではなく実線が表示されますが、
この時は複数本ではなく期待通り1本だけが表示されます。


537:デフォルトの名無しさん
10/06/10 03:29:24
>>536
そのソースを丸々コピって動かしても別に普通だけどなぁ
ちょっと別のPCで動かしてみるとかビデオカードのドライバを新しくするとかしてみれば

538:デフォルトの名無しさん
10/06/10 03:34:38
気になるところは特にないなぁ。

とりあえず今は次の項目に進んでも問題無いかも。
STIPPLEなんて使わんしな・・・。

539:デフォルトの名無しさん
10/06/10 03:36:08
データを読み取ってjpegで出力するようなCUIアプリを作りたいのですが、
GLUTやその他のGUIツールキットを使わずにOpenGLを使えないものでしょうか?
glutCreateWindow(name);
をやらずにいきなり描画すると、どうしてもsegmentation faultが出てしまって困っています。


540:デフォルトの名無しさん
10/06/10 03:46:47
「データを読み取ってjpegで出力する」過程の何にOpenGLを使うつもりなんだ?
シェーダーに計算させようとかそういう話?

541:デフォルトの名無しさん
10/06/10 06:39:08
>>540
具体的には、データを読み込んでそれをもとに「描画」し、
(ポリゴンを3次元に配置して光を当てて射影するという操作です)
それをglReadPixelsで読み取るという操作をOpenGLでやろうと思っています。

それで、ウェブサイトを参考に、GLUTを用いて何とか作れたのですが、使わずに何とかできないかなと。
「シェーダー」というのがそれを実行してくれるのですか?

542:デフォルトの名無しさん
10/06/10 08:21:58
>>541
シェーバー使ってピクセルを刈り取るんだよ

543:デフォルトの名無しさん
10/06/10 08:26:27
>>541
シェーダーは関係ない。
GLUTを使わない方法を解説しているページは沢山ある(たとえば>>1のNeHeのLesson1)
だが、今のままGLUT使っといたほうがいいよ

544:デフォルトの名無しさん
10/06/10 08:52:34
>>543
ありがとうございます。
なぜGLUTやその他のGUIツールを使いたくないかというと、ウィンドウに描画する作業が律速ではないかと非常に強く疑われるからなのです。
特に、リモートのサーバ上で動かすことを想定しているので、その転送の時間が。
glutHideWindowをやっても、大して効き目がないですね。
(ちなみに、そういうわけで環境はLinuxです、明示してなくてすみません)

545:デフォルトの名無しさん
10/06/10 09:23:30
>>544
とりあえず簡単なプログラムをGLUTと比較して、遅さの原因がGLUTにあることを確認したらいいとは思うが
GLUTをやめても速度は上がらないと思うよ。
glReadPixelsのデーターを転送してるのが遅いんでしょ?。それはglut関係ないし。

546:デフォルトの名無しさん
10/06/10 09:27:24
>>545
glReadPixelsのデータも転送しないまま、サーバ上でjpegに変換しています。
サーバからこっちに転送が発生するのは、Xのディスプレイだけですし、
実際ローカルでテスト実行したら、サーバから実行するより早いので、
どう考えてもディスプレイの転送がボトルネックかと。

547:デフォルトの名無しさん
10/06/10 09:35:13
で、結局何が聞きたいの?
GLUT使いたくないなら使わないで素のOpenGLでやればいいだけジャン?

548:デフォルトの名無しさん
10/06/10 09:36:52
>>547
それをどうやるかというのが、そもそもの>>539の質問です……。

549:デフォルトの名無しさん
10/06/10 09:47:12
意味が分からん
表示するのが前提なのにウィンドウに書きたく無いってどこに表示するつもりなんだよ

550:デフォルトの名無しさん
10/06/10 09:52:03
>>549
ウィンドウに表示するかどうかはどうでもよく、
glReadPixels(あるいは別の手段でも構いませんが)でビットマップデータを読み取れさえすればよいのですが。
「表示するのが前提」とはどういうことですか?

551:デフォルトの名無しさん
10/06/10 09:56:17
どっちにしろXの転送とやらがおきるのならGLUTだろうと自前だろうと速度は変わらないような気がするが
linuxはよく知らないけどこれとかどうよ
URLリンク(www.codesampler.com)


552:デフォルトの名無しさん
10/06/10 09:56:22
Windowsならビットマップにコンテキスト作れば描画してくれるけどGPUの支援ナシ
最近のOpenGLならFBO使って要求満たせんかね?これならウインドウは非表示でいいだろ

553:デフォルトの名無しさん
10/06/10 10:05:58
描画が終わった段階で1回だけglFlushして後は描画とめておけば良いだけちゃうの?

554:デフォルトの名無しさん
10/06/10 10:33:16
>>546
「転送」がかみ合ってない気がする・・・

555:デフォルトの名無しさん
10/06/10 11:45:49
垂直同期してるから60FPSに固定されてて遅いとか?

556:デフォルトの名無しさん
10/06/10 11:49:56
その処理はIdleファンクに書いているんだよね?

557:デフォルトの名無しさん
10/06/10 16:11:16
glXCreateGLXPixmap() で pixmap 作って、
そこに context 割り当ててやればいいのかねぇ?


558:デフォルトの名無しさん
10/06/10 20:30:00
赤本に書いてある太陽系のプログラムをそのまま写して
ビルドしたのですが
太陽の周りを回っている地球が太陽の後ろに行っているはずなのに
太陽に隠されることがないまま動いています。
Zバッファが無効になっているのですか?
ちなみに環境はmac OSXです。
よろしくお願いします。

559:デフォルトの名無しさん
10/06/10 20:40:26
まずはソースコードを読めるようになってからまた来てください。

560:558
10/06/10 21:57:29
すいません、解決しました。
一応報告します。デプステストをオンにしたらちゃんと
前後関係正しく描画してくれました。
赤本のコードには書いてなかったのですが、環境によっては
オートでオンの状態になってるということですかね

561:534
10/06/10 22:57:32
>>537-538
ありがとうございます。
ソースに間違いが無いということなのでしたら、
とりあえず気にしないで先に進んでみようと思います。
後々どうしても破線を描きたいような状況になったら、
改めて解決策を考えてみます。

どうもありがとうございました。

562:デフォルトの名無しさん
10/06/11 03:44:43
テクスチャって正方形じゃないとだめなん?

563:デフォルトの名無しさん
10/06/11 04:07:31
んなことない、ただし2の累乗である必要はある
256x512みたいなのは有りってこと

564:デフォルトの名無しさん
10/06/11 05:26:32
>>544
1. OSmesa を使う
2. サーバのローカルディスプレイに表示する
3. GLX 有りで FBO を使う
4. GLX 無しで FBO を使う (生 Mesa を使うとか)
5. あきらめて CUDA に移行する

1,5 は ウィンドウシステム内に GL の context を作らなくて良い。
2,5 は リモートの GPU によるアクセラレーションが効く (有れば)。
3 は 手元の GPU によるアクセラレーションが効く。
1,2,4,5 は ディスプレイ間でのデータ転送が発生しない。

2,3,4 は ウィンドウシステム内に GL の context を作らなくてはならない。
1,4 は ハードウェアアクセラレーションが効かない (多分)。
3 は ディスプレイ間でのデータ転送が発生する。

おすすめは:
アクセラレーション不要なら 1
アクセラレーション必要で権限の問題が無ければ 2
問題が CUDA 向きなら 5


565:デフォルトの名無しさん
10/06/12 02:07:59
>>562
OpenGL2.0から2の累乗の制限は無くなった。
2.0以前でもrectange_textureっていう拡張機能が使えれば2の累乗じゃないテクスチャを使えるよ。

566:デフォルトの名無しさん
10/06/12 02:19:04
ライブラリというのは
プログラムでよく使うコードをまとめた物やプログラムの部品となる物を意味していると思う。

OpenGLはリアルタイム3Dを使うプログラムを作るときのライブラリだと思っている人がいるかもしれない。
だからOpenGLにファイル読み込み機能やベクトルクラスが無い事などからDirectXより劣ったライブラリだと思われているかもしれない。

けどOpenGLはライブラリではないのだ。interfaceなのだ。
OpenGLの仕様書のChapter1 Introductionから引用させてもらうと

1.1 What is the OpenGL Graphics System?
OpenGL (for “Open Graphics Library”) is a software interface to graphics hardware.
The interface consists of a set of several hundred procedures and functions
that allow a programmer to specify the objects and operations involved in producing
high-quality graphical images, specifically color images of three-dimensional
objects.

567:デフォルトの名無しさん
10/06/12 04:33:33
ライブラリじゃないのはDirectXの方。
あれはパッケージ。だからDirectX SDK。

568:デフォルトの名無しさん
10/06/12 09:50:15
パッケージ?

569:デフォルトの名無しさん
10/06/12 15:15:45
>>566
どうでもいいが、「グラフィックスハードウェアの」インターフェースで
あることを強調しなければ、機能限定の理由にはならんだろう。

570:デフォルトの名無しさん
10/06/12 16:14:50
>>568
DirectXっていうライブラリは無くて、Direct3DやDirectInputなどのコンポーネントの集合体だって意味では
openGLに相当するのはDirect3Dで、ファイル読み込みやベクトルクラスなどはDirect3DXだから
使いたければDirec3DXはopenGLからでも使えるかも

571:デフォルトの名無しさん
10/06/12 16:23:36
gluの事も忘れないでください・・・

572:デフォルトの名無しさん
10/06/13 00:27:17
メタセコのデータを表示するプログラムを作っているのですが
頂点データと面のインデックスデータを読み込んでglDrawElementsで表示する事はできました
しかしUVデータはインデックスではなく三角と四角のポリゴン単位になっているのでそのままでは適用できませんでした
表示用にデータを作成し直したりしないといけないんですか?

573:デフォルトの名無しさん
10/06/13 03:23:00
とりあえず表示するだけで良いなら、面毎に頂点を作成してglDrawArraysでいい

574:デフォルトの名無しさん
10/06/14 03:48:02
>>572
同一座標の頂点で違うUVがある場合の描画は
通常は重複(duplicate)頂点と言って、頂点を増やす
(座標は同じでUV値だけ違う)
当然glDrawElements単位でのインデックスも増やす

だからと言って、エクスポートや出力データも
まんま馬鹿正直に同じ座標を出してインデックスを変える必要はない、
それがキミが詰まってる原因なんだろう

575:デフォルトの名無しさん
10/06/14 03:58:07
つGL_POLYGONS

576:デフォルトの名無しさん
10/06/14 20:31:18
>>574
それってかなり複雑にならないかな?
重複頂点をインデックスに追加する度にインデックスがずれる事になるが…

577:576
10/06/14 21:23:55
あ、最後尾に追加するからインデックスはずれないのか。
OK、やってみる。
結局、.mqoのインデックスは作り直さないといけないんだな。

578:デフォルトの名無しさん
10/06/14 22:03:54
描画時は普通ポリゴンセットにするよな?
VBOに持たせることを考えると一番楽なんだけどどう?

579:デフォルトの名無しさん
10/06/16 13:02:15
GTX 480 での glDrawElements による描画がやたら遅いんだけれど、
同じ現象にあった人いますか?
・ドライバは最新(257.21)
・ベンダーが別の2枚のGTX 480で確認
・VBO ありでもなしでも遅い
・Cg shader や他の描画には特に問題なし
・OSは WindowsXP 64bit
・Geforce 8800 よりはるかに遅い
です。

580:デフォルトの名無しさん
10/06/16 15:40:58
自己解決しました。
原因はglDrawElementsではなく
glLightModelf(GL_LIGHT_MODEL_TWO_SIDE,
でした。

glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE);
から
glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
にすると
GTX 480
では速度が大幅(1/10以下)に低下しました。

Geforce 8800GT, 9600GS, GTX280, GTX285M
ではほとんど速度が低下していなかったので、盲点でした。

581:デフォルトの名無しさん
10/06/16 21:55:15
マルチ失礼します。

すごい初歩的な質問だけどこれってどうやって使うの?
URLリンク(www.jpct.net)
Eclipseとa-sdkははいってるんだけどそこからわからん
教えてエロい人><


582:デフォルトの名無しさん
10/06/16 22:08:03
A BufferだとかK Bufferを使って、描画する順番に依存しないレンダリングを行いたいのですが
やり方がよく分かりません。
とりあえずサンプルだけでも動かしてみようと思いましたが、Direct3Dを使うものを含めても
今のところ1つも動くのがありません。
どうにか動かす方法は無いでしょうか?

ビデオカードはMobility RADEON HD 4330です。
OpenGL Extensions Viewerによると、OpenGLのバージョンは3.1で、
NV_explicit_multisample拡張は使えるようです。

●OpenGL3.1で動くかもしれないサンプル
(半透明ソートではなく、explicit_multisampleのサンプルっぽい)
OpenGL 3.1 explicit_multisample VS OpenGL 3.2 multisample textures
URLリンク(dabroz.scythe.pl)
●Direct3D使うやつ
Order Independent Translucency
URLリンク(www.humus.name)
Stencil Routed K-Buffer
URLリンク(developer.download.nvidia.com)

●必要なハードウェア要件を満たしていない
Fast and Accurate Single-Pass A-Buffer using OpenGL 4.0+
URLリンク(blog.icare3d.org)
OIT11サンプル
URLリンク(msdn.microsoft.com)(VS.85).aspx

583:デフォルトの名無しさん
10/06/17 01:50:18
>>579
参考になったトンクス

今世代のNVはもう駄目だなぁ・・・。

584:デフォルトの名無しさん
10/06/17 01:51:10
OpenGL 4.0以降ならちょうど本家に情報が載ってたんだけどな。

585:デフォルトの名無しさん
10/06/17 02:01:51
>582
ドライバ更新して駄目ならゲフォを買うってところじゃないかな
とりあえずうちの9600GTでd3d使うやつ2つは動いた

586:582
10/06/17 12:19:39
新しいビデオカード買うのはちょっと無理そうです
Mobility RADEONだと新しいドライバを入手するのも難しそうです・・
まずDirect3Dで動かすのを頑張って、それからOpenGLへの移植を考えようと思います

587:デフォルトの名無しさん
10/06/17 22:12:38
>>582
ATIのサイトから落とせるShaderMonkey(要登録、無料)の中にOITのサンプルあったよ。
Direct3DだったかOpenGLだったかは忘れたけど、OpenGL2.1あたりの世代だったから4330ならいけるはず。

588:582
10/06/17 22:26:36
>>587
RenderMonkeyのサンプルですか?
これはピクセル単位でソートしているわけでは無さそうですが

589:デフォルトの名無しさん
10/06/17 22:51:29
あぁごめんShaderMakerとかと名前ごっちゃになってた。RenderMonkeyだw

590:デフォルトの名無しさん
10/06/20 22:29:22
大学でこれを使って何か作れと言われたのですが・・・
テクスチャマッピングが簡単にできるライブラリとかありますか?
芸術工学関係でオススメサイトとかあったらヨロシクオネガイシマス。

591:デフォルトの名無しさん
10/06/20 22:30:49
あります

592:デフォルトの名無しさん
10/06/20 22:37:23
趣味なら教えてやっても構わんが
大学の課題なら自分でやれよ

593:582
10/06/21 21:48:20
サンプルが動かない理由の1つが分かったかもしれません
Irrlichtエンジンを使っているのですが、OpenGL3.1のコンテキストが作成出来ていないです。
glGetString(GL_VERSION)でバージョンを取得すると
2.1.8918が返ります。作成出来るなら、GL3.1のコンテキストを作成するコードが有るみたいです。

しかし、wglGetProcAddress("wglCreateContextAttribsARB");でこの関数のアドレスを取得しようとしていますが、
0が却って失敗しているようです。そのせいか、glTexRenderBufferNVのアドレス取得も失敗します。
OpenGL Extensions Viewerで3.1のコンテキストを作成するテストは成功しているのに、
なぜ動かないのでしょうか
int iAttribs[] =
{
WGL_CONTEXT_MAJOR_VERSION_ARB, 3,
WGL_CONTEXT_MINOR_VERSION_ARB, 1,
0
};
hrc=wglCreateContextAttribs_ARB(HDc, 0, iAttribs);

594:デフォルトの名無しさん
10/06/23 13:12:34
ずっとDirect3D使ってきたけどWindowsでしか動かないとか新しいバージョンはVista以降じゃないと動かないとか
だんだん嫌になってきたのでOpenGLデビューすることにした。

Direct3Dでも最近はコアな部分しか使ってなくて高度な部分は自前で制御してきたからたぶんそんなにOpenGL習得は大変じゃないよね。

たのしいGLライフがはじまるよー!

595:デフォルトの名無しさん
10/06/23 18:44:19
OpenGLもDXほどじゃないにしろ……

596:デフォルトの名無しさん
10/06/23 19:30:25
ATIのLinuxドライバとか少しはマトモになったんだろうか

597:デフォルトの名無しさん
10/06/23 21:16:56
glBeginのパフォーマンスがどうこうで頂点配列使え云々は話はわかるけど
そんなとこよりglEnable/glDisable減らした方がよっぽどFPS改善された……。

それでも頂点配列が云々されているということは、
プロのコードは限界まで状態切り替えをまとめているんだろうなあ……。

598:デフォルトの名無しさん
10/06/23 23:18:24
>>594
大多数のIntelのIGP使用者も対象にしたら
OpenGL1.4までしか使えないけどな…

599:デフォルトの名無しさん
10/06/23 23:48:29
Intelは最近のでやっとOpenGL2.1対応だからなぁ。しかもフラグメントシェーダーでgl_FrontFacingがバグで使えないっていう面倒さも抱えている。

600:デフォルトの名無しさん
10/06/24 09:05:15
GLって、状態を一括で切り替えるブロック指定とかできないの?

601:デフォルトの名無しさん
10/06/28 16:22:00
>600
っglPushAttrib(MASK);

3D矩形テクスチャをボリュームデータとして内部も表示したいんだが、
頂点が8点の立方体に貼付けるだけじゃ無理だっけ?

602:デフォルトの名無しさん
10/06/28 19:30:14
>>598
GLEW使ってるけど、それとは違う話なの?

603:デフォルトの名無しさん
10/07/01 20:36:14
>>601
とりあえず osg か VTK。

自前でやるなら、
- 四角ポリゴン * 3(最大) を表示して fragment shader で視線方向に
辿って適当な方法で積算するか、
- 亡き OpenGL Volumizer のように視線に垂直なスライス多数 (最大6
角形 * 256枚とか) (枚数は求める分解能次第) を積み重ねる。

shader 内で辿る方法の方は、(試したことはないけど)メモリアクセスが
少ない分描画が(多分)速いし、スライスしなくて良い分プログラムが(多分)簡単。

スライスする方は、他の通常のオブジェクトと重なるような表示ができる、
プログラマブルシェーダ無しでもレイキャストや MIP くらいはできる。
スライス生成はホスト側プログラムかジオメトリシェーダで。


604:デフォルトの名無しさん
10/07/05 10:37:49
テクスチャで質問していいですか?
α情報を持ったテクスチャを面に貼り付けた際に、
α部分に面の色を表示させたいのですが、どうすればよいのでしょうか?
GL_MODULATE だと、テクスチャの色合いも含めて全体が転調されてしまうし、
GL_DECAL/GL_REPLACEだと面の陰影がなくなるような。
かといって、GL_BLENDを有効にすると、奥の面も見えてきてしまいます。
どなたか知りませんか?

605:デフォルトの名無しさん
10/07/05 17:46:00
「α部分に面の色を表示させたいのですが」 <-- これが意味不明
何をやりたいのか説明できてない。
普通はライティングしてテクスチャーをGL_MODULATEだ。

606:デフォルトの名無しさん
10/07/05 18:45:19
>>605
ありがとうございます。
赤色の面に、例えば市松模様でα値0のテクスチャを貼り付けたときに、
α値が0の所だけ赤くなって欲しいと言うことです。
glMaterialfで赤色を設定した所、BLENDを有効にしなくても表示されました。
ただ、元のテクスチャの色が白の部分を透過として扱うためか、
乗算されて元の色よりかなり明るくなってしまいました。
今回はこれで良いと言うことにします。

607:デフォルトの名無しさん
10/07/05 19:04:17
難しく考えずにシェーダーでやればいい

608:デフォルトの名無しさん
10/07/05 19:09:11
>>604
テクスチャ関連は固定機能だけでもいろいろやれそうだけど、かゆいところに手が届かないのが多い。
その点シェーダー使えば自由にやれるけど、OpenGLをどの程度できるかによるな。

609:デフォルトの名無しさん
10/07/10 01:39:45
テクスチャを投影マッピングしているのですが、下のソースにあるgluLookAtを挿入するとうまくいかなくなり、原因がわかりません。
gluLookAtの第3引数までは変数にし、キーボードで調整できるようにしていますが、いくらタイプしても上手く表示されません。
またテクスチャの視点の位置を把握するために、同じ場所にオブジェクトを表示させようと思いましたが、その方法もわからず仕舞いです。
gluLookAtを挿入して上手くいかない理由と、テクスチャの視点の位置にオブジェクトを表示させる方法をどなたか教えてください。

void resharpFunc(int window_width, int window_height) {  //glutResharpFuncのコールバック関数
glViewport(0, 0, window_width, window_height);

glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glScaled( 0.7, 0.7, 1.0 );

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30.0, (double)window_width / (double)window_height, 1.0, 100.0);
//gluLookAt( right_t - left_t , up_t - down_t, in_t - out_t, 0, 0, 0, 0, 0, 1 );

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

610:デフォルトの名無しさん
10/07/10 02:11:11
微妙によくわからんのだが
gluLookAtはカメラの位置の設定として使いたいの?
それともテクスチャの投影方向の設定として使いたいの?

611:デフォルトの名無しさん
10/07/10 02:29:58
テクスチャの投影方向として使いたいです
glScaledの直後にこのgluLookAtを挿入してもうまく行きませんでした

612:デフォルトの名無しさん
10/07/10 02:41:46
投影方向として使いたいならglScaledの直後だな
どう上手くいかないのか詳しく

613:名無しさん@そうだ選挙に行こう
10/07/10 12:28:21
glScaledの直後に入れた挙動です
gluLookAtなしだと、投影出来ています。
直行投影にみえます。
gluLookAtを入れると、オブジェクト全体が単色で染まってしまいます。
実際のカメラの動画をテクスチャしているのですが、実際のカメラを向ける方向によって色や明度は変わりますが、像は見られずいずれもオブジェクト全体が単色で埋められてしまいます。
gluLookAtの第3引数までをキーボードで調整しても変わりません。

614:名無しさん@そうだ選挙に行こう
10/07/10 18:54:10
最初は投影マップのサンプルを調べて丸ごとコピペとかしてみれば
projective texture opengl example
あたりでググるとopenGL.orgやsgiの97年ごろのデモがヒットするみたいよ

でも、もうそういうのもシェーダーでやる時代だと思うけど

615:名無しさん@そうだ選挙に行こう
10/07/11 12:25:29
症状とソースから原因は分かりませんか(´・ω・`)

616:名無しさん@そうだ選挙に行こう
10/07/11 13:56:06
わからないねぇ
色が変わってる=テクスチャの1部だけが引き伸ばされて投影されてる
だろうから多分お前のパラメーターミス
どんなモデルに投影してるのかもわからないし答えようがない
デバックして欲しいっていうなら全ソース出せよ

617:デフォルトの名無しさん
10/07/12 00:25:31
わかった 上げてみる
URLリンク(www.dotup.org)

動かすにはUSBカメラとOpenCVが必要
投影するモデルは右クリックで変えれる

618:デフォルトの名無しさん
10/07/12 03:00:54
keyboardFuncで変数の値を変えてもreshapeFuncは呼ばれないような気がするんだけど
変数操作した後ちょっとウィンドウサイズ変えたら出てきたりして


619:デフォルトの名無しさん
10/07/12 14:37:19
テクスチャの投影方向として使うなら、テクスチャ行列にgluLookAtを使うべきだと思うけど。
うまくいかなかったのは、テクスチャ座標が (0, 1) 範囲なのを忘れている気がする。

620:デフォルトの名無しさん
10/07/13 00:28:36
>>618
本当にその通りだ
ウィンドウサイズ変えたら反映された
じゃあ呼び出され続けるupdateTexture関数内に
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
gluLookAt( right_t - left_t , up_t - down_t, in_t - out_t, 0, 0, 0, 0, 0, 1 );
glMatrixMode(GL_MODELVIEW);
入れたら投影の方向も変えれるようになったよ

ところでこのプログラムすごい重いんだけど、悪いコードに気がついてたら教えてください

621:デフォルトの名無しさん
10/07/13 00:32:10
>>619
>>609のglScaledの後ってことだよね
最初はそれにしてたけど、うまくいかないから試行錯誤してたときのを貼ってしまった
すまない
その時の挙動は>>613

622:デフォルトの名無しさん
10/07/13 20:29:36
glutで文字出したいのですが、画面の隅に出したいのです。
そのためにはカレントラスタ位置を画面隅に設定すればいい。

ということで、画面隅にあたる座標を求めたいのですが、
これは視錐台の頂点の座標を求める、
ということとほぼ同じですよね。

どういう手順で求めたらいいでしょう?
glGetでGL_PROJECTION_MATRIXを取得して
連立方程式を解く感じでやればいいんでしょうか。
てゆうか、もっと簡単な方法はないでしょうか、、、

623:デフォルトの名無しさん
10/07/13 22:04:13
課題の季節か

>>620
デバッグビルドしてんじゃね。
コードはtmp_imgのあたりとか釣りかなと思うほど無駄みたいだけど、どうなのか。
他もいろいろありそうだがopenCVはスレ違いかな

>>622
MATRIXの影響を受けたくないならglPushMatrixしてglLoadIdentityすればいいが、
画面の隅に出したいだけならglRasterPos*の代わりにglWindowPos*を使えば簡単

624:デフォルトの名無しさん
10/07/14 17:21:23
教えていただきたいのですが、1枚のテクスチャに複数の画像データを
載せて(?)、描画することは可能でしょうか?

例えば、上下2分割の画像があるとして、テクスチャに先に上部の画像を
載せて、次いで下部の画像を載せ、最終的にDrawするようなイメージです。

2枚のテクスチャを利用すれば、いいのでしょうが、1枚で済むので
あれば、1枚で処理したく思いまして・・・。

glTexImage2D()と、glTexSubImage2D()をうまく使えばできるので
しょうか・・・。

625:デフォルトの名無しさん
10/07/14 19:04:42
日本語でお願いします

626:デフォルトの名無しさん
10/07/14 19:07:13
>>624
無駄な努力するより正しい手順で単純な方法を使うべきだぞ


627:デフォルトの名無しさん
10/07/14 20:12:10
>>624
glTexSubImage2D()をうまく使えばできるよ

628:デフォルトの名無しさん
10/07/14 21:05:53
GLSLに関する質問です。
GLSLで配列を宣言する場合、組み込み型の場合は

float array[3] = float[3](1.0, 2.0, 3.0);

のように書くと初期化出来ますが、構造体の場合、

TestStruct array[3] = TestStruct[3](TestStruct(...), ...);

としてもcast not allowedとエラーが出てしまいます。
構造体配列では、上のような初期化の仕方は出来ないのでしょうか?

629:デフォルトの名無しさん
10/07/14 22:03:49
そんな初期化の仕方のできる言語がどこにあるんだ?

630:デフォルトの名無しさん
10/07/15 03:23:57
>>623
遅レスだけどtmp_imgはモルフォロジー演算のブラックハットとかを試したときの消し忘れ
スレチスマソ

631:デフォルトの名無しさん
10/07/15 06:00:38
>>623
でけた~!
ありがとうございました。
ようやっとprintf文によるパラメータ表示から開放されます。
nyaosはエスケープシーケンス対応だってゆうし、
それで妥協するか、と考え始めていたところでした。

632:622
10/07/15 06:21:06
>>623
でけた~!
ありがとうございました。
ようやっとprintf文によるパラメータ表示から開放されます。
nyaosはエスケープシーケンス対応だってゆうし、
それで妥協するか、と考え始めていたところでした。


633:デフォルトの名無しさん
10/07/15 06:29:11
だいじなことなので(ry

634:デフォルトの名無しさん
10/07/15 08:16:10
>>629
やっぱり出来ないですか orz
構造体は

TestStruct test = TestStruct(...);

で初期化できるので、これ使えば構造体配列の各要素も初期化できるのかなと思ったのですが…
地道にmainで初期化することにします。
ありがとうございました。

635:622
10/07/15 08:24:18
すみましぇんX(

636:デフォルトの名無しさん
10/07/16 22:39:38
OSMesaを使おうと思うと、segmentation faultが出てしまいます。
例えば、
URLリンク(www.koders.com)
のサンプルコードだと290行目、

#include <stdio.h>
#include "GL/osmesa.h"

int main()
{
GLubyte* buf = new GLubyte[4];
OSMesaContext ctx = OSMesaCreateContext( GL_RGBA, NULL );
OSMesaMakeCurrent( ctx, buf, GL_UNSIGNED_BYTE, 1, 1 );
glClearColor(1.0, 1.0, 1.0, 1.0);
OSMesaDestroyContext(ctx);
}

を実行してみるとglClearColorのところでsegmentation faultとなります。

これは根本的なところでどこか使い方を勘違いしているのでしょうか?

637:636
10/07/17 00:17:28
自己解決しました。

libOSMesaだけで十分なのにlibGLをリンクしてしまっていたのが原因でした。

638:デフォルトの名無しさん
10/07/17 14:16:23
GLSL って % ないのな。int 用の mod も無いし、他の人どうしてるのかな? 引き算?

639:デフォルトの名無しさん
10/07/17 15:44:32
int hoge = int( mod( float( 10 ), float( 4 ) ) );
とかできなかった?

640:デフォルトの名無しさん
10/07/17 19:21:35
出来ました。でも変数使うとかなり妙なことが。

int(mod(float(14), 3.0)) は確かに 2 を返すのに、
int a = 14;
int(mod(float(a), 3.0)) は 1 を返す。

環境のせいかとも思ったが、
GL_VERSION = 2.0 ATI-1.6.16
GL_RENDERER = ATI Radeon X1600 OpenGL Engine
でも
GL_VERSION = 2.1 NVIDIA-1.6.10
GL_RENDERER = NVIDIA GeForce 9400M OpenGL Engine
でも同じ結果。訳が分からん。

641:デフォルトの名無しさん
10/07/19 22:40:30
相変わらずラデのGLドライバは腐ってやがるな
糞が

642:デフォルトの名無しさん
10/07/19 22:54:31
GT4xxベースのQuadroはまだですか?

643:デフォルトの名無しさん
10/07/20 15:42:24
まだ出てなかったんだ。
Quadroで儲け出してると思ってたけど。

644:デフォルトの名無しさん
10/07/21 20:17:18
複数テクスチャで構成したモデルで、拡大表示などその一部分しか画面上に描画されない場合、画面上に描画されるテクスチャ名(ID)を取得する事はできますか?
テクスチャ描画直前にコールバックされるなど

645:デフォルトの名無しさん
10/07/22 01:06:32
occlusion queryでやるのは?

646:デフォルトの名無しさん
10/07/22 04:03:09
>>645
644です。
ありがとー、早速使わせて頂きます。


647:デフォルトの名無しさん
10/07/22 08:07:52
xcodeでiphoneSDKの
OpenGL雛形を利用してテクスチャ描画しようとしているのですが

テクスチャ作成も成功していて
TEXTURE_COOD_ARRAYも指定しているのですが

白いまま、テクスチャの柄が表示されません。

テクスチャ表示に
他に何か設定することありますか?


648:デフォルトの名無しさん
10/07/22 09:22:58
自己解決
iphoneって
テクスチャの幅が2のべき乗じゃないとだめでした

649:デフォルトの名無しさん
10/07/25 02:34:31
URLリンク(wisdom.sakura.ne.jp)

ここのサンプルなんですが
なんでBの値が~rでいいんですか?
255-rと同じ結果になると思うんですが
どういうことなんですか?

650:デフォルトの名無しさん
10/07/25 02:53:32
自己解決した
GLubyteでキャストしたらなんか意味わかった

651:デフォルトの名無しさん
10/07/25 10:57:55
プラネタリウムのようなソフトを作っています。
天球の中心にカメラを置いて、注視点をぐりぐり移動させる所でつまずいています。

今やっているのはglRotateで±1°ずつ回転させて(角度変数も用意して増減させる)
実装しています。この場合だとぐりぐり移動はできるのですが現在どの角度を向いているか
が正しく取得できません。(斜め移動すると表示と値がずれる)

プラネタリウム(というよりは星座早見盤)をつくるのに今見ている角度を正しく
取得しなければならないのですが、いい方法はありますか?

652:デフォルトの名無しさん
10/07/25 11:03:56
mCamera->setOrientation(Quaternion::IDENTITY);
mCamera->rotate(Vector3::UNIT_Y, Radian(mTheta));
mCamera->pitch(Radian(mPhi));


653:デフォルトの名無しさん
10/07/25 16:03:07
回転を四元数で管理

654:デフォルトの名無しさん
10/07/25 17:28:28
LoadIdentityの代わりに、単位行列をピヴォットした行列をロードするだけでZ-Upとかに対応できたりするんでしょうか?

655:デフォルトの名無しさん
10/07/25 22:06:55
OpenGL用の行列やベクトル、クォータニオンなんかのライブラリでオススメあれば教えて下さい。
DirectXのライブラリみたいにSIMD使った最適化までしてくれたら嬉しいです。


656:デフォルトの名無しさん
10/07/25 22:38:24
Bullet の LinearMath

657:デフォルトの名無しさん
10/07/25 23:15:50
>>652
Cで書いていて、かつかじったばっかりなので何をやってるのか理解できませんでした。
すみません。

>>653
検索したら参考ページが出てきたので頑張ってみます。
ありがとうございました。

658:デフォルトの名無しさん
10/07/26 00:37:24
床井さんのところ
URLリンク(marina.sys.wakayama-u.ac.jp)
のサンプルで、クォータニオン使ったのがあったはず。

659:デフォルトの名無しさん
10/07/26 00:56:20
>>651
単に回転する順番とかが間違ってるだけなんじゃないのかな
クォータニオンとか導入しないとならない問題じゃないと思うんだが

660:デフォルトの名無しさん
10/07/26 02:55:33
普通に天球の極座標も理解出来てないと思う。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch