OpenGLスレ Part14at TECH
OpenGLスレ Part14 - 暇つぶし2ch536: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