1 名前:デフォルトの名無しさん mailto:sage [2005/09/09(金) 21:25:59 ] OpenGL 2.0 専用スレ。 ここでは、OpenGL の猛者のみが生き残る―――
594 名前:健介 [2007/12/25(火) 00:24:22 ] 掃除機セマンテック
595 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 04:19:35 ] cg のループ回数(もしくは行数)についてなのですが。 fragment shader (CG_PROFILE_ARBFP1): GeForce7900GS で void main(out float4 color : COLOR){ float i; float4 totalCol = 0; for(i = 0; i < 200; i++){ totalCol += 0.001; } color = totalCol; } だとちゃんと動くのですが、ループの回数を200から300に増やすと、 CG_COMPILER_ERROR になるのです。なにか制限とかってあるのでしょうか?
596 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 04:21:29 ] タブが消えてしまった orz void main(out float4 color : COLOR){ float i; float4 totalCol = 0; for(i = 0; i < 200; i++){ totalCol += 0.001; } color = totalCol; } こうです。
597 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 04:23:54 ] あれ? スペースも消えた。 Live2ch で書き込んでるせいですかね。 ごめんなさい。
598 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 08:50:12 ] いや,重複した半角のスペースは消される
599 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 09:11:08 ] ARBFP1というかARBFragmentProgramは動的ループをサポートしてないから コンパイル時にループを全部展開されて命令数が足りなくなる よって動的ループをサポートしてる他のプロファイルを使いましょう
600 名前:595 mailto:sage [2008/01/26(土) 15:54:22 ] ありがとうございます。 やっぱり制限数があるのですね。 他のプロファイルを試してみます。
601 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 16:01:28 ] ていうかこのスレは隔離スレなので質問は本スレ推奨
602 名前:デフォルトの名無しさん [2008/01/26(土) 18:22:17 ] nvidiaのfragment_programっておかしくね?? これだと、なんか固定機能しか使えないように見えるが 実際PS2.0できるじゃん。 fragment_program2だとPS3.0だし ここは全員でおかしいと主張すべきだ。
603 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 18:35:39 ] 何がおかしいんだか分からんが、それならば NV_geometry_program4とかNV_fragment_program4とかNV_vertex_program4を 使えばSM4.0相当になるうえにWindowsXPでも動いてしまう この方がおかしいと思わないか?
604 名前:デフォルトの名無しさん [2008/01/26(土) 18:44:59 ] もっと分かりやすくすべきだ。 固定機能しか使えないのならば、fragment_program_kotei_fanction とか、すべきだ。 PS2.0なら、fragment_program2 PS3.0なら、fragment_program3 とわかりやすくすべきなのだ。 だから、ARB_fragment_programがPS1.1までとかいう、変な大間違いが出てくるのだ。
605 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 19:34:53 ] PSやらSMはDirect3Dの基準だぞ
606 名前:595 mailto:sage [2008/01/26(土) 21:12:47 ] Cg 2.0 をインストールし(1.1だった)、CG_PROFILE_FP40 プロファイルを使用したら 動的ループができるようになりました。 ちなみに、CG_PROFILE_FP30では、動的ループは無理でした。 ただ、別の問題が出てきました。 void main(uniform float size, out float4 color : COLOR){ float i; float4 totalCol = 0; for(i = 0; i < size; i++){ totalCol += 1; } color = totalCol / size; } だと、sizeをいくつにしても、色が白になるはずなのですが、 size 250以上になるとだんだん色が薄くなっていきます。ループの中が 250までしか展開できてないようです。
607 名前:595 mailto:sage [2008/01/26(土) 21:18:47 ] 続き で、以下のようにループ部分を分割し、試しにsize=400にして実行したら、 void main(uniform float size, out float4 color : COLOR){ float i; float4 totalCol = 0; for(i = 0; i < size - 200; i++){ totalCol += 1; } for(i = 200; i < size; i++){ totalCol += 1; } color = totalCol / size; } 見事に白色になりました。 GeForce8800 だったら、こういうでかいループも処理できるんでしょうか?
608 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 14:22:52 ] fp40のループは最大256ループまでだそうだ GeForce8系で使えるgp4fpなら制限無しだな
609 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 14:36:30 ] 正直MAXまでの何かってのはやってはいけないことだな 例えば命令スロットが512なら、 512を目一杯使わねばならない状態になるのはいかんこと。
610 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 16:20:13 ] リアルタイムレンダリングみたいな用途じゃ無いならいいんじゃない むしろGPGPUやオフラインレンダリングとかなら出来るだけ詰め込んで GPUに処理を肩代わりさせたいんじゃないのかな
611 名前:595 mailto:sage [2008/01/27(日) 20:05:20 ] 256まででしたか。 とりあえず分割ループでごまかすことにしました。 8800欲しい・・・ ちなみに、GPGPUなプログラムです。
612 名前:デフォルトの名無しさん mailto:sage [2008/02/04(月) 13:04:10 ] main(out float4 color){ TexColor = tex2D(tex, texcoord);// テクスチャの色 PolColor = Lighting();// ポリゴンの色 color = TexColor * PolColor; } Cgのフラグメントシェーダの色々省略したコードなのですが、テクスチャをマッピングしないポリゴンがある場合、 colorが変な色になります。ポリゴン毎にテクスチャの存在の可否を指定する変数を渡して if(texExist) color = TexColor * PolColor; else color = PolColor; とすれば意図通りの動作はするのですが、このような処理にするしかないのでしょうか?
613 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 00:55:33 ] テクスチャ設定してないのにテクスチャ読めと命令してるんだから変な色になるのは当然だろ テクスチャ無い時はサンプリングしないって分岐はごく自然な処理だと思うが 他にどうなって欲しいてっんだ?
614 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:01:02 ] >>612 分岐処理が嫌だったらシェーダ2種類作ったらいいんじゃない?
615 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 07:51:42 ] 適当に1x1の白テクスチャでも読ませればおk
616 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 17:49:45 ] >>615 それが一番楽っぽいな。 余分な負荷は気にしない。
617 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 23:11:26 ] >シェーダ2種類作ったらいいんじゃない? 2種類をCgランタイムでどう呼び出すのかわからない
618 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 01:23:24 ] テクスチャの有り無しでcgBindProgramに渡すプログラムを変えればいいだけだよ
619 名前:612 mailto:sage [2008/02/06(水) 01:52:25 ] >>615 >>618 今は cgGLBindProgram(); sceneGraph->DrawAll(); cgGLBindProgram(NULL); こんな感じで全部のオブジェクトを一気に描画してるので, シェーダ2種類作ってポリゴン毎にバインドするシェーダを切り替えるのは 遅くなっちゃうのかなと思って他にいい方法がないか考えてました。 頭で考えてただけで実際遅くなるかとかの検証はしてなかったのでやってみます。 書いてて思ったんですけど同じマテリアル(テクスチャ)を使う ポリゴンをグルーピングしていればシェーダ切り替える方法は 使いやすそうですね。 どっちのやり方も参考になりました、ありがとうございます。
620 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 02:11:20 ] 描画時にマテリアルでソートするのは高速化の常套手段だね
621 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 00:36:30 ] 保守
622 名前:デフォルトの名無しさん [2008/07/19(土) 13:22:03 ] コンパイルすると Error: 'C:\A\TOOLS\BCC\LIB\GLU32.LIB' contains invalid OMF record, type 0x21 (po ssibly COFF) と出ます IMPLIB glut32.lib glut32.dll をして、glut32.libを上書きしてるんですがダメです
623 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 13:38:31 ] エラーをよく読め・・・ glut32.lib じゃないだろう
624 名前:デフォルトの名無しさん mailto:sage [2008/07/19(土) 15:44:55 ] ありがとうございます。解決しました。
625 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 19:48:28 ] ttp://www.kumaryu.net/cgi-bin/diary/?date=20080804#p02 S3本気だなー ATIはいつ本気出すんだー
626 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 22:57:14 ] Khronos BOFs * OpenGL 3.0 Specification Overview * OpenGL hardware and driver plans - AMD, Intel, NVIDIA * Developer's perspective on OpenGL 3.0 * The new Khronos OpenCL Working Group and how that affects OpenGL * and more... AMDもいつまでも黙ってはいないぞ どちらかと言えば微妙な拡張よりこっちの方が期待したいし できればIntelもな…
627 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 23:30:50 ] AMDはさっさと拡張の仕様を公開しろ。 ドキュメントがない拡張が何個溜まってると思ってるんだ。
628 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 10:25:36 ] OpenGL3.0情報 ttp://www.opengl.org/news/permalink/the_khronos_group_announced_today_it_has_released_the_opengl_30_specificati/ ttp://www.khronos.org/news/press/releases/khronos_releases_opengl_30_specifications_to_support_latest_generations_of/
629 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 11:31:52 ] opengl.orgのmessage boardでは不満の嵐だな 「散々待たせといて結局これかよ!」みたいな
630 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 12:40:54 ] せめて3.0で削除された仕様は書かないでおいてくれると読み易かったんだがな あとせめてテクスチャ回りを整理してほしかった
631 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 13:53:54 ] www.sgi.com/company_info/newsroom/press_releases/2008/september/opengl.html
632 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 18:43:03 ] やっとまともなライセンスになったか
633 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 03:30:59 ] 保守
634 名前:デフォルトの名無しさん mailto:sage [2008/10/29(水) 15:59:00 ] >>83 鹿バネ(´∀`)
635 名前:デフォルトの名無しさん [2008/11/30(日) 19:03:58 ] OpenGLnのmain関数をスレッドで呼び出して使おうと思っているのだが、display()関数のオブジェクトカラーを引数で渡した値で更新したいんだ。 マルチスレッドで値を渡すことはできるのだが、OpenGL側でどうやって、display()関数に値を綿したらいいのかわらかない。 つまり、 プログラム1 --> OpenGLプログラム(スレッドで生成) ▼ ▼ 値の更新 色変更 ▼ ▼ 値の更新 色変更 … … ってことをしたいんだ。
636 名前:デフォルトの名無しさん [2008/12/10(水) 22:54:50 ] Snow Leopardの準備は万端? 「OpenCL 1.0」の仕様が公開[08/12/09] pc11.2ch.net/test/read.cgi/pcnews/1228830599/
637 名前:デフォルトの名無しさん [2008/12/21(日) 12:01:23 ] glRotatef(90,1,0,0); glutSolidCube(1.0); このあとに glTranslatefかglrotatefを適当にいれて glSolidSphere(1.0,10,10); より立方体の回転起動に垂直の起動で球が回転するようにするには どうやればいいですか?
638 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 12:09:47 ] まずは日本語で頼む
639 名前:デフォルトの名無しさん [2008/12/21(日) 14:05:21 ] glRotatefとglTranslatefを組み合わせてx軸周りの回転移動をy軸周りの回転に させることはできますか? glPopMatrix()とglPushMatrix()を使わないで
640 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 01:17:00 ] GLSLで色を出力するとき、というか、OpenGLの質問なんですが、 OpenGLでは各色の値の範囲が0〜1ですが、これってGDI上での0〜255の範囲に リニアに一致する訳じゃないのでしょうか? 256*256のコンテキストを作り、全面ぴったりのポリゴンを張って、フラグメントシェーダーから gl_FragColor = vec4(gl_TexCoord[0].s, gl_TexCoord[0].s, gl_TexCoord[0].s, gl_TexCoord[0].t); として色とアルファの増え方を見てみたのですが、どうもジャギっててきれいに0〜255の範囲で 増えてるわけではないみたいなのですが… コンテキストと同じサイズのGL_NEARESTなテクスチャを張った場合はちゃんと256*256の範囲 全体が張られているのでテクスチャ座標がずれてるわけでもないみたいです。
641 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 01:21:03 ] あだ、ここGL "2.0"スレだった orz GLスレの方に行ってきます orz スレ汚しすみませんでした…
642 名前:デフォルトの名無しさん mailto:sage [2008/12/29(月) 03:29:54 ] DirectX ばっかりで OpenGL なんて一生触ることは無いと思ってたが Linux絡みでJOGLで開発することになった 調べてみたら、OpenGL も色々面白そうだな
643 名前:デフォルトの名無しさん mailto:sage [2008/12/29(月) 04:52:15 ] 名前が違うだけで、実行するハードウェアの中身に対するフォーマットは一緒だからな。