【超初心者】くだすれOpenGL2.0【質問用】
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2007/09/24(月) 05:26:47もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
OpenGL使いが優しくコメントを返しますが、
お礼はOpenGLの布教と初心者の救済をお願いします。
OpenGL・Home・Page
http://www.opengl.org/
0002デフォルトの名無しさん
2007/09/24(月) 12:01:130003デフォルトの名無しさん
2007/09/24(月) 12:18:10死ね
OpenGLスレ Part11
http://pc11.2ch.net/test/read.cgi/tech/1177523018/
0004デフォルトの名無しさん
2007/09/24(月) 12:18:44死ね!
くだすれOpenGL(超初心者用)
http://pc11.2ch.net/test/read.cgi/tech/1131208166/
0005デフォルトの名無しさん
2007/09/24(月) 13:27:400006デフォルトの名無しさん
2007/09/24(月) 14:18:47荒らすなよボケ
0007デフォルトの名無しさん
2007/09/24(月) 16:28:13ただ、スレタイにopengl2.0と入っているのはちょっとどうかと思う
まあ、
乙!
0008デフォルトの名無しさん
2007/09/24(月) 17:22:210009デフォルトの名無しさん
2007/09/24(月) 17:53:22でも乙乙>>1
0010デフォルトの名無しさん
2007/09/26(水) 22:15:30GLSLで使いたいです
0011デフォルトの名無しさん
2007/09/26(水) 23:25:57http://www.opengl.org/registry/specs/ARB/texture_float.txt
0012デフォルトの名無しさん
2007/09/27(木) 17:45:18次は何をやったらいいでしょうか?
いまいち何が不足しているのかわかりません。
参考書籍やウェブサイトも教えていただけると嬉しいです。
大学2年生で、実行環境はCygwinです。
0013デフォルトの名無しさん
2007/09/27(木) 17:55:07作りたいものがなければ、知識も身に付かないしやる気もおきないと思うよ。
001412
2007/09/27(木) 18:32:38目標ですが何にしたらいいかわかりません。
どの程度なら丁度良いのか漠然としすぎていて。
まだまだ基本中の基本しか出来ていないと思います。
いろいろサイトを見てプログラムを真似していくのも一つの手かなと思いますが。
0015デフォルトの名無しさん
2007/09/27(木) 19:00:19まあ、ただ何となく勉強しましたってのもありだと思うけど。
0016デフォルトの名無しさん
2007/09/27(木) 19:11:200017デフォルトの名無しさん
2007/09/27(木) 23:46:58次のステップとしてここらが参考になると思う。
http://marina.sys.wakayama-u.ac.jp/~tokoi/?blogcategory=OpenGL
http://nehe.gamedev.net/
この本は買うべき。絶対元は取れる。
http://www.amazon.co.jp/OpenGLプログラミングガイド-原著第5版-OpenGL策定委員会/dp/4894717239
第5版を買うように!これ以前の版は内容がかなり古い。
0018あ
2007/09/28(金) 12:11:11シェーダでマルチテクスチャ処理をしてるんですけど、
テクスチャが304*1728と19*360と19*2376にするとエラーが出ます。
これはテクスチャサイズの問題ですか??それとも
他の問題ですかね?
ちなみにGL_MAX_TEXTURE_SIZE 4096です。
0019あ
2007/09/28(金) 12:17:520020デフォルトの名無しさん
2007/09/28(金) 12:27:430021デフォルトの名無しさん
2007/09/28(金) 17:46:040022デフォルトの名無しさん
2007/09/28(金) 18:01:07もともと2のn乗サイズじゃなくて動いてるらしいから関係なくね?
ARB_texture_non_power_of_twoがあるか2.0以上なら問題無い
0023デフォルトの名無しさん
2007/09/28(金) 18:04:370024デフォルトの名無しさん
2007/09/28(金) 22:12:11GL_MAX_TEXTURE_SIZE 4096 でRGBなら
実際のサイズは、4096*4096 / 3 のルートの 2365 が上限
だと思ったが・・・違ったっけ?
0025デフォルトの名無しさん
2007/09/28(金) 23:06:31そんな半端なわけが・・
0026デフォルトの名無しさん
2007/09/28(金) 23:32:32確かに半端だが、GL_MAX_TEXTURE_SIZE は1テクセルあたり8bitの場合の数値なので、
たとえばRGBA8bitだったら、実際に使用できるのは、テクセル数で1/4になる。
最大サイズがどうなるかは、知らん。適当にルートになると思ってた。
誰か実験してくれ。
0027デフォルトの名無しさん
2007/09/29(土) 00:05:43赤本を確認したがGL_MAX_TEXTURE_SIZEが1テクセルあたり8bit云々ってのは無かったな
フォーマットの違いを気にしないから、容量がでかいフォーマットだとメモリ足りんかもしれないから気をつけてみたいなことは書いてあったけど
しかしどんなエラーが出てるのか分からないとテクスチャのサイズが問題なのかどうかも分からんな
0028あ
2007/09/29(土) 00:35:07あと、GL_MAX_TEXTURE_SIZEが4096のときに
4枚のテクスチャを処理するときって
4枚とも4096*4096サイズ(RGB)までいけるってことですかね??
0029デフォルトの名無しさん
2007/09/29(土) 06:52:07ごめん。ちょっとうろ覚えで適当に書いてた。
あらためて調べてみたが、
OpenGLプログラミングガイド-原著第5版の p363 下部の
GL_MAX_TEXTURE_SIZEによる問い合わせは〜のくだりとか
http://chihara.naist.jp/people/STAFF/imura/computer/OpenGL/texture_speed_test/disp_content
辺りを見ると、どう解釈していいのかよくわからない。
0031デフォルトの名無しさん
2007/09/29(土) 12:20:020032あ
2007/09/29(土) 17:34:14何度もすいませんが、最後の質問させてください。
GL_MAX_TEXTURE_SIZEの変更はできますかね??
4096から増やしたいんですが・・
0033デフォルトの名無しさん
2007/09/29(土) 20:01:174K以上のテクスチャを扱いたいなら、複数のポリゴンに貼って並べるのが普通。
0034あ
2007/09/30(日) 06:25:100035デフォルトの名無しさん
2007/10/01(月) 13:16:41・3Dモデルをスクリーン上に変換した後の頂点の座標をGLの関数かなにかで取得することはできないのでしょうか?
・GLUquadricで生成した球や円柱などから頂点配列やインデックス配列を取得することはできないのでしょうか?
どなたか教えて下さい。
0036デフォルトの名無しさん
2007/10/01(月) 16:08:20・知らない
0037デフォルトの名無しさん
2007/10/01(月) 22:50:10各色32bitのfloatだったらもっと少なくなっちゃうジャン
0039デフォルトの名無しさん
2007/10/02(火) 21:17:19法線ベクトルを頂点配列で扱う方法がいまいちわかりません。
六面体を書くのに今は
glNormal3f(0.0,0.0,1.0);
glDrawElements(GL_POLYGON,4,GL_UNSIGNED_BYTE,frontIndics); //正面
glNormal3f(1.0,0.0,0.0);
glDrawElements(GL_POLYGON,4,GL_UNSIGNED_BYTE,rightIndics); //右面
以下略
という風に書いてます。
法線ベクトルをglDrawElements()に含めるなど、頂点配列でうまいこと扱う方法があれば教えてください
0040デフォルトの名無しさん
2007/10/02(火) 22:20:33それと同じように、法線の場合はglNormalPointerを使うんよ。
(もちろん、glEnableClientState(GL_NORMAL_ARRAY)するのを忘れないように)
0041デフォルトの名無しさん
2007/10/02(火) 22:35:56二番目
OpenGLのコールをフックするライブラリを描いてやればおk
でもスタブを書くのがめんどくちゃい
004239
2007/10/03(水) 08:18:19それらの使い方はわかったのですが
法線ベクトルの配列での扱い方で詰まりました
Vertexの場合は頂点座標を8個用意して各面を描画する為にさらに6つの配列でglDrawElements()の第4引数に使用していて、色も頂点の数だけ用意して対応したのですが
法線ベクトルはわからなくて悩んでいますorz
正確には色も頂点にしか対応してないので各面を別の色で描画出来たらと思っているのですが…
0043デフォルトの名無しさん
2007/10/03(水) 08:30:36当然法線ベクトルも頂点の数だけ用意する。
39はそれまでのやりかたがOpenGLがステートマシンだから機能したってことの
理解がいまいちあやしそう。
0044デフォルトの名無しさん
2007/10/03(水) 11:47:53座標が同じでも、色や法線が異なる場合は、別の頂点だと考える
各面の色が別々なサイコロを描くには、24頂点が必要
0045デフォルトの名無しさん
2007/10/03(水) 14:24:32名前が思い出せないorz
004639
2007/10/03(水) 18:41:27法線ベクトル用に頂点を24個用意して試したところイマイチうまくいかず、頂点座標も8個から24個に増やして試したら無事正常に描画する事が出来ました
ひとまず結果オーライなのだけど頂点座標が8個だとうまく法線ベクトルが引けない理屈がよくわかりません…
俺はもしかしたらとんでもない勘違いをしていたのかもしれない…!
0047デフォルトの名無しさん
2007/10/03(水) 19:08:29glDrawElements が i 番目の頂点を参照するときは、
頂点配列の i 個めの座標と、
法線配列の i 個めの法線と、
色配列の i 個めの色と、
テクスチャ座標配列の i 個めのテクスチャ座標を、
1組の頂点データとして取り出す。
つまり頂点配列、色配列、法線配列、テクスチャ座標配列はすべて同数の要素が必要。
頂点座標と法線ベクトルの対応関係を指定した覚えないだろ?
0048デフォルトの名無しさん
2007/10/03(水) 20:00:56DirectXはゲームとかで聞くのですが、GLはあまり聞かないので。
0049デフォルトの名無しさん
2007/10/03(水) 21:05:54てかDirectXついてねーし。
0050デフォルトの名無しさん
2007/10/03(水) 21:25:07Windows以外は大体OpenGL(とかES)
0051デフォルトの名無しさん
2007/10/03(水) 21:38:24どんなところに就職してるんだ?
0052デフォルトの名無しさん
2007/10/03(水) 22:29:06仕事は広告関係
0053デフォルトの名無しさん
2007/10/04(木) 00:12:23SGI
0054デフォルトの名無しさん
2007/10/04(木) 00:26:28ちょっw
なんでこんなところにいるwww
0055デフォルトの名無しさん
2007/10/04(木) 01:18:44零細ソフトウェア会社
0056デフォルトの名無しさん
2007/10/04(木) 13:37:47ゲームで使ってます。
しかし、算術演算ライブラリとか整備してくると、正直DirectXで言い気がしたw
0057デフォルトの名無しさん
2007/10/06(土) 02:04:02げーむや
0058デフォルトの名無しさん
2007/10/06(土) 07:46:18無名CAD屋
0059デフォルトの名無しさん
2007/10/06(土) 20:56:06研究でGPGPU
0060デフォルトの名無しさん
2007/10/08(月) 21:15:21K平均法を高速化しなきゃならなくて英語の論文見っけて碌に読まずに手を出したが、
2ヶ月浪費した後でよく読んでみると高速化できたのは別のクラスタリングという結論に読めるなぁハハハ
0061デフォルトの名無しさん
2007/10/09(火) 10:55:470062デフォルトの名無しさん
2007/10/09(火) 11:25:120063デフォルトの名無しさん
2007/10/10(水) 20:34:59glPopMatrix();
この組み合わせが何をやっているのかイメージできません…
どなたかわかりやすく教えていただけませんか
0064デフォルトの名無しさん
2007/10/10(水) 21:28:25さっき取っておいた行列を持ってくる
「スタック」って言葉は知ってるかな?
やってることは、まさにそれなんだけど。
0065デフォルトの名無しさん
2007/10/10(水) 21:29:330066デフォルトの名無しさん
2007/10/10(水) 21:53:15その行列がglMatrixMode(GL_MODELVIEW);といったモデルビューの単位なのか
glMatrixMode(GL_MODELVIEW);に掛け合わせたglrotateといった類のものなのかがわからなくて
よくわからなくなってるのですが、「今使っている行列」がどこを指すのかわかってなくて
0067デフォルトの名無しさん
2007/10/10(水) 22:14:28glMatrixMode は、どの行列を操作するかを切り替える。
glMatrixMode で設定した、操作する対象の行列が、今使ってる行列。
glRotate は、今使ってる行列を回転させて、新たな今使ってる行列にする。 古い行列は捨て去る。
C言語的に書くと
今使ってる行列 = 今使ってる行列 * 回転行列;
みたいな感じ。
glTranslate とか glScale とかも一緒。
みんな今使ってる行列を変化させる。
だから、今使ってる行列っていったら、それしかない。
glPushMatrix は、今使ってる行列をスタックに保存しておく。
glPopMatrix は、保存したものを取ってきて今使ってる行列に戻す。
おk?
0068デフォルトの名無しさん
2007/10/10(水) 22:28:11glMatrixMode(GL_MODELVIEW);
回転行列
glPushMatrix();
glMatrixMode(GL_TEXTURE);
拡大行列
glPopMatrix();
という風になった場合、popの後は
MODELVIEWで回転されてる状態、ということですか?
ようやく、頭の中が整理されてきました。
回転行列とかをスタックにぶち込むものとか考えてしまって
ありがとうございます!ばっちり、すっきり、ニッコリです!
0069デフォルトの名無しさん
2007/10/10(水) 22:55:16glMatrixMode はそのままで、現在の行列を保存/復元するだけ。
スタックも行列の種類ごとに別々にある。
つまり MODELVIEW 行列用のスタックと、PROJECTION 行列用のスタックと、TEXTURE 行列用のスタックがある。
>>68 の例でいくと、
glPushMatrix は回転した MODELVIEW 行列を 「MODELVIEW 行列用のスタック」 に保存する。
glPopMatrix は 「TEXTURE 行列用のスタック」 から TEXTURE 行列を取り出す。
0070デフォルトの名無しさん
2007/10/10(水) 22:57:08いや、その、なんだ、全然違ってるぞw
それだと、最初の状態と比べて
・MODELVIEW行列は回転してる
・かつその回転した行列がMODELVIEW行列スタックに一段積まれた
・TEXTURE行列は拡大した
・しかしその拡大した行列はTEXTURE行列スタックから取り出した行列で上書きされた
・MatrixModeはTEXTUREになった
ちなみに上のシーケンスをTEXTURE行列スタックが空の状態でやると、GLエラーが起こる。
行列スタックは、MatrixModeごとに別のスタックが用意されてるんよ。
スタックに保存できる行列の個数もそれぞれ違う。
・・・って69の書き込みの方が早かったか。でもいいや送信エイ
0071デフォルトの名無しさん
2007/10/10(水) 23:16:45ありがとうございます
つまり
model tex projec
|| || ||
|| || ||
 ̄  ̄  ̄
みたいなスタックがあって、それごとに別々に保存されていて
glPushをすると、今のモードで弄くってる行列が保存されて
glPopをすると、スタックからそのモードの行列を取り出して「上書き」する、ということですね
上書き、ということはpopする前の行列はあまり意味がないのかな…
なんとかスッキリしてきたのでソースをちゃんと読むことができそうです
それとは別に、今メモリ(テクスチャ?)が解放されなくて
glutPostRedisplay();をするたびにメモリが増加していく現象が発生して悩まされています…
0072デフォルトの名無しさん
2007/10/10(水) 23:28:06何にも使わないんなら、そりゃ意味はない。
0073デフォルトの名無しさん
2007/10/10(水) 23:33:51毎フレームglGenTextures&glBindTextureしちゃってるとか?
てか先にGL以外の部分を疑った方がいい気もするけど
0074デフォルトの名無しさん
2007/10/10(水) 23:51:55おっしゃるとおりです。
popの前にモードを変えて、何かするのが普通なのですよね。
>>73さん
毎フレームglGenTextures&glBindTextureは以前やってしまったのでそこは注意してました
init的な初期設定のところでテクスチャを読み込んでいるので大丈夫だと思います。
どうも色々見てみたのですが、手本にしたサンプルでも同様の現象が出るみたいです。
0075デフォルトの名無しさん
2007/10/10(水) 23:57:22小さいソースならどっかにうp
0076デフォルトの名無しさん
2007/10/11(木) 00:02:41行列もわかっていない身のくせにCgを使っているので
長いソースになってしまっています。
どうもCgでアニメをさせると徐々にメモリが増えていってしまうみたいです
0077デフォルトの名無しさん
2007/10/11(木) 00:04:120078デフォルトの名無しさん
2007/10/11(木) 00:12:23(トライアングルを一枚くるくる回してるだけの)プログラムで、SwapBuffersするたびに
メモリが少しずつ増えてく現象に悩まされた事があったなァ・・・。
で、数十KBだか数百KBだかメモリが増えた時点で、メモリ消費の増加が止まるんだこれが。
わけがわからん。
10分くらい動かしてみて、メモリ増加が止まるんなら気にしなくていいんじゃない??
(ちなみに、nVIDIAのボードだった)
0079デフォルトの名無しさん
2007/10/11(木) 00:22:11サンプルを動かしているとまさしくその状態です。
あるところで止まるのですが
自作のものでFPSを表示させていると止まらなくなってしまっていて
450MBから初めて780MB 最悪1GBまでメモリが増えていっています。
>保持しているテクスチャデータのサイズがグラフィクスメモリの容量を超える場合,
>テクスチャデータはメインメモリーに格納され, テクスチャは描画に使われる度にグラフィ
>クスカードに転送される.
論文でこういうのを見つけたのですが、小さいテクスチャで試しても増加するみたいです
ATIのせいかと思っていたのですがnvidiaもそうなのですね
0080デフォルトの名無しさん
2007/10/11(木) 00:22:19ループ毎にオブジェクト生成とかやってるんじゃ?
0081デフォルトの名無しさん
2007/10/11(木) 00:32:57状況がよくわかんないな
ATIのグラボでCg動かしてるの???
ソース見ないと確かなことは言えないが
450MBから始まって1GBまでいっちゃうのは
常識的に考えてプログラムミスだと思うぞw
0082デフォルトの名無しさん
2007/10/11(木) 00:39:29もしよろしかったらCgのサンプルの
07_two_texture_accesses でアニメーションしたときのメモリの様子を見ていただけませんか?
私の環境だとこのサンプルでも増加していってしまって
538MB→560MBで増加中という…
0083デフォルトの名無しさん
2007/10/11(木) 00:45:48XpHome,GF7800GTX,163.71_forceware_winxp_32bit
0084デフォルトの名無しさん
2007/10/11(木) 00:52:27サンプルを動かしてみて473→500 増加中です。
Win2k ATI RadeonXpress200(128MB) 32bit Athron64 メモリ1GBでした。
オンボードGPUでATIというのが原因なのかもしれません。。。
0085デフォルトの名無しさん
2007/10/11(木) 01:03:33デスクトップマシン買った方がいいんじゃないかな
ソース見たけど少なくともCgはメモリリークの原因じゃないよ
0086デフォルトの名無しさん
2007/10/11(木) 01:05:480087デフォルトの名無しさん
2007/10/11(木) 01:07:27とりあえずglsl乗り換えをお勧めしておくよ
0088デフォルトの名無しさん
2007/10/12(金) 19:31:07どうしたらいいですか?光源とかは使っていません。
どなたか教えてください。
※つまり、板の、ある場所(座標)から視点へのベクトルによって
テクスチャを変えたいということです。
0089デフォルトの名無しさん
2007/10/12(金) 23:03:20switchとかelse ifで
settexture( vec );
みたいな関数を作って、テクスチャセットとか。
0090デフォルトの名無しさん
2007/10/12(金) 23:12:41GLSLが使えるなら、話は簡単。
使えないなら、プログラム書いていちいちやるしかないかなぁ・・・。
視点からの距離が一定なのならミップマップを利用できるカナ、とかも思ったけど。w
009188
2007/10/12(金) 23:42:28GL_nomal?みたいなのがあるんですか?
一応、GLSLを使っています。(使えているかは別ですが)
0092デフォルトの名無しさん
2007/10/12(金) 23:52:37眼点座標系の視点位置は(0, 0, 0)
でおk?
009388
2007/10/14(日) 00:46:13ことですね!
ありがとうございます!とりあえずがんばってやってみます!
0094デフォルトの名無しさん
2007/10/14(日) 02:59:41固定関数はそうなるけど…
Cgやgglslは本人次第というかなんというか…
0095デフォルトの名無しさん
2007/10/14(日) 11:43:15こちらのソースのようにテクスチャに描いたものを映すということをしたいのですが
映したい対象が3次元テクスチャです
そうなったときにteximage3dとかにしても、上手くモノが映し出されません
こういうばあいはどうやるのでしょうか
0096デフォルトの名無しさん
2007/10/14(日) 11:56:50実際に何をどうしてみた?
0097デフォルトの名無しさん
2007/10/14(日) 12:12:46それをテクスチャとして読み込んで、同じように-1〜1の平面に投影しようとしました
texture2Dの部分を単純に全部3Dにしてマッピングできるかと思っていたのですが
0098デフォルトの名無しさん
2007/10/14(日) 12:38:41どうでもいいけど、そのサンプルはinit()内でスタック破壊してるね。大丈夫かいな。
で、95と97を何度読んでもイマイチ意味が分からない・・・。
とりあえず適当にいくつか挙げてみる。
・3Dテクスチャのデータはどう作ってどう転送したの?
・ちゃんとglEnable(GL_TEXTURE_3D);してる? (2Dじゃないよ)
・3Dテクスチャのテクスチャ座標は当然3次元なんだけど、ちゃんとglTexCoord3?();使ってる?
てなとこでしょうか。
0099デフォルトの名無しさん
2007/10/14(日) 14:38:44人にわかるように説明できないならソースうpれ
0100デフォルトの名無しさん
2007/10/14(日) 20:14:39solidcubeなどを描いたものをポリゴンに描くのではなく
for(i<10)for(j<10)for(k<10) texture[i][j][k][4]=1
みたいな感じで作った1辺10の、点の集合体としで立方体をあらわしているテクスチャを
ひとつの平面に映し出すということをしたいのです
>・ちゃんとglEnable(GL_TEXTURE_3D);してる? (2Dじゃないよ)
>・3Dテクスチャのテクスチャ座標は当然3次元なんだけど、ちゃんとglTexCoord3?();使ってる?
これはちゃんとやりました。teximage3Dは
PFNGLTEXIMAGE3DPROC glTexImage3D;
glTexImage3D =
(PFNGLTEXIMAGE3DPROC)wglGetProcAddress("glTexImage3D");
で呼び出しています。
急に体調が悪くなって今まで横になっていました。レスしてもらっていたのにすみません
0101デフォルトの名無しさん
2007/10/14(日) 20:45:030102デフォルトの名無しさん
2007/10/14(日) 20:48:42平面にモノを投影するほうがメインです
3次元形状をテクスチャで扱っていきたいのでやっているのですが
出だしでつまづきました
0103デフォルトの名無しさん
2007/10/14(日) 21:31:54CPUなりGPUなりでレイキャスティングするしかないと思うんだけど・・・。
>>102
>ボリュームレンダリングというよりも
>平面にモノを投影するほうがメインです
ボリュームレンダリングしたものをテクスチャにして貼ればいいんじゃないの?
95の「こちらのソースのように」ってのはそういう意味じゃなかったの??
0104デフォルトの名無しさん
2007/10/14(日) 21:53:23ボリュームデータをある方向から見た様子が描画できる
と思ってるのかな?
だとしたら大きな勘違い。
一つのフラグメントに対して適用されるテクスチャのサンプル点は一つ
でしかない(マルチテクスチャやGLSLを使わない場合)んだから、
ボリュームデータをボリュームっぽく見せるためには
重描きする か レイキャスティングするか
のどっちかしかないよ。
3Dテクスチャが魔法のように問題を解決してくれるわけじゃない。
あと一番大切な事は、元気に楽しく暮らす事だと思うので
無理せずお体をお大事に。
0105デフォルトの名無しさん
2007/10/14(日) 21:54:49それをやろうとして「テクスチャにする」という部分と
「貼る」という部分
でつっかかっていました。
0106デフォルトの名無しさん
2007/10/14(日) 22:02:29どうにかコレを片付けて、早目に休めるようにします
0107デフォルトの名無しさん
2007/10/14(日) 22:04:16「テクスチャにする」も
「貼る」も
95のサンプルで既にできているのでは???
0108デフォルトの名無しさん
2007/10/15(月) 10:34:11例えば、イタリアの国旗のようなテクスチャがあったとき、
国旗の緑、白、赤のなかの、
緑と赤の部分をくっつけてテクスチャマッピングする
ってことはできますか?
また、そのテクスチャと元の国旗テクスチャとのマルチテクスチャ
はできますか??ちなみにマルチテクスチャはシェーダで行う予定です。
0109デフォルトの名無しさん
2007/10/15(月) 22:40:08これを読んで、Wavelet Lightingをやろうと思ったんですが
1.遮蔽情報テクスチャをウェーブレット変換
2.絶対値順にソートして小さい係数を切り捨て
3.最大値と最小値を調べ、8bitに量子化
4.積和計算??
4をどうやってやるんでしょうか・・?現在なんとなく分かるような、分かんない様な感じです。
出来ればGPUでやりたいんですが、処理が複雑すぎ、係数多すぎで無理な気がします。
HLSLで、TEXCOORD0から7まで使ってデータ渡すにしても int4 * 8で32しか使えないのでは・・?
0110109
2007/10/15(月) 22:41:050111デフォルトの名無しさん
2007/10/15(月) 22:42:47俺もウェーブレットやろうとしてる
というかpyramid見てるあたりが同じすぎる
ウェーブレットのわかりやすいサイトとかサンプルソース見せてくれー頼むー
0112デフォルトの名無しさん
2007/10/15(月) 23:27:51できるヨ
テクスチャ座標を(例えば)-0.5〜0.5とかの範囲で使えばいい
0〜1の範囲を超えるテクスチャの扱いは、glTexParameterのGL_TEXTURE_WRAP_?を参照のこと
0113108
2007/10/16(火) 09:24:05回答ありがとうございます。なんとかできそうなのですが、
ちなみに、もし緑、白、赤、黒、黄のなかの
緑、赤、黄をくっつけるときはどうすればいいのでしょうか??
0114デフォルトの名無しさん
2007/10/16(火) 10:45:02普通にやるなら、ポリゴンを分割しないとダメ
だけどシェーダ使うならテクスチャ座標を適当に指定すればいいっしょ
0115113
2007/10/16(火) 17:02:36glCallListについて質問があります。
Listに登録するときに、頂点座標を1つ1つ変えて登録するのと、
1つの頂点(形状)を登録して、translateで呼び出すのとでは
どちらがいい(もしくは高速)のでしょうか??
それぞれの板に違うテクスチャをマッピングする予定です。(113をやりたい)
ちなみにポリゴンは50〜100ぐらい作る予定です。
0116デフォルトの名無しさん
2007/10/16(火) 18:01:26どういう登録の仕方?詳しく
できれば両方のコードの例を
0117デフォルトの名無しさん
2007/10/16(火) 18:36:17for(int=0;i<N;i++){
glNewList(ListName+i, GL_COMPILE);
glBegin(GL_GL_QUADS);
glVertex3f(0.0+i, -1.0, 0.0);
glVertex3f(1.0+i, -1.0, 0.0);
glVertex3f(1.0+i, 1.0, 0.0);
glVertex3f(0.0+i, 1.0, 0.0);
glEnd();
glEndList();}
か、もう1つは上のループをなくして描画のときに
for(int i=1;i<N+1;i++){
glTranslatef(0.0+i, 0.0, 0.0);
glCallList(i);
}
という感じですが、もしかしてテクスチャマップするとなると
前者の方でテクスチャ座標指定等も一緒に登録するしかないですか??
0118デフォルトの名無しさん
2007/10/16(火) 19:26:41各頂点座標がそのままテクスチャ座標になるという理解でよいのでしょうか?
仮に、そうだとした場合
glVertex3f(30.f, 30.f, 30.f)
とかだと大幅にテクスチャ座標の範囲(0〜1)と大きくずれますよね?
0119デフォルトの名無しさん
2007/10/16(火) 19:41:27どんな原因が考えられますか???
0120デフォルトの名無しさん
2007/10/16(火) 19:47:49テクスチャ座標は自動生成はせず、別で指定する予定です。
そもそもテクスチャ座標の自動生成を使ってないんですが、
テクスチャ座標を自動生成にすると
各頂点座標がそのままテクスチャ座標になるんですか??
0121デフォルトの名無しさん
2007/10/16(火) 21:32:21lightを付けてる。
0122デフォルトの名無しさん
2007/10/16(火) 22:31:32全部の頂点に同じテクスチャ座標を使う場合は、ディスプレイリストに含めないでおけば外部から指定することができる
でもそんな使い方はありえないので、普通はテクスチャ座標も一緒にディスプレイリストに含めることになる
テクスチャ座標は最終的にテクスチャ行列で変換されるので、ディスプレイリストに含めててもテクスチャ行列を操作すれば拡大縮小・回転・平行移動して投影範囲を調節するくらいならできる
>>118,120
自動生成にもいろいろモードがあるが、まぁ GL_OBJECT_LINEAR だとして
各頂点座標そのままじゃなく、変換行列をかけてからテクスチャ座標になる
さらにそのテクスチャ座標がテクスチャ行列でもう一度変換される
だから拡大縮小・回転・平行移動して範囲を調節することくらいは出来る
0123120
2007/10/16(火) 23:01:05テクスチャ座標も一緒にディスプレイリストに含める形で
いこうと思います。
0124デフォルトの名無しさん
2007/10/17(水) 17:57:43テクスチャ座標(0〜0.5)をディスプレイリストに含めたとき、
描画するときに0.1〜0.2のテクスチャ座標で描画するってできます?
どうしたらいいですか?
テクスチャ行列の操作でできることですか??
0125デフォルトの名無しさん
2007/10/17(水) 23:03:52glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glTranslated(0.1, 0.1, 0.1);
glScaled(0.2, 0.2, 0.2);
0126デフォルトの名無しさん
2007/10/18(木) 20:11:430127デフォルトの名無しさん
2007/10/19(金) 14:04:23テクスチャ座標でも
gluPerspective(30.0, 1.0, 1.0, 100.0);
gluLookAt(0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0);
といったことができるとあったのですが。
これはテクスチャ座標上でz軸が上、y=2のところから視野角30度で…と設定したのですよね?
こういう設定をしないときのデフォルトのテクスチャ座標上での「視点」なんてものが存在するのでしょうか
0128デフォルトの名無しさん
2007/10/19(金) 14:18:44テクスチャ座標は行列に従って変換されるだけ
何も設定してなければ与えたテクスチャ座標がそのまま使われるだけ
テクスチャ座標に視点とか考えてもムダ
まぁシャドウマッピングをしたいんなら話は別だが
0129デフォルトの名無しさん
2007/10/19(金) 14:44:02そのまま、というのは0〜1の間にあるテクスチャが
そのまま対応したところにマッピングされるということですか?
gluPerspectiveやgluLookAtが入ってくると0〜1のが
なんかウニョウニョ変換されて貼り付けられる、と。
>まぁシャドウマッピングをしたいんなら話は別だが
やりたいと思ってることです。
0130デフォルトの名無しさん
2007/10/19(金) 15:17:24そう
glTexCoord2f とかで指定した座標は、テクスチャ行列で変換されてから使われるが、初期状態ではテクスチャ行列は単位行列なので、何も変わらずにそのままの座標でマッピングされる
>>125 みたいにすればテクスチャ座標を拡大したり平行移動したりできる
>なんかウニョウニョ変換されて貼り付けられる、と。
具体的には↓のページに書いてあるような行列になる
http://pyopengl.sourceforge.net/documentation/manual/gluLookAt.3G.html
http://pyopengl.sourceforge.net/documentation/manual/gluPerspective.3G.html
自前で同じ行列を計算して設定してやっても同じ効果が得られるから、gluXxxを使う必要は必ずしもない
シャドウマッピングの前にもう少し座標変換あたりの理解を深めた方がいいかもな (テクスチャじゃなくて普通の頂点座標のね)
どっかからサンプルを拾ってきてコピペするだけなら別に理解する必要もないけれど
0131デフォルトの名無しさん
2007/10/19(金) 23:05:31openglで何も設定しないときの視点位置は原点ですよね。
それで物体を glTranslatef(-0.5,-0.5,-0.5); して表示しているのですが回転したりしたときにポリゴンが欠けます。
改善しようと
glutReshapeFunc(); のところで
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, (double)w / (double)h, 0.0, 100.0);
gluLookAt(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
としたのですが、見え方が初期状態と違ってしまいます。
初期状態の視点について教えてください。
0132デフォルトの名無しさん
2007/10/19(金) 23:24:110133デフォルトの名無しさん
2007/10/20(土) 01:14:54glTranslatef(0.0,0.0,-0.5);です
gluLookAtのパラメータは 視点 視線先 上下ですよね?
これで同じになると思ってたのですが。。。
0134デフォルトの名無しさん
2007/10/20(土) 02:42:24つ gluLookAtのパラメータをチェック
0135132
2007/10/20(土) 03:10:20gluLookAt(0.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 1.0, 0.0);
とかにして、視点と視線先をずらさないと。
0136デフォルトの名無しさん
2007/10/20(土) 16:16:26訂正したのですが、今度は表示されなかったりしてます
0137デフォルトの名無しさん
2007/10/20(土) 16:46:39エスパーしてみると、glMatrixMode を元に戻してないんじゃないか
0138デフォルトの名無しさん
2007/10/20(土) 17:56:32glGetIntegerv(GL_MAX_TEXTURE_SIZE, &texSize);
とするとうちの環境ではtextSizeが2048とでました
一般的には色々なPCでハードウェアアクセレーションを
安全に効かせられるテクスチャのサイズはどのくらいなのだろう・・・
現在は512*512でテクスチャを持っていますが640*480以上(または画面サイズ以上)に
対応していないビデオカードで低速になるのでは?とちょっと不安です。
512*256に統一すべきなのだろか・・・
0139デフォルトの名無しさん
2007/10/20(土) 21:32:12sfactor には新しい色の、dfactor には現在の色の計算方法を指定します
この、新しい色、と現在の色という意味が、
いろいろ変えてみてもよくわからないので教えてください。
0140デフォルトの名無しさん
2007/10/20(土) 21:51:17詳しくは知らないが、512*512くらいの大きさなら心配ないんじゃないかな。
>>139
いろいろやるとこんがらがるので、とりあえず
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
でどうなるかをみて、その後GL_ZEROとGL_ONEを試すと
いいと思うよ。
0141デフォルトの名無しさん
2007/10/20(土) 22:46:37保証はできないけど、512x512ならまず大丈夫だよ。
画面サイズとテクスチャサイズは何の関係もないので、512x256にしても意味ないよ。
ちなみに規格で保証されてるのは64x64だけどね。
>>139
「新しい色」ってのは、パイプラインを通り抜けてきたフラグメントの色、
「現在の色」ってのは、フレームバッファのピクセルの色だよ。
OpenGLの日本語訳はイマイチなのが多いよね。
0142デフォルトの名無しさん
2007/10/21(日) 21:34:51OpenGLでデバイスロストが発生しないのは何故ですか?
0143デフォルトの名無しさん
2007/10/21(日) 23:47:53thxです!
もしものときは読み込んだ後、プログラム側で縮小とUVの調整をすればよさそうですし、512*512で行くことにします。
0144デフォルトの名無しさん
2007/10/22(月) 12:30:40ドライバが頑張ってるからだよ
0145デフォルトの名無しさん
2007/10/22(月) 17:49:52glDrawElementsを使う時にアンビエントなどマテリアルは
どうやって設定すればいいでしょうか?
0146デフォルトの名無しさん
2007/10/22(月) 19:19:370147デフォルトの名無しさん
2007/10/22(月) 19:44:34OpenGLの方がハードに合わせることが出来るっていうやつですか、なるほど
0148デフォルトの名無しさん
2007/10/23(火) 14:59:14ありがとうございます。
glBegin(GL_TRIANGLES);
アンビエントとディフューズの設定
glVertex3f(頂点A);
glVertex3f(頂点B);
glVertex3f(頂点C);
glEnd();
という処理をfor文で複数回行い、
面一枚一枚に対して設定していたのですが、
glDrawElementsを使う時に、
各面に設定するにはどうすればいいでしょうか?
0149デフォルトの名無しさん
2007/10/23(火) 16:44:020150デフォルトの名無しさん
2007/10/23(火) 17:06:25glColorPointerというのはアンビエントやディフューズと
同意義のものなのでしょうか?
0151デフォルトの名無しさん
2007/10/23(火) 17:27:16もしかしなくても glDrawElements 自体わかってなかったりするか?
0152デフォルトの名無しさん
2007/10/23(火) 17:43:33glDrawElements自体は分かります。
プリミティブを構成しての描画ということは分かりますが、
頂点情報の他にどの情報が使えるかが分からないです。
glColorPointerで設定するのはglColor3fのようなものでしょうか?
それともglMaterialfのようなものなのでしょうか?
そこらへんがよく分かってなかったりします。
0153デフォルトの名無しさん
2007/10/23(火) 17:50:04アンビエントやディフューズをせっていするには
GL_COLOR_MATERIALを有効にする以外に
何か設定しなければいけないのでしょうか?
0154デフォルトの名無しさん
2007/10/23(火) 18:04:11ただし GL_COLOR_MATERIAL が有効になってると、glColor3f でマテリアルのアンビエントとディフューズが設定される。
ベタ塗りになるのは、ライティングが有効になってないか、法線情報がないか、色が強すぎるか。
とりあえず GL_LIGHTING を有効にして glNormalPointer で法線を与えてみ。
0155デフォルトの名無しさん
2007/10/23(火) 18:16:31ありがとうございます。
0156デフォルトの名無しさん
2007/10/23(火) 18:37:520158デフォルトの名無しさん
2007/10/24(水) 14:57:233つのポリゴンをglbeginで描いているのですが
そのうち1つだけを平行移動したい場合はどのような処理をすればよいのですか?
glbegin~glend が3つ続いていて
そのひとつに平行移動行列を掛けるというのはわかるのですが
行列関係(GLMATRIXMODE)が難しくて、先に動かして状況だけ見たいと思いまして
0159デフォルトの名無しさん
2007/10/24(水) 15:12:53glMatrixMode(GL_MODELVIEW);
glBegin〜glEnd
glBegin〜glEnd
glPushMatrix();
平行移動とか回転とか
glBegin〜glEnd
glPopMatrix();
glBegin〜glEnd
glBegin〜glEnd
0160デフォルトの名無しさん
2007/10/24(水) 15:42:23やってみます!ありがとうございます!
glPushやPopが何なのか難しかったんですがやってみます!
0161デフォルトの名無しさん
2007/10/26(金) 12:06:52glDrawElementsの第4引数に
std::vector<GLushort>で設定した配列を使おうと思うのですが、
「'srd::vector<_Ty>'から'const GLvoid *'に変換できません」
と出ます。どのように指定すればいいのでしょうか?
0162デフォルトの名無しさん
2007/10/26(金) 12:14:500163デフォルトの名無しさん
2007/10/26(金) 13:01:12ありがとうございます。
ただ、コンパイルは通りましたが、VCのアサートで止まりました。
vectorファイルの中でのアサートのようで、
if (size() <= _Pos)
{
DEBUG_ERROR("vector subscript out of range");
_SCL_SECURE_OUT_OF_RANGE;
}
この箇所だと思われます。
これ以前にresizeでサイズ指定はしているのですが、
この場合何が原因なのでしょうか?
0164デフォルトの名無しさん
2007/10/26(金) 13:35:16ちゃんとresizeされてないんじゃないかな
直前でsize()取ってみて確認してみたら?
0165デフォルトの名無しさん
2007/10/26(金) 13:50:24直前でsize()を使い確認したところ、
サイズの指定で間違っていた所が分かりました。
ありがとうございます。
0166デフォルトの名無しさん
2007/10/26(金) 14:12:160167デフォルトの名無しさん
2007/10/26(金) 16:03:39OpenGLで何かその方法はありませんでしょうか?
入力:法線ベクトルの始点と終点
出力:入力のベクトルの始点若しくは終点を通る
そのベクトルに直交する面に含まれる座標2つ
0168デフォルトの名無しさん
2007/10/26(金) 17:18:36法線が決まったら、面は自動的に求まるはずだけど
その面から任意の座標は自分で出すしかないんじゃないかな
0169デフォルトの名無しさん
2007/10/26(金) 17:36:39法線が(a, b, c)の場合直交する面は ax+by+cz = 0
これを満たす(x, y, z)の点はどれも直交する面上にあるからあとは好きにして
0170デフォルトの名無しさん
2007/10/26(金) 18:02:23ax+by+cz+d = 0
でもおk
0171デフォルトの名無しさん
2007/10/27(土) 06:21:28GLUTでウィンドウを作成して表示してるんですが
ウィンドウズアプリケーションのようなメニューや各ボックスなどを付け加えるにはどうしたらいいのでしょうか?
0172デフォルトの名無しさん
2007/10/27(土) 11:09:430173デフォルトの名無しさん
2007/10/27(土) 15:20:04OpenGLとC++に縛られて良いならQt使えば?
GLUT/UIよりは難しいけど
0174デフォルトの名無しさん
2007/10/27(土) 17:38:50VisualC++使ってるんですが
普通OpenGL使ってアプリケーション(ウィンドウズアプリケーションのようなメニューが付いてたりボックスが付いてたり)を作る場合
どのように作るんですか?
0175デフォルトの名無しさん
2007/10/27(土) 17:50:18普通のウィンドウに関連付けて使う
wglとかで検索かければそれっぽいの見付かるとおもう
0176デフォルトの名無しさん
2007/10/27(土) 18:12:16MFCでコントロール配置が主流,最近だとC++/CLIでFormsか
それらの上にOpenGLを乗っけるなら
Win32APIでSetPixelFormatしてフォーマット決めて
wglCreateContextでOpenGLのコンテキストを作る
再描画タイミングでウインドウハンドルからGetDCしてwglMakeCurrentする
後はgl*系の描画コマンド実行して glFlushなりwglSwapBuffersする
GetDCしたらReleaseDCも忘れずに
0177デフォルトの名無しさん
2007/10/28(日) 02:21:09C++/CLIが実に楽だったよ、VS2005EE無料だしお勧め。
http://tpot.jpn.ph/t-pot/program/127_OpenGLNET/index.html
ここのサンプル参照
0178デフォルトの名無しさん
2007/10/28(日) 05:06:47コンテキストってのはウィンドウに描画される部分を表すもの?
感覚的に普通のウィンドウにOpenGLの表示ウィンドウを貼り付けるみたいな
そうした場合GLUTでやってた部分を完全にwglでやるようにしなくてはダメですか?
0179デフォルトの名無しさん
2007/10/28(日) 05:25:59yes,再描画イベントハンドラ内でコンテキストをカレントに設定しちゃえば
初期化と・SwapBuffer以外にGLUTと違いは無い
0180デフォルトの名無しさん
2007/10/28(日) 05:39:58サンプルを2005EEでビルドしてみたけどなんかエラー出てダメでした
エラー内容はこんな感じ
なんか設定が足りないんでしょうか?
\Form1.h(91) : error C3867: 'GLTest::Form1::timer1_Tick': 関数呼び出しには引数リストがありません。メンバへのポインタを作成するために '&GLTest::Form1::timer1_Tick' を使用してください
\Form1.h(91) : error C3350: 'System::EventHandler' : delegate コンストラクタには 2 つの引数が必要です
\Form1.h(109) : error C3867: 'GLTest::Form1::button1_Click': 関数呼び出しには引数リストがありません。メンバへのポインタを作成するために '&GLTest::Form1::button1_Click' を使用してください
\Form1.h(109) : error C3350: 'System::EventHandler' : delegate コンストラクタには 2 つの引数が必要です
\Form1.h(119) : error C3867: 'GLTest::Form1::pictureBox1_Paint': 関数呼び出しには引数リストがありません。メンバへのポインタを作成するために '&GLTest::Form1::pictureBox1_Paint' を使用してください
\Form1.h(119) : error C3350: 'System::Windows::Forms::PaintEventHandler' : delegate コンストラクタには 2 つの引数が必要です
0181デフォルトの名無しさん
2007/10/28(日) 05:42:35申し訳ないけどわかんないです
VC++でGLUTしか使ったことないし普通のアプリケーション作ったこともないからよくわからないんだと思うんですが
なんかいいサイトとかないですか?
0182デフォルトの名無しさん
2007/10/28(日) 06:27:19そいつはサンプルの作者に聞いてくれ
・・・といいたいところだけど、エラーから見て多分サンプルのフォームの整合性がおバグリになられてるっぽいので
Form1.hダブクリ→なんかGUIパーツをダブクリ→リビルドでいけるんじゃないかな
0183デフォルトの名無しさん
2007/10/28(日) 15:06:59そういうTIPが欲しいんだろ?
俺も欲しい。探してくれ
0184デフォルトの名無しさん
2007/10/28(日) 15:54:26LINUXやUNIXで動かす必要があるなら
>>172 >>173のいうように
GLUIとかQtとかじゃない?日本語がちょい怪しいらしいけど。
WinでいいならMFCかC++/CLIだぜ
使い方はググりゃでるハズ
http://www.google.co.jp/search?q=MFC+openGL
C++/CLI
http://tpot.jpn.ph/t-pot/program/127_OpenGLNET/index.html
>>176の言っていることも↑のサンプルのソースに書いてある。
いつもはUNIXで開発してるんだけど、ちょっとしたtoolが必要になって
そのときはVS2005EEとC++/CLIで作った
ほとんどソースコード変えずに表示でき、便利なフォームデザイナも利用可。
0185デフォルトの名無しさん
2007/10/29(月) 18:30:41vertex-shaderで5個のオブジェクト頂点を
それぞれ得る(アクセスする)ことはできるんですか??
その頂点と視線ベクトルとの角度によって、テクスチャ座標を
いじってテクスチャマップしたいのですが。。
0186デフォルトの名無しさん
2007/10/30(火) 00:08:10できるよ
0187デフォルトの名無しさん
2007/10/30(火) 01:49:57やり方を言わないのがこの板には多いと思うんだ
0188デフォルトの名無しさん
2007/10/30(火) 01:52:580189デフォルトの名無しさん
2007/10/30(火) 01:59:58できるんですかもなにも
それをやるのがまさにvertex shaderの仕事ジャマイカ
0190デフォルトの名無しさん
2007/10/30(火) 02:01:37「あいつのメアド教えて?」
「ごめん、俺あいつの電話番号しかしらないや」
「おめー、番号知ってんならメアドくらい聴いてくれたっていいじゃねぇか」
っていうのと同じじゃん。それじゃ可哀想じゃね?
>>185
俺も複数オブジェクトのときの頂点の対応ってのがよくわからんけど
GLSLなのかCgくらいかは書いておいたほうがアドバイスもらえるんじゃないかな
0191185
2007/10/30(火) 13:01:49どうしたらいいのでしょう??教えてください。
GLSLを使っています。
0192デフォルトの名無しさん
2007/10/30(火) 13:02:24複数オブジェクトのときの頂点の対応・・・??
「対応」って何????
185は全然そんなこと言ってないと思うんだけど。
0193デフォルトの名無しさん
2007/10/30(火) 13:36:35それしか答えようがないような質問だったからなんだが…
GLSLならgl_MultiTexcoord0とかで入力されたテクスチャ座標が取れる
あとはそれを視点と頂点座標との位置でお好みでいじって
gl_TexCoord[0]とかに代入してやればFragmentShaderとかに渡っていくよ
0194デフォルトの名無しさん
2007/10/30(火) 15:15:24マウス操作ができて、ホップアップメニューを使用したいのですが、、、
個人的にはハノイの塔やルービックキューブなどを考えています
知識は全然ないので何からはじめればいいのかわかりません。どこかサンプルがのっているサイト等を教えてもらえるとうれしいです。どなたかお願いします
0195デフォルトの名無しさん
2007/10/30(火) 17:07:26http://nehe.gamedev.net/lesson.asp?index=01
0196185
2007/10/30(火) 21:00:26説明が下手で申し訳ないんですが、
それぞれのオブジェクトの頂点の座標をvertex-shaderで扱いたいんです。
vertex-shaderで頂点が扱えるのは分かるんですが、
このときのvertex-shaderにおけるgl_Vertexには何が入ってるのか
分かりません。どのオブジェクトの頂点なのか、それとも全体のものなのか。
オブジェクトAならgl_Vertex[A]、オブジェクトBならgl_Vertex[B]のように
できるのかなと思いまして。
0197デフォルトの名無しさん
2007/10/30(火) 21:07:34VertexShaderは頂点一つずつしか扱わないよ
gl_Vertexにはその時処理してる頂点座標が入ってる
で、VertexShader全体が全頂点に対して毎回実行されるものだ
0198デフォルトの名無しさん
2007/10/30(火) 22:55:21頂点の数だけVertex shaderが実行される
例えば5個のオブジェクトそれぞれに頂点が10個ずつあったら、同じシェーダが合計50回実行される
0199デフォルトの名無しさん
2007/10/31(水) 01:03:08ちなみにfragment-shaderに渡すときの処理も、
ループ(オブジェクトの(頂点の)数){
vertex→frag
}
でしょうか?
0200デフォルトの名無しさん
2007/10/31(水) 01:26:16何のことを言ってるのかわからん
0201デフォルトの名無しさん
2007/10/31(水) 01:58:53オブジェクトAの頂点処理をして、fragmentでAに対するテクスチャ処理
オブジェクトBの頂点処理をして、fragmentでBに対するテクスチャ処理
・
・
と言いたかったのですが、違いますか?
0202デフォルトの名無しさん
2007/10/31(水) 02:19:332. 頂点シェーダが出力した座標を元に、実際に画面上のどのピクセルを描くか描かないかが決まる。これは自動的に決まる。
3. 描くべきピクセル1個ごとにフラグメントシェーダが実行され、テクスチャを取り込んだりしてそのピクセルの色を出力する。
4. フラグメントシェーダが出力した色を元に、実際に画面上にピクセルが描かれる。
だいたいこんな感じ。
0203デフォルトの名無しさん
2007/10/31(水) 12:09:071.は vertex shader の仕事。このシェーダプログラムを書いてやる必要がある。
2.はラスタライザの仕事。これは固定機能で、プログラミングできない。
3.は fragment shader の仕事。このシェーダプログラムを書いてやる必要がある。
4.はバックエンドプロセッサの仕事。これは固定機能で、プログラミングできない。
要は、
vertex shaderのプログラムは一つの頂点だけの処理を考えればいいし、それしか処理できない。
fragment shaderのプログラムは一つのフラグメントだけの処理を考えればいいし、それしか処理できない。
ってこと。
てか、185さんはまず根本的なグラフィクスパイプラインの仕組みを知る必要があると思うよ。
次に、その中でどの部分がプログラマブルになったのかを知るという順番で進めていかないと、
どのみち座標系への無理解からくる壁にぶちあたると思う。
0204デフォルトの名無しさん
2007/10/31(水) 13:02:140205デフォルトの名無しさん
2007/10/31(水) 13:11:26動画をRGB等のデータにできればそこからテクスチャにして貼ることはできるよ
0206185
2007/10/31(水) 13:14:45おっしゃる通りでして、グラフィクスパイプラインの仕組みが
全然理解できていません。
がんばって勉強します。
0207デフォルトの名無しさん
2007/10/31(水) 14:04:41そうですか。。
処理が膨大になりそうですね。
検討してみます。ありがとうございました!
0208デフォルトの名無しさん
2007/10/31(水) 14:44:52私もグラフィクスパイプラインの仕組みを詳しく知りたいと思っています。
OPENGLのグラフィクスパイプラインの仕組みについて詳しく書かれた
お勧めの本やサイトはありませんか?
赤本は読んだので多少理解したつもりなんですが、まだモヤモヤしています。
0209デフォルトの名無しさん
2007/10/31(水) 16:25:41テニスみたいなのを作りたいんだが。。。
0210デフォルトの名無しさん
2007/10/31(水) 16:34:010211デフォルトの名無しさん
2007/10/31(水) 16:39:20http://keirinkan.com/kori/kori_physics/kori_physics_2/index.html
第1部第1章くらいは読んでみては
0212デフォルトの名無しさん
2007/10/31(水) 19:09:56371 名前:デフォルトの名無しさん[] 投稿日:2007/10/30(火) 16:12:14
学校の課題でOPENGL使ってなんか作らないとダメなんだけどいい感じのサンプルない?
インベーダーとかハノイとかルービックとか。。。
誰かおせーて
なんか九州工科大だかそこらへんのページでそんな課題を見たな
0213デフォルトの名無しさん
2007/10/31(水) 19:15:15なんかそれについて、わかりやすく描いてるのが少ない
0214デフォルトの名無しさん
2007/10/31(水) 20:06:08そんな大学ありません
0215デフォルトの名無しさん
2007/10/31(水) 22:11:34ここのPDF version of the tutorialのfigure3にレンダリングパイプラインを図にしたものがあるよ。
その周辺に具体的な説明があるよ。
パイプラインはDirect3Dとほぼ同じなのでdirect3dのSDKのドキュメントを読むのもいいかも?
0216デフォルトの名無しさん
2007/11/01(木) 00:09:50一応できるようになったよ
原因はよくわからなかったけど
VC2005Eで新しく作り直そうと思ったんだけどどれ選ぶんだろう?
学校でVC2005SでMFCプロジェクトを作ったんだけど2005Eだと動かないし
0217デフォルトの名無しさん
2007/11/01(木) 22:52:03保存する関数を作成しています。
この関数を、描画先のFormが画面からはみ出た状態で実行すると、
glreadpixelsで読み込んだ中身のうち画面外に当たる部分が0(真っ黒)
になってしまいます。
いろいろ試してみたところ、設定するピクセルフォーマットによっては
画面外の部分も正しく読み込めるようです。
(なお、画面外が読み込めないピクセルフォーマットはPFD_SWAP_COPYか
PFD_SWAP_EXCHANGEを持っていて、読み込めるピクセルフォーマットは
これらを持っていませんでしたが、関係あるのかな?)
このようなことが起きるのはなぜでしょうか?
また、現状で画面外が読み込めないピクセルフォーマットを使っていても
画面外を読み込めるようにする方法は無いでしょうか?
0218デフォルトの名無しさん
2007/11/01(木) 23:31:140219208
2007/11/02(金) 14:43:40ありがとうございます。
理解が深まりました。
0220デフォルトの名無しさん
2007/11/06(火) 08:14:29誰か教えてください。
できれば使うときの例とかを載せていただけたら
うれしいです。
0221デフォルトの名無しさん
2007/11/06(火) 08:15:20texture2Dとtexture2DProjの違いです。。
0222デフォルトの名無しさん
2007/11/06(火) 11:29:380223デフォルトの名無しさん
2007/11/07(水) 02:49:13(回転角0度のときは長方形なんだが,回転しているときの四隅の角度が90度にならない)
glPushMatrix()
glRotatef(angle, 0.0, 0.0, 1.0)
glColor4f(0, 0, 0, 0.5)
glRectf(-0.5, -0.5, 0.5, 0.5)
glPopMatrix()
ウィンドウサイズは800,600なんだが,下のような設定だとまずいのだろうか.
glViewport(0, 0, 800, 600)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
0224デフォルトの名無しさん
2007/11/07(水) 09:06:18angle は度なので 90 にするといいよ
0225デフォルトの名無しさん
2007/11/07(水) 11:08:38ちゃんと投影行列を設定しないとダメ。ビューポートのアスペクト比に合わせてね。
(そのプログラムでは眼点座標系からクリップ座標への変換の際にzが反転してしまうよ。)
glMatrixMode(GL_PROJECTION);
glLoadItdentity();
の後に、
glOrtho(-4, 4, -3, 3, -1, 1);
とでも書いてやればいいかと。
0226デフォルトの名無しさん
2007/11/08(木) 01:30:56position = vec3(gl_ModelViewMatrix * gl_Vertex);
これとか使って求められたんですけど、
オブジェクトからの光線?(オブジェクト面と視点のベクトル)
は、vertexでどうやって求めるんですか?
視線ベクトルというよりオブジェクト面から光線ベクトルが
欲しいんですけど。
0227デフォルトの名無しさん
2007/11/08(木) 02:00:290228デフォルトの名無しさん
2007/11/08(木) 08:21:29directxは触ったことがあります。
openglは初めてです。
即席でglutとglpngだけで製作中です。
極力組み込みで済ませたいです。
far-planeギリギリ半径の球にテクスチャを貼り天球を表現しようとしましたが、うまく貼れません。
最悪、カメラが向く方向を相対的に認識でき、空っぽく見えればいいです。
あわよくば、簡単にそれらしいエフェクト(雲や日光及びそのスペキュラー等)が掛けれると尚良いです。
何か良い方法があればご教授願います。
0229デフォルトの名無しさん
2007/11/08(木) 09:31:53よくわからんが、far-planeギリギリなのが問題だというのならfar-planeを遥か彼方へ持っていけばいいのでは
むしろfar-planeなんか無限大に(ry
それともfar-plane関係なくてそもそもテクスチャが貼れないという問題?
どこで詰まってるのかよくわからない
0230226
2007/11/08(木) 11:32:29光源は使っていません。。
やりたいことは板と視点の位置が固定なら、
いくら視線方向を変えても同じテクスチャで良くて、
板と視点の位置が変わると、違うテクスチャを貼るようにしたいです。
gl_ModelViewMatrix * gl_Vertexを使うと、視線ベクトルでテクスチャを
切り替えられてしまって、やりたいことと違って、
(gl_Vertex - 視点)ベクトルを使うと、板の両サイドでこのベクトルの
向きが違うので、うまくテクスチャマップされないんです。
そもそもvertex-shaderでできないことなんですかね?
0231デフォルトの名無しさん
2007/11/08(木) 11:43:08球の生成にglutの補助関数を使っているので、各頂点毎にテクスチャ座標を指定出来ないので、自動生成に頼るつもりが、それが出来ていないのだと思います。
うまくラッピング出来る生成方は無いでしょうか。
0232デフォルトの名無しさん
2007/11/08(木) 11:51:23文章から動きがイメージできないが…
>(gl_Vertex - 視点)ベクトルを使うと、板の両サイドでこのベクトルの向きが違うので
両サイドってのは板の両端って意味でおk?
テクスチャを切り替える基準は頂点の位置じゃなくて板の位置なわけか?
頂点の位置じゃない板の位置っていうのは何だろう。 中心点かなにかか。 それを与える必要があるんじゃないか。
0233226
2007/11/08(木) 12:10:38やっぱり中心点かなにか必要ですよね。了解しました。
なんとかがんばってみます。
0234デフォルトの名無しさん
2007/11/08(木) 12:21:28単純に (x, z) を (s, t) にマップさせればいいんじゃないかな、少々大雑把かもしれんが
float size = 10000;
float s_plane[] = { 0.5/size, 0, 0, 0.5 };
float t_plane[] = { 0, 0, 0.5/size, 0.5 };
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
glTexGenfv(GL_S, GL_OBJECT_PLANE, s_plane);
glTexGenfv(GL_T, GL_OBJECT_PLANE, t_plane);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glutSolidSphere(size, 10, 10);
実際のテクスチャの様子みながらglScalefで球を平べったくするなり調節した方がいいかもしれない
0235デフォルトの名無しさん
2007/11/08(木) 17:09:18デバックとかできないんですか?
0236デフォルトの名無しさん
2007/11/08(木) 18:42:18空っぽく見せるのに球にする必要はない。skyboxでぐぐれ
0237デフォルトの名無しさん
2007/11/09(金) 00:16:02知りたい変数を1.0~0.0の範囲に収まるように調整してからフラグメントの色に出力する方法が一番いいと思うよ
0238デフォルトの名無しさん
2007/11/09(金) 03:17:39ありがとうございます.うまく回転させることができました.
glOrthoについてもう少し聞きたいんですが,ここで指定したleft, right, top, bottomが
glRectやglVertex2などで指定できる画面の端であるという理解でよいのでしょうか?
これに関連してglOrtho(-4, 4, -3, 3, -1, 1);とやって-4から4の間で指定しても
glOrtho(-1,1,-0.75,0.75,-1,1);とやって-1から1の間で指定しても同じような気がしますが,
ここの値を任意に大きくしたり小さくする意味はなにかあるのでしょうか?
0239デフォルトの名無しさん
2007/11/09(金) 11:13:37そういう理解でよい
結局は同じだけど、-1〜1 と 0〜640 では扱いやすさが異なるだろう
場合に応じて使いやすい座標系を設定すればよい
0240デフォルトの名無しさん
2007/11/09(金) 11:18:15シェーダってGLSLでいいんだよな?
WindowsならgDEBuggerの30日体験版が使えると思う
いざ買おうとするとイスラエルにfaxする必要があるんだが
あとはglslDevilってのがWindowsとLinuxなんかで使えてフリーだ
使ったことは無いがスクリーンショットを見る限り便利そう
MacならOpenGL Profilerが標準で付いてる
Cgだとデバッグ方法は分からん
FX Composerとかでやるしか無いんじゃないかな
0241235
2007/11/09(金) 12:47:35gDEBugger使ってみます。
0242デフォルトの名無しさん
2007/11/09(金) 14:10:49glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB |GLUT_MULTISAMPLE);
とした後、
glGetIntegerv (GL_SAMPLE_BUFFERS_ARB, buf);
glGetIntegerv (GL_SAMPLES_ARB, sbuf);
でbufとsbufに0が帰ってきて失敗してしまいます。
おそらくビデオカードがこれに非対応なのでしょうが、
マルチサンプリングアンチエイリアスをする方法は他にありますか?
シェーダを使ってやるしかないのでしょうか?
0243デフォルトの名無しさん
2007/11/09(金) 17:09:44なんとかなりました。
ありがとうございました。
0244デフォルトの名無しさん
2007/11/09(金) 21:57:08他にはシェーダで自前でAAかけるくらいしかないね
つか今時MSAA対応してないグラボってもしかしてIntel?
そうであればシェーダでやってもまともな速度で動くとは思えんよ
0245デフォルトの名無しさん
2007/11/09(金) 23:24:38何か代表的なものあったら教えてください。
Blenderでエクスポートできるやつ希望。
0246デフォルトの名無しさん
2007/11/09(金) 23:57:10その質問 いつか見た
0247デフォルトの名無しさん
2007/11/10(土) 01:06:22COLLADA DOM
0248デフォルトの名無しさん
2007/11/10(土) 15:41:450249デフォルトの名無しさん
2007/11/12(月) 02:00:063Dの場合はどうすればいいんだ?
0250デフォルトの名無しさん
2007/11/12(月) 02:47:590251デフォルトの名無しさん
2007/11/12(月) 09:18:143Dの場合も線の描画と再帰処理だと思うけど?
0252デフォルトの名無しさん
2007/11/12(月) 11:45:20交差というか貫通した感じで交わっている場合、半分はブレンドされるが半分はやってくれない
描画順入れ替えてもこればかりは解決できないす…
0253デフォルトの名無しさん
2007/11/12(月) 11:52:29あまり詳しくないので、答えるのもあれなんだが
複数重なった半透明処理をH/Wでちゃんとやってくれるボードのほうが珍しいというか
高額なやつじゃないとやってくれないんじゃなかったっけ?
ソフトウェアモードだとちゃんとできたりしない?
0254デフォルトの名無しさん
2007/11/12(月) 18:25:16サンプルを見ながらC#に書き換えていったのですが、
どうしてももHGLRCが取得できずに困っています。SetPixelFormatまでは
上手くいってるみたいなのですが(Marshal.GetHRForLastWin32Error()は0x80070000)…
行数圧縮のため見づらいですが下にコードを書きます。
HDC = user32.GetDC(this.Handle);//Formのハンドル
wgl.wglSwapBuffers(HDC);
PIXELFORMATDESCRIPTOR pfd = new PIXELFORMATDESCRIPTOR();
pfd.nSize = Marshal.SizeOf(typeof(PIXELFORMATDESCRIPTOR));/*40byte*/
pfd.nVersion = 1; pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
pfd.iPixelType = 0; pfd.cColorBits = 32; pfd.cRedBits = 0; pfd.cRedShift = 0; pfd.cGreenBits = 0;
pfd.cGreenShift = 0; pfd.cBlueBits = 0; pfd.cBlueShift = 0; pfd.cAlphaBits = 8; pfd.cAlphaShift = 0;
pfd.cAccumBits = 32; pfd.cAccumRedBits = 0; pfd.cAccumGreenBits = 0; pfd.cAccumBlueBits = 0;
pfd.cAccumAlphaBits = 8; pfd.cDepthBits = 16; pfd.cStencilBits = 8; pfd.cAuxBuffers = 0; pfd.iLayerType = 0;
pfd.bReserved = 0; pfd.dwLayerMask = 0; pfd.dwVisibleMask = 0; pfd.dwDamageMask = 0;
int pixelFormat = gdi32.ChoosePixelFormat(HDC, ref pfd);
bool success = gdi32.SetPixelFormat(HDC, pixelFormat, ref pfd);
HRC = wgl.wglCreateContext(HDC);
pixelFormatも0ではないので多分大丈夫だと思います(実験時は7)。
どこが原因なのかさっぱりです orz
一体何が原因なのでしょうか?
0255デフォルトの名無しさん
2007/11/12(月) 20:28:47交差してるところでポリゴンを割り、一番奥から順に描画するしかない。
0256デフォルトの名無しさん
2007/11/12(月) 21:38:22基本的には、交差させないのが一番。
交差するならCPUで計算してポリゴン割る。
分割せずに半透明ポリゴンを順序非依存で正しく描画する方法といったら、
1. Depth Peeling
2. シェーダで半透明情報をバッファ上に蓄積、最後に合成
の二通りかな。
1.はdepth complexityに応じてnパスレンダリングをおこなう必要がある。
2.は事前に決めた枚数(バッファの深さと精度のトレードオフ)より沢山は重ねられない。
まぁどっちにしても非常に負荷の大きい処理なわけで、半透明処理は鬼門ですわね。
実装が簡単なのは1.だけど、今後2.のアプローチが流行りそうかもしれないので
チャレンジしてみてください是非!
0257デフォルトの名無しさん
2007/11/12(月) 22:40:09懸命に頭ひねってみたんだが
白スク水着せたおにゃのこが家庭用プールで遊んでる構図しか浮かばなかった
0258252
2007/11/13(火) 03:56:59色々試してみます
0259デフォルトの名無しさん
2007/11/13(火) 04:45:04どの部位が交差するんだよ?
0260デフォルトの名無しさん
2007/11/13(火) 09:48:02濡れた白スクと水面じゃねーの?
>>256
この2の方法てAバッファとか言うんだっけ?
これって遅延シェーディングと似たようなもんだと理解してるんだけど
それだとAAって自前でかけないとならないよな
それともAAかけて描画した結果を蓄積しちゃっていいのか?
ただの興味だけなんだが誰か分かる人がいたら頼む
0261デフォルトの名無しさん
2007/11/13(火) 11:54:17GeForce FX 7600です。
調べるとMSAAに対応しているみたいですね。
赤本のサンプルソース(multisamp.c)なのですが動かないです。
加えたのは
#include <GL/glew.h>
だけです。
何か足りないのでしょうか?
0262261
2007/11/13(火) 14:52:50ビデオカードのコントロールパネルのアンチエイリアシング設定を
アプリケーションによるコントロール → 2xMS
にしてやると動きました。
しかしアプリ任せのMSAAをやるには
なにかピクセルバッファのようなものが必要なのでしょうね。
0263デフォルトの名無しさん
2007/11/13(火) 16:49:56コントロールに描画しているが、242と同じくマルチサンプリングアンチエイリアスできない。
同じようにbufとsbufに0が返ってくる。
PIXELFORMATDESCRIPTOR にはマルチサンプリング関係の設定はないみたいだし。
>>242 はglutで描画してるの?
0264254
2007/11/13(火) 18:37:16スレ汚しすいませんでした。
0265デフォルトの名無しさん
2007/11/13(火) 18:46:16GeForceにFX7600なんてないのはともかく、それならHW的には十分だな
opengl.orgに繋がらないので違うところにあったそれっぽいWindows版のGLUTのソースを確認したが、
そのソースを見る限りWindowsではGLUT_MULTISAMPLEは無視されてるみたいだな
俺の見たソースが最新ならGLUTでは改造しないと無理そうだ
>>263
SetPixelFormatじゃ設定できない
WGL_ARB_pixel_format拡張のwglChoosePixelFormatに
属性としてWGL_SAMPLE_BUFFERS_ARBとWGL_SAMPLES_ARBで指定するとできるはず
0266デフォルトの名無しさん
2007/11/13(火) 19:05:49glutDisplayFunc( DisplayTri );
glutDisplayFunc( DisplayTri2 );
glutMainLoop();
例えばこういう場合、glutMainLoopによって上2行の関数がどちらともループしてしまいます。
1行目glutDisplayFunc( DisplayTri )を初めの1回だけ実行し、その後2行目のglutDisplayFunc( DisplayTri2 )をループで実行し続けるにはどうしたらいいでしょうか?
0267デフォルトの名無しさん
2007/11/13(火) 20:08:48だから DisplayTri1 を最初の 1 回しか実行してほしくないなら↓のようにすればいいはず
void DisplayTri2(void)
{
/* なにか素敵なものを描画 */
}
void DisplayTri1(void)
{
/* なにか楽しいものを描画 */
glutDisplayFunc(DisplayTri2);
}
int main(....)
{
...
glutDisplayFunc(DisplayTri1);
glutMainLoop();
}
その前に glutMainLoop をそもそも誤解してるような気もするが。
0268デフォルトの名無しさん
2007/11/13(火) 21:34:01FBOを作成し空のテクスチャを割り当て、ディプス、ステンシルバッファは割り当てないとします。
そして、FBOへ書き込み先を変更し描画を行った場合、深度値やステンシル値はデフォルトのバッファに書き込まれるのでしょうか?
それとも何処にも書き込まれないのでしょうか?
もちろん、glEnableでディプス、ステンシルをONにした状態です。
分かる方宜しくお願いします。
0269デフォルトの名無しさん
2007/11/14(水) 00:54:12glutです。
>>265
わざわざソースを見ていただいてありがとうございます。
おそらく私の問題も結局は>>263の人と同じだとおもうので
GLUTの中を調べながらもう少しやってみます。
0270デフォルトの名無しさん
2007/11/14(水) 06:54:28どこにも書き込まれないのが正しいと思う
そのFBOをBindした状態ではDepthBitsとStencilBitsが0になってるはずだ
0271デフォルトの名無しさん
2007/11/15(木) 01:41:08warning C7506: OpenGL does not define the global function mul
と出ますが、ちゃんと動作しちゃいます。
これは、どういう事なのでしょうか?
グラボによっては動作しないのでしょうか?
OSはXP,グラボGeForceです。
0272デフォルトの名無しさん
2007/11/15(木) 05:54:42その警告の通りGLSLではmulなんて関数は無くて、普通に*演算子で計算できるよ
しかしGeForceだとGL_EXT_Cg_shaderというGLSLでCgの命令も使える拡張がある
これのおかげでmulが警告ありながらも使えて、たぶんfloat4なんかも使えるはずだ
動きはするけどRadeon積んだマシンに持っていくと途端に動かなくなるから
ちょっと迷惑な拡張なんだよな
とりあえず警告潰すようにしていけばGL_EXT_Cg_shader頼りになることも無いんじゃないかな
0273デフォルトの名無しさん
2007/11/15(木) 11:33:42ATIの方がわりと厳しいんだっけ?
0274デフォルトの名無しさん
2007/11/15(木) 12:40:19多分GLSL Frontendとか使ってたんじゃないかと思う
今は別物になってるのか手を入れて使ってるのかは良く知らないけど。
GeForceで開発してRadeonに持っていく時にはGLSLValidateによくお世話になった
0275デフォルトの名無しさん
2007/11/15(木) 18:40:07できますか?教えてください。
0276デフォルトの名無しさん
2007/11/15(木) 18:54:290278275
2007/11/15(木) 22:06:37ありがとうございます。初歩的なことですいません。
glClearColor(0.3, 0.3, 1.0, 0.0);
をいじってできるかと思いました。
0279デフォルトの名無しさん
2007/11/16(金) 00:09:030280デフォルトの名無しさん
2007/11/16(金) 00:56:170281デフォルトの名無しさん
2007/11/16(金) 15:47:11どうやってTEXCOORD0〜7に座標を指定していくのでしょうか
0282デフォルトの名無しさん
2007/11/16(金) 16:11:21それはglMultiTexCoordのリファレンスを読んだ上で言ってるのか
http://www.opengl.org/sdk/docs/man/xhtml/glMultiTexCoord.xml
>Parameters
>target
> Specifies the texture unit whose coordinates should be modified.
> The number of texture units is implementation dependent, but must be at least two.
> Symbolic constant must be one of GL_TEXTUREi, where i ranges from 0 to GL_MAX_TEXTURE_COORDS - 1,
> which is an implementation-dependent value.
>s, t, r, q
> Specify s, t, r, and q texture coordinates for target texture unit.
> Not all parameters are present in all forms of the command.
0283デフォルトの名無しさん
2007/11/16(金) 17:18:09その仕様は理解しているのですが…
すみません日本語おかしくなるかも知れないんですが、まとめて質問させてください。
glBegin(GL_QUADS);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.0, 1.0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.0, 1.0);
glVertex3d(-1.0, -1.0, 0.0);
…中略
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.0, 0.0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.0, 0.0);
glVertex3d(-1.0, 1.0, 0.0);
glEnd();
こういう風に使った場合(-1.0, -1.0, 0.0)の
TEXCOORD0にはテクスチャ0番での、(0 1)がテクスチャ座標として与えられて
TEXCOORD1にはテクスチャ1番での、(0 1)がテクスチャ座標として与えられるわけですよね。
で、Cgのvertexシェーダーで
IN{
float4 objectPosition : POSITION,
float4 color : COLOR,
float4 texCoord0 : TEXCOORD0,
float4 texCoord1 : TEXCOORD1,
}
とした場合、vertex(-1.0, -1.0, 0.0)のとき、
texCoord0には(0 1) texCoord1にも(0 1)の値が入力されるということでしょうか?
TEXCOORDセマンティックが、数字としてどこを指しているのか確認したくて質問しました。
0284デフォルトの名無しさん
2007/11/16(金) 21:47:09それもCgのマニュアル見れば書いてあるわけだが、
TEXCOORD0-TEXCOORD7
Input texture coordinates (texcoord0-texcoord7)
through MultiTexCoord command
だそうだ
0285デフォルトの名無しさん
2007/11/17(土) 03:00:44GL_QUADSで描いたごく単純な長方形でも重くなるので、なにが原因なのかよくわかりません。
0286263
2007/11/17(土) 10:40:52おかげさまでマルチサンプリングアンチエイリアスできました。
>>269
ここが参考になりました。
http://mrya.cocolog-nifty.com/caffis_diary/2006/05/fsaa.html
0287デフォルトの名無しさん
2007/11/17(土) 11:53:43ソフトウェアレンダリングになってるってことはない?
0288デフォルトの名無しさん
2007/11/17(土) 12:19:16すみません、ということは>>283は合ってるのでしょうか?
それだと、MultiTexCoordは常に0〜1の範囲の座標をCgに渡して
それ以外の値をTexCoord0〜1はもてない、ということになりますよね
0289デフォルトの名無しさん
2007/11/17(土) 12:27:51なんで?
100でも-20でも好きな座標を渡せばいいじゃん
元々glTexCoordに渡すテクスチャ座標は0〜1に制限されてはいないんだし
0290デフォルトの名無しさん
2007/11/17(土) 12:36:08テクスチャの有無云々じゃなくて、座標を優先すればいいわけですか。
ようやくわかってきました。ありが�d
0291デフォルトの名無しさん
2007/11/17(土) 15:07:03確認できませんでした。。
ソフトウェアレンダリングというものは、プログラムの内部で決定するのでしょうか?
例えばOpenGLの初期化の際に、ソフトウェアレンダリングを指定するみたいな…
あるいはドライバの設定で変更するものなのでしょうか?
0292デフォルトの名無しさん
2007/11/17(土) 15:14:00とりあえず↓をOpenGLの初期化後にやってみそ
printf("%s\n", glGetString(GL_VENDOR));
printf("%s\n", glGetString(GL_RENDERER));
printf("%s\n", glGetString(GL_VERSION));
0294291
2007/11/17(土) 15:47:46ってことはおそらく自分の環境はソフトウェアレンダリングではなく、他に原因があるってことでしょうね
もう少し調べてみます
0295デフォルトの名無しさん
2007/11/17(土) 16:17:38glEnable(GL_POLYGON_SMOOTH)やらglEnable(GL_LINE_SMOOTH)は
遅くなるかもね
0297デフォルトの名無しさん
2007/11/22(木) 14:17:06image[r][t][s][3]
という風に3次元テクスチャの領域を取ってるのですが
これってなんで
struct 3Dtex{
int r,g,b;
}3Dtex[r][t][s];
みたいなのではダメなのでしょうか。
0〜2がrgbに対応している、と解釈してるのですがそれだとカラッポの領域も確保しなくてはならなくて
256×256×256でものすごい重くなります。
1次元で 3Dtex[]={r,g,b r,g,b r,g,b…}みたいに確保したら動かないのでしょうか?
0298デフォルトの名無しさん
2007/11/22(木) 14:21:44別にだめなことはない
>1次元で 3Dtex[]={r,g,b r,g,b r,g,b…}みたいに確保したら動かないのでしょうか?
それでも動く
どの方法を取るにしても、256×256×256 のテクスチャを扱うつもりならそれだけのメモリは要るから(48MBくらいか?)、結局同じ
どれでも好きなやり方でどうぞ
0299デフォルトの名無しさん
2007/11/22(木) 14:28:404 4 4の3次元テクスチャだと、1項目が0 0 0 最後が4 4 4だとなんとなくわかるのですが
2項目はボクセルのどこに当たるのでしょう
下の○にrgbが入ってるとして、それを1次元で○だけ確保したら
○×○○×
3Dtex[]={○ ○ ○}と格納されますが、rgb情報はあってもxyz情報が消えませんか?
そこら辺が1次元で確保するときよくわからなくて
0300デフォルトの名無しさん
2007/11/22(木) 14:36:162番目は 0 0 1
3番目は 0 0 2
4番目は 0 0 3
5番目は 0 1 0
:
8番目は 0 1 3
9番目は 0 2 0
:
12番目は 0 2 3
13番目は 0 3 0
:
16番目は 0 3 3
17番目は 1 0 0
:
32番目は 1 3 3
33番目は 2 0 0
:
48番目は 2 3 3
49番目は 3 0 0
:
64番目は 3 3 3
全部で4×4×4=64個分必要
0301300
2007/11/22(木) 14:37:532番目は 0 0 1 ・・・ z=0, y=0, x=1 ってことね
0302デフォルトの名無しさん
2007/11/22(木) 14:40:08×の領域分作らないとダメってことですね。
ありがとうございました。それなら3次元で確保したほうがプログラムでアクセスしやすい(^^;
0303デフォルトの名無しさん
2007/11/23(金) 06:04:38構造体の場合、隙間に気をつけてな。
0304デフォルトの名無しさん
2007/11/24(土) 15:21:170305デフォルトの名無しさん
2007/11/24(土) 15:36:390306デフォルトの名無しさん
2007/11/25(日) 01:02:04わかりやすい手順が書いてあるWEBページないですか?
0307デフォルトの名無しさん
2007/11/25(日) 01:05:200308デフォルトの名無しさん
2007/11/25(日) 03:58:11ttp://www.xmission.com/~nate/glut.htmlのサイトからglut-3.7.6-bin.zipをDLして
glut32.dllを\WINDOWS\system32に入れ、glut32.libを..\cygwin\lib\mingwに入れ
glut.hを..\cygwin\usr\include\mingwに追加してもコンパイル時に
GL/glut.h: No such file or directoryと出てしまいます。
初心者でググってもよくわからなかったのでどなたかレスお願いします。
質問の仕方がおかしかったらすいません。
0309デフォルトの名無しさん
2007/11/25(日) 03:59:28ファイル作ったんですが、コンパイルが通らなくて、設定がおかしいのかな?
と思ってて、探してるんですが。
bashにglut32のコマンドが無いってでるんですよ。
助けて〜
0310デフォルトの名無しさん
2007/11/25(日) 04:26:070311デフォルトの名無しさん
2007/11/25(日) 04:55:54素直にVS入れたらどうよ。
0312デフォルトの名無しさん
2007/11/25(日) 10:22:45なんでfreeglutじゃだめなん?
0313デフォルトの名無しさん
2007/11/25(日) 10:54:56とりあえずglut.hを
..\cygwin\usr\include\mingw\GLに移してみては
0314デフォルトの名無しさん
2007/11/25(日) 14:45:02cygwinは大学で買ったPCにプリセットされてて
講義とかでもそれを使わなければいけないので使ってます。
あとopenGLは大学の講義では扱わないので自分で調べてやってみようと思いました。
>>312さん
freeglutはネットで探しても情報が…と言ってみるけど、知りませんでした。
調べてみます。
>>313さん
GLフォルダが無かったので勝手につくって入れてみたけど変わりませんでした。。
>>310さん
-mno-cygwinオプションつけると
/cygdrive/c/DOCUME~1/ADMINI~1/LOCALS~1/Temp/ccu7vLOg.o:test.c:(.text+0x1c): unde
fined reference to `___glutInitWithExit'
みたいなエラーが大量に表示されてしまうんですけど…いいのでしょうか!?
0315デフォルトの名無しさん
2007/11/25(日) 14:56:150316デフォルトの名無しさん
2007/11/25(日) 15:43:15もう面倒くさいから自分で入れるの諦めてsetup.exeに任せちまえよ
0317デフォルトの名無しさん
2007/11/25(日) 15:44:220318デフォルトの名無しさん
2007/11/25(日) 15:53:06そうですね、もうsetup.exeでインストールし直したほうが早そうですね;
それではインストールしてきます。
0320デフォルトの名無しさん
2007/11/25(日) 20:08:060321デフォルトの名無しさん
2007/11/25(日) 20:19:05スレ違い
0322デフォルトの名無しさん
2007/11/25(日) 20:33:200323デフォルトの名無しさん
2007/11/25(日) 20:45:23makeは、なんですか?って聞かれるんです。
0324デフォルトの名無しさん
2007/11/25(日) 21:03:400325デフォルトの名無しさん
2007/11/25(日) 22:26:37どういう風にしたらいいのですか?
床井先生のところで左クリックはあったのですが、右クリックが見当たらず
助けてください(;;
0326デフォルトの名無しさん
2007/11/25(日) 22:36:10見ていたサンプルにmouse_down[3]というのがあって
それで判別してるようでした。
0327デフォルトの名無しさん
2007/11/25(日) 23:22:45これを透視投影でglOrthoみたいに-10~10等にすることってできますか?
0328デフォルトの名無しさん
2007/11/25(日) 23:25:32glScaled(0.1, 0.1, 1); とか
0329デフォルトの名無しさん
2007/11/26(月) 08:14:58なんにせよ拡大縮小すればいいだろうけど
0330デフォルトの名無しさん
2007/11/26(月) 12:10:00そういう意味ではない?
0331デフォルトの名無しさん
2007/11/26(月) 21:34:10マウスの方向とは逆向きになることは3Dソフトを使っていてなんとなくわかるのですが。
視点といえばgluLookAtですが、どう使ったらいいかいまいちわかりません。
解説しているサイトはありますか?
0332デフォルトの名無しさん
2007/11/26(月) 23:35:33polarviewで検索すると色々出てくるやつあたりが簡単だね。
0334デフォルトの名無しさん
2007/11/27(火) 11:25:40今、2D平面上で、クリックした位置に色を落とすペイントみたいなことを
OPENGLでやっているのですが(下図左)、これを3次元空間内のポリゴンに
マウスでペンツールを動かして、絵を描いていきたいのです(下図右)
ttp://up2.viploader.net/upphp/src/vlphp097567.png
こういったことをする際にどうすればいいのか
参考になるものなどもありましたら教えてください
0335デフォルトの名無しさん
2007/11/27(火) 11:37:090336デフォルトの名無しさん
2007/11/27(火) 12:37:37それで使い良いのが出来れば製品として売れるくらい、色々と難しい問題なんだよなぁ。
とりあえず簡単(ベタ)な実装としては、視点とマウスを通過するレイと、ポリゴンとの交差を
計算して、あとは適当にごにょごにょと。
「交差判定」あたりでぐぐってみたらどうでしょう。
0337デフォルトの名無しさん
2007/11/27(火) 12:48:36レイを放って、バウンディングボックスとの交差判定して
それとポリゴンとの交点を求めれたとして
…
すげぇ難しそうだ
0338デフォルトの名無しさん
2007/11/27(火) 13:51:03関係ないけど任天堂はwiiリモコンでポリゴンに落書きするようなソフト出してくんないかな
0339デフォルトの名無しさん
2007/11/27(火) 14:46:400340デフォルトの名無しさん
2007/11/27(火) 14:53:270341デフォルトの名無しさん
2007/11/27(火) 15:11:130342デフォルトの名無しさん
2007/11/27(火) 16:01:58交点を求めたら、それをトライアングルの重心座標に変換、
それをさらにテクスチャ座標に変換だな。これで点は打てる。
334みたいに、投影面に平行でなくポリゴンに平行、かつ視点の向きに非依存な
パターンであれば、あとはテクスチャにスタンプを繰り返すだけ。
もし、投影面に平行なパターンを、投影面に平行でないポリゴン(テクスチャ)に
スタンプしたいなら、話は一気に難しくなる。(というより面倒臭くなる)
>>338
それいいね。あったら欲しい。
3Dモデラも、任天堂が作るとえらい分かり易いインターフェースになるんだよな。
64DDのポリゴンスタジオで感動した。
0343デフォルトの名無しさん
2007/11/27(火) 16:57:37・描画に使うテクスチャをfbo等レンダリング可能なテクスチャ(以下rtt)にコピーする
・rttをレンダーターゲットに設定
・頂点シェーダ出力のポジションにuvを、texcoordとか適当なやつにスクリーン座標を入れる
・ピクセルシェーダでtexcoordで持ってきた座標とマウスの座標を適当に比較して線の色を出力
・rttをテクスチャとして使いモデルを描画
・ 超 完 成 !
まあぶっちゃけポリゴンの重なりで破綻するだろとかテクスチャの張り方制限あるだろとかテクスチャ空間で比較すんなと
突っ込み所満載過ぎてこの方法でモデリング補助ツールとか作るのは無理。あくまで遊び用
0344デフォルトの名無しさん
2007/11/27(火) 18:22:28それかデカールでぐぐれ
0345デフォルトの名無しさん
2007/11/27(火) 18:28:120346デフォルトの名無しさん
2007/11/27(火) 18:32:46テクスチャ空間で比較するのは目から鱗
難しくないし面白そうだね
0347デフォルトの名無しさん
2007/11/28(水) 00:23:21・レンダリングするモデルの各頂点に以下のデータを設定
・頂点座標, uv座標, テクスチャID(適当に0.0~1.0にエンコする)
・頂点シェーダ出力のポジションに普通に変換済み頂点座標を、texcoordとか適当なやつにuvとテクスチャIDを入れる
・フラグメントシェーダでRGにuv, B(テクスチャIDの数に応じてAにも)にテクスチャIDを入れる
・今レンダリングしたカラーバッファをメインメモリへ送ってマウスの位置に対応するフラグメントの値をゲッツ!!
・BとかRGの値を見て、対応するテクスチャのピクセルに魂を刻む。
・次はモデルを普通にレンダー。
・ 超 完 成 !
補足するとテクスチャIDってのは複数テクスチャを扱うときに必要なんで、一枚テクスチャならIDいらいないし
ID値をfloatに変換すんなとかOpenGLスレなのにフラグメントシェーダのことをピクセルシェーダと呼ぶなとか云々。
0348デフォルトの名無しさん
2007/11/28(水) 01:07:54これ頭の体操には丁度イイ感じの題材かも〜
0349デフォルトの名無しさん
2007/11/28(水) 01:17:17あらかじめデプスだけレンダリングしておけば、ポリゴンの重なりは処理できるんジャマイカ?
(シャドウマップみたいな感じで…)
0350デフォルトの名無しさん
2007/11/28(水) 01:28:35・深度バッファ付レンダラブルテクスチャを作成
・オリジナルテクスチャをそれにコピー
・レンダーターゲットに設定
・深度バッファのみれんだりんg
・深度比較をequalに
・頂点シェ(中略)
・copyteximage2dでオリジナルテクスチャを更新
・レンダーターゲットを戻す
・ 超 完 成 !
>347
nvidiaもglのドキュメントでピクセルシェーダとかジオメトリシェーダとか言ってるから問題無し
0351デフォルトの名無しさん
2007/11/28(水) 01:30:460352デフォルトの名無しさん
2007/11/28(水) 02:11:040353デフォルトの名無しさん
2007/11/29(木) 02:16:36glutいれてVC++2005つかったらこんなエラー出てきたんですけどさっぱりなんで
どなたか解決法教えてくれませんか
0354デフォルトの名無しさん
2007/11/29(木) 03:49:54ExpressだったらWin32SDKを入れる必要がある
0355デフォルトの名無しさん
2007/11/29(木) 23:43:54openglのテクスチャで
image[i][j][0]= image[i][j][1]= image[i][j][2]=0〜255の値
image[i][j][3]=255;
みたいにして、テクスチャに値を入れてるのですが。
このときimageに入ってるのは0〜255の値ですよね。
で、それをシェーダのCOLORセマンティックに入れたりするときは
0〜1の値になります
これは何故なのでしょうか?
テクスチャは0〜255の値で扱ってもOKということですか?
0356デフォルトの名無しさん
2007/11/29(木) 23:48:24そのときimageに入れる値は、glTexImage2D に渡す type 引数の値によって意味が決まる。
たぶん GL_UNSIGNED_BYTE を指定してるんだろうが、その場合に限り 0〜255 だ。
何をどう指定された場合でもシェーダでは統一して 0〜1 で扱う。
0357デフォルトの名無しさん
2007/11/29(木) 23:54:52ということは image[i][j][0] を printfなんかした場合は
0〜255が出てくるのですね。ありがとうございました。謎が一つ解けました。
あと、もう一つ質問なのですが
テクスチャアニメのようなことをしたくて。
imageに格納したRGB値をヒントに時間刻みでテクスチャをアニメさせたいのです
シェーダー側ではシェーダーを使えばいいと思うのですが
CPU側で計算
テクスチャのRGB値更新
再びglteximageということは出来るのでしょうか?
というのも、やりたいのが2Dテクスチャじゃなくて、3Dテクスチャで
3DテクスチャをGPU側で扱うのがひどく大変なので。
3DテクスチャをCPU側で更新
glteximage3dでGPU側のテクスチャ更新
アニメーション。ということは可能でしょうか
0358デフォルトの名無しさん
2007/11/30(金) 00:24:39glTexImage?D でテクスチャを更新するのはもちろん可能
だけど更新の場合は glTexSubImage?D の方が軽いかもしんない
まぁ使い分けるのが面倒かったらどっちでも
0359デフォルトの名無しさん
2007/11/30(金) 08:47:14今から研究室行って試してみます。
今週中に完成させるぞー。。。安定剤を飲む生活はもういやだ
0360デフォルトの名無しさん
2007/11/30(金) 17:36:51「開発環境には Visual C++ 6.0 を想定しています.
windows用のバイナリ (glut-3.7.x-bin.zip) を展開した後, 各ファイルを以下のように「手で」配置してください.
glut.h をコンパイラのヘッダファイルのパス (C:\Program Files\DevStudio\Vc\include\GL )に貼り付ける」
とあるのですが、自分はvisual C++ Express Editionを使っていて、
C:\Program Files\DevStudio\Vc\include\GLのIncldeの中にGLというのが見当たらないのですが、どこに貼り付けたら
いいんでしょうか。(C:\Program Files\Microsoft Visual Studio 8\VC\includeのファイルの中にGL以外にはたくさんファイルがあったのですが)
初心者ですいません。
参考にしたサイトは、↓の、2.GLUT をインストールする のところです
ttp://www.wakayama-u.ac.jp/~tokoi/opengl/libglut.html#2
0361デフォルトの名無しさん
2007/11/30(金) 17:39:070362デフォルトの名無しさん
2007/11/30(金) 18:15:10小文字ですがglがありました!
やってみます〜。多分これだと思うので・・
ありがとうございました
0363デフォルトの名無しさん
2007/11/30(金) 18:55:45のテクスチャを使って深度バッファーをやろうとしているのですが
(深度を色分けしてあります)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
をコメントアウトすると表示されるのですが、テクスチャが常駐されず
これを入れると表示されなくなるのですが、テクスチャが常駐されます。
GLboolean blState = GL_TRUE;
glAreTexturesResident(1 , &texName , &blState);
printf("テクスチャは常駐%s\n" ,
blState == GL_TRUE ? "しています" : "していません");
原因がまったくわからず、行き詰まっています。よろしくお願いします
0364デフォルトの名無しさん
2007/11/30(金) 18:58:470365デフォルトの名無しさん
2007/11/30(金) 19:03:27常駐できてないとアウトなのです…
昨日ためしに組んだときは表示も常駐もできてたのに
なぜか…今日は
しかも昨日のソースが消えてしまい…鬱すぎです
0366デフォルトの名無しさん
2007/11/30(金) 19:46:34PFNGLMULTITEXCOORD3FARBPROC glMultiTexCoord3fARB =
(PFNGLMULTITEXCOORD3FARBPROC)wglGetProcAddress("glMultiTexCoord3fARB");
を使っていて、これが原因でした。
これをコメントアウトして、glutCreateWindowより前でテクスチャの設定をすると常駐され表示されました…
ただ、これだとGPUでTEXCOORDが認識されず、扱えません…
解決策などありますでしょうか
0367デフォルトの名無しさん
2007/11/30(金) 21:34:04常駐状態は気にしなくていいんだって
常駐してなくても必要あれば勝手にVRAMに入るから
なので最初の状態が正解
0368デフォルトの名無しさん
2007/11/30(金) 21:37:01glPrioritizeTexturesなんてのもある
使って意味あるかどうかは知らないが
0369デフォルトの名無しさん
2007/11/30(金) 21:43:37もう一枚にはただ色づけしたものを描画しているのですが、
テクスチャマップした板に色づけした板の色が混ざって
描画されるのはなぜですか?
はじめに描画されるときはうまくいくのですが、視点を変えたりなど
再描画すると上記の現象が起こってしまいます。
0370デフォルトの名無しさん
2007/11/30(金) 21:50:42色を使い終わったあと白に戻してない
明示的に戻さない限り、設定したものは以後ずーっと有効
0371デフォルトの名無しさん
2007/11/30(金) 21:51:04テクスチャマップの方にはglMaterialを指定してない。
と予想。
0372デフォルトの名無しさん
2007/11/30(金) 21:51:380373デフォルトの名無しさん
2007/11/30(金) 21:56:12デフォルトではテクスチャ貼っても頂点色と混ぜられる
色を指定したポリゴンを描いた後にテクスチャ貼ったポリゴンを色指定せずに描くから前のポリゴンの色が適用されてるんだ
テクスチャ貼る方は色を白に設定しておくか、glTexEnviでGL_TEXTURE_ENV_MODEをGL_DECALかGL_REPLACEにするといい
0374デフォルトの名無しさん
2007/11/30(金) 21:56:59このスレどんだけ人いるんだよ
0375デフォルトの名無しさん
2007/12/01(土) 11:22:060376デフォルトの名無しさん
2007/12/01(土) 16:19:35GL_POSITIONを使って原点から全方向に向かって光を出しています。
この場合、原点から光を出しているので太陽が薄っぺらくなってしまいます。
原点から光を出しつつ、太陽も立体的に見せるにはどうしたらいいでしょうか?
0377デフォルトの名無しさん
2007/12/01(土) 16:27:570378デフォルトの名無しさん
2007/12/01(土) 18:36:200379デフォルトの名無しさん
2007/12/01(土) 20:18:59ですが、どう設定したらよいのか分かりません。どなたか力を貸していただけないでしょうか?
glLineStipple_color(GLubyte *color0, GLubyte *color1, GLint factor, GLushort pattern)
{
~~~~~~~~~
}
0380デフォルトの名無しさん
2007/12/01(土) 20:24:56なんて関数はじめて見た。ぐぐっても出てこないが本当にあるの?
0381デフォルトの名無しさん
2007/12/01(土) 20:25:56テクスチャを使う
0382デフォルトの名無しさん
2007/12/01(土) 20:26:27color1, pattern^0xFFFF を設定して描画
0383380
2007/12/01(土) 20:29:420384デフォルトの名無しさん
2007/12/01(土) 20:33:09glEnable(GL_LINE_STIPPLE);
glColor4ubv(color0);
glLineStipple(factor,pattern^0xFFFF);
線の描画
glColor4ubv(color1);
glLineStipple(factor,pattern);
線の描画
描画を2回呼ばないといけないので、>>379のような関数の形では無理
0385デフォルトの名無しさん
2007/12/01(土) 21:31:53ありがとうございます。できました。
0386369
2007/12/02(日) 03:32:320387デフォルトの名無しさん
2007/12/02(日) 16:46:26だんだん縮小していくとカクカクになっちゃうんですが、
これはこういうもんなんですか?
0388デフォルトの名無しさん
2007/12/02(日) 17:38:320389デフォルトの名無しさん
2007/12/02(日) 18:19:53縦横の幅が大体20〜100ドットあたりの大きさで描画すると
なんかカクカクが顕著に見えます。
GL_POLYGONとかで多めの多角形作ったほうが綺麗っぽいっす。
とりあえずコード書いてみます。
たぶんどっかの大学の資料をグーグルで見つけてきて元にしてます。
#define ROUTETWO 1.4142135623730950488016887
GLUnurbsObj *theNurb;
System::Void Circle(float x)
{
GLfloat knotvec[] = {0.0, 0.0, 0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, 4.0};
GLfloat cpoint[9][4]={
{ 0.0, -x, 0.0, 1.0},
{-x/ROUTETWO, -x/ROUTETWO, 0.0, 1.0/ROUTETWO},
{ -x, 0.0, 0.0, 1.0},
{-x/ROUTETWO, x/ROUTETWO, 0.0, 1.0/ROUTETWO},
{0.0, x, 0.0, 1.0},
{x/ROUTETWO, x/ROUTETWO, 0.0, 1.0/ROUTETWO},
{x, 0.0, 0.0, 1.0},
{x/ROUTETWO, -x/ROUTETWO, 0.0, 1.0/ROUTETWO},
{0.0, -x, 0.0, 1.0}};
theNurb = gluNewNurbsRenderer();
gluBeginCurve(theNurb);
gluNurbsCurve(theNurb,12,knotvec,4,&cpoint[0][0],3,GL_MAP1_VERTEX_4);
gluEndCurve(theNurb);
gluDeleteNurbsRenderer(theNurb);
}
0390デフォルトの名無しさん
2007/12/03(月) 21:44:050391デフォルトの名無しさん
2007/12/04(火) 01:02:04ポリゴン上に描写されている、テクスチャにアクセスするのってどうやればいいでしょうか
gluUnProjectで実装しようとしているのですが
GLdouble model[16], proj[16];
GLint view[4];
GLfloat z;
GLdouble ox, oy, oz;
glGetDoublev(GL_MODELVIEW_MATRIX, model);
glGetDoublev(GL_PROJECTION_MATRIX, proj);
glGetIntegerv(GL_VIEWPORT, view);
glReadPixels(x, wh - y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &z);
gluUnProject(x, wh - y, z, model, proj, view, &ox, &oy, &oz);
これで、ox oy ozのワールド座標の3次元位置が出せても
その後で詰ってしまいました
すみません、どういう関数使うかも検討つかず
お願いします。。。・゚・(ノω;)・゚・
0392デフォルトの名無しさん
2007/12/04(火) 01:04:17欲しいのはポリゴン上に描写されている、1Pixelのテクスチャ座標の位置です。
クリック点から、ポリゴン上までラインを引いて
そこにあるテクスチャの色を赤くする、ということをしたいのです。
0393デフォルトの名無しさん
2007/12/04(火) 02:04:050394デフォルトの名無しさん
2007/12/04(火) 02:09:49そこまで行けば、あと一息な気がしますが。
テクスチャ座標と大きさ、テクスチャ張ってるポリゴンの座標値から求められません?
ポリゴンが複雑なのかな?
少し前に関連したレスがあったような希ガス。
0395デフォルトの名無しさん
2007/12/04(火) 02:16:14ポリゴンの点から、どうやってテクスチャ座標にするのか
そこがまったくわからなくて
あと、ポリゴンの中でテクスチャが繰り返しで動いてたりしたらどうするのかとか…
考えすぎて気持ち悪くなってきました
0396デフォルトの名無しさん
2007/12/04(火) 02:25:39テクスチャをいろいろ加工したいんだったら、繰り返しは考えない方がいいと思うぞ。
俺も気持ちが悪くなったw
0397デフォルトの名無しさん
2007/12/05(水) 01:09:38上〜の方でも同じ話してるけど・・・
これはOpenGLの問題ではないし、どういう関数を使うとかいう問題でもないよ。
単純に幾何の問題。
まず交点だけじゃなく、どのトライアングルと交差したのかを求めないといけない。
それが求まったら、交点のトライアングルにおける重心座標に変換する。
(barycentric coordinate でぐぐれば何か出てくるかも)
重心座標まで出れば、あとは自ずと解決するでしょう。
0398デフォルトの名無しさん
2007/12/05(水) 23:03:34glEnable(GL_POLYGON_SMOOTH)
としてアンチエイリアスを有効にした後、
glDisable(GL_POLYGON_SMOOTH)
としてもなぜかアンチエイリアスが無効になりません。
他に特別なことはしていない(四角を書いてテクスチャを張るのみ。
glHintやglBlendFuncも未使用)ので何が原因だかさっぱりです orz
これって一回有効にすると無効にならないのでしょうか?
0399デフォルトの名無しさん
2007/12/05(水) 23:15:02んなわきゃーない
disableすれば無効になるよ
0400デフォルトの名無しさん
2007/12/05(水) 23:21:15ですよね。でも出てくる絵を見るとどう考えてもアンチエイリアスが…
glDisable(GL_POLYGON_SMOOTH)ってglFlushの後でも別に問題はありませんよね?
0401デフォルトの名無しさん
2007/12/05(水) 23:45:55それ以降に描画するポリゴンのPOLYGON_SMOOTHが無効になる
・・・まさか、
glEnable/glDisableするだけで、描画済みの絵のアンチエイリアシングが
有効になったり無効になったりするだなんて、思ってないよね?????????
0403デフォルトの名無しさん
2007/12/06(木) 00:08:39本来無効になってくれるものが無効にならないとしたらこっちが
なにか変な事してるとしか考えられませんよね… うーん orz
ちなみに、glEnable()、glDisable()するたびに描画し直してる(VS上で
動いてるのを確認済み)のでそれはないです >描画済みの絵
0404デフォルトの名無しさん
2007/12/06(木) 00:14:41追記:glClear(GL_COLOR_BUFFER_BIT)もちゃんとやってます
0405デフォルトの名無しさん
2007/12/06(木) 00:14:50テクスチャのバイリニアフィルタとアンチエイリアスは違うよ
0406デフォルトの名無しさん
2007/12/06(木) 00:16:45ちなみにglFlushの後でglDisable(GL_POLYGON_SMOOTH)するのってなんで??
あとはソースあれば話はやいんだけど
0407デフォルトの名無しさん
2007/12/06(木) 00:29:43アンチエイリアスを掛けたいのは四角形のポリゴンの方で、テクスチャ
ではないです。
>>406
glDisable()するのは複数回連続で描画するのですが、描画のたびに
条件が変わる(アンチエイリアスを掛ける・掛けない、ライトの位置の変更等)ので、
全てにアンチエイリアスを掛けるのならばglDisable()しなくても良いのですが、
そういうわけにも行かないので…
0408デフォルトの名無しさん
2007/12/06(木) 00:36:50ポリゴンのアンチエイリアシングをenable/disableしたいなら、
そのポリゴンを描画する直前にglEnable/glDisableすればいいのに
なんでglFlushの後でやるのかなと
0409デフォルトの名無しさん
2007/12/06(木) 00:49:10描画の流れとして
設定
↓
描画
↓
設定
↓
描画
↓
…
という感じなのですが、ライトや回転・平行移動等がglBeginの前にあるので
そこでglEnable()、glDisable()するようにしているのですが、二回目以降アンチエイリアス
を掛けない場合はglFlush()の後にglDisable()することになるので、これがだめなのかなーとか
思ったのですがそうではないみたいですし…
0410デフォルトの名無しさん
2007/12/06(木) 00:50:460411デフォルトの名無しさん
2007/12/06(木) 01:01:12マジっすか orz
0412デフォルトの名無しさん
2007/12/06(木) 03:08:010413デフォルトの名無しさん
2007/12/06(木) 04:13:45これはDirect3Dも同じ
0414デフォルトの名無しさん
2007/12/06(木) 09:13:150415デフォルトの名無しさん
2007/12/06(木) 12:17:150416デフォルトの名無しさん
2007/12/06(木) 19:32:53参照渡し・参照渡しでダメかな?
0417デフォルトの名無しさん
2007/12/06(木) 21:08:42そもそもdisplayfuncに引数が無いから
0418414
2007/12/07(金) 10:40:170419デフォルトの名無しさん
2007/12/07(金) 14:19:52断面用planeの輪郭線描こうと思って色をつけたら(glcolor3f(1.0,0.0,0.0))
全部の物体が赤くなりました
助けてください!
0420デフォルトの名無しさん
2007/12/07(金) 14:26:240421デフォルトの名無しさん
2007/12/07(金) 14:54:00できました!!!!ありがとうございます!!!
なんでこんなこと知ってるんですか!!!
0422デフォルトの名無しさん
2007/12/07(金) 15:14:540423デフォルトの名無しさん
2007/12/07(金) 15:28:250424デフォルトの名無しさん
2007/12/07(金) 19:34:21この流れワロタ
50くらい上のレス読めよw
0425デフォルトの名無しさん
2007/12/08(土) 00:08:15ttp://up2.viploader.net/upphp/src/vlphp102691.png
ボリュームレンダリングで床井先生のところの断面処理をやろうとして
立方体の中に、球体が入っていて中がくりぬかれている様子を描きたいのですが
断面表示させたときに○がくり抜きされません。
クロスポリゴンにテクスチャマップさせてVRさせてるのですが
そのせいなのかとも…
0426デフォルトの名無しさん
2007/12/08(土) 00:34:250427デフォルトの名無しさん
2007/12/08(土) 00:44:03どういう感じにやっていくのですか?
0428デフォルトの名無しさん
2007/12/08(土) 00:52:43そもそもステンシルバッファがどういう働きをするのか理解してる?
0429デフォルトの名無しさん
2007/12/08(土) 00:58:18ありがとうございます。試してみます。
大まかに、こういうものというのは文字で読んだのですが
いまいちイメージが出来ていません。
FBOとかもよくわかっておらずです
0430デフォルトの名無しさん
2007/12/08(土) 15:50:04色々試していたのですが、どうも上手くいきません
glReadPixels(0.0, 0.0, width , height , GL_STENCIL_INDEX , GL_UNSIGNED_BYTE , bits);
glDrawPixels(width , height , GL_LUMINANCE , GL_UNSIGNED_BYTE , bits);
で、ステンシルの状況を見たのですが、まったくマスクがされてない感じです。
ポリゴンを積み重ねるせいでうまくいっていないのかもしれません
丸い形状のマスクを作って、そこに描画しない=くり貫くということをしたいのですが
もう少しヒントいただけませんか
0431デフォルトの名無しさん
2007/12/08(土) 18:14:41マスクされる方を描いた時のStencilOpとStencilFuncの設定はどうなってる?
基本的には
マスクを描いてStencilバッファの値を適当に設定
glStencilFunc(GL_ALWAYS, 1, 0xFFFFFFFF);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
//ここでマスク描画
マスクされる方はStencilの値が設定されてないところだけに描く
glStencilFunc(GL_NOTEQUAL, 1, 0xFFFFFFFF);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
//ここでマスクされる方を描画
適当だけどこんな感じでいいと思う
0432デフォルトの名無しさん
2007/12/09(日) 13:09:15床井先生のコードではどういう風にステンシルバッファが動いてるのか、を確認して、比較してみればいいと思う
0433デフォルトの名無しさん
2007/12/09(日) 14:38:41ttp://ccfa.info/cgi-bin/up/src/up11672.txt
レスありがとうございます。
なんとか近いところまで行きました
ただ、あと少しというところで
球面が裏側からも見える
断面の球体が塗りつぶされている
という状況です
下はソースのマスク部分です。
見ていただけますとほんと助かります。
0434デフォルトの名無しさん
2007/12/10(月) 04:43:47vipがうざいとかそういうんじゃなくて、とにかくYAMETE
0435デフォルトの名無しさん
2007/12/10(月) 12:11:50>ただ、あと少しというところで
>球面が裏側からも見える
まさか半透明で描画してないでしょうね?
0436デフォルトの名無しさん
2007/12/10(月) 19:00:08理由がよくわかりませんが、すみません。
>>435
そう思い、解除したのですが
>断面の球体が塗りつぶされている
こちらが改善されて、球面は見えたままでした。
マスクを見てみると、常に○が描画されるようになっていて
モノに隠れたときに、消えるようにしないとダメみたいです
0437デフォルトの名無しさん
2007/12/11(火) 22:24:54スクリーンセーバーの製作途中です
http://nullpo.vip2ch.com/upload.cgi?mode=dl&file=13841
DLkey:OpenGL
にUpしましたが、テクスチャにしたい画像をリソースに格納し
それを読み込んでBITMAPクラスにしましたが、それをテクスチャに
するのにイメージ配列にしないとならんとわかりましたがその形式がわかりません
int *tex
tex[0]=R1;tex[1]=G1;tex[2]=B1;tex[3]=R2;tex[4]=G2;
のようにRGBの順で格納していけばいいだけでしょうか?
0438デフォルトの名無しさん
2007/12/11(火) 23:56:01glteximage2dで貼り付けたらいいと思うよ!!!
opengl テクスチャで検索して出てくるところを参考に
0439デフォルトの名無しさん
2007/12/13(木) 18:57:05ttp://www.vippers.org/img/uho1518.png
○をボックスの右の方にずらしてくり貫かれると思ってやっているのですが
まったく…
○そのものをマスクにすると、くり貫かれるのではなく、その中が描画されません。
どなたか、助言いただけませんか。周りにやってるのがまったくいなくて八方ふさがりです
0440デフォルトの名無しさん
2007/12/13(木) 19:58:54http://marina.sys.wakayama-u.ac.jp/~tokoi/?date=20060623
のキャッピングのプログラム
http://www.wakayama-u.ac.jp/~tokoi/opengl/cap.c
にある
/* 図形が「閉じた立体」(かつ glCullFace() を使わない)な
ら、画素のステンシルバッファへの書き込み回数は偶数回に
なる。ところが、クリップされて物体に穴が開いてしまうと、
その部分(そこからは裏側の面が見える)に対する書き込み
回数は奇数回になる。したがって、ステンシルバッファの書
き込みが行われる度にステンシルバッファのビットを反転す
れば、奇数回書き込みが行われた部分、すなわち穴の部分の
画素のステンシルバッファだけ値がセットされることになる。*/
読んだ?
0441デフォルトの名無しさん
2007/12/13(木) 20:03:09ポリゴンを積み重ねている関係で、おかしくなるのと
右の方の丸が、立方体の外・中の状態で片方が見えるという状況になります。
やりたいのは任意形状のクリッピングなので、マスクで全部潰れてしまうとまずいので…
0442デフォルトの名無しさん
2007/12/13(木) 20:22:080443デフォルトの名無しさん
2007/12/13(木) 20:31:28ちゃんと閉じた物体になってる?
偶数回描画された部分をステンシルでマスクするんだよ?
なんか根本的なところが違う気がするんだが。
何をしようとしているかもう少しわかりやすく書いてくれると、
良い助言ができるかも知れません。
0444デフォルトの名無しさん
2007/12/13(木) 20:35:25glVertex3fとかで渡した値そのまんま
座標系で言うならたいていはモデル座標系だね
0445デフォルトの名無しさん
2007/12/13(木) 20:47:47ttp://kotaro.naist.jp/~meg/research/LiveVolume/
ここのティーポットのようなことです。
直方体が積み重なって、立体をあらわしているので閉じてはいません。
そこに○で削り取るといったことがしたいのです。
≡≡
≡≡
こう積み重なったポリゴンを○で削り取るイメージです
0446デフォルトの名無しさん
2007/12/13(木) 20:53:000447デフォルトの名無しさん
2007/12/13(木) 20:56:210448デフォルトの名無しさん
2007/12/13(木) 21:39:38ステンシルでふたをするのとは、話がぜんぜん違う。
積み重なったポリゴンをどうやって描画してるの?
まさか、立方体をひたすら描いてる?
その場合、球体でクリッピングなんてそんな簡単な話じゃないぞ。
0449デフォルトの名無しさん
2007/12/13(木) 21:48:39for(float i=-1.0;i<=1.0;i+=0.025){
glBegin(GL_POLYGON);
glTexCoord3f( 0, i, 0); glVertex3f( -1.0, i,-1.0);
glTexCoord3f( 1, i, 0); glVertex3f( 1.0, i,-1.0);
glTexCoord3f( 1, i, 1); glVertex3f( 1.0, i, 1.0);
glTexCoord3f( 0, i, 1); glVertex3f( -1.0, i, 1.0);
glEnd();
}
これでポリゴンを大量に描いています。いわゆるボリュームレンダリングで
clipplaneで出来たので出来るものだと思ってやっていたのです
0450デフォルトの名無しさん
2007/12/13(木) 21:56:57それを球で削り取るの?
無理。
発想を変えたまえ。
0451デフォルトの名無しさん
2007/12/13(木) 22:07:11glclipplaneの構造はどこかで見れるでしょうか
0452デフォルトの名無しさん
2007/12/15(土) 19:49:50デプステストを遠方優先にし、デプスバッファを手前側で初期化
カラーバッファの書き込みを禁止(デプスバッファだけを有効)にして球を描画
カラーバッファの書き込みを許可、デプスバッファの書き込みを禁止
ポリゴンを描画
(削り残し)
デプステストを手前優先にし、デプスバッファを遠方側で初期化(一般的な設定)
カラーバッファの書き込みを禁止(デプスバッファだけを有効)にして球を描画
カラーバッファの書き込みを許可
ポリゴンを描画
で、どうかな?
0453デフォルトの名無しさん
2007/12/16(日) 18:02:19なんて考えた俺はシェーダ脳
0454デフォルトの名無しさん
2007/12/24(月) 16:06:56たくさんある物体から、マウスで1個クリックして
マウスの動く方向にピッキングして動かす
ということをしたいのですが
参考になるソースとか教えてくあさい
0455デフォルトの名無しさん
2007/12/24(月) 16:22:16射影変換の設定の時にニアクリップとファークリップを設定したくないのですが(どこに
ポリゴンがあってもZ軸でクリッピングしたくない)、どのようにしたら出来るでしょうか?
glFrustumではどちらも自然数でなくてはだめみたいですし…
0456デフォルトの名無しさん
2007/12/24(月) 20:36:14void 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);
}
0457デフォルトの名無しさん
2007/12/24(月) 20:37:48キーボードを押したときにティーポットが回転するプログラムを書いたんです
が、キーを押しても回転しません。理由を教えてください。
0458デフォルトの名無しさん
2007/12/24(月) 20:43:49マルチはよしんさい
0459デフォルトの名無しさん
2007/12/25(火) 01:17:25それは向こうのスレのレス番だ。
>>454
glRenderMode(GL_SELECT)
gluPickMatrix
このへんでぐぐれ。
>>455
near と far を設定しなかったら透視投影にならないだろ。
0460デフォルトの名無しさん
2007/12/25(火) 03:12:02射影変換行列そのものにはnear/farなんてパラメータは出てこないのだから、
透視投影にはなるだろう。
0461デフォルトの名無しさん
2007/12/25(火) 03:43:59near/farを設定しないで描画することはできないよ。
(正確にはちょっと違うっていうかまぁ>>460さんの言う通りなんだけど
多分>>455さんにとってはどうでもいい細かい話だろうし、行列をどう解釈するか
という問題でもあるので、near/farは必要と思っていても間違いではないでしょう。)
どうしてもクリッピングしたくないなら、レイトレでもやるしかないんじゃないかなぁ。
0462デフォルトの名無しさん
2007/12/25(火) 14:34:130463デフォルトの名無しさん
2007/12/25(火) 22:36:430464デフォルトの名無しさん
2007/12/26(水) 22:06:21ftp://ftp.sgi.com/opengl/doc/
ここにあるのがそうかもしれない
でも古いからHTMLで良ければこっちを見た方が良い
http://www.opengl.org/sdk/docs/man/
0465デフォルトの名無しさん
2007/12/27(木) 00:11:270.5の位置にあるものを、X方向に+0.5移動して
1の位置にあるテクスチャをサンプリングしたいのですが
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glEnable(GL_TEXTURE_GEN_R);
glPushMatrix();
glMatrixMode(GL_MODELVIEW);
glTranslated(0.5,0,0);
glutSolidCube(1.0);
glPopMatrix();
で、物体を移動したらサンプリングしてくれると思ったのですが
0.5の位置のテクスチャをサンプリングして、X方向に0.5移動しました
どうすれば1の位置でサンプリングしてくれますか
0466デフォルトの名無しさん
2007/12/27(木) 12:39:23生成されるテクスチャ座標は変わりませんよ。(→GL_EYE_LINEARとかじゃないと)
それよりテクスチャ行列いじった方が早いのでは?(→glMatrixMode & GL_TEXTURE)
0467デフォルトの名無しさん
2007/12/29(土) 16:53:28変な方がヘンデカヘドロン
0468デフォルトの名無しさん
2007/12/29(土) 19:31:470469デフォルトの名無しさん
2007/12/29(土) 23:23:31ttp://uproda11.2ch-library.com/src/1155021.jpg.shtml
32x32矩形と34x34矩形を転送した結果、ピクセル配列はコンソールに書いてみて正常
512x512 のアルファテクスチャを板ポリに貼り付けてます
転送先のテクスチャフォーマットは glTexSubImage2D 同様 ALPHA/UBYTE
SubImage2Dでも2の累乗以外の矩形転送はドライバ依存ですか?(GF7600GTです)
0470デフォルトの名無しさん
2007/12/29(土) 23:25:02画像のテキスト間違ってしまった・・・下は34x34のglTexSubImage2Dの結果です
0471デフォルトの名無しさん
2007/12/30(日) 00:17:09見れないのでよくわからないが
GL_TEXTURE_MAG_FILTERとかGL_TEXTURE_MIN_FILTERが
GL_LINEARになってるとちょっと端がぼけたりするよ
全然違ってたらすまん
0472デフォルトの名無しさん
2007/12/30(日) 02:23:20glTexSubImage2Dに渡した引数を見せてくれないとわからんがな。
まぁ32x32で渡してしまっただけな気がするが。
1,1 1,2 1,3 ・・・ 1,32
1,33 1,34 2,1 ・・・ 2,30
見た感じこんなじゃね?傾きが1/2っぽいし1行で2列ずれるのと符合する。
0473デフォルトの名無しさん
2007/12/30(日) 02:24:07俺もよくそれやるよl。
0474デフォルトの名無しさん
2007/12/31(月) 17:55:55�@FBOテクスチャに適当に描画。
�A上のレンダリングテクスチャに、上のレンダリングテクスチャを別のオブジェクトに貼って描画。
としう事をしたいのですが、�Aを行う際、�@で作ったテクスチャを別のテクスチャにコピーする必要があると思います。
その、テクスチャを別のテクスチャにコピーをしたいのですがどのようにすればいいのでしょうか?
できれば、高速な方法が良いです。宜しくお願いします。
0475474
2007/12/31(月) 18:39:120476デフォルトの名無しさん
2007/12/31(月) 19:47:07glPixelStorei()のGL_UNPACK_ALIGNMENTを確認
0477デフォルトの名無しさん
2008/01/01(火) 20:49:53質問です
マウスで物体をドラッグして動かしたいのですが
とりあえずマウスの移動量で物体を動かそうと思って組んでるのですが
この状態だと常に移動開始点が0になってしまいます。
物体の現在地点から動かすためにはどうすればいいのでしょうか
それと、視点を回転したときに
どうやってマウスの動きと物体をあわせればいいかを、お願いします。
マウスドラッグ・移動関係の参考になるところがまったくなくて…
0478デフォルトの名無しさん
2008/01/02(水) 13:04:12物体の位置を覚えておく変数を追加したらいいんじゃね。
static int xPos;
void drug(int x, int y)
{
//以下を追加
xPos += dst_x;
}
void display(void)
{
//以下に変更
glTranslatedxPos, , );
}
y,zも同様に。
0479デフォルトの名無しさん
2008/01/02(水) 14:39:04移動量がマウス座標だと200とか400なので
それを随時加算していくと、びゅーんと吹っ飛んでしまいます
0.001とかを掛けて移動しても、移動量が大きくなると吹っ飛んでしまって
なんでマウスドラッグで移動はサンプルどこにもないのだろう
0480デフォルトの名無しさん
2008/01/02(水) 20:33:45そういうときは、
マウスの移動した差分を加算するか、
最初の座標と最初のマウス座標を記録しておいて、その時との差分と最初の座標をを加算するの
0481デフォルトの名無しさん
2008/01/02(水) 23:45:11始めのポイントを記憶
マウスがUPの時に移動分を算出 translateすると
ドラッグ中のが表示されなくて。
0482デフォルトの名無しさん
2008/01/03(木) 01:14:51アニメーションさせるわけじゃないからこのプログラムの場合glutIdleFuncは使わなくていい。
ドラッグ中は必ず画面を最描写するんだからそこからglutPostRedisplayを呼べばいい。
state == GLUT_UPのときも同様。
0483デフォルトの名無しさん
2008/01/03(木) 11:01:08とりあえず>>477のプログラムに
マウス押した時に現在のキューブの位置を覚えておいて(外部変数x1,y1追加)
case GLUT_DOWN:
x1 = dst_x; y1 = dst_z;
printf("down");
drug()はそれを元に動かせば
dst_x = x-x0+x1;
dst_z = y-y0+y1;
お望みの結果に。
あとカメラ位置によってどう動かすのか、マウスの上下はZなのかYなのかは自分で好きなように計算すればいい
0484デフォルトの名無しさん
2008/01/03(木) 13:35:21ありがとうございます。ほんとにありがとうございます。
自分の頭の悪さに泣けてきました
ほんとありがとうございます
0485デフォルトの名無しさん
2008/01/03(木) 16:44:00glNormal3f( 0.0f, -1.0f, 0.0f);
glBegin( GL_QUADS );
glVertex3f( -10.0f, 0.0f, -10.0f );
glVertex3f( 10.0f, 0.0f, -10.0f );
glVertex3f( 10.0f, 0.0f, 10.0f );
glVertex3f( -10.0f, 0.0f, 10.0f );
glEnd( );
このようにして面を書きたかったのですが
描画されてほしい面が描画されず、片面しか描画されません
(回転させると裏側は光を反射してました)
両面描いたり、反対側を描画するといった設定にはできないのでしょうか
0486デフォルトの名無しさん
2008/01/03(木) 17:19:45glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, sphereColor);
0487デフォルトの名無しさん
2008/01/03(木) 20:44:19ありがとうございます
教えてもらった情報ではできませんでしたが座標を変えてたらできました
どうやらxyz座標軸の認識を間違えていたみたいです
すいません
0488デフォルトの名無しさん
2008/01/04(金) 15:55:00glCullfaceとか弄くってみて
0489デフォルトの名無しさん
2008/01/09(水) 03:28:12for(i = 0; i < iDivision * iDivision; i++)
{
glViewport((i % iDivision) * cxClient / iDivision, (i / iDivision) * cyClient / iDivision,
cxClient / iDivision, cyClient / iDivision);
glRotatef(lprquad[i]++, 1.0f, 1.0f, 1.0f); // Rotate The Quad On The X axis ( NEW )
glColor3f((float)rand() / (RAND_MAX + 1), (float)rand() / (RAND_MAX + 1), (float)rand() / (RAND_MAX + 1));
glBegin(GL_LINES); // Draw A Quad
立方体を描画
glEnd(); // Done Drawing The Quad
}
あとに表示される立方体の回転速度が速くなってしまいます。
0490デフォルトの名無しさん
2008/01/09(水) 03:43:29glRotate*()
glBegin();
glVertex*();
glEnd();
glPopMatrix();
こんなかんじ
0491デフォルトの名無しさん
2008/01/09(水) 04:32:560492デフォルトの名無しさん
2008/01/09(水) 06:02:08できました。
だけど、最初の一つが動かなくなったorz
なんでだ
0493デフォルトの名無しさん
2008/01/09(水) 22:19:20なにか参考になりそうなものってありますか?
今のところなにも思いつかないので
double element[4][4];
double i00 = ((elements[1][1] * elements[2][2] * elements[3][3]) +
(elements[1][2] * elements[2][3] * elements[3][1]) +
(elements[1][3] * elements[2][1] * elements[3][2])) -
((elements[3][1] * elements[2][2] * elements[1][3]) +
(elements[3][2] * elements[2][3] * elements[1][1]) +
(elements[1][3] * elements[2][1] * elements[1][2]));
…
とやって余因子を求めつつ、求めたところで行列式を出して判別・逆行列の計算
をしようと思ってるのですが、なんかもっと早くなりそうな気が…
0494デフォルトの名無しさん
2008/01/09(水) 22:20:39double elements[4][4]→○
でした orz
0495デフォルトの名無しさん
2008/01/09(水) 22:52:10床井さんのところにあったような記憶が・・・
0496デフォルトの名無しさん
2008/01/10(木) 00:21:050497デフォルトの名無しさん
2008/01/10(木) 01:27:230498デフォルトの名無しさん
2008/01/10(木) 01:51:23床井さんのところでは、逆行列は使わないで逆変換を出して掛ける方がいいとの
事でしたが、gluLookAtによる視点の移動って逆行列じゃなくても逆変換できる
んですかね?出来るならこの方が早くなりそうですが…
>>496
それは最終手段に取っておきますw
0499デフォルトの名無しさん
2008/01/10(木) 03:35:34逆行列を求める関数
http://aoki2.si.gunma-u.ac.jp/Hanasi/Algo/algorythm.html
0500デフォルトの名無しさん
2008/01/10(木) 07:24:30gluLookAtはglTranslateとglRotateをやってるだけだから逆変換できるのでは。
回転成分(3x3)の転置行列に逆移動(-[12,13,14])を掛ければ求まる
0501デフォルトの名無しさん
2008/01/10(木) 16:03:16なんかループ多くて余因子求めるよりも効率悪そう…
>>500
elements = new double[][] {
new double[] { elements[0][0], elements[1][0], elements[2][0], elements[0][3] },
new double[] { elements[0][1], elements[1][1], elements[2][1], elements[1][3] },
new double[] { elements[0][2], elements[1][2], elements[2][2], elements[2][3] },
new double[] { -elements[3][0], -elements[3][1], -elements[3][2], -elements[3][3] } };
としてみましたが、平行移動の部分が上手く消えずに単位行列にはならなかったです orz
0502500
2008/01/10(木) 16:43:21それ掛けてなくて足してるというか掛けるのが逆。openGLは列と行があれだからほらw
最後の行が
ele[0][0] * (-ele[3][0]) + ele[0][1] * (-ele[3][1]) + ele[0][2] * (-ele[3][2]), ele[1][0]*(........
みたくなる。
(Matrix4型のoperation*()を実装してからやったほうがいいかも)
確認だけしたかったら現在の行列に転置行列、逆移動行列の順にglMultMatrix()すれば確認できるはず。
0503デフォルトの名無しさん
2008/01/10(木) 20:00:08上手くいきました!
…が、誤差の関係で完全には単位行列にならず、1.00000000002や
0.00000000000125といった値になるものもあるのですが、これは閾値を決めて
自分で削っていくしかないですかね?
0504デフォルトの名無しさん
2008/01/10(木) 20:00:43>>501→×
>>502→○
orz
0505デフォルトの名無しさん
2008/01/10(木) 20:18:39その程度の微小な誤差が結果にそれほど影響を与えるとは思えないが
本当に必要なことならまぁ何か考えるのもいいけれど
0506デフォルトの名無しさん
2008/01/10(木) 20:35:11実数値は、=で比較しちゃいかんよ。と言ってみる。
0507デフォルトの名無しさん
2008/01/10(木) 21:48:56なんだか、位置を調整しても消えたり出てきたりとちらちらしてるのが気になったので、
この微少な差でニアクリップやファークリップの外に出てるのかなと。
0508500
2008/01/10(木) 21:52:41丸めてみてまだちらちらするなら誤差のせいだし、そうじゃなきゃ別のとこに問題がある
ビルボードだったらその程度の誤差は問題にならないと思うけどね
0509デフォルトの名無しさん
2008/01/10(木) 23:29:35丸めてみたところ、小数点以下5桁目から削ればほとんどちらつかなくなりました。
長々とお付き合いいただきありがとうございました。
0510デフォルトの名無しさん
2008/01/14(月) 10:56:26子ウィンドウ内でGlutに描画させる事はできますか?
0511デフォルトの名無しさん
2008/01/14(月) 11:37:01MSDNライブラリにサンプルコードがついてたよ。MFCだけどOPENGLのAPI呼んでるだけだったし。
0512デフォルトの名無しさん
2008/01/14(月) 11:50:00glutで描画ってのは具体的にどのglutの関数?
glutDisplayFuncとかが使えるかって意味ならまず無理じゃね
0513デフォルトの名無しさん
2008/01/15(火) 10:14:40このとき立方体の、本来見えない部分というんでしょうか、奥にある辺を
普通の線ではなくて、点線にするなり、色を薄くするなりして表示させたいのですが
どうすればいいでしょうか?
0514デフォルトの名無しさん
2008/01/15(火) 11:13:21奥の辺=共有する面が2枚とも裏を向いてる=視線ベクトルとの内積が負
とかでいいんじゃね。
自分で計算すんのめんどかったらglPolygonModeでLINEにしといてglCullFaceを変えてポリゴンを2回描けばいい
0515デフォルトの名無しさん
2008/01/22(火) 12:23:25そのままだとshaderに渡して処理することはできないので、
あらかじめテクスチャ座標をuvとも半分とかに指定して、
MAXサイズ以内におさえて、shaderに渡すことはできますか?
そもそもこういう考え方はダメなんでしょうか。
0516デフォルトの名無しさん
2008/01/22(火) 12:32:17どういう風に実装しているかは分からんが
0517デフォルトの名無しさん
2008/01/22(火) 16:43:030518515
2008/01/22(火) 18:27:150519デフォルトの名無しさん
2008/01/22(火) 21:19:54これをOPENGLで作りたいです!
どうすればいいですか!
ペンを画面上で描くこと
そこから三次元座標にすること
そのペンと物体との交点の出し方
全部わかりません!おしえてくだしあ!
0520デフォルトの名無しさん
2008/01/22(火) 22:09:10他の方法で出来るならそれでやればいいと思う。
http://www-ui.is.s.u-tokyo.ac.jp/~takeo/papers/siggraph99.pdf
それ以降はこれちゃんと読めばある程度書いてあるよ
読んでもわからない部分があったら改めて質問してくれ
答えられるようなら誰かが答えてくれるかもしれない
0521デフォルトの名無しさん
2008/01/23(水) 14:45:56でも、こういう論文が概念ばかり書かれていて
実装の細部になると、一切書かれていないのでわからないです!
ペンを画面上で描くところは出来ました!
ttp://www.vipper.org/vip722020.jpg
画面とマウス座標を
glOrtho(-0.5, (GLdouble)w - 0.5, (GLdouble)h - 0.5, -0.5, -1.0, 1.0);
で一致させてるので、3次元空間でどうすればいいのかわかりません><
0522デフォルトの名無しさん
2008/01/23(水) 15:14:06なぜその絵なんだw
0523デフォルトの名無しさん
2008/01/23(水) 16:46:440524デフォルトの名無しさん
2008/01/23(水) 21:02:33べつに3次元空間でも同じでいいんじゃね?
Z=0のXY平面に描いたならそれでも立派な3次元だ
次は論文読んでその図形をまず三角ポリゴンにしてみるといい
Figure 13のfの状態にするんだ
0525デフォルトの名無しさん
2008/01/23(水) 21:02:49>>521ですが、
glOrtho(-0.5, (GLdouble)w - 0.5, (GLdouble)h - 0.5, -0.5, -1.0, 1.0);
で画面を固定させると、点が保持されてるのに
画面の中で物体を回転させたりすると、点が全部消えます!
この点が3次元空間に掛かれていたら、全部回転すると思ったのですが
回転しません>< 助けてください!
ためしに、glunprojectで3次元空間に直接点を打ったのですが
1個打って、次のを打ったら消えます
わけわかりません(;;
0526デフォルトの名無しさん
2008/01/23(水) 21:06:37描画する時は今まで描いた点も全部描き直さなきゃならんのは分かってるか?
0527デフォルトの名無しさん
2008/01/23(水) 21:18:07タッチ差でレスありがとうございます><
>その図形をまず三角ポリゴンにしてみるといい
点で描いた図形をポリゴンに、ということですか!splineとかで、難しそうです!
glOrtho(-0.5, (GLdouble)w - 0.5, (GLdouble)h - 0.5, -0.5, -1.0, 1.0);
だとよくわかんないので、
gluPerspective(30.0, (double)w / (double)h, 1.0, 10.0);
で描こうとしてます!でもこれだとXYがマウス座標系で200とか300とかいってしまって
glunprojectで点を打つようにしました!
ttp://www.vipper.org/vip722238.jpg
こんな感じです。
これを回転したら点が全部きえました><
3次元の中で点が動いてくれると思ったのに!
0528デフォルトの名無しさん
2008/01/23(水) 21:19:19初耳でした!
0529デフォルトの名無しさん
2008/01/23(水) 22:56:26分離記号が欠けています。中止
と出ます。どうしたらいいですか?
0530デフォルトの名無しさん
2008/01/24(木) 12:30:570531デフォルトの名無しさん
2008/01/24(木) 13:28:37そうです
http://msdn2.microsoft.com/en-us/library/ms537558(VS.85).aspx
>The wglMakeCurrent function makes a specified OpenGL rendering context
>the calling thread's current rendering context.
0532デフォルトの名無しさん
2008/01/24(木) 15:07:36vineは知らんけどソースからじゃなくて普通にパッケージから入れたらどうよ
0533デフォルトの名無しさん
2008/01/25(金) 17:13:11-(GLdouble)h/240.0, (GLdouble)h/240.0, -1.0, 1.0);
gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
視点を指定して、そこからglorthoで指定した領域を正射影っていうのは
どうやればできるのでしょう?
0534デフォルトの名無しさん
2008/01/25(金) 22:14:25glOrtho(〜);
glMatrixMode(GL_MODELVIEW);
gluLookAt(〜);
こうしたいっていう意味か?
0535デフォルトの名無しさん
2008/01/29(火) 12:47:45glEnable(GL_LIGHTING);で光源からの光をONにすると、立方体が白黒?みたいになっちゃうんですが
理由が分からず困ってます。
光の設定は、
GLfloat fLightAmbient[4] = {0.5f, 0.5f, 0.5f, 1.0f}; //環境光(anbient light)の設定
GLfloat fLightDiffuse[4] = {1.0f, 1.0f, 1.0f, 1.0f}; //拡散光(diffuse light)の設定
GLfloat fLightPosition[4] = {0.0f, 0.0f, 2.0f, 1.0f}; //光源の位置の設定
のようにしたのですが、光にも色をつけないといけないのでしょうか?
0536デフォルトの名無しさん
2008/01/29(火) 17:40:19普通は光は白にしといて、glMaterialで色をつける。
0537デフォルトの名無しさん
2008/01/29(火) 20:34:020538535です
2008/01/29(火) 23:18:04それはすでにやってます。
陰はついてるんですが、色が光の色になってしまうんです
>>536さん
glMaterialって、glMaterialColorとはまた違うんでしょうか?
glBeginの直前においても、変化がないですorz
0539デフォルトの名無しさん
2008/01/30(水) 01:55:47glMaterialColor なんてあったんだ。知らなかった。
素直にglMaterialでやってみてくれ。
0540デフォルトの名無しさん
2008/01/30(水) 01:59:48の間違いだった orz
glMaterialColor て赤本にもないし、ぐぐっても出てこない。どこから持ってきたんだ?
0541デフォルトの名無しさん
2008/01/30(水) 09:59:160542デフォルトの名無しさん
2008/02/10(日) 16:07:17真っ白のイメージを描画しているのに、なぜか黄色で表示されます。しかも半透明で
背景が透けてしまいます。
どんな原因が考えられますでしょうか…OTL
0543542
2008/02/10(日) 18:42:48で半透明になるのは解決しましたが、黄色になる問題が残ったままです。
何か色に関係あるパラメータって何でしょうか?
glColorを試してみたのですが、結果は変わりませんでした。
0544デフォルトの名無しさん
2008/02/10(日) 19:34:470545デフォルトの名無しさん
2008/02/10(日) 19:45:06自分も最初それを疑いましたが、それなら0xffffffffで緑色(よく見たら緑色でした)
になるのはおかしいです…。
0546デフォルトの名無しさん
2008/02/10(日) 20:22:530547デフォルトの名無しさん
2008/02/10(日) 20:25:530548542
2008/02/10(日) 20:28:20直前に張ったテクスチャの色に引っ張られるのを発見したので、
glDisable( TEXTURE_2D );
を挿入したところ、上手くいきました。
ところでTexture関連のパラメータがglDrawPixelsに影響を及ぼすという挙動というのは、
意図されたものなのでしょうか?界隈では常識だったりしますか?
0549デフォルトの名無しさん
2008/02/10(日) 20:42:43glDrawPixels 使うくらいならテクスチャで描画しちゃうからな。同時に使うことがない。
0550デフォルトの名無しさん
2008/02/10(日) 21:26:080551デフォルトの名無しさん
2008/02/10(日) 23:41:57正しい挙動っぽいね。 → http://www.opengl.org/documentation/specs/version1.1/state.pdf
ていうか自分も、こんなん気にしたことないや。気をつけるようにしておこう。
テクスチャをEnableにしっぱなしって、気づかないこと多いよネ・・・。
0552デフォルトの名無しさん
2008/02/11(月) 00:15:14と5年位前に思ったけどもうどうでもいいや
0553デフォルトの名無しさん
2008/02/11(月) 00:16:09ありがとうございます。確認しました。他にもDrawPixels使う上でDisableにしたほうがいい
パラメータがあるようですね。
0554デフォルトの名無しさん
2008/02/11(月) 02:02:450555デフォルトの名無しさん
2008/02/11(月) 04:17:400556デフォルトの名無しさん
2008/02/11(月) 23:30:38この問題は俺もこのあいだそれで嵌まったんだが、
RadeonX1600のMacOS10.5.1ではテクスチャが無視されて、
GF8600GTのWindowsXPマシンでは変に影響するし、
めちゃくちゃ重くなるしでまさかテクスチャが影響するとは思わなかったぜ。
DrawPixelsではいったいどんな座標のテクスチャがサンプリングされるのか
さっぱりわからないし、無視してくれればいいのに。
ちゃんとDisableしとけば問題ないんだけどな。
0557デフォルトの名無しさん
2008/02/12(火) 00:01:55って意味ないか
0558デフォルトの名無しさん
2008/02/12(火) 00:56:340559デフォルトの名無しさん
2008/02/12(火) 09:55:330560デフォルトの名無しさん
2008/02/14(木) 00:17:08glutMainLoop();
}
というふうなプログラムを作ったんだけど、glutMainLoop()の中でexit(0);を実行してループを抜け出すと、
プログラム自体が終了してしまう(for文関係なしに終了する)。
exit(0)だからダメなのか不明。もしかしたらexit(0)以外に何か抜け出す方法ってある?
0561デフォルトの名無しさん
2008/02/14(木) 00:28:19glutMainLoop()は制御をglutに任す関数。抜け出す方法は無いし、その必要も無い。
100回描画するなら、カウントはdisplayFiunc()の中で数えるなどして、glutMainLoopからは抜けないで処理する
0562初心者
2008/02/14(木) 10:30:44これを使って、OpenGLで各距離値に対応した場所に四角の平面を作るといった事がしたいのですが、どのようなプログラミングをくめばいいでしょうか。
まだ、ほとんどOpenGLを使ったことがないので、よく分かりません。
質問が分かりにくいかもしれませんが、何かヒントをいただけるとうれしいです。
よろしくお願いします。
0563デフォルトの名無しさん
2008/02/14(木) 12:35:27253 110 200 90 255 ...
というのが記録してあるということでOK?
で、253なら例えば視点から 253 の距離だけ離れた場所に1つの平面を描き、
110なら例えば視点から 110 の距離だけ離れた場所に1つの平面を描き……、
というのを 500x500 枚描くということでOK?
0564初心者
2008/02/14(木) 13:01:35その通りです!
よろしくお願いします!
0565デフォルトの名無しさん
2008/02/14(木) 16:48:15どこの課題?
画像ファイルから画素値を得るところまでは自分でできるの?
0566デフォルトの名無しさん
2008/02/14(木) 19:25:46早い話こういうのやりたいんでしょ?
三角1個かけるようになれば簡単だと思うので
まずは三角1個かいてるサンプルを探してくるのが先かと。
0567デフォルトの名無しさん
2008/02/14(木) 21:41:24実行ファイルとソース付です。
吉祥 100M 1kichi4918.zip DLKEY:glstudio
0568初心者
2008/02/14(木) 23:16:14ありがとうございます!
インストールさせていただきました。
動かしてみると、
NULL pointer(NULL array pointer is passed)
in function cvGetMat,C:\User\VP\opencv\cxcore\src\cxarray.cpp(2780)
というエラーが出るのですが、これはどうしたらいいんでしょうか。
誰か教えていただけると助かります。
0569初心者
2008/02/14(木) 23:18:40そうなんです。こんな感じのが作れるとうれしいんですが。
三角形を書くのは出来るのですが、距離画像を読み込んで、それぞれの点をどのように読み込み、指定していけばいいかで悩んでいます。
よろしくお願いします。
0570デフォルトの名無しさん
2008/02/14(木) 23:27:37すみません。dllフォルダのOpenCV用のdll(4つあります)をsystem32にコピーすると動くと思います。
0571デフォルトの名無しさん
2008/02/14(木) 23:54:26画像の読み込みができないの?なにに悩んでるの?
0572デフォルトの名無しさん
2008/02/15(金) 02:14:44OpenGLをそこそこ使えるようになれば、ドラえもんを立体表示させてグリグリ動かしたりもできるようになるんでしょうか?
あと赤本ってみなさん読んでるんですか?
0573デフォルトの名無しさん
2008/02/15(金) 03:07:15それにそれを公開するならコピーライツ関連をクリアする交渉能力も必要だな。
0574デフォルトの名無しさん
2008/02/15(金) 07:50:38画像フォーマットぐらい書かないと、おまえの大好きな
そのまま提出できる「答え」は、書いてもらえないよ。
0575デフォルトの名無しさん
2008/02/15(金) 09:55:40BMPだとうれしいです。よろしくお願いします。
0576デフォルトの名無しさん
2008/02/15(金) 11:08:40http://support.microsoft.com/kb/403863/ja
http://www.alpha-net.ne.jp/users2/uk413/vc/VCT_DIB.html
あとスレ違いだよ!
0577デフォルトの名無しさん
2008/02/15(金) 15:22:56そこまでやってるなら、
・座標系と座標軸を画面に表示してみる
・拡張して「地面」を定義して描画してみる
・地面から一定距離にある三角形を1つ表示してみる
・複数にチャレンジ
でいいんじゃないかな
BMPから読み込むのはその後の話。
0578デフォルトの名無しさん
2008/02/15(金) 17:05:09OpenGL で何ができるかもよくわからない段階での質問だよね、たぶん。
可能か不可能かで言えば、可能。
ただ、OpenGL自体は平面を描くような単純な機能しかない。
ので、ドラえもんみたいな複雑な造型を描くには普通は OpenGL 単体ではやらない。
まず Shade とかメタセコイアとかで物体を作っておいて、
それを、ちょうど>>567氏がやってるようにローダを使って、
OpenGLの空間上にその物体を表示、という感じでやる。
表示できればグリグリも動かせる。ただ、腕だけをグリグリ動かすとかは、
また工夫が必要。
0579デフォルトの名無しさん
2008/02/15(金) 21:34:00へーぇ
自分のパソの画面で自由自在に動かせたら素敵だなぁと思う
0580デフォルトの名無しさん
2008/02/16(土) 10:57:10やっぱりそうかー
for文分解してLoopの中に突っ込んだらいけた。
どうもありがとう
0581デフォルトの名無しさん
2008/02/16(土) 21:59:01gluBuild2DMipmapsで、300*300の画像データを渡したところ、突然終了してしまったのですがどうしてでしょうか?
ソースは
glGenTextures(1,&texid);
SDL_Surface *sur=SDL_LoadBMP("test.bmp");
SDL_LockSurface(sur);
gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGB,sur->clip_rect.w,sur->clip_rect.h,GL_RGB,GL_UNSIGNED_BYTE,sur->pixels);
SDL_UnlockSurface(sur);
となっております。
どなたかわかる方教えてください。
よろしくお願いします。 m(_ _)m
0582デフォルトの名無しさん
2008/02/16(土) 22:39:590583デフォルトの名無しさん
2008/02/16(土) 22:49:14追加してみましたが、まだ駄目でした。
あと、GDBで走らせたところ、
Program received signal SIGSEGV, Segmentation fault.
0x72cb76af in gluEndPolygon () from C:\Windows\system32\glu32.dll
(gdb) Error: dll starting at 0x6e3f0000 not found.
こんなエラーが出てきました。
0584デフォルトの名無しさん
2008/02/16(土) 23:03:22300*300なら512*512に直してもう一度実験してみたらどうでしょう?
0585デフォルトの名無しさん
2008/02/16(土) 23:19:19ペイントで512*512に直してやってみましたが、同じエラーで止まってしまいました。
0586デフォルトの名無しさん
2008/02/16(土) 23:33:09surがNULLになっていないか、sur->clip_rect.w,sur->clip_rect.hが300,300になっているか全部疑ってみるべき。
0587デフォルトの名無しさん
2008/02/17(日) 00:00:21GDBで周辺をステップ実行した結果、
(gdb) >
Program received signal SIGSEGV, Segmentation fault.
0x72cc76af in gluEndPolygon () from C:\Windows\system32\glu32.dll
と出ました。
また、surや、sur->clip_rect.w,sur->clip_rect.hの値もチェックしましたが、問題ありませんでした
sur=13c2b60,sur->clip_rect.w=512,sur->clip_rect.h=512
先ほどのアドバイスに従い、画像の大きさを512*512にしたため、この数値になっています。
0588デフォルトの名無しさん
2008/02/17(日) 00:05:45今普通の方法って
1、不透明ポリゴンを全部描く
↓
2、半透明ポリゴンを奥行きでソート
↓
3、Zバッファを参照しながら半透明ポリゴンを描く
のような手順なんでしょうか?
(半透明プリミティブ同士が重ならないなら、2は省略できるかな)
0589デフォルトの名無しさん
2008/02/17(日) 00:13:53そのgluEndPolygonはどの関数から呼ばれてるの?落ちているのはgluBuild2DMipmaps()なの?
あとglGetError()とかでなんか出てたりしないかをチェックしてみるとか
0590587
2008/02/17(日) 00:42:47gluEndPolygonは自分は呼んでないので、わからないです。(gluBuild2DMipmapsかな?)
また、gluBuild2DMipmapsの前後をprintfでくくったら、処理前の方だけ出力されたのでgluBuild2DMipmapsがおちているんだと思います。
0591デフォルトの名無しさん
2008/02/17(日) 01:10:15今っていうかZバッファ法を使うなら昔からそうだと思うけど。
半透明ポリゴンが交差してるとちょっと面倒だけどね。
0593デフォルトの名無しさん
2008/02/17(日) 01:16:12gdbならbtでバックトレースが出るよ
test.bmpが24bitカラーじゃないと上手くいかないと思うけどそこは大丈夫?
0595デフォルトの名無しさん
2008/02/17(日) 10:07:35こういうのはエラーメッセージだけからじゃわからなくて
キツイやね。
0596デフォルトの名無しさん
2008/02/17(日) 20:35:44ファンクションが数個増えてるけど
http://dee.cz/sw/index.html
このベンチマークのスコアが7割くらいに減ったYO?
0597デフォルトの名無しさん
2008/02/18(月) 13:00:15ドライバのOpenGLの最適化がまだ進んでないのかもね
いちおうVistaではちょっとオーバーヘッドはあるものの
パフォーマンスの低下はそれほど無いという話にはなってたはず
0598デフォルトの名無しさん
2008/02/19(火) 13:41:35オラたまげたぞ
0599デフォルトの名無しさん
2008/02/19(火) 14:51:220600デフォルトの名無しさん
2008/02/20(水) 01:29:13描画用のメインウィンドウでアニメーション中に、gluiで作ったサブウィンドウの上にマウスポインタを移動させると
メインウィンドウのアニメーションが止まってしまいます。
ウィンドウサイズを変更するとアニメーションが動き出しますが、
サブウィンドウの上にマウスポインタを移動させてもアニメーションを止めない方法はないでしょうか。
また、ウィンドウをリサイズせずにアニメーションを再開させる方法はないでしょうか。
なにとぞよろしくお願いします。
0601600
2008/02/20(水) 01:54:34glutSetWindows()関数を呼ぶことで問題が解決しました。
下のアドレスにあるリファレンスの2.5項6に書いてありました。
http://ktm11.eng.shizuoka.ac.jp/glui/glui.html
どうもありがとうございました。
0602デフォルトの名無しさん
2008/02/21(木) 04:51:36も、もう一度ソーソを
後学のために
頼みます
しかしOpenCV使っているのね....
0603デフォルトの名無しさん
2008/02/21(木) 21:31:54吉祥 20M 2yoshi4303.zip
shaderとマウスセレクトの実験でちょっとコードが汚くなってます。
OpenCVはtexture読込みの部分でしか使ってないので、誰か読込み関数作ってくれれば外せるんですけどねー。
0604デフォルトの名無しさん
2008/02/22(金) 03:25:30有り難うございます。
捕獲しました。
0605デフォルトの名無しさん
2008/02/22(金) 12:07:01アルファの形に切り抜いたオブジェクトを複数作りました。
手前から奥に描画していくと、手前のオブジェクトの透明部分が透けてくれません。
どうやったらちゃんと透けて見えるようになるでしょうか。(描画順が逆だと透けます。)
0606デフォルトの名無しさん
2008/02/22(金) 12:11:46デプスバッファがどうやってポリゴンの前後関係を処理してるのか調べてみるといいよ
0607デフォルトの名無しさん
2008/02/22(金) 15:31:05「透ける」てのが、半透明を使わないただの穴でいいなら
glAlphaFunc()を設定して、glEnable(GL_ALPHA_TEST)すればいいよ。
この方法だと穴のふちが汚いから半透明を使いたい、というのなら
もうそれは半透明ポリゴンと同じ問題になるので、ソートして奥から描くしかないかな。
0608605
2008/02/23(土) 06:19:00できれば透明部分がマウスクリックを無視できればいいのですが、それはできないみたいで、
自力で実装してみます。
0609デフォルトの名無しさん
2008/02/25(月) 08:35:22glutDisplayFuncとglutReshapeFuncの違いって何なのでしょうか? 例えば、
void display(void){
int i; static int r = 0;
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
gluLookAt(3.0, 4.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glRotated((double)r, 0.0, 1.0, 0.0);
glColor3d(0.0, 0.0, 0.0);
glBegin(GL_LINES);
for (i = 0; i < 12; ++i) {
glVertex3dv(vertex[edge[i][0]]);
glVertex3dv(vertex[edge[i][1]]);
}
glEnd();
if (++r >= 360) r = 0;
}
void resize(int w, int h){
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30.0, (double)w / (double)h, 1.0, 100.0);
glMatrixMode(GL_MODELVIEW);
}
int main(void){
glutDisplayFunc(display);
glutReshapeFunc(resize);
....
でglutReshapeFuncでは、画面がリサイズされたときに「画面をどのように表示するか」しか設定していないのに、
実際リサイズすると立方体が回転します。
なぜリサイズしたときに、glutDisplayFuncで登録した関数が呼び出されるのでしょうか?
glutReshapeFuncでは画面表示の設定しかしてないので、リサイズしても立方体は回転しないのが正しいような気がするのですが...
0610デフォルトの名無しさん
2008/02/25(月) 08:44:55リサイズした後描画しなかったらどうなるか分かるから
0611デフォルトの名無しさん
2008/02/25(月) 09:12:18画面を再描画する必要がある場合は必ず呼ばれる
つまりDisplayFuncでは描画以外の処理は入れないのがセオリー
0612デフォルトの名無しさん
2008/02/25(月) 15:09:15>>610
>displayfuncで描画しないようにしてみ
リサイズする前に表示さえされませんでした。
>>611
>画面を再描画する必要がある場合は必ず呼ばれる
つまり、この再描画には画面のリサイズが含まれると考えてよいのでしょうか?
つまり、リサイズすると
glutReshapeFunc
の後に
displayfunc
が呼ばれて、再描画していると考えてよいのでしょうか?
0613デフォルトの名無しさん
2008/02/25(月) 15:18:29http://www.vipper.org/vip749291.png
0614デフォルトの名無しさん
2008/02/25(月) 15:39:54そういうことになる
ちなみに、いつdisplayfuncが呼ばれるかは、すべてウィンドウシステム(≒OS)の判断による
OSが、そのウィンドウの再描画が必要だと思ったら、呼ばれる
例えば、GLUTのウィンドウの上に他のアプリケーションのウィンドウをかぶせて移動させると、
OSによっては再描画が必要になるので呼ばれるが、
OSによっては再描画が必要にならないので呼ばれない
自分でglutPostRedisplay()を呼べばdisplayfuncが呼ばれるのは確実だが、
それ以外にいつdisplayfuncが呼ばれるかはわからないという前提でプログラムを書く方がいい
0615デフォルトの名無しさん
2008/02/25(月) 19:44:24からソースをお借りしてBMPを読み込むプログラムを書いているのですが、複数の画像を読み込むにはどうすればいいですか?
0616デフォルトの名無しさん
2008/02/25(月) 20:16:320617デフォルトの名無しさん
2008/02/26(火) 02:49:31以前アップしていただいてたソフトなんですが、解析エラーが出て開けません。
どうしたら使えますか?
XML 解析中に次のエラーが発生しました:
行: 10
列: 2
エラー メッセージ:
'9.00' が、'7.00 7,00 7.10 7,10 8.00 8,00' の 'enumeration' 制約に違反しています。
値 '9.00' を持つ属性 'Version' を解析できませんでした。
0618デフォルトの名無しさん
2008/02/26(火) 03:36:06普通にC++のプログラムでやってみたのですがうまくいかないんです・・・。画像は読めるけど、数値が取り出せないんです。
OpenGLでBMPって読めないんでしょうか?
0619デフォルトの名無しさん
2008/02/26(火) 05:36:16読み込めてるんならファイル形式は理解してるんだろ?
RGBデータが格納されてるところを参照すればいいだけじゃん
0620デフォルトの名無しさん
2008/02/26(火) 09:16:04読めてるということは自分でファイルを読み込んでるはずだ
0621デフォルトの名無しさん
2008/02/26(火) 09:50:41GLbitmap glLoadBitmapFile(const char *filename);
とかの関数をでっちあげて
>>2くらいにソース貼っておけばよくね?
0622デフォルトの名無しさん
2008/02/26(火) 12:18:260623デフォルトの名無しさん
2008/02/26(火) 12:19:260624デフォルトの名無しさん
2008/02/26(火) 23:19:16GLbitmap glLoadBitmapFile(const char *filename)
{
FILE* f = fopen(filename, "rb");
if(FILE==NULL) return 0;
fseek(f, 0, SEEK_END);
int sz = ftell(FILE)
fseek(f, 0, SEEK_SET);
int image_width, image_height;
image_width = image_height = (int)sqrt(sz/3);
sz = image_width*image_height*3;
GLbitmap b = malloc(sz+8);
*(int*) b = image_width;
*((int*) b+1) = image_height;
fread(b+8, sz, 1, f);
return b;
}
でいいんでね(?_?)
0625デフォルトの名無しさん
2008/02/26(火) 23:48:130626デフォルトの名無しさん
2008/02/26(火) 23:58:07ほんとにビットマップか。
0627デフォルトの名無しさん
2008/02/27(水) 00:07:51JavaだとTextureクラスがあるからえらい楽なんだが。
0628デフォルトの名無しさん
2008/02/27(水) 00:37:290629デフォルトの名無しさん
2008/02/27(水) 01:10:26おもしろいw
0630デフォルトの名無しさん
2008/02/27(水) 03:48:460631デフォルトの名無しさん
2008/02/27(水) 08:20:370632デフォルトの名無しさん
2008/02/27(水) 12:35:32#include <vector>
#include <fstream>
#include <algorithm>
struct RGB {GLubyte r,g,b;};
struct BMP : public std::vector<RGB> {
int width,height;
void load(const char *filename) {
std::ifstream f(filename, std::ios::binary); // ファイル開く
f.seekg(2); int header[6]; f.read((char *)header, sizeof(header)); // ヘッダ読み込み
resize((width=header[4])*(height=header[5])); // サイズ設定
f.seekg(header[2]); f.read((char *)&at(0), size()*sizeof(RGB)); // 画像読み込み
std::for_each(begin(), end(), swap_rb); // BGR→RGB変換
}
static void swap_rb(RGB &rgb) {std::swap(rgb.r, rgb.b);}
};
ただしWindows形式24bitビットマップ限定、横幅が4の倍数でないと変になるけど。
あと実行マシンがリトルエンディアンであることを仮定。エラー処理一切無視。
画像ロード→ BMP bmp; bmp.load(ファイル名);
テクスチャ転送→ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bmp.width, bmp.height, 0, GL_RGB, GL_UNSIGNED_BYTE, &bmp[0]);
とりあえず手元のBMPファイルでは表示確認しますた。
0633デフォルトの名無しさん
2008/02/27(水) 13:26:51SDLも良いらしいけど、サウンド機能とかイラネって人にはオヌヌヌ
0634デフォルトの名無しさん
2008/02/27(水) 23:43:16SDLよりコンパクトでライセンスも楽だわ
なによりWindowsでリサイズしてもコンテキストが作り直されなくて済むのが良い
サウンドはOpenAL使ってるしこっちに乗り換えようかな
0635デフォルトの名無しさん
2008/02/28(木) 10:35:250になってしまいます。理由を教えてください!
0636デフォルトの名無しさん
2008/02/28(木) 11:26:120637デフォルトの名無しさん
2008/02/28(木) 11:26:22ぜんぶintなんじゃね
0638デフォルトの名無しさん
2008/02/28(木) 11:34:47可能性くらいは思い当たりそうなところが凶悪だよな。
0639デフォルトの名無しさん
2008/02/28(木) 11:56:00p=1/1024;という計算をしたいだけなのですが・・・。
-1.07374e+008という答えになってしまいます。
pはGLfloatで宣言してます。
0640デフォルトの名無しさん
2008/02/28(木) 12:41:560641デフォルトの名無しさん
2008/02/28(木) 15:07:32INT型の1と1024を計算しちゃったみたいだね
p = 1.0f / 1024.0f;←って感じにすればちゃんとした値が出るよ
0642デフォルトの名無しさん
2008/02/28(木) 15:15:27ありがとうございます!
ちゃんと計算できました!
0643デフォルトの名無しさん
2008/02/28(木) 18:06:10当たりw
0644デフォルトの名無しさん
2008/02/28(木) 18:07:100645デフォルトの名無しさん
2008/02/28(木) 20:15:32shd形式のファイルを読み込むOpenGLのライブラリは無いでしょうか?
0646デフォルトの名無しさん
2008/02/28(木) 20:24:16たぶん無い。
Shadeから他の形式に書き出して読み込んだ方がいいと思うよ。
0647デフォルトの名無しさん
2008/02/28(木) 20:28:25どういう形式が読み込めるのでしょうか?
0648デフォルトの名無しさん
2008/02/28(木) 20:31:08OpenGL対応の3Dエンジン探してみれば?
0649デフォルトの名無しさん
2008/02/28(木) 21:17:09そうなんですか。
友達がshadeを勉強していて、自分はOpenGLを勉強しているので、
友達がモデリングしたデータをOpenGLで読み込んでグルグルまわしてみたいと思ったんですが....
何か良い方法は無いですかね?
0650デフォルトの名無しさん
2008/02/28(木) 22:13:430651デフォルトの名無しさん
2008/02/28(木) 23:33:27君が使っているのはOpenGLの規格に沿うように開発されたライブラリだ。
0652デフォルトの名無しさん
2008/02/28(木) 23:52:220653デフォルトの名無しさん
2008/02/28(木) 23:54:43初心者には、その辺の切り分けとか理由とかが分かりにくいんじゃないかな。
うまく簡単に説明できるといいんだけど・・・。
0654デフォルトの名無しさん
2008/02/29(金) 00:14:050655デフォルトの名無しさん
2008/02/29(金) 01:05:490656デフォルトの名無しさん
2008/02/29(金) 01:35:090657デフォルトの名無しさん
2008/02/29(金) 10:53:50D3DXとか便利なものが付いてるだけで
誰かOGLX開発しない?
0658デフォルトの名無しさん
2008/03/01(土) 16:26:50その説明、感動的に気に入った。
…が、新人にそれで説明しようとすると
十中Hack「アセンブリ言語って何ですか?」と言われそう……。
0659デフォルトの名無しさん
2008/03/01(土) 16:33:15肝心のGL3が出ないしな…
0660デフォルトの名無しさん
2008/03/01(土) 17:34:030661デフォルトの名無しさん
2008/03/01(土) 21:09:29テクスチャを格納するとき
Texture[x][y][z][4]と作って
Texture[x][y][z][0〜3]にRGBAの値が入るんですよね?
実質、4次元配列になるのでしょうか?
これをTexture[ ]といったように1次元配列で格納するためには
Texture[x*y*z*4]で格納して RGBARGBARGBA…RGBA
という風になるのですか?
単色(輝度値のみ)のテクスチャの場合
Texture[x*y*z] に AAAAA…A
といった風に値を格納することは可能なのでしょうか?
質問の仕方が下手ですみません。わかる方教えてください
0662デフォルトの名無しさん
2008/03/01(土) 21:12:39>>4次元配列
正解
>>RGBA
正解
>>AAAAA
可能
0663デフォルトの名無しさん
2008/03/01(土) 21:30:07ありがとうございます。
今までTexture[x][y][z][4]で格納して
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, x, y, z, 0,
GL_RGBA, GL_UNSIGNED_BYTE, Texture);
で3次元テクスチャをGPUに送ってたのですが
やってることが別にRGBの値が要らなくて輝度値だけ必要でしたので
余分にメモリを食っていました。
これを輝度値だけに直すときは
GL_RGBAのままだとまずいですよね。
GL_LUMINANCEなどに変えるのでしょうか?
0664デフォルトの名無しさん
2008/03/01(土) 22:01:340665リライト
2008/03/02(日) 11:17:20これから書くプログラムをどのように変更して
次のようにするにはどうしたらいいでしょうか??
足の付け根を原点にして,太ももと足の付け根の角度と太ももの長さから膝の位置ベクトルを求め、
次に膝の位置を原点にして,膝の角度とすねの長さから足先の位置ベクトルを求め、
この2つを足して,足の付け根(=胴体)から足先の位置を求める。
足先の位置を原点にした時の胴体の位置はその逆ベクトルにする。
プログラムは以下のようになります。
#include <stdlib.h>
#include <GL/glut.h>
#include <math.h>
#define STEPCYCLE 400 /* 手足のひと振りに要する時のフレーム数 */
#define WALKCYCLE 4000 /* ステージ上を一周するのに要するフレーム数 */
static int r1 = 0, r2 = 0, r3 = 0 , r4 =0;
static int face[][4] = {
{ 0, 1, 2, 3 },
{ 1, 5, 6, 2 },
{ 5, 4, 7, 6 },
{ 4, 0, 3, 7 },
{ 4, 5, 1, 0 },
{ 3, 2, 6, 7 }
};
static GLdouble normal[][3] = {
{ 0.0, 0.0,-1.0 },
{ 1.0, 0.0, 0.0 },
{ 0.0, 0.0, 1.0 },
{-1.0, 0.0, 0.0 },
{ 0.0,-1.0, 0.0 },
{ 0.0, 1.0, 0.0 }
};
static GLfloat red[] = { 0.8, 0.2, 0.2, 1.0 };
0666リライト
2008/03/02(日) 11:19:50void myBox(double x, double y, double z)
{
GLdouble hx = x * 0.5, hz = z * 0.5;
int i, j;
GLdouble vertex[8][3];vertex[0][0]=-hx;vertex[0][1]=-y;
vertex[0][2]=-hz;vertex[1][0]=hx;vertex[1][1]=-y;
vertex[1][2]=-hz; vertex[2][0]=hx;vertex[2][1]=0.0;
vertex[2][2]=-hz; vertex[3][0]=-hx;vertex[3][1]=0.0;
vertex[3][2]=-hz; vertex[4][0]=-hx;vertex[4][1]=-y;
vertex[4][2]=hz;vertex[5][0]=hx;vertex[5][1]=-y;
vertex[5][2]=hz; vertex[6][0]=hx;vertex[6][1]=0.0;
vertex[6][2]=hz;vertex[7][0]=-hx;vertex[7][1]=0.0;
vertex[7][2]=hz;
/* 材質を設定する */
glMaterialfv(GL_FRONT, GL_DIFFUSE, red);
glBegin(GL_QUADS);
for (j = 0; j < 6; ++j) {
glNormal3dv(normal[j]);
for (i = 4; --i >= 0;) {
glVertex3dv(vertex[face[j][i]]);
}
}
glEnd();
}
0667リライト
2008/03/02(日) 11:20:31void armleg(double girth, double length, double r1, double r2)
{
glRotated(r1, 1.0, 0.0, 0.0);
myBox(girth, length, girth);
glTranslated(0.0, -0.05 - length, 0.0);
glRotated(r2, 1.0, 0.0, 0.0);
myBox(girth, length, girth);
}
0668リライト
2008/03/02(日) 11:20:57void myGround(double height)
{
static GLfloat ground[][4] = {
{ 0.6, 0.6, 0.6, 1.0 },
{ 0.3, 0.3, 0.3, 1.0 }
};
int i, j;
glBegin(GL_QUADS);
glNormal3d(0.0, 1.0, 0.0);
for (j = -5; j <= 5; ++j) {
for (i = -5; i < 5; ++i) {
glMaterialfv(GL_FRONT, GL_DIFFUSE, ground[(i + j) & 1]);
glVertex3d((GLdouble)i, height, (GLdouble)j);
glVertex3d((GLdouble)i, height, (GLdouble)(j + 1));
glVertex3d((GLdouble)(i + 1), height, (GLdouble)(j + 1));
glVertex3d((GLdouble)(i + 1), height, (GLdouble)j);
}
}
glEnd();
}
0669リライト
2008/03/02(日) 11:36:47{
glutPostRedisplay();
}
void mouse(int button, int state, int x, int y)
{
switch (button) {
case GLUT_LEFT_BUTTON:
if (state == GLUT_DOWN) {
glutIdleFunc(idle);
}
else {
glutIdleFunc(0);
}
break;
case GLUT_RIGHT_BUTTON:
if (state == GLUT_DOWN) {
glutPostRedisplay();
}
break;
default:
break;
}
}
0670リライト
2008/03/02(日) 11:42:15{
static GLfloat lightpos[] = { 3.0, 4.0, 5.0, 1.0 }; /* 光源の位置 */
static int frame = 0; /* フレーム数 */
double t = (frame % STEPCYCLE) / (double)STEPCYCLE;
double s = (frame % WALKCYCLE) / (double)WALKCYCLE;
double ll1 = 20.0*sin(t*3.14*2.0); /* 箱男の左足の股関節の角度 */
double ll2 = 20.0*sin(t*3.14*2.0); /* 箱男の左足の膝関節の角度 */
double rl1 = -20.0*sin(t*3.14*2.0); /* 箱男の右足の股関節の角度 */
double rl2 = -20.0*sin(t*3.14*2.0); /* 箱男の右足の膝関節の角度 */
double la1 = -20.0*sin(t*3.14*2.0); /* 箱男の左腕の肩関節の角度 */
double la2 = -20.0*sin(t*3.14*2.0); /* 箱男の左腕の肘関節の角度 */
double ra1 = 20.0*sin(t*3.14*2.0); /* 箱男の右腕の肩関節の角度 */
double ra2 = 20.0*sin(t*3.14*2.0); /* 箱男の右腕の肘関節の角度 */
double px = 2.0*cos(s*3.14*2.0), pz = -2.0*sin(s*3.14*2.0); /* 箱男の位置 */
double r = 90.0; /* 箱男の向き */
double h = 0.0; /* 箱男の高さ */
/* フレーム数(画面表示を行った回数)をカウントする */
++frame;
/* 画面クリア */
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
/* モデルビュー変換行列の初期化 */
glLoadIdentity();
/* 光源の位置を設定 */
glLightfv(GL_LIGHT0, GL_POSITION, lightpos);
/* 視点の移動(物体の方を奥に移す)*/
glTranslated(0.0, 0.0, -10.0);
/* シーンの描画 */
/* 地面 */
myGround(-1.8);
0671リライト
2008/03/02(日) 11:44:55glTranslated(px, h, pz);
glRotated(r, 0.0, 1.0, 0.0);
/* 頭 */
myBox(0.20, 0.25, 0.22);
/* 胴 */
glTranslated(0.0, -0.3, 0.0);
myBox(0.4, 0.6, 0.3);
/* 左足 */
glPushMatrix();
glTranslated(0.1, -0.65, 0.0);
armleg(0.2, 0.4, ll1, ll2);
glPopMatrix();
glPushMatrix();
glRotated(15*sin(t*3.14*2.0), 1.0, 0.0, 0.0);
glTranslated(0.1, -1.40, -0.1);
myBox(0.2, 0.1, 0.4);
glPopMatrix();
/* 右足 */
glPushMatrix();
glTranslated(-0.1, -0.65, 0.0);
armleg(0.2, 0.4, rl1, rl2);
glPopMatrix();
glPushMatrix();
glRotated(-15*sin(t*3.14*2.0), 1.0, 0.0, 0.0);
glTranslated(-0.1, -1.40, -0.1);
myBox(0.2, 0.1, 0.4);
glPopMatrix();
0672デフォルトの名無しさん
2008/03/02(日) 11:45:33テキストにしてうpろだにうpしなよ
0673リライト
2008/03/02(日) 12:00:24テキストにしたのでアップします。
http://sund1.sakura.ne.jp/uploader/source/up19768.txt
これを次のようにするにはどうしたらいいでしょうか??
足の付け根を原点にして,太ももと足の付け根の角度と太ももの長さから膝の位置ベクトルを求め、
次に膝の位置を原点にして,膝の角度とすねの長さから足先の位置ベクトルを求め、
この2つを足して,足の付け根(=胴体)から足先の位置を求める。
足先の位置を原点にした時の胴体の位置はその逆ベクトルにする。
0674デフォルトの名無しさん
2008/03/02(日) 12:37:02元の位置座標に掛けていけば、おのずと位置は求まるし、
ベクトルも求まる。
プロジェクションは考慮しなくていいみたいだから、
そんなに難しくないと思うが。
ただ、PI を3.14はどうかと。
0675リライト
2008/03/02(日) 12:42:36それがわからないんです…。
もっと具体的にどこをどう変えたらいいのか教えていただけないでしょうか?
0676デフォルトの名無しさん
2008/03/02(日) 13:16:21http://www.is.oit.ac.jp/~whashimo/server/~whashimo/Article/OpenGL/Chapter3/index.html
を参考にするといいよ。
0677リライト
2008/03/02(日) 14:09:06参考ページを見てみたのですが、
これをどう活用すればいいのかわかりません。
具体的にプログラムのどこをどう変えればいいのか
教えていただけないでしょうか??
0678デフォルトの名無しさん
2008/03/02(日) 14:15:280679デフォルトの名無しさん
2008/03/02(日) 14:17:480680デフォルトの名無しさん
2008/03/02(日) 14:32:29そもそもプログラムを書き換える話ではないと思うが。
0681リライト
2008/03/02(日) 15:43:13どうか教えてもらえないでしょうか?
0682デフォルトの名無しさん
2008/03/02(日) 16:33:20基礎から勉強しなおせ
0683デフォルトの名無しさん
2008/03/02(日) 16:43:380684デフォルトの名無しさん
2008/03/02(日) 16:44:350685デフォルトの名無しさん
2008/03/02(日) 17:14:15http://www.wakayama-u.ac.jp/~tokoi/opengl/ex-e.html
とほとんど同じじゃねーか。
和歌山大の課題ですか?
0686デフォルトの名無しさん
2008/03/02(日) 18:20:38入門書を読んだほうがいいよん。
0687リライト
2008/03/02(日) 18:28:29それを足の付け根を原点にして,太ももと足の付け根の角度と太ももの長さから膝の位置ベクトルを求め、
次に膝の位置を原点にして,膝の角度とすねの長さから足先の位置ベクトルを求め、
この2つを足して,足の付け根(=胴体)から足先の位置を求める。
足先の位置を原点にした時の胴体の位置はその逆ベクトルにする。
このようにしたいのですが、どうすればいいのかわからないのです。
0688デフォルトの名無しさん
2008/03/02(日) 18:36:38留年しな〜。
0689デフォルトの名無しさん
2008/03/02(日) 19:09:16>>687
とりあえず位置ベクトルは理解できているのか?
0690リライト
2008/03/02(日) 19:24:46位置ベクトルの理解はあまりできていません…。
0691デフォルトの名無しさん
2008/03/02(日) 19:38:22九九はできまちゅか?
0692デフォルトの名無しさん
2008/03/02(日) 20:06:34さすがにそれはきついな。
どうりで話が噛み合わないわけだ。
位置ベクトルと行列による一次変換を理解してからじゃないと、
その課題はクリアできないよ。
ひょっとしてまだ高校生かな?
0693デフォルトの名無しさん
2008/03/02(日) 20:32:450694デフォルトの名無しさん
2008/03/02(日) 20:40:580695リライト
2008/03/02(日) 21:52:08どうかプログラムのどこをどのように
変えればいいのか教えていただけないでしょうか?
694さん>
イマイチ理解できないのですが…。
プログラムを提示して教えていただけないでしょうか?
0696デフォルトの名無しさん
2008/03/02(日) 22:06:12>>695
だ か ら、
とりあえず位置ベクトルを求めなさいって。
プログラムを変える話ではない。
0697デフォルトの名無しさん
2008/03/02(日) 22:13:53こいつ理解する気なんか無いんだって。コードが欲しいだけ。
スルーでおk。延々ageてるし。
0698デフォルトの名無しさん
2008/03/02(日) 23:15:460699デフォルトの名無しさん
2008/03/02(日) 23:41:050700デフォルトの名無しさん
2008/03/03(月) 00:21:01もし大学生だったら、日本オワタ\(^o^)/
0701デフォルトの名無しさん
2008/03/03(月) 05:18:21日本を終らせるにはサンプル数が少ない
0702デフォルトの名無しさん
2008/03/03(月) 09:55:37答えください、が正解だよな
0703デフォルトの名無しさん
2008/03/03(月) 13:06:40あのさ、リライトさん。
このスレで教える人ってのは、教えることで相手が成長できると思うから、教えるんだよ。
その喜びがあればこそ、無償で、貴重な時間を費やしても、助けてあげたくなるんだよ。
せっかくいくつかの回答や学習の方針が出てきてるのに、それに対する返答が「分かりません答え教えてください」ばっかりじゃ、
ボット並の知性とみなされても仕方ないよ。
人に何かを聞きたいなら、まずその姿勢から改めないとダメだよ。
教えても無駄だと分かりきってる相手に対して時間を使ってくれる人なんていないよ。
0704リライト
2008/03/03(月) 13:24:24他の人の作ったプログラムを見て説明してもらって初めて理解できるんです。
だから自分じゃ何もできないのが現実です…。
みなさん不快な思いをさせてすいませんでした…。
0705デフォルトの名無しさん
2008/03/03(月) 13:46:15何か人の作ったプログラムを説明してもらって一度理解したら、
それと同じプログラムを今度は何も見ずに白紙の状態からちゃんと書けるか?
0706デフォルトの名無しさん
2008/03/03(月) 14:25:30そこはスルーしていいんだよ
0707デフォルトの名無しさん
2008/03/03(月) 19:34:06vector<GLubyte> texture;
こんな使い方出来ないでしょうか
要は、可変(不定)のテクスチャを読み込むのにvector型の
動的配列を使いたく
0708デフォルトの名無しさん
2008/03/03(月) 19:50:31やってみて、どうだったの
0709デフォルトの名無しさん
2008/03/03(月) 19:54:44&texture[0]
を入れたら読み込んでくれました
ただ、別のところでダメっぽい状況になってしまって…
前途多難です
0710デフォルトの名無しさん
2008/03/03(月) 21:39:41textureが
○●●○○
○○○○●
●●●○○
…
○○●○●
●=値なし ○=値有り
という感じで並んでいて、GL_LUMINANCEで値有りの部分だけを輝度テクスチャとして描こうとしています。
vectorを使っていたのは○が不定のためです。
●の部分が穴が空いたような効果を狙っています。
texture[○の数]={αααα…αα};
で確保したテクスチャを
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, TEXWIDTH, TEXHEIGHT, 0,
GL_LUMINANCE, GL_UNSIGNED_BYTE, &texture[0]);
で貼り付けたらひどい画像になりました。(ノイズのようなもの)
どうやったら意図した通りになるでしょうか…
0711デフォルトの名無しさん
2008/03/03(月) 22:11:59じゃなく
texture.resize(○の数+●の数);
でないと駄目。
あと、テクスチャの幅と高さはともに2のべき乗でないと駄目。(OpenGL2.0未満の場合)
ついでにいうとデフォルト状態では横1ラインのbyte数は4の倍数である必要もある。
>>710のやり方ではaccess violationが起きる可能性があるよ。
参考までに聞きたいんだけど、textureの配列長が○の数でいいと思った理由は?
●の部分に値を入れなくて良いと思った理由は何?●の部分を飛ばして描画するという情報を、なんらかの形でGPUに与えたの?
常識的に考えれば、
{(1), (2), (3), (4), (5), ,,,}
という情報を与えれば
(1)(2)(3)(4)(5)
・・・
という形のテクスチャになって、
(1)●●(2)(3)
(4)(5)・・・
というふうにはならない、と分かりそうなもんだと思うんだけど・・・。
もしよければ、その辺の思考過程を教えてもらえると嬉しいな。
0712デフォルトの名無しさん
2008/03/03(月) 22:12:26texture[○の数+●の数]={α00ααα…α0α};
とかにすべきなんじゃないの?
いまいち意図がわからないが。
0713デフォルトの名無しさん
2008/03/03(月) 22:15:45TextureサイズはTEXWIDTH x TEXHEIGHTにして穴はαで指定。使ったことないがGL_LUMINANCE_ALPHAってのがあるっぽい
穴の向こうになんかあるなら>>607の話題を参照
0714デフォルトの名無しさん
2008/03/08(土) 07:51:260715デフォルトの名無しさん
2008/03/08(土) 11:54:39本当に座標変換だけならちゃんと最適化すればCPUでも十分速いだろう
一方GPUで計算させるのは、その間CPUは別なことできるのがメリット
変換した座標をそのまま描画するならGPUの方がいいけど、
そうでなくCPUで再処理したいなら転送などのオーバーヘッドがある分GPUは不利
計算したい座標の数や用途を考えて、良さそうな方を選んでください
0716デフォルトの名無しさん
2008/03/08(土) 12:10:22と書こうとした俺は715の丁寧なレスに感動した
0717デフォルトの名無しさん
2008/03/08(土) 16:00:09両方とも作ってみます
0718デフォルトの名無しさん
2008/03/08(土) 21:19:00返事が遅くなってすみません。同じところに上げておきました。
2yoshi4468.zip
0719デフォルトの名無しさん
2008/03/09(日) 15:14:140720デフォルトの名無しさん
2008/03/09(日) 17:13:590721デフォルトの名無しさん
2008/03/09(日) 18:50:00//質問
PCゲームなど、セーブ、ロード画面に演出の一つとして使われている
現在のウィンドウ画面を小さくして表示しているサムネイル画面?
について質問です。
やり方がわかりません。そういうAPIが用意されているのでしょうか?
教えてください。
0722デフォルトの名無しさん
2008/03/09(日) 19:39:110723デフォルトの名無しさん
2008/03/09(日) 19:51:120724デフォルトの名無しさん
2008/03/09(日) 19:51:190725デフォルトの名無しさん
2008/03/09(日) 20:06:27MRTでシェーダから縮小かけてFBOに書き込むのも手か。
0726デフォルトの名無しさん
2008/03/09(日) 20:32:17ほとんどの環境で動くし。
0727デフォルトの名無しさん
2008/03/09(日) 20:46:34つか>>721がDirectX3D使ってるなら関係ない話か
0728デフォルトの名無しさん
2008/03/11(火) 16:44:32今ここで、ある FBO レイヤーになめらかな透明情報を含む画像を何枚も重ねて描くことを考えます。
普通に
(1) FBO にレンダーターゲットを設定
(2) イメージを glBlend(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); で重ねて描く
でレイヤー内に描いてしまうと、半透明で描かれてしまうため、このレイヤーを更に
(1) FBO にバインド
(2) FBO を glBlend(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); で下地に描く
で描くと、レイヤー内で描かれた画像はより薄く表示されてしまいます。
これを薄くならないように、まるで直接下地に描いたような結果にしたいのですが、どのようにすれば良いのでしょうか?
0729デフォルトの名無しさん
2008/03/11(火) 17:03:45どうしたいのか正確にわからないので、なんともいえないが、
>>(2) FBO を glBlend(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); で下地に描く
をglBlend(GL_ONE, GL_ONE_MINUS_SRC_ALPHA ) にすれば期待した結果になるのでは?
0730デフォルトの名無しさん
2008/03/11(火) 18:28:49すいません、まだ頭の中で整理が出来ていないのですが。
その通りにすれば、ズバり私の期待した結果を得ることができました。
実はこのことで何ヶ月も悩んでました。本当にありがとうございました (TT
0731デフォルトの名無しさん
2008/03/13(木) 11:41:28ここのコードをVC++2005EEでコンパイルして実行したのですが
白い四角形が回転するだけになってしまいます。
どうしたらよいでしょうか。
0732デフォルトの名無しさん
2008/03/13(木) 12:37:310733デフォルトの名無しさん
2008/03/13(木) 18:20:45GLubyte **texture;として取って値を入れて渡すとき
glTexImage2Dの最後の引数はどういれたらいいのでしょうか
&texture textureでもエラーが出てしまいます
0734デフォルトの名無しさん
2008/03/13(木) 18:35:09ようはポインタのポインタの先にちゃんとデータがあるなら
*texture でいいんじゃない?
0735デフォルトの名無しさん
2008/03/13(木) 18:37:13なのにエラーが出てTexImageのところで動作が止まる、というエラーを吐き出すだけで
なんでじゃあぁああぁ
0736デフォルトの名無しさん
2008/03/13(木) 18:38:33ポインタについて勉強しなおしたほうがいい
0737デフォルトの名無しさん
2008/03/13(木) 18:52:120738デフォルトの名無しさん
2008/03/13(木) 20:33:48は
GLubyte* bits = new GLubyte[TEXSIZE * TEXSIZE * 3];
と同じ。トリプルポインタじゃない。
0739738
2008/03/13(木) 20:37:04書いてて思ったんだが、なぜ
>>GLubyte **texture;
なんだ?カラーではなくモノクロ?
glTexImage2Dの他の引数間違ってない?
0740デフォルトの名無しさん
2008/03/13(木) 23:01:50**textureの領域をどのように確保しているのか教えてもらわないとみんな答えようがないと思うよ
そもそもダブルポインタにする意味が分からないんだよね
二次元配列を表現しようとしてダブルポインタにしたなら間違ってるよ
1枚のテクスチャの領域を確保したいなら↓のようにすればいいだけだしね
GLubyte *texture;
texture = ( Glubyte )malloc( sizeof( GLubyte ) * Width * Height * 3 ); /* αなしの場合 */
//texture = ( Glubyte )malloc( sizeof( GLubyte ) * Width * Height * 4 ); /* αありの場合 */
それとも、複数枚のテクスチャを一気に読み込んでるのかな?
もし、そうなら↓のようにすればいけるんじゃないかな?
for( Loop = 0; Loop < texture_count; Loop++ ){
/* αなしの場合 */
glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, Width[Loop], Height[Loop], 0, GL_RGB, GL_UNSIGNED_BYTE, ( *texture + Loop ) );
/* αありの場合 */
#if 0
glPixelStorei( GL_UNPACK_ALIGNMENT, 4 );
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, Width[Loop], Height[Loop], 0, GL_RGBA, GL_UNSIGNED_BYTE, ( *texture + Loop ) );
#endif
}
0741デフォルトの名無しさん
2008/03/13(木) 23:43:03を使おうとしてるんじゃないかな。
あれは画像を一行一行スキャンして読み込むから、一行の先頭へのポインタを配列で管理すると
必然的に void ** みたいになる。
でもその場合、画像全体は連続したメモリ空間に存在しないから、glTexImage2D に直接
渡したらエラーになるよ。
0742デフォルトの名無しさん
2008/03/14(金) 07:04:05どうすればいいのかわかりませんをorz(==
世界地図を貼り付けて地球儀にしようと思ったのに
0743デフォルトの名無しさん
2008/03/14(金) 09:41:51あ、テクスチャ自走生成を用いればできるかもしれん。
0744デフォルトの名無しさん
2008/03/14(金) 10:47:45auxなつかしす。たしかglSphere使ってんだっけ。
static GLUquadricObj *quadratic=gluNewQuadric();
gluQuadricNormals(quadratic, GLU_SMOOTH);
gluQuadricTexture(quadratic, GL_TRUE);
gluSphere(quadratic,r,s,t);
ならこんな感じか
0745デフォルトの名無しさん
2008/03/14(金) 11:14:220746デフォルトの名無しさん
2008/03/14(金) 11:17:23なんで球体なのに、quadなのー?よ
0747デフォルトの名無しさん
2008/03/14(金) 11:54:27何で検索すらしないの?
0748デフォルトの名無しさん
2008/03/14(金) 12:19:46どうやらこういうことらしい。
http://en.wikipedia.org/wiki/Quadric
0749デフォルトの名無しさん
2008/03/19(水) 16:44:16Windows環境でOpenGLを利用しているのですが、OpenGL2.1対応の参考書を参考に学習を進めているうちに、
利用しているDLLが、OpenGL1.1までしか対応していない事に気が付きました。
そこで、http://www.opengl/org/でSDKを探したところ、OpenGL1.1のDLLしか見当たりませんでした。
OpenGL2.1に対応しているDLLというのは、一体どこで手に入れる事ができるのでしょうか。
0750デフォルトの名無しさん
2008/03/19(水) 17:44:13対応してるならドライバ入れれば動く
0751デフォルトの名無しさん
2008/03/19(水) 18:36:51回答ありがとうございます(*´∀`*)
私が利用しているパソコンはオンボードですので、現在の状況から考えてOpenGL2.1を利用する事は不可能な様ですね。
ですので、近いうちにコンピュータを買換えるとします。
では、失礼させて頂きます。
0752デフォルトの名無しさん
2008/03/19(水) 20:30:140753デフォルトの名無しさん
2008/03/19(水) 21:33:58またしても回答ありがとうございます(*´∀`*)
私も、もしかするとと思いまして、SISのホームページでドライバを確認・更新してみたところ、
私が利用しているSIS661FXというチップセットでは、DirectXでいう7.0程度のグラフィック能力しか持ち合わせていないらしく、
DirectX9.0cレベルに相当するOpenGL2.1を利用する事は、やはり無理な様です。
ですが、現状は3D技術を学び始めた程度でして、シェーダ等の高度なグラフィックを利用する予定もまだありませんので、
引き続き学習を進めていきながら、機会があり次第購入に踏み切ろうかと思いますです。
0754デフォルトの名無しさん
2008/03/26(水) 22:29:04glEnable(BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
を指定して描くと、上側のポリゴンの地の色とブレンドされてしまい、
下のテクスチャが透けて見えるようになりません。
ポリゴンに張ってあるビットマップのアルファを触ると、それに応じた透明度になるのですが
何故か対象は下側のテクスチャ画像ではなく、テクスチャが貼り付けられている地のポリゴンが
透けて見えます。
どなたか、解決の糸口でも良いので、お願いします。
アホな質問ですいません。
アホな質問ですいません
0755デフォルトの名無しさん
2008/03/26(水) 22:34:550756デフォルトの名無しさん
2008/03/27(木) 03:39:56glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,
これ系だとみた。
0757デフォルトの名無しさん
2008/03/27(木) 07:51:52行きました!
有り難う。本当に有り難う。これでグッスリです。
GL_DEPTH_TESTをenableしてから、透けないポリゴンを描いてやり
glDepthMask(GL_FALSE)とglDepthMask(GL_TRUE)の間に半透明ポリゴンを描いたところ
上手く行きました。
GL_DEPTH_TESTがマズイとあのような結果になるとは、思いも由りませんでした。
や。本当に有り難う。
0758デフォルトの名無しさん
2008/03/31(月) 01:08:210759デフォルトの名無しさん
2008/03/31(月) 04:44:410760デフォルトの名無しさん
2008/03/31(月) 10:40:21環境を整えてVC++でウィンドウを表示するプログラムを実行させたのですが、
なぜかウィンドウと一緒にコマンドプロンプトのウィンドウも表示されます
コマンドプロンプトのウィンドウの方は表示されないようにするにはどうしたらいいですか
0761デフォルトの名無しさん
2008/03/31(月) 12:35:120762デフォルトの名無しさん
2008/03/31(月) 12:46:120763デフォルトの名無しさん
2008/03/31(月) 13:03:160764デフォルトの名無しさん
2008/03/31(月) 14:02:200765デフォルトの名無しさん
2008/03/31(月) 23:19:31デバック用のメッセージを表示させたりとかできて便利なのに・・・
なぜ!?
0766デフォルトの名無しさん
2008/03/31(月) 23:24:210767デフォルトの名無しさん
2008/04/01(火) 00:04:34赤のみ32bitと、RGBA各色32bitの
0768デフォルトの名無しさん
2008/04/01(火) 00:45:42「続行するには何かキーを押してください...」
とか言ってくるしキモイじゃん
0769デフォルトの名無しさん
2008/04/01(火) 01:28:490770デフォルトの名無しさん
2008/04/01(火) 01:31:13しとけばいいんじゃね?
0771デフォルトの名無しさん
2008/04/01(火) 01:35:560772デフォルトの名無しさん
2008/04/01(火) 20:47:01GLUTを使わずにOpenGLを使う。
0773デフォルトの名無しさん
2008/04/01(火) 22:19:49GL_ARB_texture_float拡張が使えるかチェックする必要がある
RGBAはGL_RGBA32F_ARB、
Rのみは無いのでGL_LUMINANCE32F_ARB辺りでどうぞ
0774デフォルトの名無しさん
2008/04/02(水) 00:29:59そして俺の環境ではPythonがインストールされてないよと警告がでます。
コンソール画面って便利でカッコイイじゃん。
0775デフォルトの名無しさん
2008/04/02(水) 00:48:070776デフォルトの名無しさん
2008/04/02(水) 00:49:350777デフォルトの名無しさん
2008/04/02(水) 19:07:57ま、開発中はなにかと便利だよね。
0778デフォルトの名無しさん
2008/04/03(木) 20:45:100779デフォルトの名無しさん
2008/04/10(木) 04:38:14あるよ。
以上。
はい次の方。
0780デフォルトの名無しさん
2008/04/10(木) 05:36:580781デフォルトの名無しさん
2008/04/11(金) 19:41:48何か方法はありますでしょうか
0782デフォルトの名無しさん
2008/04/11(金) 19:43:170783デフォルトの名無しさん
2008/04/11(金) 20:11:29http://opengl.jp/oglfaq/glut.htm の 3.070 とかどうだろうか。
0784デフォルトの名無しさん
2008/04/11(金) 23:59:33GLUTのラッパークラスを作る場合に、
glutMainLoopはどうするのでしょうか?
0785デフォルトの名無しさん
2008/04/13(日) 10:26:59もうちょっと詳しくたのむ。
0786デフォルトの名無しさん
2008/04/14(月) 05:32:32ビデオカードのメモリ容量です。どなたかいい方法ご存知でしたら
ご教授ください。よろしくお願いします。
0787デフォルトの名無しさん
2008/04/17(木) 15:35:31ワールド座標の時点ではx,y,zと最後の要素としてダミーの0が入ってると思うんですけど、同じように0が二つ入ってるんでしょうか?
ご教授願います
0788デフォルトの名無しさん
2008/04/17(木) 16:04:03ワールド座標のwは通常1のはず (glVertex3fとかでxyzだけ指定してる場合、w=1)
変換行列をかけた後のwはx,y,zを割るのに使う (ので、0ではない)
zはデプステストに使う
0789デフォルトの名無しさん
2008/04/17(木) 16:19:53変換の仕組みについては、赤本の第3章の頭数ページ(カメラの説明)に詳しく書いてあるから一度読んでみ
0790デフォルトの名無しさん
2008/04/17(木) 22:53:11どういう風に書かれているのか知りたいのですが、
どうすれば見れるのでしょうか?
「C:\cygwin\usr\include\mingw\GL」の中に
"glut.h"は見つけたのですが(これしか入ってない)
中を見ても関数宣言だけで、具体的なアルゴリズムなどの
中身はかかれてませんでした。
どうかお願いします。
見方を教えてください。
0791デフォルトの名無しさん
2008/04/17(木) 22:58:19http://opengl.org/resources/libraries/glut.html
0792デフォルトの名無しさん
2008/04/17(木) 23:28:42ありがとうございます。しかし
この中の「GLUT 3.7 Source Code Download for Win32」 を落として
中身を見たのですが、同じく関数の宣言しか見当たりません。
すいませんが、どのファイルに載っているとか分かりますでしょうか?
0793デフォルトの名無しさん
2008/04/18(金) 00:02:440794デフォルトの名無しさん
2008/04/18(金) 00:14:01詳しいことは赤本その他を参照してもらうこととして、簡単に書くと
ローカル座標(x,y,z,w)
【モデルビュー変換】
視点座標(x,y,z,w)
【投影変換】
クリップ座標(x,y,z,w)
【透視除算】
正規化デバイス座標(x,y,z)
【ビューポート変換】
スクリーン座標(x,y,z)
とゆー流れで、途中から4要素じゃなくなるんよ。
0795デフォルトの名無しさん
2008/04/18(金) 03:04:50透視除算っていうのは単純な行列変換じゃないってことですか?
4要素のものが三要素になるってことは4x4の行列を掛け続ける限りでは起こらないと思うんですが…
っと赤本を嫁とのアドバイスが多いのでそいつでそこらへんお勉強します
0796デフォルトの名無しさん
2008/04/18(金) 05:34:210797デフォルトの名無しさん
2008/04/18(金) 12:55:28描画パイプラインの最初から最後まで、4x4行列による変換を続けるわけじゃないからね。(行列が出てくるのは投影変換まで)
透視除算では、クリップ座標(x, y, z, w)、正規化デバイス座標(X, Y, Z)とすると
X = x / w, Y = y / w, Z = z / w とゆー変換がおこなわれるよ。
ちなみにビューポート変換も行列じゃなくて、要素ごとの定数倍&定数加算。
なんでこんな除算が必要なのかは・・・いちど、OpenGLを頭の中から捨てて、3次元座標を画面に投影するプログラムを考えてみればいいと思う。
どこかしらで必ず除算する部分が出てくるからー。
0798デフォルトの名無しさん
2008/04/26(土) 22:35:21っています。
しかし読み込んだものの、上手く球体に貼り付ける方法がわかりません。
GL_OBJECT_LINEARで貼り付けると変になってしまうし、GL_SPHERE_MAPだと
回転しても(環境マッピングなんで当然)画像が回転してくれません。
どうすれば上手く画像を球体に貼り付けられますか?
0799デフォルトの名無しさん
2008/04/26(土) 23:11:55方向に回転するとおかしくなるんで、どうにかしたいんです。
ttp://marina.sys.wakayama-u.ac.jp/~tokoi/?date=20050107
0800デフォルトの名無しさん
2008/04/27(日) 00:01:34テクスチャ座標も回転させろ。
もしくはglutSolidSphere使うのあきらめろ。
0801デフォルトの名無しさん
2008/04/27(日) 00:15:13glutSolidXXX()はteapotだけがuv座標を生成する。
よって自分で球をuv付きで描く関数を作るしかない
glutSolidSphereのソースを見ると、gluSphereを呼んでいるだけの関数なのがわかる
void APIENTRY
glutSolidSphere(GLdouble radius, GLint slices, GLint stacks)
{
QUAD_OBJ_INIT();
gluQuadricDrawStyle(quadObj, GLU_FILL);
gluQuadricNormals(quadObj, GLU_SMOOTH);
/* If we ever changed/used the texture or orientation state
of quadObj, we'd need to change it to the defaults here
with gluQuadricTexture and/or gluQuadricOrientation. */
gluSphere(quadObj, radius, slices, stacks);
}
gluSphereの仕様を見るとテクスチャ座標の生成にはgluQuadricTextureを使えとある。ので>>744
0802デフォルトの名無しさん
2008/04/27(日) 00:16:30返答有難うございます。
勿論、glMatrixMode(GL_TEXTURE)で回転させてみたんですが、z軸方向の回転以外は
変に引き延ばされてしまいます。
GL_TEXTURE_2Dを使ってるのがまずいんでしょうか・・・
0803デフォルトの名無しさん
2008/04/27(日) 00:19:35おお、そうなんですか。
試してみます。情報有難うございます。
0804デフォルトの名無しさん
2008/04/27(日) 01:30:27やはり一つ一つuv座標を計算しないといけないんですね。
uv座標を緯度方向と経度方向の分割数でばらばらにするのはわかるんです。
しかし、肝心のポリゴンの方の座標がわかりません。
どうすればいんでしょうか?
0805デフォルトの名無しさん
2008/04/27(日) 01:50:35glEnable(GL_TEXTURE_GEN_X);
が有効になったまんまなんじゃないの?
gluQuadricTextureでuvを指定したのなら、自動生成はOFFにしないとだめ
sin/cos/行列を勉強すればいいと思うよ>球の座標
0806デフォルトの名無しさん
2008/04/27(日) 03:10:540807デフォルトの名無しさん
2008/04/27(日) 10:21:140808デフォルトの名無しさん
2008/04/30(水) 02:03:55るんですかね?
普通に押してもウィンドウが消えるだけで終了処理ができません。
毎回タスクマネージャで消す羽目に。
ウィンドウが表示されている内にキーボードやマウスで終了処理をさせる以外
に手はないんですか?
0809デフォルトの名無しさん
2008/04/30(水) 08:02:20ならWM_CLOSEメッセージを処理すればいいんじゃね。
それともglutを使ってって話?環境書かなきゃわかんねって
0810デフォルトの名無しさん
2008/04/30(水) 12:16:58自分はWindowsXP SP2なんですがOSに依存しない処理にしたいんです。
glut上で片付けようと思ったんですが、それらしき方法がわからなかったので。
0811デフォルトの名無しさん
2008/04/30(水) 12:53:100812デフォルトの名無しさん
2008/04/30(水) 13:54:50いので、結局タスクマネージャのお世話になってしまいます。
もしかして、コンパイル時にオプションで -mno-cygwin -mwindows としてるのが
マズいんでしょうか?
0813デフォルトの名無しさん
2008/04/30(水) 14:47:49glutInitをglutInit_ATEXIT_HACK(glut.hにある)にしてみるとか
つか×で終了しないようにすればいい
0814デフォルトの名無しさん
2008/04/30(水) 19:05:28その時はopengl.orgあたりから拾ってきたglut32.dllに入れ替えたらちゃんと終了するようになった
Windowsに標準でついてるglut32.dllとmingwの相性が悪いんだと思う
0815デフォルトの名無しさん
2008/04/30(水) 22:53:14>>813 ついつい癖で×ボタン押しちゃうんで、何とかしたいんです。
glutInit_ATEXIT_HACKですか、初めて聞きました。
ちょっと調べてみます。
0816デフォルトの名無しさん
2008/05/02(金) 23:18:13ことができません。
下のソースを元に大まかに作ったのですが、自機の移動方法や視点の移動方法がわか
らないので、ご教授お願いします。
ttp://userpages.umbc.edu/~squire/s06-437/download/pilot.c
0817デフォルトの名無しさん
2008/05/02(金) 23:35:33自機&視点の、位置&姿勢を、計算する部分はもうできてるの?
それすらできてないなら、それはOpenGLとは関係ない、幾何学やプログラミングの問題
(あるいは航空力学の問題w)なので、このスレで聞いても意味が無いかと。
もしそれらの情報がすでに計算できてるなら、その先はOpenGLの問題なので
もっと詳しいコトが分かればお手伝いできるかもですよ。
あと、そのpilot.cを元に、大まかにどう作ったのかも分からないな。
早い話がソース晒せw
0818デフォルトの名無しさん
2008/05/03(土) 12:47:58それ以上に何かしたいってことだよな?
それが何かを言ってくれると答えられるかもしれない
0819デフォルトの名無しさん
2008/05/03(土) 16:07:190820デフォルトの名無しさん
2008/05/04(日) 03:33:48しかし、オブジェクトファイルを消してリビルドするとエラーは出ません
何が原因なのでしょうか
0821デフォルトの名無しさん
2008/05/04(日) 04:57:460822デフォルトの名無しさん
2008/05/04(日) 17:55:50ればいいのかわからないんです。
マウスの動きに合わせて斜めに移動したりしたいんですが・・・
0823デフォルトの名無しさん
2008/05/05(月) 00:46:270824デフォルトの名無しさん
2008/05/05(月) 01:26:13偶然じゃね?リビルド実行を10回くらいすればはっきりすると思う。
0825デフォルトの名無しさん
2008/05/05(月) 01:44:52あとはプロジェクトを作り直してみるとか
0826デフォルトの名無しさん
2008/05/05(月) 02:31:07動的に生成、終了時にエラーってことは実行時の話?リビルドすると直るってことはコンパイル時の話?
この質問で原因がわかったら超能力者だろ。せめてそのエラーってのが何かくらい書けと
0827デフォルトの名無しさん
2008/05/05(月) 05:29:34エラーは不明なハンドルがどうたらということです
デストラクタの部分で出ました
0828デフォルトの名無しさん
2008/05/05(月) 06:32:490829デフォルトの名無しさん
2008/05/05(月) 09:22:49GLUTを使うのをやめてglfwを使うようにしないかい?
GLUTより機能が多いしプログラミングしやすいし。
欠点はGLUTほど日本語のドキュメントが充実してないって事ぐらいかな。
未だにGLUT使うのは(`・д・´)ヤメタマエ
0830デフォルトの名無しさん
2008/05/05(月) 10:15:080831デフォルトの名無しさん
2008/05/05(月) 21:17:340832デフォルトの名無しさん
2008/05/06(火) 03:46:220833デフォルトの名無しさん
2008/05/06(火) 10:57:49SDL1.2.13はちゃんと入ったのに、他のSDL_imageやらsmpegで下記のエラーで何度も
弾かれるが解決策が分からずorz
sh configure
(中略)
checking for SDL - version >= 1.2.10... no
*** Could not run SDL test program, checking why...
*** The test program failed to compile or link. See the file config.log for the
*** exact error that occured. This usually means SDL was incorrectly installed
*** or that you have moved SDL since it was installed. In the latter case, you
*** may want to edit the sdl-config script: /usr/local/bin/sdl-config
configure: error: *** SDL version 1.2.10 not found!
0834デフォルトの名無しさん
2008/05/06(火) 11:01:22なんと出る?
0835デフォルトの名無しさん
2008/05/06(火) 11:40:051.2.13
大丈夫なようなんですが・・・
試しにもう一度インストールし直すと、さっきの所は通りました。
が、今度は別の所でエラーが出てしまい、先に進めません。
無視して先に進めば、makeの時にwarningが出ました。
ざ、挫折しそうorz
(sh configure時)
checking for SDL - version >= 1.2.0... yes
checking for sqrt in -lm... (cached) yes
checking for gtk-config... (cached) /usr/bin/gtk-config
checking for GTK - version >= 1.2.1... no ←ここで別窓のコンソールが開いてエラーが出て止まる。
checking for OpenGL support... yes
(make時)
*** Warning: This library needs some functionality provided by -lstdc++.
*** I have the capability to make that library automatically link in when
*** you link to this library. But I can only do this if you have a
*** shared version of the library, which you do not appear to have.
*** Warning: This library needs some functionality provided by -lmingw32.
*** I have the capability to make that library automatically link in when
*** you link to this library. But I can only do this if you have a
*** shared version of the library, which you do not appear to have.
(もう少しWarningが続く)
0836デフォルトの名無しさん
2008/05/06(火) 12:06:060837デフォルトの名無しさん
2008/05/08(木) 16:16:03OpenGL version string: 1.2 (2.0.3)
どっちがバージョンの番号なんでしょうか?
0838デフォルトの名無しさん
2008/05/08(木) 16:42:03同時座標変換のための関数glTranslate, glRotateを用いて
glRotate(...);
glTranslate(...);
glBegin(...);
...
glEnd();
という順に記述した場合、行列の掛け順は内部的には
Rotate * Translate * 座標
ということになるんですよね?
0839デフォルトの名無しさん
2008/05/08(木) 16:48:261.2
>>838
そう
0840839
2008/05/08(木) 16:55:010841sage
2008/05/08(木) 21:20:14それぞれの図形を独立させたいのですが、どうしても一筆書きみたいになってしまいます。
下記は四角形のみを表示するプログラムの一部です
void display( void )
{
glClear( GL_COLOR_BUFFER_BIT );
glColor3f( 1.0, 1.0, 1.0 );
glBegin( GL_POLYGON );
glVertex3f( 0.1, 0.1, 0.0 );
glVertex3f(-0.1, 0.1, 0.0 );
glVertex3f(-0.1,-0.1, 0.0 );
glVertex3f( 0.1,-0.1, 0.0 );
glEnd();
glFlush();
}
0842デフォルトの名無しさん
2008/05/08(木) 21:32:430844デフォルトの名無しさん
2008/05/08(木) 21:38:02テクスチャが出ません。(glTexImage2DでGL_RGB指定)
Fedora8とGeforce3でも同様でした。
Geforceの場合、何か必要な手順があるのでしょうか?
0845sage
2008/05/08(木) 22:04:42ありがとうございます。
つまりこんな風にしたらいいんでしょうか?
glBegin( GL_POLYGON );
glVertex3f( 0.1, 0.1, 0.0 );
glVertex3f(-0.1, 0.1, 0.0 );
glVertex3f(-0.1,-0.1, 0.0 );
glVertex3f( 0.1,-0.1, 0.0 );
glColor3f(1.0, 0.0, 0.0 );
glVertex3f( 0.1, -0.3, 0.0 );
glVertex3f( 0.3, -0.2,0.0);
glVertex3f( 0.1, -0.1, 0.0 );
glEnd();
glFlush();
}
0846デフォルトの名無しさん
2008/05/08(木) 22:10:060847デフォルトの名無しさん
2008/05/08(木) 22:32:42>>844
GeForce以外だとうまく動くの?単にglEnable(GL_TEXTURE_2D)してないだけだったり。
>>845
それは途中で色が赤に変わる7角形。4角形と3角形なら2回glBegin-glEndを使う
0848844
2008/05/08(木) 22:50:31ここのOpenGLのツールで見ても、テクスチャが化けてしまってます
(FX5200だと2.1対応と出るが、1.1〜2.1まで全て化けてる)
ドライバも最新だし、どうしようもない。。。
http://www.forest.impress.co.jp/lib/sys/hardcust/vdodsply/openglexview.html
0849sage
2008/05/08(木) 23:01:16できました!
ありがとうございました!
0850デフォルトの名無しさん
2008/05/09(金) 15:37:31opengl32.dll や glu32.dll
が壊れてるんじゃないか?
0851837
2008/05/09(金) 22:25:02>()内の数字は何を表してるんでしょうか・・・?
ドライバのバージョンのようです。
teraterm越しにglxinfoを使ったため、1.2となったようです。
ローカルでやると↓になりました。端末に合わせて変わるんでしょうかね。
OpenGL version string: 2.1.2 NVIDIA 169.07
0852デフォルトの名無しさん
2008/05/10(土) 16:58:46こんな感じで↓
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image );
ウチもGeForceだが無問題。
0853デフォルトの名無しさん
2008/05/10(土) 16:59:14こんな感じで↓
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image );
ウチもGeForceだが無問題。
0854デフォルトの名無しさん
2008/05/10(土) 17:06:09ツールでも化けるってのはよくわからんが、
ttp://homepage2.nifty.com/tooshy/document/opengl.html
この辺も一応参考に。俺の環境だととりあえず
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
は指定してやらないとテクスチャが貼られない(別にGL_LINEARじゃなくてもいいが)。
0855デフォルトの名無しさん
2008/05/11(日) 04:02:40そのテクスチャのサイズを記せ
0856デフォルトの名無しさん
2008/05/11(日) 23:51:51クォータニオンを使ってマウスで回転させるソースはたくさんあって、ソースを書いたらプログラムは自分で作れました。
しかし、キーボードからの入力でクォータニオンを使って回転操作をさせるソースが見あたりません。
キーボードからだと難しいのでしょうか?
0857デフォルトの名無しさん
2008/05/11(日) 23:59:03てかクオータニオンとOpenGLは関係ないよね
0858デフォルトの名無しさん
2008/05/12(月) 00:21:05OpenGLを使用したやり方だと、セレクションモードから
ヒットレコードを見てポリゴンを判別できているのですが、
ウィンドウ座標から、ワールド座標に変換して
頂点を判別する方法を教えて頂きたいです。
何か、サンプルコードのあるところがあれば、教えて下さい。
0859844
2008/05/12(月) 00:25:46(もう一台持ってるGeForce3のLinuxPCは正しく出るんだが。。)
ASUS P5S800+GeForceFX5500はOpenGLのテクスチャは出ない、と思って諦めます。
ただ、なぜかCgやGLSLのテクスチャのサンプルは正しく動作するので
このPCではシェーダの勉強を進めますw
0860デフォルトの名無しさん
2008/05/12(月) 00:48:06gluUnProject?
0861デフォルトの名無しさん
2008/05/12(月) 23:07:26あ、いえ、gluUnProjectではなく
数学的な行列計算の場合に、
ウィンドウ座標からどのように頂点を判別しているのかが知りたいのです。
できれば、数式でなくコードで書くと、
どうなるのかが分かると有難いです。
0862デフォルトの名無しさん
2008/05/12(月) 23:25:15なので、ウィンドウ座標からワールド座標を求めるならこの逆をやればいい
0863デフォルトの名無しさん
2008/05/13(火) 23:16:38範囲はディスプレイ解像度に依存するのでしょうか?
ウインドウサイズを2048x2048としても1032x756といった中途半端なサイズ(使用している
ディスプレイはXGA)の範囲にしか書き出してくれないので困っています。
もっとも、このサイズもおかしいので解像度に依存しているかどうかも怪しいですが…
オフスクリーンでこういった巨大なイメージをレンダリングするにはどうしたらいいのでしょうか?
0864デフォルトの名無しさん
2008/05/13(火) 23:18:300865デフォルトの名無しさん
2008/05/13(火) 23:52:39早っw
やっぱりFBOですか…
拡張はあまり使いたくなかったのですが、どうがんばってもバックバッファでは
無理っぽいので使うことにします。
ありがとうございました。
0866デフォルトの名無しさん
2008/05/14(水) 02:00:21>ワールド座標→モデルビュー変換→射影変換→ビューポート変換→ウィンドウ座標
(´・ω・`)俺、質問者じゃないけど、このへんよくわからない……
ウインドウのマウスクリック相対座標を取得して、相対化して
例えばプロジェクションモードやモデルビューモードにしてGLGETとかで変換行列をえて、
逆行列を作ってかければおk?
ビューポート変換行列はどうやってとるの?
たしかに、モデルビューとプロジェクションでは足らん気がする。行列の値みる限り。
携帯だから日本語がふじゆうになるスマン
0867デフォルトの名無しさん
2008/05/14(水) 06:03:51ビューポートもglGetIntegervしてくればいい。
それらを自分でかけてもいいが、変換してくれるのがgluUnProject()
# 変換先はワールド座標ではなくオブジェクト座標
0868デフォルトの名無しさん
2008/05/14(水) 11:26:31�d
ビューポートもゲット出来るのか、それに使える関数もあるんだね
調べてみるね(^ω^)ノシ
(;^ω^).。oO(すでに逆行列求める関数とか、その他色々手作りしちゃったんだよな……おれアホだわ)
0869デフォルトの名無しさん
2008/05/14(水) 14:59:28ちゃんとGL_NORMALIZEを有効にしてるのにおかしいと思ったら、どうやらglScalef
が原因みたいなんです。
ある大きさ以上にglScalefでポリゴンを縮小すると過度に白く光ります。
どうしたら普通にシェーディングできますか?
ポリゴンを大きくするしか手だてはないんでしょうか?
0870デフォルトの名無しさん
2008/05/14(水) 17:12:290871デフォルトの名無しさん
2008/05/14(水) 17:13:52つ glEnable(GL_NORMALIZE);
と思ったらすでに有効にしているのか・・・
0872865
2008/05/14(水) 17:41:13OpenGLの拡張機能を使用するにはwglGetProcAddressで関数を取得すると思うのですが、
ビデオカードが2.0対応しているのに関数へのポインタが取得できないのはなぜでしょう?
一応OpenGL Extension Viewerにてサポートが確認されている関数(glGenRenderbuffersEXTなど)
を取得しようとしてみましたが、nullしか帰ってきませんでした。それどころか、glMaterialfといった
1.0から使用できる関数へのポインタまでもが帰ってきません。
何が原因なのでしょうか…
使用しているビデオカードはGeForce 7600 GSです。
0873デフォルトの名無しさん
2008/05/14(水) 17:49:30WGLは、GLコンテキストが存在しないとwglGetProcAddressがNULLで返る仕様になっているので、
コンテキストを生成してから取得すればOKかと。
0874デフォルトの名無しさん
2008/05/14(水) 18:11:45うまく取得できました。
が、今度はGL_INVALID_OPERATIONが… orz
なんか設定してないものがあるんでしょうか?
0875デフォルトの名無しさん
2008/05/14(水) 18:23:10原因でした。カレントを外さずにそのままやるとうまくいきました。
ありがとうございました。
0876デフォルトの名無しさん
2008/05/14(水) 21:40:00スケールによって点光源との角度が変わってスペキュラで白く光るとかじゃないの?
ポリゴンの大きさで照明処理ができないなどということはない
0877デフォルトの名無しさん
2008/05/15(木) 00:45:13やっぱりglScalefである一定以上縮小した時に現象が発生します。
0878デフォルトの名無しさん
2008/05/15(木) 01:33:35ミップマップが適用されちゃってるってコトはない?
なんにしても、状況が再現する最小のコード片があればいいんだけど・・・。
0879デフォルトの名無しさん
2008/05/15(木) 14:15:48glLoadMatrixなどに渡す配列は行優先(と言っていいのか判らないのですが)で
Direct3DのD3DMATRIXとメモリ上の並びは同じで合ってるでしょうか?
つまり配列[12][13][14]にそれぞれ平行移動量XYZが入る形という意味で。
同じであれば、OpenGL=列優先、Direct3D=行優先で違うという話をよく見るのですが、
メモリ上の配列が違うという意味ではなく、ドキュメント表記が違うだけで
内部メモリの順序はOpenGLもDirect3Dもどちらも同じと考えて良いですか?
0880デフォルトの名無しさん
2008/05/15(木) 15:44:58GLfloat nMat[16];
glGetFloatv(GL_MODELVIEW_MATRIX, nMat);
などとすると、メモリ上の位置はわかる。
0881デフォルトの名無しさん
2008/05/15(木) 23:13:05[12][13][14]には平行移動成分が入るます。
それを、
列ベクトルの左に掛ける行列の4列目と見るか、
行ベクトルの右に掛ける行列の4行目と見るか、
は解釈の違いに過ぎないので、どちらであるとも言えまする。
まぁ、OpenGLではベクトルを列ベクトルで表記することが多いので、
Matrixの読み出し/格納は列優先でおこなわれると覚えたほうが分かりやすい鴨。
0882デフォルトの名無しさん
2008/05/15(木) 23:35:06Direct3Dではrow major
OpenGLでは行列の後ろからベクトルを掛ける
Direct3Dでは行列の前からベクトルを掛ける
ってことは・・・?!
0883デフォルトの名無しさん
2008/05/16(金) 01:50:30どうもありがとうございました。
自前で行列計算してワールド変換に使用していて、D3DからGLに持っていくときに
多くのサイトで行列は転置する必要があると書いてあったのですが、
その通りやってもどうも正常に動作しないのでおかしいと思っていたところです。
0884デフォルトの名無しさん
2008/05/16(金) 03:37:58大抵の3Dとか数学とか物理だと行列xベクトルの書き方のほうが多いので
Direct3D使うときも行列xベクトル+column majorでやってました。
あんまりスレとは関係ないけど、みんな自前で行列やベクトル計算のクラスや関数を用意してない?
そろそろ3D用の標準となるそういうライブラリが出てこないかな・・・。
探せばいいのがあるのかもしれないが。
0885デフォルトの名無しさん
2008/05/16(金) 16:47:59貼られますが、あれはどういう手法でインタラクティブに表示しているのですか?
壁テクスチャ用のUV座標とは別に弾痕用のUV座標があると思うのですが、そもそもUVの位置が
未定だからどうやって決めているのかなと思って。
あと幾重にも弾痕が重なるってことはUVCoordもたくさんあるのですかね?
概念だけでも教えていただければ助かります。
0886デフォルトの名無しさん
2008/05/16(金) 19:55:01描くときのUVを変えればよい。テクスチャ行列( glMatrixMode(GL_TEXTURE) )について調べてみる
0887デフォルトの名無しさん
2008/05/16(金) 22:05:230888885
2008/05/16(金) 22:15:51ありがとうございます。DirectXで解説しているサイトがいくつかありました。
それによると投影テクスチャでやるっぽいです。
けどいろいろやり方があるらしいですね。お二方の方法も勉強してみます。
0889elite vipper
2008/05/16(金) 23:45:30大抵のゲームでは弾痕用のポリゴンを壁に貼り付けるらしい。
こういうのをデカール(decale)っていうらしい。
普通に壁面にポリゴンを張って弾痕を前に表示されるようにするには
Zバッファをオフにしてz値でソートして順番に表示するか
ある程度壁から離した場所に弾痕用ポリゴンを置かなくちゃならない。
そうしないとZバッファ法の誤差でノイズみたいのがでるからね。
3Dグラフィックス数学の本には
Zバッファの精度を考慮してどれだけ浮かすか(深度値オフセット)を計算する方法が書いてあるよ
0890デフォルトの名無しさん
2008/05/19(月) 20:58:50したとき、グラフィックメモリにはheight*width*3bitだけ
使われるという解釈で良いですか?
0891デフォルトの名無しさん
2008/05/19(月) 21:33:220892デフォルトの名無しさん
2008/05/19(月) 21:41:30正確にどれだけ使われるかは分からないが、普通大体そのくらいではある
0893デフォルトの名無しさん
2008/05/19(月) 22:32:100894890
2008/05/19(月) 22:39:220895デフォルトの名無しさん
2008/05/19(月) 23:23:300896890
2008/05/19(月) 23:55:280897デフォルトの名無しさん
2008/05/20(火) 00:32:140898デフォルトの名無しさん
2008/05/20(火) 02:16:09ウィンドウズビットマップも選択できるけどな。
0899デフォルトの名無しさん
2008/05/22(木) 20:42:32できればCgであるとありがたいです。GLSLでもよいですけど。
くっきりした影のサンプルについては、以下を見ました。
ttp://marina.sys.wakayama-u.ac.jp/~tokoi/?date=20060601
0900デフォルトの名無しさん
2008/05/22(木) 21:26:21http://developer.nvidia.com/object/sdk_home.html
個別に見るならこっち
http://developer.download.nvidia.com/SDK/9.5/Samples/samples.html#simple_soft_shadows
0901デフォルトの名無しさん
2008/05/22(木) 21:38:00SDK10には新しいサンプルしか入ってないのな
0902デフォルトの名無しさん
2008/05/22(木) 22:14:50それで境界決めるのを細かくやればソフトシャドウになりそうな…ならないな
0904デフォルトの名無しさん
2008/05/23(金) 01:00:39もしかしてglBeginとglEndの間にglBindTextureを呼び出すのってまずいですか?
0905デフォルトの名無しさん
2008/05/23(金) 01:34:580906デフォルトの名無しさん
2008/05/23(金) 01:38:24glBegin〜glEndの間に呼べるGLコマンドは極めて限られておりまする。
0907デフォルトの名無しさん
2008/05/24(土) 03:36:22テクスチャマップすることって出来ないんでしょうか。
やりたいことはこの画像のように
ttp://alb.hp.infoseek.co.jp/img/shadow_map_001.png
(ttp://alb.hp.infoseek.co.jp/opengl_shadow_map.htmlより)
左上にdepth textureの内容を表示することです。
GL_LUMINANCEなテクスチャにCPU経由でglGetTexImage,glTexImageか、
framebufferに一度描写して、又はFBOにattachしてglCopyTexImageするしかありませんか?
0908デフォルトの名無しさん
2008/05/24(土) 11:53:55glTexParameteri( GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE );
をやっておけばLuminaceテクスチャとして扱われるよ
0909デフォルトの名無しさん
2008/05/24(土) 12:03:51やって出来なかったから書き込みました。説明不足すみません。
そんでもって自己解決。
GL_TEXTURE_COMPARE_MODEをGL_NONEにしてからじゃないとダメなんですね。
0911デフォルトの名無しさん
2008/05/27(火) 08:54:440912デフォルトの名無しさん
2008/05/27(火) 13:54:290913デフォルトの名無しさん
2008/05/30(金) 06:32:29簡単なコードで教えてもらえないでしょうか。
空間をグルグル回ってる状態の場合は陰影が出るようにはできてます。
GLfloat ambient[] = [0.2f, 0.2f, 0.2f, 1.0f];
GLfloat diffuse[] = [1.0f, 1.0f, 1.0f, 1.0f];
GLfloat specular[] = [1.0f, 1.0f, 1.0f, 1.0f];
// GLfloat position[] = [0.0f, 5.0f, 5.0f, 0.0f]; // 近い
GLfloat position[] = [1.0f, 10.0f, 10.0f, 0.0f]; // 遠い
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient.ptr);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse.ptr);
glLightfv(GL_LIGHT0, GL_SPECULAR, specular.ptr);
glLightfv(GL_LIGHT0, GL_POSITION, position.ptr);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_AUTO_NORMAL);
glEnable(GL_NORMALIZE);
glEnable(GL_DEPTH_TEST);
0914デフォルトの名無しさん
2008/05/30(金) 07:36:07距離による減衰までやりたいならGL_CONSTANT_ATTENUATIONとかで調べる
0915デフォルトの名無しさん
2008/05/30(金) 20:28:160916デフォルトの名無しさん
2008/05/30(金) 21:29:370917デフォルトの名無しさん
2008/05/30(金) 23:10:300918デフォルトの名無しさん
2008/05/30(金) 23:18:170919デフォルトの名無しさん
2008/05/30(金) 23:59:25でもGLって使ったこと無いですし
それなのに情報が少なすぎ・・・
XPとRADEON HD 2600 XTで使えるでしょうか。
0920デフォルトの名無しさん
2008/05/31(土) 00:28:27後退はできるようになったのですが、前進がどうしてもしてくれません。どうしたらいいでしょうか?
void idle(void)
{
dist = fmod( dist + 0.05*d_dist, 32.0 );
theta = fmod( theta + 0.5, 360.0 );
glutPostRedisplay();
}
void myKbd( unsigned char key, int x, int y )
{
if ( key == KEY_F) d_dist =-0.5;
if ( key == KEY_B) d_dist =-0.5;
if ( key == KEY_ESC ) exit( 0 );
}
0921デフォルトの名無しさん
2008/05/31(土) 00:55:51KEY_FもKEY_Bも両方マイナスになってるように見えるが
0922920
2008/05/31(土) 01:04:56いろいろ試していてFを元に戻すのを忘れていました。
Fが+です。
0923デフォルトの名無しさん
2008/05/31(土) 01:17:480924デフォルトの名無しさん
2008/05/31(土) 01:18:58FやBを押すとd_distやdistがどう変化するか出力してみなよ
勘でだけど、+0.5でもダメなら、KEY_Fが'f'になってないとかあたりか
0925デフォルトの名無しさん
2008/05/31(土) 01:19:29Fが+なら逆向きに動くんでないの?
あとはfmodの使い方の問題かな。
0926デフォルトの名無しさん
2008/05/31(土) 11:08:13レンズフレアじゃないか?
0927デフォルトの名無しさん
2008/05/31(土) 11:13:53ジオメトリシェーダ使ってないのでよくわからないが、
Cg なのか GLSL なのかによって、動くかどうか
変わってくるんじゃないかな>RADEON HD 2600 XT
ATIならGLSLの方がいいのかな?
0928デフォルトの名無しさん
2008/05/31(土) 12:10:03OpenGLからジオメトリシェーダを使うのは現状WindowsとRadeonの組み合わせでは無理
ドライバが対応してないから、MacかGeForce使え
IrrlichtはOpenGL2.0対応みたいだから2.1対応させるのは簡単そう
2.0と2.1の違いってあまり無いんだがなんで2.1対応させる必要があるんだ?
ドライバが対応さえしていればジオメトリシェーダ対応させるのはそれほど大変でもない
しかしOpenGLの知識が無いとかなり難しいと思うぞ
0929デフォルトの名無しさん
2008/05/31(土) 12:14:15俺はRadeonHD持ってないので確実なことはわからないが、
なるべく新しいドライバ入れてGL_EXT_geometry_shader4拡張があるかどうか調べてくれ
あれば使える
0930デフォルトの名無しさん
2008/05/31(土) 14:46:03そんな名前の性格悪いおっさんが、txtにそういう情報表示させるツールがあったな
なんかGLのメーリスが検索に当たるたび
なんでこんな性格わりーんだろーと思う
0931デフォルトの名無しさん
2008/05/31(土) 20:18:54リヌクスのコミュも似たようなもんだよ。
2chで言っても始まらんが、あの手のヲタは
『知ってるが、お前の態度が気に入らない』を素でやってるタイプがほとんど。
0932デフォルトの名無しさん
2008/05/31(土) 20:40:02回答者はお前らのカーチャンでも先生でもないんだぞ
0933デフォルトの名無しさん
2008/05/31(土) 21:50:210934デフォルトの名無しさん
2008/05/31(土) 23:37:52このページに載ってある一番下のサンプルプログラムを
cygwinでコンパイルしたんですけど描画結果が点線の三角形ではなく
普通の直線の三角形になってしまいました
glEnable(GL_LINE_STIPPLE);
glLineStipple(1 , 0xF0F0);
この2行を反映させるのってどうすればいいですか?
他にも点線が描画されるような簡単なものも書いてみたけどやはり結果は普通の直線でした
0935デフォルトの名無しさん
2008/05/31(土) 23:55:21ソフトエミュになるかもだけど
0936デフォルトの名無しさん
2008/06/01(日) 12:04:02あるいはドライバのバグ
0937デフォルトの名無しさん
2008/06/01(日) 12:26:55VS2005 + Geforce8800GT
の環境ならうまくいったぞ。
そちらのグラボは何?
0938デフォルトの名無しさん
2008/06/01(日) 14:36:13仕様表を見たら
VIA/S3 Graphic社製 UniChrome Pro (VIA社製K8N800 チップセットに内臓)
となっていました
0939sage
2008/06/01(日) 15:28:28glMaterialでアクセス違反が発生します。
コンパイルは通ります。
glMaterialを使用してる部分をコメントアウトすると実行できますが
描画がきちんと出来ません。
glBegin(GL_QUADS);
glNormal3d(0.0, 1.0, 0.0);
glMaterialfv(GL_FRONT, GL_DIFFUSE, yellow);
for (j = -30; j < 30; j++) {
for (i = -30; i < 30; i++) {
//glMaterialfv(GL_FRONT, GL_DIFFUSE, ground[(i+j) & 1]); アクセス違反
glVertex3d((GLdouble)i, -1.0, (GLdouble)j);
glVertex3d((GLdouble)i, -1.0, (GLdouble)(j + 1));
glVertex3d((GLdouble)(i + 1), -1.0, (GLdouble)(j + 1));
glVertex3d((GLdouble)(i + 1), -1.0, (GLdouble)j);
}
}
glEnd();
ソースはこのような感じです。
groundやyellowにはRGBA色を格納しています。
もしエラーの起きる原因をお知りであれば、ご教授お願いします。
0940sage
2008/06/01(日) 15:30:520941デフォルトの名無しさん
2008/06/01(日) 15:31:420942デフォルトの名無しさん
2008/06/01(日) 15:53:07(i+j)&1 ってのはi+jが偶数か奇数かで0,1を選択してんの?
(自分は臆病なんで(i+j+60)%2ってやるかな。)
デバッガが使えないとしても、ground[0]やground[1]に固定してエラーが出ないか調べたり、
ねんのため(i+j)&1が幾つになるか表示させてみたりすれば
0943デフォルトの名無しさん
2008/06/01(日) 16:07:49はい、偶数奇数を選択しています。
そして赤と白のチェック柄を出すために使用しています。
上記のソースは床の描画で、
その床を囲むように、床と同じような処理で壁も描画しています。
壊れたような表示はされますが、アクセス違反は発生しません。
エラーが起きる瞬間は
j=24
i=7で
0x02b6cad3でハンドルされていない例外が発生しました:
0xC0000005:場所0x02b43e88に書き込み中にアクセス違反が発生しました。
となります。
0944デフォルトの名無しさん
2008/06/01(日) 16:15:52http://www.vipper.org/vip833417.jpg.html
0945デフォルトの名無しさん
2008/06/01(日) 16:36:18ソースの一部だけじゃわからないので、推理だがw
iとjがint型ではなくfloatとかで宣言されてんじゃね。
他にエラーの原因があるかもしれんからglGetErrorとかもみたらいいと思うよ
0946デフォルトの名無しさん
2008/06/01(日) 17:04:01ちなみに>>939のコードそのままでやってみたら表示した
GLfloat ground[2][4] = { {1,1,1,1},{1,0,0,1}};
な感じで。原因は他の場所かも
0947デフォルトの名無しさん
2008/06/01(日) 18:06:15わざわざありがとうございます。
glGetErrorも試してみたのですが常に0が返ってきました。
原因を探しているのですが、検討がつきません。
友達のPCで試したところ通常通り描画できました。
また他の友達のPCで試したところ、描画は944のようになりましたが
エラーは出ませんでした。
0948デフォルトの名無しさん
2008/06/01(日) 18:21:02こんな感じで↓
・・・
for (i = -30; i < 30; i++) {
//glMaterialfv(GL_FRONT, GL_DIFFUSE, ground[(i+j) & 1]); アクセス違反
glBegin(GL_QUADS);
glVertex3d((GLdouble)i, -1.0, (GLdouble)j);
glVertex3d((GLdouble)i, -1.0, (GLdouble)(j + 1));
glVertex3d((GLdouble)(i + 1), -1.0, (GLdouble)(j + 1));
glVertex3d((GLdouble)(i + 1), -1.0, (GLdouble)j);
glEnd();
}
・・・
0949デフォルトの名無しさん
2008/06/01(日) 18:42:18ありがとうございます。
データを送りすぎていたみたいですね。
極端に重たくなってしまったので、これから改良していこうと思います。
本当にありがとうございました。
0950デフォルトの名無しさん
2008/06/01(日) 18:49:59改良には頂点配列を使うといいぞ。
0951デフォルトの名無しさん
2008/06/01(日) 18:57:19さっそく赤本見てみます!
0952919
2008/06/01(日) 22:01:49GL_EXT_geometry_shader4 was not found, but is available in driver version 2.0 ATI-1.5.24
となっています。Catalyst8.5で入るのでしょうか?(現在8.4)
>>928
IrrlichtはOpenGL2.0ではなくて1.5のはずです。
0953919
2008/06/01(日) 22:34:110954デフォルトの名無しさん
2008/06/01(日) 22:38:160955デフォルトの名無しさん
2008/06/02(月) 01:08:17じゃあダメだな、諦めるしかない
ttp://irrlicht.sourceforge.net/features.html
ここにOpenGL2.0って書いてあるから2.0対応はしてると思ったんだが
最低1.5でも動くってならそうかもしれん
Extensions ViewerのDatabaseで見付けたからあるのかと思ったが、
どうもMacのVM内で動かした奴みたいだな
0956デフォルトの名無しさん
2008/06/02(月) 06:20:590957デフォルトの名無しさん
2008/06/02(月) 10:42:050958919
2008/06/03(火) 23:03:08そうなんですか・・・動かないんですか。
ttp://irrlicht.sourceforge.net/features.html
確かに2.0と書いてありますね。でもExampleのソースコード中では1.5と表示されていました。
ところで、Linuxでもジオメトリシェーダーの対応状況は同じですか?
0959デフォルトの名無しさん
2008/06/05(木) 21:45:48大量に描画するプログラムを作っています。
描画の高速化を検討しているのですが・・・・
OpenGLを使うならば、円弧を線分に分割、幅付きラインの外形抽出、テセレーション等の前処理が必要なのでしょうか?
そうであれば、描画以前の処理に時間が掛かりすぎてしまいます。
OpenGLでなくても良いですので、何か良い方法やツールを御存知の方がいれば
教えていただけないでしょうか?
よろしくお願い致します。
0960デフォルトの名無しさん
2008/06/05(木) 23:10:02隠蔽されてるか自分でやる必要があるかの違いくらいだ
その程度の処理がボトルネックになるんだったら何で描画しても速度変わらないぞ
.NETが使えればWPFなんかどうだろう
GDI+もいいが遅いと聞く
cairoでglitzバックエンド使えばOpenGLで描画してくれる
あとは自分でビットマップをレンダリングしてそのままコピーでもいいんじゃないだろうか
0961959
2008/06/05(木) 23:42:32ありがとうございます。
> その程度の処理がボトルネックになるんだったら何で描画しても速度変わらないぞ
ペン幅付きポリラインも面も何千何万とあるので、どうやら「その程度」で済みそうにないです・・・・
> cairoでglitzバックエンド使えばOpenGLで描画してくれる
まずはこれを検討してみます。
0962デフォルトの名無しさん
2008/06/05(木) 23:50:26幅付きラインの外形とかは一度だけ計算して保存しとけばいいんじゃないか
メモリ食うけど
0963デフォルトの名無しさん
2008/06/05(木) 23:54:21いや、960さんが言ってるのはそーゆーことじゃなくて、円弧の分割だとかは結局GDI内部で
CPUを使ってやってるだろうから、APIにやらせようが、APIに渡す前に自前で計算しようが、
速度は変わらないよってことでしょ。
(一般化しなくて良い分、自前でやる方が速くできるかもね)
ちなみにテセレーションはgluTessほにゃらら関数を使うと便利。
0964デフォルトの名無しさん
2008/06/06(金) 00:07:58geometry shader使えばテセレーションもGPUで計算できて高速化できるんじゃなかろうか。
とりあえずVertex shader、Geometry shaderについて調べてみたら
0965デフォルトの名無しさん
2008/06/06(金) 03:43:250966デフォルトの名無しさん
2008/06/06(金) 07:21:400967デフォルトの名無しさん
2008/06/06(金) 19:14:570968デフォルトの名無しさん
2008/06/07(土) 03:43:19空間の設定が悪いのかと思っていろいろ試してます。
0969デフォルトの名無しさん
2008/06/08(日) 02:33:34http://pitecan.com/info/winglut.htmlを参考にしました。
現在、C言語による画像処理演習という本を参考にサンプルプログラムを
コンパイルしていたのですが行き詰ってしまいました。
http://www.shoko-do.co.jp/download.html#ISBN978-4-7856-3150-5
bmpを画面に表示するプログラム(cpictbmp.c)なのですが、サンプルのbmpでなく
自前のbmpをロードさせようとすると表示されませんでした。どのようなことが原因
なのでしょうか?
他にもプログラム実行時に出るウィンドウを消してもコマンドラインの入力が効かない
状態なので毎回Ctrl-cで終了しています。
お分かりになる方どうかご教授お願いします。
0970デフォルトの名無しさん
2008/06/08(日) 06:33:22わからなかったもので…
二つのベクトルの角度は内積で求まると思いますが、出る結果は
cosなので、右回転か左回転かを知ることができません。
回転方向を知る方法はありますでしょうか?
0971デフォルトの名無しさん
2008/06/08(日) 08:21:15右か左を語るってことは、二つのベクトルと同一平面に無いなにか別のベクトルがあるはず。例えばZ軸とか法線とか
二つのベクトルの外積と、その基準になるベクトルの内積の符号で判断できると思う
0972デフォルトの名無しさん
2008/06/08(日) 10:12:16なるほど!
本当に助かりました、ありがとうございます。
0973969
2008/06/08(日) 21:04:58256色でないときちんと表示できないものだったのに
違うフォーマットのものを読み込んでいました。
ただ毎回Ctrl-cで終了せざるを得ない状況は続いています。
0974デフォルトの名無しさん
2008/06/18(水) 15:17:17OpenGLとFLASHのどちらが向いているのでしょうか?
0975デフォルトの名無しさん
2008/06/18(水) 20:54:25FLASHとこたえとく。
0976デフォルトの名無しさん
2008/06/18(水) 21:29:20まずはどちらがどんなものなのか、もっと詳しく調べることをおすすめする。
0977デフォルトの名無しさん
2008/06/18(水) 21:39:523DじゃないならOpenGLと比較する意味ないからな。
現在進行形で使ってる身から言うと、3D目的でFlashはやめといたほうがいい。
貧弱な環境で試行錯誤しながらコーディングするっていう楽しさはあるけど、
どうしてもブラウザ上で実行しないといけない案件だとか、特殊な状況じゃな
いならOpenGLがいいよ。
0978デフォルトの名無しさん
2008/06/18(水) 21:52:59それまでにflashの環境が良くなるんじゃないか?
0979デフォルトの名無しさん
2008/06/18(水) 23:46:28現在、3Dプログラミングの制作+研究をやろうかと考えており
一応1年間プログラミングの勉強を経験してきたので
OpenGLをやってみたいという思いがあったのですが
手軽だからという理由でFLASHを勧められたことで迷い、質問させていただきました。
ですが、やはり完成度の高い作品を作りたいので、元々の希望通り
OpenGLをやることにします。
アホみたいな質問に応えていただきありがとうございました。
0980デフォルトの名無しさん
2008/06/19(木) 00:30:56俺はIE嫌いだけど。
0981デフォルトの名無しさん
2008/06/19(木) 01:17:450982デフォルトの名無しさん
2008/06/19(木) 05:27:41Astroの話?だったら期待はずれだよ。テクスチャ付き三角形を表示
できるようになるだけ。
速度はだいぶ改善されるが、それでもハードウェアをフルに生かせる
OpenGLと比べられない。
それと、Flashの3Dの手軽さはOpenGL+3Dエンジンの手軽さのそれと一緒。
プログラミング経験たった一年じゃ、モデル表示するだけで数ヶ月は必要
だろうから、何かしらの3Dエンジンを使うことをオススメしとく。
Silverlightもそうなんだけど、なんで普通の3Dサポートしないかな。
絶対需要あるのに。
0983デフォルトの名無しさん
2008/06/19(木) 19:49:52プログラミングなんて入門からOpenGLのアニメまで半年で出来るのが普通
http://ciee.t.u-tokyo.ac.jp/MimaSearch/SyllabusInfo?recId=120770
0984デフォルトの名無しさん
2008/06/19(木) 20:39:57そのサイトおもしろいね。関連する授業の図が凝ってる
0985デフォルトの名無しさん
2008/06/19(木) 21:08:52一応偏差値60後半程度の国立の情報系だけど、授業でやるのって基本的に教科書
なぞる程度だから、それだけで応用できるかって言ったらまた別問題だよ。
それと1〜2年次でプログラミングの基礎やると思うから、半年ってのは言いすぎ。
0986デフォルトの名無しさん
2008/06/19(木) 21:22:33レス数が950を超えています。1000を超えると書き込みができなくなります。