1 :
デフォルトの名無しさん :
2010/01/19(火) 20:46:36 クロスプラットフォームの3D API OpenGLに関する話題を扱うスレッド。
現在のバージョンは3.2
http://www.opengl.org/ == OpenGLと一緒に使われるツール&ライブラリ ==
苦労したくなかったらとりあえず入れとけ。
・glx: XからOpenGLを使うためのライブラリ。普通は直接は使わず意識する事はない
・glut: クロスプラットフォームなツールキット。でもさすがに古くさい
・glew: これを入れないと拡張機能が使えないor使いにくい
・glxgears: 歯車が回るベンチマーク。-infoでOpenGLのバージョンが見られる。OpenGLの動作確認はこれで
・glxinfo: 自分の使っているカードのOpenGLの機能が全てリストアップされる。
== 必読書 ==
・OpenGLプログラミングガイド 原著第5版 (通称赤本)
・OpenGL(R) Reference Manual (通称青本)
・OpenGL Shading Language (通称だいだい本)
・OpenGL(R) SuperBible: Comprehensive Tutorial and Reference
・OpenGL ES 2.0 プログラミングガイド
・GLUTによるOpenGL入門
・GLUTによるOpenGL入門2 テクスチャマッピング
あると便利。
・ゲームプログラミングのための3Dグラフィックス数学
== チュートリアルサイト ==
床井研究室:
http://marina.sys.wakayama-u.ac.jp/~tokoi/oglarticles.html NeHe:
http://nehe.gamedev.net/ == 前スレ ==
Part13:
http://pc12.2ch.net/test/read.cgi/tech/1221215309/
2 :
デフォルトの名無しさん :2010/01/19(火) 20:57:05
3 :
デフォルトの名無しさん :2010/01/19(火) 20:57:59
以上です。Part13に比べてかなり勝手に変更してますがご了承ください。 テンプレは追々改良していくという事で。 Web上でもまとまったOpenGLの情報が全然無くて(床井先生の所ぐらい?)、 正直何とかならんものかと思ってます。
言い出しっぺの法則というものがあってだな
997でテンプレ変えて床井氏の本が必読って、 赤本読めば入門書必読ってことはないだろ。
お疲れ様です。 早速質問申し訳ないのですが、OpenGL3.0以降ではセレクションモードが非推奨になっており、代替手段を探していたところOcculusion Queryを使うといいようなことが書いてありましたが、 Occulusion Queryをセレクションに使ったサンプルが見つからなかったため、どのように使用すればいいのかや、もしサンプルが載ったサイトがあれば教えて頂けると幸いです。
>1乙 nvidiaとamdのサイトは外さないほうがよかったんじゃないかな。 NVのサンプルコードなんかは床井先生のとこほど切りつめてないけど、 その分クラスにまとめてあって若干ライブラリライクだから 改造してなんか作ってみるとっかかりとして丁度良いと思うし。
C#でモデルデータ表示するならC#、OpenGL対応のゲームエンジン使うのが楽そう。
質問です。よろしくお願いします。 ウインドウとビットマップのそれぞれのレンダリングコンテキストを 引数にwglShareListsを呼ぶと失敗します。 ウインドウとビットマップのディスプレイリストは共有することはできないんでしょうか?
ぶっちゃけ、GLSLやる前にDirectXやXNAやれって思う。 大体考え方は同じだし、情報量の多い方で先に基礎的な考え方をみにつけたほうがいい。
だれかこの本読んだ? 目次を見る限り入門用には良いかなと思うのですが感想教えてください。 OpenGL+GLSLによる3D‐CGアニメーション (I・O BOOKS) (単行本) 酒井 幸市 (著)
14 :
デフォルトの名無しさん :2010/01/21(木) 15:59:26
glreadPixels()の使い方を教えてください。
日本語でおk
助けてください、点光源がスポットライトになって180度分しか明るくならないです。 glLightfv (GL_LIGHT0+index, GL_POSITION, (GLfloat*)xyzw); glLightfv (GL_LIGHT0+index, GL_AMBIENT, (GLfloat*)black); glLightfv (GL_LIGHT0+index, GL_DIFFUSE, (GLfloat*)argb); glLightfv (GL_LIGHT0+index, GL_SPECULAR, (GLfloat*)argb); glLightf (GL_LIGHT0+index, GL_SPOT_CUTOFF, 180.0f); 最後のGL_SPOT_CUTOFFはあってもなくても一緒です。 30度ぐらいにすると細いビーム状になります。 どうすれば点光源に戻りますか
最近この手のなぞなぞは外してばっか 逆向きにもう1個180度分のライト置けばいいんじゃね
20 :
18 :2010/01/21(木) 20:54:06
>>19 ああ、それで解決です……んなわけあるか。
いや本当に困っています。まじ助けてください。
点光源にするには
glLightf (GL_LIGHT0, GL_SPOT_CUTOFF, 180.0f);
で良いんですよね????
なぜか半分しかライトが当たりません。
SPOT_DIRECTIONで方向も制御できるし……
こんな事言うとプログラマぶるシェーダ厨乙!って言われるかもしれんが 固定機能のライティングの関数をあれこれ調べるよりvertex or fragment shaderで ライティングの計算したほうが楽じゃね?
プログラマぶるシェーダ厨乙!
GLSLおいしいです(^p^)
>>18 マジでで困ってるならソースアップすれば
そこだけ切りだせば小さいでしょ。
値もわからないその5行で原因はなにか聞かれてもわからんて
最初に貼られた
>>18 の内容って、単に色関係の定義しか無い。
ライトの種類を指定しているコードを何故最初に貼らないのか、って言うと
多分意味もわからずコピペで作ったから。
しかし今日の1時間ほど前から OpenGL を追いかけ始めたばかりの俺でも、
"OpenGL 光源種類 指定" 辺りでググったらそれっぽい情報いくつも見つかるんだが、
きっとしばらくしたら正解も見えてくるだろうと思いつつ、もうすぐ寝る
27 :
18 :2010/01/22(金) 09:05:10
出来たー \(^o^)/ 2chを頼った俺が馬鹿だった。二度と聞かねーよ馬鹿 こんなクソスレ何の役にも立たない。
要点も出さずに質問して他人に頼って、挙句にこの言い草 ゆとり世代の印象がまた一つ悪くなる訳ですね
特定の人間がバカなのとゆとり世代は関係ないから
Unreal EngineやOrge3Dはそれだけで超重量級だからどうかな OpenGLはサイコロ以上を表示しようとすると全部自分で書かなければならなくなるのが何とも
紹介されているようなさらに上層のライブラリやフレームワークの使い方 なんて学ぶ時間があったら、むしろその時間をコアな方に割いた方がいいんじゃね?っていう 入門チュート以上の事をしようとしたら急に大変になるってのは、結局何をやっても同じ。 むしろそれぞれのライブラリにはまた別の思惑や仕様や概念がある訳で、 果たして初心者がついてこれるだろうかって言う懸念が
まあでもOpenGLエキスパートになったところで仕事無いけどな!
つ研究職
最近OpenGLを触り始めたんですが、 グラフィックソフトみたいにサイコロを二つ重ねておいて、 減算処理等をする便利関数みたいのはありますでしょうか? とりあえず頂点データだけで、UV等は考慮しなくても 構わないのですが。
意味が全くわからないけど、たぶん無い
そうですか。残念です。 四角形以上のポリゴンを三角形分割できる関数とかがあったので、 加減算できる便利関数もありそうかなと思ったのですが、 妄想過ぎました。アルゴリズムがないか探してみます。
>サイコロを二つ重ねておいて、 >減算処理等をする フラグメントシェーダ的な意味合いなのかとも思ったが、 多分エスパーすると Boolean 合成の事を言っているのでは無いかと想像
>>39 普通に考えて、OpenGL はグラフィクスハードウェアを叩く時に便利な
共通の仕様を持った、割りと低レベル寄りのライブラリ、っていう位置づけであって、
別に何でも出来る高級言語みたいな物じゃないからそういう、
何かのソフトウェアが実現するべき(=自分で実装するべき)高級な機能なんて
ある訳ないような気もする。
てか、例えば大きな四角面4枚(三角面8枚)のサイコロに対して、そこにそれより小さなサイコロを
当てて XOR しようとしたとき、頂点数は合計されるだけじゃすまないよな?
勝手に頂点数増えられても困る
>>40 自分のやってることができそうです!
用語を知らないと全然見つけられませんね。
ありがとうございました!!
>>41 君がOpenGLの仕様策定や技術のコントリビューターならそういう主張もいいだろう。
しかし、日常で君がやっていることといったら、OpenGLのその低レベルAPIとやらを使ったコーディングじゃないのか?
つまり君はGLの有用なライブラリを作っているわけでもコントリビュートしてるわけでもないんだから、各種ライブラリに依存しまくってコーディングしている初心者とあまり差はない。
ただの文盲じゃねw
java,dotnetだと、人様がこしらえたライブラリをちょっと使えるようになったからって「自分スゲー」って思い込んじゃう奴が多い。 ニートとかゆとりとはまた違う種族のようだ(ある意味DQNとも言う)。
だがしかし全自動洗濯機が実用化されてスイッチポンで洗濯できる時代に、 超人的技能で桶と洗濯板でゴシゴシ洗濯できる人間がすごいとは思わないけどな。 確かに電気代もかからないしきれいに洗えるけど、今の時代には無駄なテクノロジーだよね。 江戸自体ならスーパースターだけど今の時代なら無能な趣味人。
48 :
デフォルトの名無しさん :2010/01/23(土) 18:14:05
>>47 どういう流れでそんな話をしてるのか全然わかんないんだが
>>41 の内容は、「ソフト側の都合で変わるような高級な処理はライブラリに含まれていないよ」
って主旨の発言なだけ。 なんか勘違いしてないか?頭悪いのか?
洗濯機こわれたときにどう行動するかってところじゃないの。 あと、洗濯機で洗えないものも扱えるか、扱えないか。
今の時代C+POSIXのみでプログラムしてる奴もいないし、WEBアプリ程度のクライアントをGTKみたくCだけで頑張っちゃうのもバカらしいって思う人は多い。 Cのみで頑張ってアプリを作ろうとしても、javaなら1/10の時間でWEBアプリなら1/100の時間で同じアプリが作れる。 つまりライブラリとしてモジュール化してjava,rubyなどでもAPIへのアクセスを容易にすることまでがOpenGLとかCG関係者の仕事。 そうじゃないといくら仕様が良くても使ってくれないし、いくら待っても人は増えずGLアプリも増えず、結局microsoftに行ってしまうだろう。
そもそも洗濯機をスイッチポンで使えるようにして提供する側だって意識ないのか。
ここは洗濯機の話と独り言を言うスレのようです そんな事より、普段GLSL書くときどこまでシェーダに任せるべきだろう。 もちろん内容によるが、例えばラスタライザ的な処理をGPU側にするか、あるいは場合によっては CPU側でテクスチャとして起こしてしまうかで時々迷う。
あ、
>>52 は 「どちらでもいいけど、ライブラリ化する時の話」 ね。
Vertex Shader 上の情報が無いと激しく非効率だったり実現がしんどい場合は迷う必要ないから。
>>50 Java や ruby から簡単に使えるようにしてくれー
ボク馬鹿だからC++使えないしアルゴリズムもわかんないの
って言う人が世の中には大勢いるんだよね。
確かに需要はある。
>>52 GPUに渡すデータ量が少なくなるように選ぶな、俺だったら。
GPUメモリの上限がいまだに2GBなのはなんとかならんのか。足りん。
いまどき理由もなくC++(やD)を使ってるような奴はただの基地外だろうな。
どうせあれだろ。 「新しいテクノロジーを勉強するのは嫌だ〜」っていつの時代にもいる頭固いオッサンなんだろう。
良く知らんけどjavaやrubyからでもopenGLは使えるんじゃないの openGLをラップしたりサポートしたりする便利ライブラリやフレームワークもあるんだし openGLはそれらから呼ばれる描画限定ライブラリで十分
いや。 そういうことじゃないと思うよ。 openGLの低レベル関数を使った高レベルライブラリでアプリ開発ユーザーのこと考えた使いやすいのは今になってもまったく出ないよねってことだと思う。
もうちょっと要件を具体的にお願いします。 ぼんやりとした設計があるならばご説明願います。 実在するライブラリとの比較でも構いません。 DXのライブラリでも構いません。 洗濯機みたいな変な喩えは要りません。 痛い業界論みたいなのも要りません。
つまり、材料いれてボタンを押せば料理ができる電子レンジみたいなのが欲しいってことじゃね?
javaとかdotnetの世界で、ネイティブアプリの設計論とかWEBアプリのアレとかコレとかを勉強したほうがいいと思うよ。 巨大ライブラリの設計論すらもそっちの世界では既に完成されてるから。 opengl1.2のころから使ってますっていう干からびたオッちゃんじゃ石頭だから多分理解できないだろうけど。
多分、普段高級言語しか使っていなくて、C/C++みたいなローな言語が理解出来ず 逃げ出したクチで、そんな中、アプリケーション寄りのお手軽便利な何でも機能みたいな物は無いよ、 というレスを どういう訳だか 曲 解 し て、自分の正当性を訴えなければ収まらない気分になり、 (自意識過剰) ここはム板のスレなのに大上段に構えて的の外れた業界論とか語りだしちゃって、 (技術は無いがプライドは高い、というオッサンに多い傾向) 「俺はお前よりも上の存在だ」 という空気を醸し出そうとするも、周りをポカーンとさせてしまい、 もう元には戻れず、しかし元々自己中でKYでもある為か、一人で満足行くまで 勝手に話しだし、頭の悪い長文書いても読まれずスルーされるだけなのにそれにも 気づけない低脳中学二年生が、 二度とやってこないようなスレを作るにはどうしたらいいでしょうか。 これが要件になります
仮にライブラリを作ったとしても、61みたいなクズには使わせたくないな、 と本気で思う。
GNUみたいに既にあるものを再実装するって言うので十分だと思うよ(大昔だと車輪の再発明は悪だとか言ったりしていた)。 例えばDirectXのAPI名をそのままGLライブラリ(ブリッジ)として再実装するとか、少なくとも低レベルAPIをIDEのサポートもなく(それもCで)ゴニョゴニョするのはただの禿げたマゾか露出狂の変態だろうね。 別にCでシコシコできなくはないが、よく考えてみればコーディングの大半の時間は、IDEの自動ジェネレーションで十分なことにほとんど費やされていると思うよ。 よっぽどの理由がない限り、大昔のwin32apiなんかを直接使ってる人はほとんどいないだろうけどそれと同じ。 今はopenglじゃないほうをやってるからこれといった要望はないけど、開発スタイルが未だに猿の惑星レベルなのは驚いた。
>>62 顔真っ赤にして何いってんの?このオッサンは(笑)
みんな同じ世界にいるわけじゃないんだから、それぞれいいようにしたらいいがな openGLが必要なら使えばいいし、いらないなら使わなきゃいいだけだろ
使うとしても低レベル過ぎて使いづらいってのは、opengl関係者のやる気をまったく感じられない。
結局、開発速度と実行速度のバランスや、バグがどこまで追跡できるか、あたりで決まると思う。 昔、他人のライブラリを使っていて、自分のバグかライブラリのバグか判別困難で苦労したから、 出来る限り自前で作るようにしてる。
>>64 最初の2行を読み直して、ん???と思ったんだが、なんかあれか?遠まわしに
「自分はDirectXに慣れているから、誰かOpenGLをDirectX風にしてくれ。俺の為にそうしてくれ」
って言っているように見えた。 いやむしろ …なになに風、と言うよりもっと直球に、
「ソースレベルで DirectXと相互入れ替え出来るようにしてくれ。」 と言っているかのようにも見える。
もしもそうなら、Windows限定だとでも思ってるのか、あるいはMSに言え。
またDirectXでシュガー巻いたOpenGLなんかあったとしても、そもそも意味無いだろwww と気づけ
あと、もしも趣味でなく、仕事で使う用がある環境の場合には、少なくとも自社ライブラリくらい作ったり増えたりしてるから
一から全部なんて書かないだろうし、趣味でいじる分にはそれが楽しいってだけの人もいる。
世間は広いんだぜ
>64 レイヤーアーキテクチャに対する意識も低そうだな
>>64 > 例えばDirectXのAPI名をそのままGLライブラリ(ブリッジ)として再実装するとか
要はこれだけか。
イライラするほど内容の無い文章だな。
>>70 >72
アンカーをたどって読んでみたが、俺には
> 例えばDirectXのAPI名をそのままGLライブラリ(ブリッジ)として再実装する……のはただの禿げたマゾか露出狂の変態だろうね。
と読めた。
結論はD&Dとかでどうにかなるコードジェネレータくれくれと読んだ。
そのコードジェネレータ程度でどうにかなるようなことを何で今の時代でもシコシコCで書かなきゃあかんのか?と読めた。
複数の解釈が可能なのって釣りの典型か。
パースが簡単な3Dモデルのファイルフォーマットを教えてください
3DSもしくはOBJ
"パース"だけならcolladaも楽だけどw やっぱobjじゃないスか。 見りゃ分かる。自分で書ける。
とりあえず、何らかのモデリングソフトで作ったモデルを お試しで表示させてみる時の定番は Wave fron OBJ 形式な予感 ※ただし俺の定番
typo Wavefront OBJ形式=OBJな
objってモーションある?
>>82 モデルデータだって言ってるのに、なんでモーションの話なんか出てくるんだ
ある訳無いだろ。
含まれてるのは頂点とその結合、マテリアルや法線ベクトルなどの
もっともローレベルの基礎の情報だよ
アニメーションとかそんな別立ての情報は含まれて居ない
MMDとかそういう初心者向けのトイソフトから興味を持った人は勘違いしやすいんだけど、 モデルデータとモーションデータは、それぞれ話の軸が違う かたやモデル情報は "形状の" データで、かたやモーションは時間軸での "変化の" 記録。 DirectX や COLLADA はこれらの味が違う情報を1ファイルにパックしてるが、 Wavefront OBJ はそんなパックを持っていないので、パースも楽だって話。データもASCIIだし
85 :
82 :2010/01/25(月) 16:19:21
ごめん(´・ω・`)
いいのよ
いいのかよ
いいのだよ
イインダヨ
だみだコリャ 次いってみよう
そのソースmainが全くないようなんだけど、実際どこまでできてるの? どこが上手くいかないのかわからないともなんとも助けようがない。 なんでもいいから解答をソースでくれって話なら質問スレでもお断わりだろう。
連投すみません。
>>92 mainはコピーミスで途中で消えていましたorz
すみません><
それはねーよ
違いましたかorz どこだろう;
sun_old.tgaが無いので適当に128x128 32bit/pixelの画像作って動かしたら 球にも立方体にもテクスチャ張られてたよ。
sun_oldがないぞ。
先を越されたorz
これあれだろ?元々のソース自体、どこかにあった物を全部コピペで持ってきてて 実はC/C++ 自体全然わからなくて、でもどうしてもなんかテクスチャ貼ったキャラ動かしてみたくて 説明読んでも理解出来ないから他人にソース書いてもらいたいって、 そういう話だよね?
101 :
91 :2010/01/27(水) 06:58:18
いろいろと説明不測で申し訳ないですorz
>>97 球体と立方体にテクスチャは晴れるのですが、どちらも球体にしたいのです。
そこで、キューブ体glutSolidCubeを球体glutSolidSphereに変えたいのですが、
変えてしまうとキューブから球体に変えたオブジェクトが消えてしまいます。
質問の意味としては、球体2つにテクスチャを貼り付けたいという意味です。
>>98 sun_oldは、テスト用なので、気にせず
>>91 の画像を使っていただいてほしいです。
>>100 このプログラムは、「図解 OpenGLによる3次元CGアニメーション」と
http://sports.oit.ac.jp/~whashimo/server/~whashimo/Article/OpenGL/index.html ↑のサイトを元に作りましたが、全部コピペしたわけではありません。
ちなみに、現在のソースは、立方体と球体の画像取り込みからではない
テクスチャマッピングのソースを画像読み込みにし、オブジェクトが動くように
しただけです。すると立方体を球体にしようとしてもできないので、
質問させていただきましたorz
みなさんレスありがとうございます。説明不足でもうしわけなかったです。
みなさん数学ライブラリって何を使ってますか? あと、能力による話だとは思うのですが 数学関係のクラスをどこまで自力で実装してますか?
103 :
デフォルトの名無しさん :2010/01/27(水) 13:51:49
中身の詰まった立方体(高さが非常に低いもの)の書き方を教えてください。
>>101 97だけど結果から言うと立方体でも球体でも動いた
>>91 の画像は2つ入ってるけど使うのはtitan.tga?
sun_oldじゃなくても気にするなって言うが、全部解像度が違うんだから気にする
質問プログラムはsun_oldを使い、glutSolidSphereで動かないというなら、動かないプログラムと画像をupしないと意味が無い
glutSolidCubeをglutSolidSphereに変えて動かないなら変え方が間違ってるんだろうし
glutSolidSphere(1.0, 1, 1); とかに変えてんじゃないの?
>>103 中身が詰まってようが空だろうが外からは見えないから表面だけ定義すれば同じこと、
というのが面グラフィックの基本コンセプトだと思うが。
「中身が詰まった」ことでどのような違いを生みたいのか書かんと答えが出ないな。
106 :
デフォルトの名無しさん :2010/01/27(水) 15:10:42
ステンシル値1の部分に描画した立方体内部に、画像処理を施したいので、面だけで構成された立方体ではなく、中身が詰まったものを描画したいのです。
glslってファイル分割できないの?
できるよ
111 :
デフォルトの名無しさん :2010/01/28(木) 17:59:07
ステンシルバッファのステンシル値の配列はこれで確保されてるのでしょうか? // ステンシル値格納用配列 buf_stencil = new int[xsize*ysize]; for(int i=0; i<xsize*ysize; i++){ buf_stencil[i] = 0; } glReadPixels(0, 0, xsize, ysize, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, buf_stencil); //もしステンシル値1のときは・・・ if( buf_stencil[xsize*(ysize-y-1) + x]==1){ /*ステンシル値をチェック*/
112 :
91 :2010/01/28(木) 20:31:27
>>104 できました!ありがとうございます!
あと、画像2枚うpしてますが、2枚の画像を2つの球体に
別々に表示する方法がわかりません・・・
分かる方おられないでしょうか><;
>>111 よくわからんけどUNSIGNED_BYTEなのにint[ ] でいいの?
あとステンシルをCPUに持ってくるって、どういうことする場合なのか興味ある
114 :
デフォルトの名無しさん :2010/01/28(木) 22:55:14
113番さん、ご指摘ありがとうございます!! UNSIGNED_INTで値が読み込めました。 なぜこのような処理をするかというと、ステンシル値1の部分で、CVの関数を使って画像処理を行い、 またGL(ARToolKit)に座標変換させるためです。
読み込みをuintにするよりは配列側をbyteにしたほうがいいと思う。ステンシルは256段階だからね。
いや、ステンシルが何ビットかは、ピクセルフォーマットによるでしょ・・・。 まぁ8ビットだろうけどw
ステンシルが8ビットより多いのってあったっけ?
実質1bitしか使ってない気がする
C, C++ベースでファイル選択のダイアログやスライダ、プログレスバー程度をGLUTと同時に使える GUIツールキットはありますか? GLUIはすでに使用していますが、少し物足りませんでした。
―― 他社がCellと同コンセプトのもので違うものをつくっても、つながれば問題ない、SCEIさんとしてはOKということですか。
久夛良木 Cellとは違う発想でコンテンツサーバとして存在できるようなアーキテクチャを、他社が開発したとして、
そのプロセッサとCellのプロセッサの中でいろんなプロトコルスタックができますから、レイヤをビシッと決めてやればつながる。
ですから、最終的には国際規格にもっていく話になると思いますよ。
―― どういうレイヤで入ってくる企業があっても問題はない?
久夛良木 最終的にはJavaということになるでしょう。
超レガシーで、携帯電話でも全部溶けてしまうような話になるかもしれない。DirectXみたいなのは最悪なんですね。
―― どこらへんがですか?
久夛良木 もともとレガシーなものを垂直にたたいたら早いというものでしょ。あれは。
―― 当たり前の話ですよね。
久夛良木 論外ですね。互換性もないし。
http://ascii.jp/elem/000/000/031/31681/index-6.html
こんにちは、質問してよろしいですか。 メモリ上に用意したビットマップから、動的にテクスチャを生成しようと 考えてます。そこでglDrawPixelsとglCopyTexSubImage2Dを使ってみました。 その際、ビットマップの大きさがウインドウの大きさ以上になる部分が、 テクスチャに読み込まれないという問題があるのですが、どのように解決 できますか。 以下に、ソースを簡単に。余計なコードも多そうですが。 GLubyte map[WIDTH * HEIGHT * 3]; void display(void) GLint viewport[4]; glGetIntegerv(GL_VIEWPORT, viewport); // Viewポートの保存 glViewport(0, 0, WIDTH, HEIGHT); // Viewポートをテクスチャにあわせる glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glDisable(GL_TEXTURE_2D); // テクスチャOFF glDrawPixels(WIDTH, HEIGHT, GL_RGB, GL_UNSIGNED_BYTE, map); glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, WIDTH, HEIGHT); glViewport(viewport[0], viewport[1], viewport[2], viewport[3]); // Viewポートの復元 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glEnable(GL_TEXTURE_2D); // テクスチャON glBegin(GL_QUADS); { テクスチャの書き込み } glEnd(); glutSwapBuffers();
DrawせずglTexImage2Dを使えばいいのでは
できました、ありがとうございます! glTexImage2Dを使っちゃっても、普通に速いんですね。
むしろglDrawPixelsの方が遅いよ
125 :
デフォルトの名無しさん :2010/02/04(木) 22:27:51
Cn:カラーバッファ、Dn:デプスバッファ、Sn:ステンシルバッファとします。 1.C1,D1,Sxのバッファ状態から、 2.ステンシルマスクを作成し(カラーバッファ未使用)→Cx、D2、S2 3.C1,D1,S2のバッファ状態にもっていく これを繰り返し行いたく、 A案 1後:FBOへ切り替え 2後:S2をglReadPixels()でCPUメモリへ退避 FBOからデフォルトへ戻す S2をglDrawPixels()で復帰 B案 1後:D1をglReadPixels()でCPUメモリへ退避 2後:D1をglDrawPixels()で復帰 を試しましたが、どちらもglReadPixels()で遅いです。 (A案の方が、サイズが小さい分少しだけ速いようですが) ※PBOでglReadPixels(),glDrawPixels()してもほとんど変わらず デプスバッファかステンシルバッファを高速に退避&復帰させる にはどうすべきでしょうか? #赤本には、 #glCopyPixels()をXORで使用するとGPU内で画像交換できる #とか描かれていますが、どうしていいのかのか、また、 #上記のケースで使用できるのかもわかりませんでした。 もしくは、デプスバッファだけを一時的に切り替えて、2が行えるといいのですが よろしくお願いします。
127 :
デフォルトの名無しさん :2010/02/07(日) 00:54:39
OpenGLでコントローラを使おうとしているのですが、 printf("%d\r\n",js.lX); で一応、初期値の -8 とプリントされているのですが、 動かしても変動がありません。どうも倒しながらキーボードを入力すると数値が変動するようです。 現在はキーボード入力で入力したときだけOpenGLが再描画されるのですが これをJoystickを倒した時に再描画されるようにするにはどうすればよいのでしょうか? switch (key) { case 'd': { Point NextPos( PosX+0.2, PosY ); if( !ColCheck( NextPos ) )PosX +=0.2; glutPostRedisplay(); } ソースはこんな感じになっています。キーボード入力時のみの再描画ではなく、常に?描画するにはどうすればよいのですか? 初心者ですみません。書き込んでいて何を言ってるのかわからなくなってきました。
glutPostRedisplay(); これをswitchの外に置くだけじゃないのか
129 :
デフォルトの名無しさん :2010/02/07(日) 01:11:15
外に置いてみました。 ものすごい速度で再描画されています。 どうしたものでしょう、
130 :
デフォルトの名無しさん :2010/02/07(日) 01:33:05
sleepしてみました。 Joystick extern DIJOYSTATE2 js;を外部変数としていて if( FAILED( hr = g_pJoystick->GetDeviceState( sizeof(DIJOYSTATE2),&js) ) )。 return hr; // The device should have been acquired during the Poll() //ここで実際にゲームコントローラの状態を取得してjsに代入する とあるのですが if(js.lX>300){ printf("右"); } で実行すると error LNK2001: 外部シンボル ""struct DIJOYSTATE2 js" (?js@@3UDIJOYSTATE2@@A)" は未解決です。 error LNK1120: 外部参照 1 が未解決です。 とエラーが出てしまいます。これはどういう意味なのでしょうか??
そのメッセージの通りだと思う
取り合えずOpenGLとジョイスティックは切り離して考えたほうがいい。
使ったことないけどglutJoystickFunc()でとか
ゲーム以外の目的で企業がOpenGL使う場合、 glutって使われてるの?
使ったほうがいいときは使ってる
使うか使わないかなら、使うこともあるんじゃないの。 GLUTで勉強してればいいのかなとか心配なら、そんなこと気にする必要ない。 どんなライブラリでも使えるようになればいい。
ありがとう 教授にglutやっとけば問題ないといわれたんだが、 その人がちょっと古すぎる人なので今でも通用するか不安だったんだ
UIにQt使いたいんだけど、QtでもGLUT使える?
QtでGLUT使う意味がわからん。普通にQtでOpenGL使えるだろ
なぜ使いたいのかから説明しないといけないのか めんどいな
情弱w
情強乙
GLUT使ってないシェーダの本出してください
GLUTは単にWindowのラッパだからシェーダは関係ないんじゃね?
俺QtでOpenGL使ってるけど快適だよ。 glutはさすがに時代遅れだろう。
Glutの描画関数使っててattribute変数とか使ってなくてクソだと思う。 そもそも、gl_ModelViewMatrixとかの組み込み変数は廃止予定なんだからダメだろ。
ちょっとした調査プログラムとかを超短時間で作りたいとかの場合は今でもGLUTが便利かな glutSolidTeapot使いたいしw
QGL良さげだなぁ。 でもこれだけのためにQtランタイム要求するのはちょっと。
glutはglutSolidStanfordBunnyも設けるべきだったよね
import wx.glcanvas でぐぐる wxpython + pyopengl 入れるだけ pydev eclipse でも動かせる マック環境でインスコ簡単すぎて泣ける gttkglext 入れるの難しすぎる・・・orz
漏れにとって GTK は遠い過去 現在は wxWidgets 未来は Qt
こっちを向いてよハニー
glut使用。 デフォルトでは、表示される範囲ってx,y,z=[-1,1],[-1,1],[-1,1]だけど、そこに[0,100],[0,100],[0,100]の範囲にある図形を描きたい。 方法はいくつか思いついたけど、どれが可読性(よく見かける、ややこしくない)/利便性(めんどくさくない、タイピングや考える手間が少ない)/速度(無駄な計算が少ない)などの面でバランスがとれているのはどれだろうか? 1. 図形の各々の座標をx=x/50 - 1, y=y/50 - 1, z=z/50 - 1とし、[-1,1]の範囲に収める 2. GL_MODELVIEWマトリックスをいじる。glScaled(1.0/50, 1.0/50, 1.0/50);glTranslated(-50, -50, -50); 3. GL_PROJECTIONマトリックスをいじる。glOrtho(0, 100, 0, 100, 0, 100); なんとなく、3がベストな気がするが、例えばそれに拡大・縮小機能を付けるとき、2でやっていればglScaledで楽に変えられる。 GL_PROJECTIONにglScaledかけても結果は同じかもしれないけど、それをやってるサンプルを見たことがないけどなんでかなぁ。
投影とモデル変換は区別しとかないと、モデル数が増えた時にこんがらがるよ。
>>156 概念的な違いはあっても、表示のされ方は同じようなので、どう考えればいいのか分からんのです。
実際にものの大きさを変えたり動かしたりならモデル変換で、
見た目の上での問題で、ズームなり移動なりしてるなら投射と考えていいのかしら。
例えばGoogle mapみたいにマウスでつかんで引っ張って動かすみたいなインタフェースの場合、
あれは地図を動かしてると考えるのか、視点が変わってると考えるのかどっちなんだ?
あと、glRotateやglTranslateを投射に使うのはやめた方がいいのかなぁ?
モデリングソフトだと座標の単位を設定してモデルを作る。 だからその単位に合わせたカメラを作ればいいんじゃない。 現実と同じように考えればわかりやすい。 数個の図形を表示するだけなら、好きにすればいいと思う。
>>155 3。投影方法はGL_PROJECTIONへ
結果が変わらないからどっちでもいい場合もあるが、結果が変わる時に困る。
法線/ライト関係や、頂点シェーダー使う場合とか
>>157 地図(MODEL)を動かすのとカメラ(VIEW)を動かすのは、ライトがあると結果が変わってくる
どちらも投影ではないのでMODELVIEWマトリックスを弄ることになる
>>158-159 ありがとうございます。
なんとなく分かったような分からないような……
MODELVIEW行列でカメラを、元データの座標系のまんま描いたときに全体像が写る位置に移動させて、
投影する範囲をPROJECTION行列で設定するのがいいっぽいですね。
拡大・縮小は、MODELVIEWのスケールをいじっても、PROJECTIONの視野の範囲をいじってもどっちでもできそうです。
できればPROJECTIONでやってしまいたい感はあるのですが、回転動作も実装しないといけないかもしれないのです。
カメラ位置固定でカメラの首を振れば対応できる範囲じゃなくて、裏側も見られるくらいに回したいのですが、それは投射じゃないのでMODELVIEWになるのですね。
そして、そういうことするなら、いっそのことMODELVIEWで固めてしまいたい感じがします。
カメラの位置、カメラの向く方向、カメラの傾き(ロール)これらはVIEWマトリックスなのでMODELVIEW 拡大縮小がカメラのズームならPROJECTION 普通はGL_PROJECTIONは(glLoadIdentityしたあと)gluPerspective/(glFrustum)/glOrthoのどれか1行書くだけでいい
なるほど。両方をいっしょに扱うってのはよくないのですね。
>>161 >>カメラの位置、カメラの向く方向、カメラの傾き(ロール)これらはVIEWマトリックスなのでMODELVIEW
gluLookAt は PROJECTION で設定するのがいいと思うのだが、どうなんでしょう?
LookAtもModelviewでいいよ。
GLSLって実行時にコンパイルするしかないの?
んなわきゃない
GLSLは実行時コンパイルだろ
んなわきゃない
んなわきゃないしか言えないの?
ってことは シェーダのソースは丸見えになるということなんですね。
独自に適当な暗号化でもしておけばいい。
一応、Cのコード内に埋め込むことはできる。
173 :
デフォルトの名無しさん :2010/02/19(金) 11:09:59
glShaderSource() が呼び出されるときにパラメータを覗けばソースを見ることができる。
GLのシェーダーが実行時にコンパイルと言うのは 事前にシェーダーバイナリを使えたとしても、 それはドライバ会社のシェーダーコンパイラ依存があるからって事じゃね? (GLって確かシェーダーバイナリの仕様まで決めてないかと) つまり自分の環境しか意識しないのであれば、事前にシェーダーバイナリ作って プログラムに埋め込むなり、別バイナリとしておくなりしておけば良い (これが、言葉的に実行時コンパイルしかできない訳ない、になる?)
OpenGL ES 2.0 の話だったの?
glTexSumImageをUNSIGNED_SHORT_5_5_5_1でやるとやたらに遅い。 UNSIGNED_SHORT_5_6_5だとアホみたいに早いのに・・・。 透過色の処理はRGB5551, RGB565のどちらの場合でも切ってるのに、 何が効いてるんだよ
internalformatを何にしてるか知らんけど、変換が遅いだけじゃない? ドライバやグラボ依存だと思われる
すみません、凄く抽象的な質問なのですが バッファをフラッシュした際に落ちるのはどういった原因が考えられますでしょうか? ウィンドウのサイズを変更した時、バッファをフラッシュするところで落ちてしまいます。
落ちる前にglGetErrorとか使ってみたら
>>179 ありがとうございます。早速今晩にでも試してみます。
ES2.0の話ですが、誰か頂点属性に半精度浮動少数点を使った事ある人いますか? (拡張でHALF_FLOATがサポートされてるのは確認) 質問があるんですけど、(通常のGLでも意味が同じならOKです) 頂点配列でVBOを作って、それで頂点属性を指定する場合、 当然頂点配列もHalfFloat部分は、16bitにしなければならないと思いますが 通常のC++では16btiの浮動少数点型は有りませんよね? つまり、通常の単精度floatを、半精度に変換するルーチンをかませながら float -> HalfFloat と代入しながら頂点配列を操作する感じなんですかね? で更にシェーダー側の質問ですが、 単精度のHalfFlaotで受け取る頂点属性は何か特別な宣言がいりますか? 例えば attribute lowp vec2 TexCoord; とか、精度修飾子も低い指定が必須ですか?それとも無関係? それからシェーダー内のHalfFloat属性の変数は、計算に注意点は何かありますか? 色々と細かい質問ですがよろしくお願いします。
GLSLの質問はこちらでいいのでしょうか? シェーダプログラムを複数作成するプログラムを組んでいるのですが、 現在使用しているシェーダプログラムの識別子を返すような関数はありますでしょうか? 例えば、 glUseProgram(1); がどこかで呼ばれた後、他の場所で"1"の値を取得したいのですが・・・。 glIsProgramは識別子が分かってないとダメみたいですし・・・。 もしかすると、プログラムを複数作成してる時点でおかしいのかもしれないのですが、 どなたかご教示お願いします。
>>182 考え方が逆
glCreateProgram() の戻り値がシェーダーもアタッチされてる識別子で、自分で制御しなきゃいけないでしょ
つまり
GLuint programID;
programID = glCreateProgram();
glUseProgram( programID );
てな感じで、変数(構造体なりクラスなりのメンバとか)として
今セットしてるプログラムを制御しなきゃ駄目
>>183 レスありがとうございます。
シェーダプログラムの作成とシェーダを用いて行う処理を
一つのクラスにまとめてしまおうと考えています。(楽に再利用できるように)
別のクラスか何かで既にシェーダプログラムを使用していた場合、
使用中のシェーダプログラムが変わってしまうので、
上記の処理を終えた後に元のシェーダプログラムに戻しておきたいと思ったので・・・。
例)
Aクラス処理開始(ProgramID:1)
↓
↓→Bクラス処理開始(ProgramID:2)
↓
↓→Bクラス処理終了(ProgramID:2)
↓
Aクラス処理終了(ProgramID:1)
分かりにくくてすいません。
>>184 普通は、描画前に自分が必要なセットをして終ったらリセットじゃないかな?
描画A
glUseProgram(ID_A);
glDraw***();
glUseProgram( 0 ); // リセット(以降に意図しない描画をさせない為)
描画B
glUseProgram(ID_B);
glDraw***();
glUseProgram( 0 );
これなら、どんな描画を呼ばれても平気じゃん
こう言う作りにしてにないのは、設計の問題な気がする
(GLの仕様にマッチしない設計)
>>184 自分でglUseProgramをコールしてるんだから
今セットしている値をカレント値として取っておいて
PUSHとPOPの仕組みを作れば良いじゃん
レスありがとうございます。
>>185 やはりその方法しかないですよね・・・。
>>186 そうしてしまうと、別クラスでシェーダを変えた時に
Push,Popの値とズレが生じてしまうので、
AもBも包含し、Push,Popを管理するクラスCが
必要になってきたりとむしろ煩雑になる気がして・・・。
バックバッファの描画結果をFBOに移し変えてフィルタ処理を行い、
再びバックバッファに書き込む、という処理をクラス化しようとして
glIntegerv()の
GL_TEXTURE_BINDING,
GL_RENDERBUFFER_BINDING_EXT,
GL_FRAMEBUFFER_BINDING_EXT,
の3つを使って以前のクラスの各設定値は全部取得できたので
シェーダの識別子も取得出来るだろう、と考えたのですが甘かったですねorz
ちょっと仕様変える必要がありそうです。お騒がせしました。
そしてこんなにも早くレスをくださった皆様、ありがとうごさいました。
>>182 つglGetIntegerv( GL_CURRENT_PROGRAM, &id );
>>181 VBOでHALF_FLOAT使ったことないので他からの推測だが、C++側をfloatで用意しておけば、
あとは勝手にGL側が内部でHALF_FLOATに変換するような気がする。
190 :
デフォルトの名無しさん :2010/03/01(月) 11:52:18
携帯ゲームで頂点のデータ(法線とか色とか)をcharやshortで持っているアプリを デスクトップに移植する場合floatで置き換えてしまって良いですか。 何が何でもメモリ使用量を減らしたいからだと思うけどデスクトップなら4バイト使っても問題ないよね?
好きにしたらいいと思うが、変えなくてもいいものは変えないほうがいいと思う
192 :
デフォルトの名無しさん :2010/03/01(月) 13:56:00
変えないといちいちscaleとbiasをかけてfloatに変換してからGPUに送ったりしないといけないので可能なら変えたい。 ゲームとか作った経験がないのでで実際に使われる頂点数とかどの程度影響があるのかよくわからんのです。
>>188 182で質問をした者です。
ありがとうございます。無事に解決できました。
GL_CURRENT_PROGRAM,こんな直球な名前の定義があったんですね・・・申し訳ありません;
おかげさまで仕様変更することなくプログラムを進めて行けそうです。
本当にありがとうございました。
>>181 OpenEXRのソースコードの中にhalf floatを扱うクラスか関数があって
それ使ってfloatからhalf floatに変換してGLへ渡していたような気がする。
195 :
デフォルトの名無しさん :2010/03/11(木) 15:16:03
FPS作ってんだけど(銃で撃つほう) マウスで周りみれて移動もできるようにしたんだけど マウス動かすから、ウィンドウ外にマウスがでちゃうんだ。 ウィンドウ外にマウスがでると、制御できなくなるんだ。 あれってGLUTの設定かもしれないんだけど 誰かわかんないかな?
Windows? 画面から出さないようにしちゃうとか ClipCursor() 端っこにくっついても動くようにしたいなら、毎回マウスを画面の中央に移動させたりとか SetCursorPos() じゃだめかな
>>196 thx
windows上で動けばいいけど、glutで生成したウィンドウ関係なしなのかな
関数いれてコンパイルしたけど、戻り値が1で失敗してるみたい。
WINAPIでやるべきなのかな?関係ないかな。
もうスレ違いかぬ。
ゲームならglutよりはglfwとかSDLとか使った方がいいかもね
>>197 >関数いれてコンパイルしたけど、戻り値が1で失敗してるみたい。
どこにどの関数をどんな引数で入れたのかとかないとさすがにわからん
>>196 の関数もWIN32APIだからググればきっとわかるよ
OpenGL 4.0が出た件。 ペースあがってきたなOpenGL。OpenCLとの連携強化とかテッセレーターとかDX11相当色々。
未だに1.3に毛が生えた程度に縛られている自分としては あんまりペースあげられてもなー。 MesaがOpenGL 2.x相当になったかと思えばOpenGL 3.xで破壊的なことされるし レガシーフリーで足並みそろったかと言えば全然だし。 iPhoneみたいに具体的な製品と結びついてないと標準化は名ばかり。
(DirectXに比べて)アップデート遅いんじゃボケーって言われてたのがウソみたいだな。 番号が上がってるのは分かるが内実が伴ってないというか、 それで何が変わるの、実際に使われるのというと疑問がある。 いきおい勉強するきも沸いてこない
OpenGL_ARBの目的としては、今回GDCで発表していることもあるし、マルチプラットフォームの強さを活かしてゲームデベロッパーにDirectXじゃなくてOpenGLを採用してもらうことがあるんじゃないかな。 個人的な意見としてもOpenGLには完全な業界標準としての位置を築いて欲しい。
ゲームで今からOpenGL採用してなんかメリットあるの?
プラットフォーム非依存ってのは非常に大きいだろう。
しかしOpenGLだけでは一般的なフォーマットの画像やポリゴンデータを読み書きできないぞ。
だけで使うバカがどこにいる?
プラットフォーム非依存といってもコンテキストとか依存部分をしっかり作るのは 相当面倒くさくて、ARBとか細々としたものに対応するのも面倒くさくて、結局 もっと上位のミドルウェアを使わなきゃやってられないなぁと思った頃には、 なんでOpenGL使おうと思ってたんだっけ?とかいうことになってたり
>>206 そんなの含めなくていい。
もっと勉強しろ。
具体的に何を?
画像読み込みライブラリなんていくらでもあるだろうが! なんかマイナーなフォーマットでも使うのか?
framebuffer objectについて質問があります。 GLSLを用いて畳込み等のフィルタ処理を行う時、 depth bufferやstencil bufferを利用しない場合は renderbufferの関連付け(attach)はしなくても良いのでしょうか? どなたかご教示お願いします。
デプスバッファ用のレンダーバッファーなりテクスチャーなりをアタッチしておかないと描画時にエラーが出た気がするが・・・。 もしかするとデプステストしないんなら、いらなかったかもしれない。まぁ聞くより試してみるのが一番早いよ。
>>214 レスありがとうございます。
試してみるしかないですか・・・。
家にATIとNvidiaと二つのビデオカードがあるんですが、
片方では動いて片方では動かなかったりすることがたまに起きるので、
公式な解答があるとそれに従った方がいいかなと思い・・・。
スレ汚し申し訳ありません。試してきます。
以前デプスバッファ無しのFBO作ったらエラーで弾かれた気がするから、もしかするとコンテキストのバージョンによるのかも。例えばOpenGL2.0のコンテキストならダメで3.2ならOKとかね。
>>216 >>217 レスありがとうございます。
テストもしていただけたみたいで、本当にありがとうございます。
これで画像処理する時にVRAMを圧迫するような領域を確保しなくてすみます。
カードが少し古いOpenGL2.0までの対応なので、
こちらでも試してきます。色々とお世話になりました。
それは、ATIとNVIDIAのドライバの違いもあるよ NVIDIAのドライバは柔軟と言うか、GLの仕様を外れても動くイメージ ATIのドライバは、GLの仕様に厳格と言うか、仕様に外れるとスグにハングするイメージ よくATIのGLドライバがクソって言われてるのは、この辺だと思う
動作確認も大事だけど、OpenGLの仕様書を読んで確認するのも大事だと思うよ。 このスレではOpenGL specificationを読んでる人は少数派かな?
OpenGLにはもう期待してないけどWebGLには少し期待してる
Windows血筋のプラットフォーム以外ではOpenGLしか選択肢がない
でもWebGLってブラウザーからOpenGL ESが使えるってだけでしょ。
だけと言うが、かなりでかいパイだぜ
IE/MSとFlash/Adobeが非協力的らしい また一昔のDXとGLの構図見たくなるんじゃね 一般人は、IE以外使わない気がするw
>>225 でも最近はIEのシェア下がってきてるし、ヨーロッパの方ではOSインストール時にブラウザ選択画面が出たりするようになってきてるからな。
要するにモデルをXMLで渡すとGLでレンダしてくれるという話か 標準を名乗るならモデルは実装非依存にしてバックエンドをDXにしてもよい形態にするだろうし、 あとはシェーダを書かせるかどうかだろうな。 silverlight陣営は標準化とか考えずにすむので先に実装を投入するだろうが、さてどうなるかな。 プロプライエタリなコードを使い、かつゲームを書くのにJSはつらかろう。
意味不明? >標準を名乗るならモデルは実装非依存にしてバックエンドをDXにしてもよい形態にするだろうし しないからw それはもう、Web"GL"じゃねーし >silverlight陣営は標準化とか考えずにすむので先に実装を投入するだろうが だから、それってMSだろ WebGLにはのってくるわけない どうしてMSがWebGLに興味を示さないかを理解してないんだね そう言うユーザーのご都合主義(例えユーザーの為にそれがベストでもw)で物事は進まない
>>229 Silverlightがあるからだろ。WebGLとは随分性質の違うもののようにも思えるが、どちらもRIAを作成する上で使用されるからな。
ブラウザで生のバイナリ(シェーダー)を実行とか言う発想が OSビルダーであるMicrosoft見たらナンセンスなんだろう 世の中のスーパーハカーの人たちにとって、絶好のカモ (今年のGDCでも問題点とはしていたらしいが…) まあ結局、情勢見て世間に浸透するようなら WebGLの協賛にNVIDIAとかいるしMicrosoftもWebDXみたない事をしだして OpenGLの専売じゃなくなるんでしょ
でもなー過去にVRMLとかJava3DとかWebで3Dを使う仕組みはあったけど全然普及しなかったからな。 今回ハードウェアが使えるとはいえ普及する気がしない。
どうせ砂場で動けばいいんだけどシェーダだけはちょっと面倒だろうなあという感じ しかしモデル指向ではなくプログラム指向っぽいんだよな そもそもCanvasタグのときも、プログラム指向的だったのが謎。 SVGを操作するという簡単かつ汎用性の高い実装を目指さなかったのか疑問なくらいだ。 SVGをちょこまか拡張してXMLベースのモデルフォーマットを作ってくれれば、 OpenGL界隈の人間も喜ぶと思うんだがなあ。
糞スレ立てんな
>ブラウザで生のバイナリ(シェーダー)を実行とか言う発想が もうすこし軽ければな…それは sl にも flash にもいえるけど…
小文字でslと書かれると、汽車が走るコマンドの方を思い出す
ぽっぽー
( ⌒ ) ポッポー l | / ⊂(#・∀・) / ノ∪ し―-J |l| | 人ペシッ!! (_) )(__)(_ ⌒) (⌒ ⌒Y⌒
Glutで日本語文字列を描画する方法を教えてください。
日本語文字列のフォントを描写したテクスチャを用意してください。
それ以外でお願いします。
フォントのアウトライン取得してポリゴン化。
FTGLでお願いします。
3Dで作ったキャラクターにまばたきをさせたいのですがOpenGLについて全くの初心者のためどうすればいいかわかりません。 「まばたき opengl」等でググったのですがそれらしいHPが見つけられませんでした。 なにか参考になりそうなサイト等あったら教えていただけませんか?
OpenGLについて全くの初心者がなんでOpenGLでんなことしようと思うのさ。
>>245 間の段階とばしすぎ。3Dモデル作るだけ作っていきなりOpenGLでアニメーションさせるなんて無理無理。
基礎から学べ。
248 :
245 :2010/03/23(火) 15:12:51
>>246 3Dでゲームを作って見たいと思い立って上のような事を考えました。
>>247 色々と段階があるのですね。
基礎と言うとまずどのような事から始めればいいのでしょうか?
openGLの入門書で大丈夫でしょうか?
基礎から積上げていく方向は他の人が紹介してるからいいとして、 上から掘下げていくなら、Vertex Skinningとかmorphingあたりからいけばできんじゃないかな。
スキニングというかボーン変形とかを詳しく解説してるサイトないですか?OpenGLで。
>>251 OpenGLでっていうか、スキニングとかボーン(などの代替物)によって頂点が回転する固有のロジックは
そもそも数学の世界の話になるから、OpenGLだろうとDirectXだろうと手計算GDI描画だろうと同じなので、
数学方面から当たればサイトなんていくつも見つかるよ。
OpenGLって言う前提はそもそもそのやりたい事と、あんまり関係無い
>>252 が伝わらないといけないので1つだけ補足しておくと、
描画系ライブラリの話じゃなくて、座標移動の計算の話だから、って事ね
>>251 日本語のは知らないけど、英語サイトならDrDobbos Journalに寄稿してた人のサイトが良くできてた
URLは失念したので自力でヨロ
なんというアバウトな・・・ 「砂浜に宝の地図が埋まってるから探せ」的な情報だな
イタリア料理店がそのジェノベーゼソースはどこで売ってますか?って聞かれたような感覚だけどな。
257 :
デフォルトの名無しさん :2010/03/24(水) 15:21:44
レベルの低い質問ですいません。 glColor4fv()で色を指定するときは GLfloat color[4] = {r, g, b, a}; の順番で良いのでしょうか? 赤本にも書いてないのですが……
それでいいよ
259 :
デフォルトの名無しさん :2010/03/24(水) 21:03:51
ボーン変形ってのは特定の空間にある頂点を回転させてるだけなの?
回転だけとは限らない
>>259 回転と移動とその他だけど、あれは単に 「有名な仕掛け」 であって、
やってる内容は頂点位置の計算だよ、と一応追記しておく。
で、OpenGL だとか DirectX (特にDirect3D) だとかは、あくまで描画処理をするライブラリであって、
一応、それに付随するベクトルとか行列の計算ルーチンは含まれてるけど、
別にボーンなんて曖昧なものはそもそも無い。
あれはあくまで、「とあるルールで計算して、頂点動かしてる」 ってだけ。
ボーンによるデフォームは各種3Dソフトでよく見るから、たまに勘違いする人いるけど、
ここはム板だからせめてその辺切り分けときたい気持ち
ボーンデフォームとかのロジックやりたかったら、多分どのライブラリでも 最低限、高校数学B以上は普通に理解出来てて、その先がわからないと無理。 四元数とかの便利な道具も多分今は必須?オイラー角との変換とかも場合によってはいると思う (ジンバルロックがあるから多分四元数使うのが普通かもしれない)
gemsの4巻に載ってるから買ってきなさいよ
まばたきぐらいだったらテクスチャでアニメーションする手もあったな。
266 :
245 :2010/03/29(月) 14:13:40
>>249 お礼が遅れてすみません!
忙しくて見にこれてませんでした。
サイト参考にさせてもらいます。
ご親切に教えて頂きありがとうございました!
267 :
デフォルトの名無しさん :2010/03/29(月) 21:19:48
VC2005上でF5実行よりCTRL+F5実行の方が2倍近く遅くなるのはどんな原因が あり得るでしょうか。 forループ使ってglDrawElementsを繰り返し呼んでる部分が遅いことまでは 突き止めたんですが・・・・ そのプログラムはGLSLでいろいろ処理させてて、GLSLを使わないとF5も CTRL+F5も遅くはならないです。
F5のデバッグ実行だとエラーを感知して早めに落ちる Ctrl+F5の通常実行だとエラーに気づかずにずっと走ってしばらくしてから落ちる とか?
269 :
デフォルトの名無しさん :2010/03/29(月) 23:35:09
>>268 回答ありがとうございます。
そういうエラーを調べる方法ってあるんでしょうか?
デバッグする方法が無くて非常に困ってるんですが・・・・
スタートページ開いてると遅くなるって現象だった気が・・・ 何分かなり昔のことなんで違うかも、違ったらごめんね
>>249 うちは.NETしか分からんからOpenTKちょっと触れたけど
まじでOpenGLは勉強し辛い、情報が英語だけだからってのもあるんだけど
本格的に使うなら自作メッシュクラス作らないといけない
作ればいいだけ。 ましてや勉強するつもりならそれくらい作れるようにならないと。 本格的にやってるとこは、画像とかモデルのライブラリは 独自に持ってるからライブラリはシンプルな方がいいんだよ。
273 :
デフォルトの名無しさん :2010/04/01(木) 10:40:27
そして量産された車輪の再生産がアメリカ様の統一規格に駆逐されるわけですね、分かります。
一応SlimDXやXNAも触れてるけど、オリジナルメッシュ作る羽目になってしまう XNAのModelMeshが使い勝手悪すぎる、SlimDXは良いけど OpenGL系、XNAとか様々なライブラリとの互換考えて作ることにした
>>273 いいや、ゲームなんかはモデルデータを勝手に使われたら困るから
統一規格されたフォーマットがいいとは限らない。
だからcolladaは中間フォーマットなんだよ。
276 :
代行 :2010/04/06(火) 22:42:04
OpenGLの初心者です
マウス位置によって視点がぐりぐり動くコードをかこうと
以下のようなコードを書いたのですがなかなかうまくいきませぬ
このコードなのですが、どうすればよいのかヒントを貰えませんか(答えならなお可 (・∀・))
(#elseのほうもダメでした)
http://codepad.org/5wvS4khb
初心者なら初心者らしく勉強しろよカスが
278 :
代行 :2010/04/06(火) 23:17:25
そこんところを何とかお願いします。 processingでは上でやりたいコードはすぐにかけましたが OpenGLでは何も設定しない時のgluPerspective/gluLookAtのデフォルト値は 調べてもよくわからんし なんかこう、暗黙の前提みたいな部分が多くてよくわからんのです 上のは一応自分なりに考えて最小のコードを作ったんですけど・・ ちゃんと教えてくれるなら 今日作成したwavefrontのobjデータ読み込みクラスをうpします
お前の排泄物を貰って喜ぶ変態がどこにいる? 寝言は寝て言え。 GL_MODELVIEW と GL_PROJECTION について学んでみると良い。 あと glutPostRedisplay()
280 :
デフォルトの名無しさん :2010/04/07(水) 04:48:16
>>276 視点ってカメラとかプロジェクションとかの設定のこと?
VB/OpenTKのソースだけど一応参考程度に、C言語わからないから勘弁してくれ
'マトリクス作成
Dim mxproj As Matrix4 = Matrix4.CreatePerspectiveFieldOfView(CSng(vang * c_rad), CSng(vwd / vht), vnear, vfar)
'登録前処理(プロジェクション)
GL.MatrixMode(MatrixMode.Projection)
'マトリクス登録
GL.LoadMatrix(mxproj)
カメラも同様にする
Dim mcam As Matrix4 = Matrix4.LookAt(camE, camT, New Vector3(0, 1, 0))
GL.MatrixMode(MatrixMode.Modelview)
GL.LoadMatrix(mcam)
やっとカスタムメッシュクラス出来た、XNA,DirectX互換ファイルフォーマットも作ったし
OpenGLでDirectXと同じMesh.DrawSubsetを使えるようにしてしまった
281 :
代行 :2010/04/07(水) 06:33:16
C言語も分からないようなら口出さないでください
282 :
デフォルトの名無しさん :2010/04/07(水) 09:19:20
>>281 ちょっと煽られたからってそんな事書くなよ
Bulletのライブラリが見つからない libbulletmath.lib ってどこにあるんだYO!
ビルドすればできるYO
>>284 OpenGL + Bullet でテストしようとして、とりあえず Bullet2.76 落としてきて、msvc/2008 にある
BULLET_PHYSICS.sln を開いてビルドした所、そのライブラリが生まれなかったのだ
最新だと何かと統合されたんだろうか。 ググっても情報が出てこなくてハマった
>>285 あら、2.75ではあったけど、2.76で変わったのかもね
デモプロジェクトとかがリンクしてるの見ればわかるかも
287 :
デフォルトの名無しさん :2010/04/10(土) 03:10:34
OpenGL4.0ってまだ完成してないの?
仕様自体は完成しているけど, 実装がまだないようだね。
289 :
デフォルトの名無しさん :2010/04/10(土) 08:26:14
メタセコイアなどのフリーのソフトで作成した3Dモデル, あるいはDirectXのxファイルをデータ変換してOpenGLに 読み込めるフリーのソフトがあったら教えて下さい.
291 :
デフォルトの名無しさん :2010/04/10(土) 11:40:33
>>289 メタセコイアそれ自体がopenGLにデータを読み込めるフリーのソフトなんじゃないのか
>>289 OpenGLってDirectXのようなMeshやTextureクラスとか無いから、
読み込むって言っても色々あってこれといった答えが無いような
頂点バッファ登録までするのか、頂点配列のデータを取得するだけなのか
いすれにしても、形状データをOpenGLなら形状データを受けるクラスや構造体とか作らないと駄目だと思うが
294 :
デフォルトの名無しさん :2010/04/10(土) 15:33:10
>>294 「OpenGLが読み込めるファイル形式」なんてものはないから!
君が今よく調べるべきはファイル形式以前にOpenGLで何が出来るかだよ
296 :
デフォルトの名無しさん :2010/04/10(土) 16:02:08
ボーンについて教えてください。 仕様通りに実装すると非常に大変なので、 1頂点あたり2ボーン、ウェイトは-128〜127という制限を付けたいのですが、 そう言う仕様で問題ないでしょうか?
ダメです
何の仕様だよ……
299 :
296 :2010/04/10(土) 20:30:04
すいませんウェイトは-32768〜32767までOKでした。 1頂点当たりボーン2つというのは平気でしょうか???
>>294 mqoやobjファイルを読み込むことは出来るが、基本はテキスト形式のファイルだから
頂点の座標・法線・テクスチャ座標とかを取得するには自分のプログラムでテキストデータを解析する記述をしないといけない
そういうサブルーチンやライブラリがネットにあれば落として使ってみるのも良い
うちはXファイルをコンバートしたり、Direct3D/OpenGLと互換できるファイルフォーマット作ったけどね
>>299 どんなに大変でも仕様どおりに実装してください。それが仕様というものです
302 :
デフォルトの名無しさん :2010/04/11(日) 00:02:42
>>295 以前はOpenGLをやってたさ。だが、3Dモデルをいちいちプログラムで
いちいち作成していられるか!という不満から多くの3Dモデリングソフト
が対応しているdirectXに乗り換えた経緯がある。
しかし、マイクロソフトが作ったDirectX、癖がありすぎて修得する
のが難しい.MFCと組み合わせたプログラムを一応、作ったがね。
物理シミュレーションソフトを作っているが、サウンド関係はいら
ないし,OpenGLが右手系対応だし,ODE(Open Dynamic Engine)も
OpenGL対応ということからやはりOpenGLを使いたい。しかし、
ネックになるのが3Dモデルをいちいちプログラムで作成しなければ
ならない点。
それで,OpenGLでも簡単に読み込めるフォーマットを出力できる
3Dモデリングソフトがないか聞いているんだ。
それを偉そうに上から目線で言うな、この32768年前のタコが、死ね!
303 :
デフォルトの名無しさん :2010/04/11(日) 00:04:16
↑糞!「いちいち」がくどかった.「いちいち」は適当に削除してくれ
304 :
デフォルトの名無しさん :2010/04/11(日) 00:06:09
無いです
>>302 以前やってたんなら、OpenGL がどんなライブラリか知ってるんじゃないの?
DirectX における x ファイルのような、ベンダが用意した なんちゃら.opengl みたいな
専用ファイル形式なんて存在しないよ? というかそういうライブラリじゃないよ?
で、とりあえずどんなバカでもローダ書けそうな一番簡単なファイル形式っていうと・・・
wavefront の obj とか? 本当に頂点と面と簡単なマテリアルくらいしか情報無いけど、
テキストだし糞シンプル。 適当なモデラでテストモデル作って保存したファイルを眺めてみれば
他に資料なくても簡単に書けるぜ。
307 :
デフォルトの名無しさん :2010/04/11(日) 00:45:48
3〜4年前にOpenGLを勉強してて、3Dモデルをプログラムで作成 しなければならない点が面倒で、多くの3Dモデラーが対応してい るDirectXに乗り換えたけど、OpenGLの現状は昔と変わっていない ですね。 やはりDirectXでいきます。
何年経ってもモデルの対応はしないからもう来ないでね。
309 :
デフォルトの名無しさん :2010/04/11(日) 01:04:27
>>306 ありがとうございます。「やはりDirectXでいきます。」とは言った
ものの、もう少し、3DモデリングソフトとOpenGLの関係を調べて
みます。
DirectXの方がOpenGLよりも機能的に優れていますが、ころころ
仕様が変更されるのにウンザリしているので
二度と来るな、気持ち悪い
箸の上げ下ろしからケツを拭くまでやってくれなきゃいやだって事でしょ
言い訳ばっかでほんときもいなw できない人の典型。
>>305 OpenGLってライブラリだったのか?
そりゃ名前にライブラリって入っているけどさ
ttp://www.opengl.org/documentation/specs/ このページにあるOpenGLの仕様書を全部じゃなくていいから
1章と2章の前半と興味ある部分だけでも読めばこのスレに書き込まれる疑問の9割ぐらいは解決するんじゃないかと思う。
固定機能大好きっ子は3.0以前の仕様書かCompatibility Profile Specificationを読めばいいかと思う。
よくわからん数式がでてきたらReal time renderingっていう本でも読んだらいいかな。
十分過疎ってるんだし、なんでも書き込んだらいいがな
316 :
デフォルトの名無しさん :2010/04/11(日) 08:17:49
頭の悪いおじさんは大変ですね
319 :
296 :2010/04/11(日) 12:39:57
すいませんそれで1頂点当たり影響を受けるボーン2つというのは 実用的にOKでしょうか?
何に実用するんだよ、お前の文章からは回答者に理解してもらおうという気持ちが全く伝わってこないぞ
321 :
296 :2010/04/11(日) 14:52:50
うーん、言い直しても大して変わらない気がしますが。 携帯電話やWeb向けに3Dゲームorアプリを作るのに、 1頂点当たり2ボーンまでという制限は妥当でしょうか? それ以上は実装がかなり大変になります。 デザイナーではないのでキャラクターとか作るのに、 この実装で良いのかどうかさっぱりわからんのです。 M3Gの仕様上はミニマム2つなので大丈夫です。 実用的に2つで良いのかどうか?
>>321 ああ、なんか妙な違和感がある質問だと思ったら、そういうことか。
それ、質問する先違う。 ここはプログラム板のOpenGLスレであって、
CG板じゃない。 ここにいるのはお前さんと同じく、コーディングする側の人間であって、
デザイナーさんとかモデル製作者側の人間じゃない。 質問する先が違う。
中には両方してる器用な人もいるだろうけど、多分求める答えは、
「そのプログラムを利用する側の人間」 に聞かないとわからないんじゃないかな
ここにいるのは 「プログラムを作る側の人間」 だ。
>>321 俺はモデリングもやってるけど、頂点辺りボーン1本でやれっていわれたらそれでやるし。
1本だとウェイトが要らないから携帯とか容量厳しい環境の事を考えると理解できる。
でも2本くらいウェイト入れれると自由度はだいぶ高くなるな。
>>321 悪いが、言ってる内容が真実なら
お前のヘッポコ理屈であり、妥当も何もヘタレの言い訳にしかならない
ウエイトが2つ以上になると、
処理負荷が高くなり実用的じゃないなら2つと言う制約は妥当だが
お前が大変なだけで、その仕様にするじゃ、お前がヘタレだって事にしかならないぞ?
大変でも実用化出来るなら、2つ以上にするべき
”かなり大変”ってのもお前の尺度だろ?
世の中に、それが大変じゃない奴が実装してるアプリがあったら
お前の所為でショボくなるんだぞ?
325 :
296 :2010/04/11(日) 17:15:36
>>324 うーん、2ボーン以上も実装可能なのは確かです。
詳細は略ですが、ものすごくやりたくないのです。
恐らく10人中9.8人は同じ意見なはずです。
2ボーンで可能なら2ボーンまでにしたいのです。
で、2ボーンまでしか対応しないライブラリってどうよ?
って話です。
>>325 俺も携帯とかのメモリ帯域とか厳しい環境でシェーダー込みのライブラリとか作った事あるけど…
>恐らく10人中9.8人は同じ意見
これ、完全にお前さんのレベルでの主観だよね?
>で、2ボーンまでしか対応しないライブラリってどうよ?
世の中に、同じ環境で4ボーンとかに対応したライブラリが出てるなら
まさに、お前さんがショボイくて言い訳だらけだから、ダメダメでしょw
としか言いようが無い
そんな事を質問するより
ディレクターやデザイン担当に確認するほうが先
デザイン担当がボーン1つで良いと言えば、ダメダメライブラリでも
それで行けば良いだけ
なんかさ…、頭悪いよ…
>>325 さらに言うなら、大変なのはハードの中の人
CPUやGPUやメモリコントローラーやDMAであって
プログラマはコードさえ組んでしまえば、大変でも何でもない
>それ以上は実装がかなり大変になります。
>うーん、2ボーン以上も実装可能なのは確かです。
>詳細は略ですが、ものすごくやりたくないのです。
>恐らく10人中9.8人は同じ意見なはずです。
普通によく居る、出来ないプログラマの発想丸出しなんだけど…
329 :
296 :2010/04/11(日) 18:58:31
>327 モデルデータは新規ではないです。 既存のモデルデータをそのまま使うので。 3つ以上ボーンを使った場合、ウェイトの大きい方から2つ使う事になります。 首から肩の辺りが心配で。
>>329 2つ以上のボーンに対応出来るのに
>既存のモデルデータをそのまま使うので。
>3つ以上ボーンを使った場合、ウェイトの大きい方から2つ使う事になります。
2つ以上のボーンがるモデルを使う前提で、2ウェイト以上はカットするって事?
死んだ方が良いよw
それ違う動きになるじゃん
そともコンバーターでも作って、ウェイトを再計算でもするの?
ヘタレ全開じゃん
331 :
296 :2010/04/11(日) 19:25:57
この流れだとまともな意見も得られそうにないので、この辺でお開きと言う事で。 実装は1頂点辺り2ボーンで確定。
お前さんのヘタレ実装を肯定するには、お前さんの出した事実が邪魔をすると思うねぇ… ・2ボーン以上の仕様には、負荷問題ではなく、大変だからやらない(出来ないではない) ・使うモデルは、2ボーン以上の仕様が分っている これで、どうして2ボーン限定のライブラリが良いの悪いのの発想になるんだか… 仕様を満たしてないじゃんw 2ボーン以上のモデルを使うが、2ボーンしか対応しない、そのモーション挙動は変わってしまう それをプロジェクトで承認取るのが先 発想が、仕事人としてもヘタレだと思うぞ
このスレはなんでいつも殺伐としてるんだろうか
余りにもレベルが低い質問をするのに、 さも自分は間違ってないと言わんばかりのスタンスの奴で溢れているからw 因みに、このスレに限った事じゃない 他の技術系スレでも、BBXとかもでも同じ
結局は出来ないプログラマが自分の発想を肯定して貰いたくてグダグダ言ってたでFA?
>>331 >この流れだとまともな意見も得られそうにないので、この辺でお開きと言う事で
だからおひらきも何も、最初から
>>322 と言ってる訳で。頭悪すぎるよ本当に
自分が何かを間違えている、って事、ここに書かなくてもいいけど自分の中で認めな
じゃないと、ただの童貞だぞ♪
んで、据え置きでは4つが妥当なの? >影響ボーン上限
だから、そんな事は プロジェクトやデザイナからの要求仕様と、実機での再生負荷等とで話し合いで決めればいい事 デザイナが2つも良いと言えば2つが妥当 デザイナが4つと言ってが、自分の2つという意見を妥当としたいなら、 その根拠や比べるデータを提示させてデザイナを納得させる という、単にプログラム以前の社会人としての行動の問題
しかし、使うモデルデータに2つ以上のボーンがある仕様なのに プロジェクトやデザイナに聞くわけでもなく、他人に2ボーンまでのライブラリが妥当ですか? とか質問するような頓珍漢は別の問題だねw
ここで仕様切る側のセクションリーダーの登場! 「2ボーンのときとそれ以外の時の メリット、デメリットをリスト化して持ってきなさい。」 仕様をどっちかに決めるのは プログラマの仕事じゃないでござる。
4.0で盛り上がってるのかと思ったら基地外が騒いでるだけだったでござる
343 :
デフォルトの名無しさん :2010/04/12(月) 07:34:57
いつかでてたClutterってどうなの?
大変なのは計算資源なのかデータ管理なのかコーディング量なのか、どれだったんだろ?
346 :
デフォルトの名無しさん :2010/04/12(月) 18:29:50
可変長にすればいいだけ こんな事で揉めるなよ
347 :
デフォルトの名無しさん :2010/04/12(月) 22:33:29
>>344 Clutterかっこいいよね
でも、Clutterをメインで使ってたmoblinはノキアのMeamoと統合して
MeeGo見たいな新しいのになり、GUIライブラリはQtになるみたいだから、
どちらかと言ったら衰退していくんじゃね?
ここまでくるとスレちだな
スキニング専用スレとかゲ制作板は細分化しすぎだろw 曲がり方はウェイトの設定が滑らかでないように見えるけど、 もっと情報がないと適当な解答しか帰ってこないと思うよ
350 :
348 :2010/04/15(木) 09:17:30
実装上ウェイトは頂点毎には設定できないです。 画像は関節部分が上下のボーンに0.5づつ線形補間。 詳しい情報はソース見ます?
関節部分がウェイト0.5で固定ならそんなもんだと思うよ。 たぶんバグではない。
nvもgl4対応ドライバ出してたか
ttp://developer.nvidia.com/object/opengl_driver.html > GeForce 8000 series or higher; Geforce G100, GT120, 130, 220, GTS 150, GTS 250, GT310, 320, 330, 340, GeForce GTX 260 and higher, any ION based products.
OpenGL3.3 対応する GPU から GT240 が外されている件について
OpenGLでマルチテクスチャーを使うときに 比較的最近のGPUだと何枚まで使えますか? ※ シェーダーは使わずで固定パイプラインだけでいいです
GL.GetInteger(GetPName.MaxTextureUnits, out num); で取得したら8600M GTは4と出た。 ちなみに GL.GetInteger(GetPName.MaxTextureImageUnits, out num); だと32。 4は無いと思うけど32枚もいけるのなぁ。まぁそもそも32枚も使わないけどw
昔のテンプレにその手の情報が大量にあるサイトが有ったな まあ更新停止してた気がするから最近のはないだろうけど
GTX 280 だと、 glGetIntegerv( GL_MAX_TEXTURE_UNITS, ); が4 glGetIntegerv( GL_MAX_TEXTURE_IMAGE_UNITS_NV, ); が32 でした。
こちらに書くべきか迷ったのですがOpenGLを用いることが前提なので、 質問をさせてください。 OpenGLを用いて3Dゲームを作成する場合、みなさんは3D描画以外の部分、 例えば音楽再生やコントローラの入力等は何を用いているのでしょうか? 現在はSDLを使おうと考えているのですが、もし他に有用なライブラリが あればご教示ください。宜しくお願いします。
ググればいっぱい見つかるじゃん
winmm.lib
ラッピングして適当なの使う。
362 :
デフォルトの名無しさん :2010/04/27(火) 12:05:34
gluLookAtを続けて二回呼んだ時の動作がいまいちわからんのですが 例えば、 gluLookAt( 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 ); でオブジェクトが見えていたのに、二回続けて呼ぶと gluLookAt( 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 ); gluLookAt( 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 ); オブジェクトが見えなくなる。
363 :
デフォルトの名無しさん :2010/04/27(火) 12:13:41
idenしないでマルチするとそりゃそうなる。
365 :
デフォルトの名無しさん :2010/04/27(火) 12:32:28
366 :
デフォルトの名無しさん :2010/04/27(火) 13:36:08
void Reshape( int width, int height ){ glViewport( 0, 0, width, height ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluPerspective( 30.0, (GLfloat)width/(GLfloat)height, 1.0, 100.0 ); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); gluLookAt( 0.0, 0.0, -8.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 ); } カメラの位置をマイナス方向からに設定して原点にあるオブジェクトをみようとすると見れない。 プラス方向(8.0)からに設定すると正常に動作します。glMatrixModeの関係でしょうか?
背面カリングがONになってるんじゃ? どこかで glEnable (GL_CULL_FACE) してませんか? あるいはモデルの描画直前で glDisable (GL_CULL_FACE) すると表示されませんか?
368 :
デフォルトの名無しさん :2010/04/27(火) 14:07:56
OpenGL.org経由で
Lua as an Effect File Format for OpenGL
ttp://prideout.net/blog/?p=1 ていうのを見つけたんだが、これはよさそうなので今度試して見ようと思う。
ちょっとしたシェーダとかを開発するときに
FXComposerだとglsl使えないしFeedback transformとかrender to vertex bufferとか使えないようだけど
Luaならプログラム側の関数を呼べるからいろいろできそう。
こういうのを試した事がある人いる?
Luaの代わりにpython使うのはどうだろうか。
ちょいと気になる一品だな。
思わず欲しくなる一品だな。
GLSL書くときはAMD RenderMonkey使ってる
あれOpenGL2.1、つまりGLSL1.2くらいまでしか対応してなくないか。
374 :
デフォルトの名無しさん :2010/04/30(金) 01:07:47
4.0はいつ出るのさ?
くそむかつくガキだなw
>>374 もう出てる。というかOpenGLはGPUメーカーがドライバーに含めてリリースするから4.0対応ドライバーが出た時点。
nVIDIAも最近4.0対応ドライバー出したね。
/ _ \ / (※) | |  ̄ | ヽ /_____ヽ / ヽ_|0l二二二二l0|_ノ |vヽ___ノv| (d| ・=ゝ ・=ゝ|b) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ Z/ ( _ ) ヽフ < 死刑!! / @ @ ヽ \________ (ー――〜〜 ―――) \ ______/ てヽ_/ lo// /( て二/l__ (┃ ⌒ 二 )_O―┴┐ |┐ー┤ | |\O O| | |_n_)┘  ̄ ̄
378 :
デフォルトの名無しさん :2010/05/01(土) 02:16:08
3.3はテッセレーション無し?
テッセレーションはハードウェアサポートがいるから3.3では無理だろうな。
d3d10以降がXP非対応等の問題で普及してない今、GL3以降の日本語解説本の需要が地味にあるとおもうんだけど誰か書いてくれないかな
DX9で不十分な層って相当限られるんじゃないの…
DX9で何が不十分なんだろう カタログ上の文言じゃなくて、実際に自分で何を作りたくて、具体的に何が不十分なんだ
ジオメトリシェーダとか、ハルシェーダなんかが使えないところ。
>>383 だからそれはカタログ上の文言・・・ というか、DX10以降で採用された物であって、
実際に何を作ろうとして、具体的に何が不十分なんだ?って話。
ジオメトリシェーダとハルシェーダを使いたい 場合には不十分だろうけど、それは何かをしたい時の手段だろって話
狼男が主人公のゲームをつくりたいんだよ。 月を見た男の身体がリアルにモーフィングするゲームを作りたいんだよ。 毛をうじゃうじゃ生やしたいんだよ。臨場感を出したいんだよ。 だから、ジオメトリシェーダは必須なんだよ、文句あっか、ハゲ!
学習用に不十分
機能より使う手間と実績のが選ぶ理由としてでかいと思うけど リファレンスは有料・サンプルが英語ばかりじゃさすがに比較対象にならん 本書くなら今ならスマートフォンとかいいんじゃないの。Androidの本にさわりだけ載ってた。
>>387 他の手段って、例えばどんな?
速度も質も損なわずにだぞ。
>>389 月を見た男の身体から毛をうじゃうじゃ生えてくるリアルなモーフィング、
で、速度も質も損なわずに、としか書いてないから
どうとでも他の手段や方法で表現出来るだろ?って話
そしてジオメトリシェーダじゃないと絶対に絶対に絶対に不可能だと言うなら、それ使えばいいじゃない
>ジオメトリシェーダとハルシェーダを使いたい 場合には不十分だろうけど
と書いたのは、それが絶対に他の手段では(色んな意味で)不可能で、本当に必須ならば
DX9 では不十分だけどって話だ
じゃぁDX5でもいいじゃん
別に実装の必要とか無くとも技術者的な好奇心で最新機能を触りたいってのは普通にあるじゃん そんなに必死になって否定する必要もないだろ
レスする必要が無いと言いたいのだろう。
いつからDirectXスレになった?
OpenGLスレなら GL_ARB_geometry_shader4だとか GL_ARB_draw_instancedだとか GL_ARB_texture_buffer_objectだとか そういうOpenGL用語を使って議論すべきじゃね? Direct3D9の代わりにOpenGL2.x Direct3D10の代わりにOpenGL3.x と言えばええんでない?
マウスでクリックした位置から パーティクルを発生させるような、サンプルご存知ないですか? openglでのマウスイベント系の情報が少なくて…参考にしたく
OpenGLと何の関係がある?
猿でも分かるSDL使えよ
多分やりたい事の絵だけが頭にあって、それが実際にはどういうもので、どういう事で、 目の前のテクノロジやライブラリはどこまでの何なのかが整理も出来ていない状態に見える。 OpenGLって グラフィクス・ライブラリだって知ってるんだろうか。 あと、関連ライブラリに GLUTとかあるのは知ってるんだろうか。 ※ここまでがマウスイベントの話 あと、パーティクルって具体的にどういう作業で実現する物か知ってるんだろうか
やりたい事の絵だけが頭にある状態で、それの丸ごと書かれたサンプルが欲しいって言う奴は 大抵コピペで済ませようとしてるだけなので、多分意味なんてわかってない
まぁはじめはみんなそんなもんさ。
>>397 マウスだけ、
パーティクルだけ、ならいくらでも
サンプル転がっているよ。
そこからは自習の時間だ!
403 :
デフォルトの名無しさん :2010/05/08(土) 06:36:53
視界の表現で、「重なりあう可能性のある」複数のポリゴンが必要な領域を加算合成かなにかで 「均一に」明るくしようとしたらどういう方法があるかな? イメージとしては舞台をスポットライト2個で照らすんだけど、 1個だけが照らしてる部分も2個重なってる部分も同じ明るさにしたい感じ。
>>403 ステンシルバッファにスポットライトのイメージ焼くんじゃダメなの?
405 :
デフォルトの名無しさん :2010/05/08(土) 07:31:57
>>404 そうか、ステンシルバッファってこういう時に使うんだね。使ったことなかったよ。
使ってみる。サンキュー。
406 :
デフォルトの名無しさん :2010/05/16(日) 22:29:43
どなたかUbuntuでOpenGL使っている方はいますでしょうか パッケージを入れたはいいのですが サンプルを動かした所 本来赤から青へのグラデーションパターンが生成されるはずが 黄緑から赤へのグラデーションパターンが生成されてしまいます。 更にウインドウも生成されません。 解決方法を教えていただけないでしょうか? バージョンは9.04で 入れたパッケージは freeglut3 freeglut3-dbg freeglut3-dev libglut3-dev libglew1.5-dev libgtkglext1-dev です
なんのサンプルだよ
>>406 俺はUbuntu9.04でも10.04でもOpenGLを使っている。
で、その情報だけではまったくわからないのでプログラムをどこかにアップしてくれ。
もしくは自分のやったことを正確に一般に使われる用語で説明してくれ。
409 :
デフォルトの名無しさん :2010/05/18(火) 15:33:44
そんなの知るかよwww OSすら書かないアホに付ける薬の方が先だ。
すみません、OSはwindows vistaです。 urlにwindowsが入っているのでわかると思い込んでしまいました。
GLUT for WindowsってとこにリンクしてあるNate Robinsのページに3.7.6がある
imageってついているのが使う奴ですか?
>>412 みつけました。
ありがとうございました。
迷うから誰か詳しい人どっちをつかったらいいか教えてください。
glutが使いたくて質問して答えを得たならglutを使えばいいんじゃないのか?
そうします。
419 :
406 :2010/05/19(水) 00:40:25
>>419 setcolorってのがなんだかわからんけど、普通RGB順だろうから赤から緑のグラデーションで合ってるんじゃ?
赤青にしたいなら0.0を2番目にしてみたらー
つか学校の授業のサンプル?ずいぶん荒っぽいなぁ
>>419 森先生の所の宿題なら、このページの「2-9:実験2-3:カラーグラデーション」をそのままコピれば終わりじゃないか。
http://www.mlab.im.dendai.ac.jp/~05ki103/cgmreport.htm setcolor(r,g,b)の説明を読むと、"r, g, bは赤緑青の値を格納するdouble型変数である。"
と書いてあってr,g,bは0〜255ではなく0〜1.0な。
x=0で setcolor(1,0,0)
x=511で setcolor(0,0,1)
ごめん提出者の名前だった。×森
木を見て森を見ずまさにこのことだな
424 :
406 :2010/05/19(水) 22:04:24
>>420 弄ってみたらどうやらサンプルが間違えているようです。
ですがなぜか赤から青へのパターンが生成できませんでした。
青から緑は出来たのですが。
ウインドウの方も生成されませんし。
>>421 その課題じゃありません。
しかも試しに動かしてみたらエラーでました・・・
>>424 お前の感想はどうでもいい。
まず
1. 画面全部をR1色で塗りつぶす
2. 画面全部をG1色で塗りつぶす
3. 画面全部をB1色で塗りつぶす
をやってみ。お前はまず基本的な所がまったくわかっていない。
だから他人にも説明できない。
ウィンドウが生成されないならお前はどうやって色を確認してるんだ。
>>424 ウィンドウの生成ができないのに赤から青はどこに出てるんだよw
あとなんでどこをどう変えたら青から緑になったとか書かないの?
こと細かく書けば物好きが答えてくれるのにw
(setcolorとかincmc.hとかいう中にあんだろうけど、それがわかんないとなんともだろうが)
つか課題なら講師に聞けばいいじゃん。授業料払ってんでしょ?
427 :
406 :2010/05/19(水) 22:39:35
>>425 setcolor(x/2, 0.0, 0.0);で黒から赤
setcolor(0.0, x/2, 0.0);で黒から青
setcolor(0.0, 0.0, x/2);で黒
でした。
ウインドウが生成されないでプログラムが動いてるって意味です。
外観の設定で視聴効果を切ればウインドウが生成されます。
パッケージが何かしら足りてないのでしょうか
428 :
406 :2010/05/19(水) 22:46:17
>>426 勉強ですがとりわけ何かの課題ってわけじゃないです。
そもそもプログラム自体の質問がしたかったわけではなく
正常に動作しないのはUbuntuに問題があるのではないかと
(パッケージが足りない等で)考えたんですが、
Ubuntuのスレで聞いたら、プログラム板行けって言われたんで
こっちで質問したわけです。
俺OpenGL知らないUbun厨。
>>419 のサンプルがDLできないよ。
430 :
425 :2010/05/19(水) 22:51:18
>>427 お前は何も分かっていない。他人に聞かれていることをことごとく外している。
いいからグラデーションとか考えないで画面全体を1色で塗りつぶしてみろ。
お前以外の人間はsetcolor(r,g,b)、引数は(0-255 or 0-1)だと推測しているが、
お前の説明はそれと矛盾する。通常のOpenGLではお前の言う通りには「絶対に」ならない。
一番考えられるのはお前の説明が間違えている。
お前の説明は意味不明だからソースを出せといわれている。
だからウィンドウが生成されないならお前はどうやって色を確認しているのか。
>>428 426だけど
linux環境ないんで想像だけどさ、(421のページから上いって課題臭いとこいってダウンロードしてincmc.h拾ってきたが)
void setcolor(r,g,b)
int r,g,b;
{
glColor3d(((double)r)/255,((double)g)/255,((double)b)/255);
}
なってんだよね。そうなってる?
最近C++ばっかで忘れちゃったんだけど、Cって引数の型チェックってしないんだっけ
だとsetcolorの引数に0.0とか渡すとスタックがずれるか?(ここが興味あったのでレスしてみた)
setcolorに渡してる 0.0 を 0 に変えてみたらどうだろうか
432 :
406 :2010/05/19(水) 23:09:42
>>429 すいません。
もう消しちゃいました。
>>430 不精しました。すいません。
for(x=0;x<512;x++)
{
setcolor((511-x)/2, 0, x/2);
for (y=0;y<512;y++)
{
setpixel(x,y);
}
}
これ出せば分かってもらえますかね?
>だからウィンドウが生成されないならお前はどうやって色を確認しているのか。
ウインドウだけ生成されないんです。
メモ帳を開いたら外枠なくて文字打つ白地の部分だけ表示されてる見たいな感じです。
>>431 0にしてみたらちゃんとグラデーション出来ました。
解決してないのになぜ消した もう知らん
434 :
425 :2010/05/19(水) 23:29:46
>>432 何で0にして「ちゃんとグラデーション出来ました」と言うのだお前は。
0なら黒だろ。
いいからまず画面全体を1色で塗りつぶせ。
r,g,bの3回やれば全部推定できるから。
お前の説明は何をやったら何が起きたのか、さっぱりわからん。
406氏の中では枠のないウインドウはウインドウではないということはわかった。 こりゃエスパーも大変だな。
436 :
406 :2010/05/19(水) 23:49:44
>>434 3回塗りつぶししましたけど
setcolor(255, 0.0, 0.0)で赤
setcolor(0.0, 255, 0.0)で青
setcolor(0.0, 0.0, 255)で黒になりました。
0.0を0で
setcolor(255, 0, 0)で赤
setcolor(0, 255, 0)で(黄)緑
setcolor(0, 0, 255)で青
と正常?に動きました。
>>435 枠をウインドウって呼ぶもんだと勝手に思い込んでました。
437 :
425 :2010/05/19(水) 23:49:53
>>431 が正解っぽい。昔のその書き方だと型チェックをしないみたい(知らんかった……)
#include <stdio.h>
void setcolor (r,g,b)
int r, g, b;
{
printf ("r = %f\n", ((double)r)/255);
printf ("g = %f\n", ((double)g)/255);
printf ("b = %f\n", ((double)b)/255);
}
int main (int argc, char** argv)
{
setcolor (0, 0, 0.0);
return 0;
}
を表示すると、
r = 0.000000
g = 0.000000
b = 6788705.349020
bの値は毎回違う。
438 :
425 :2010/05/19(水) 23:57:18
念のため。 setcolor (0.0, 0.0, 0.0); のときは r = 0.003922 g = 4240451.482353 b = 4240451.545098 原因がこれだとしてもきれいなグラデーションにはならないと思うのだが…… まあいいや、俺もこれ以上は知らん。
質問です。 頂点法線をスムース化したいのですが 高速な方法(GLでの)・アルゴリズムというのはあったりするのでしょうか? 基本的なやり方だと頂点を共有する面法線を調べて 平均化して頂点法線とする、という方法だと思います。 ただあまりにも計算量が多いと思うのですが これしかやり方は無いのでしょうか? よろしくお願いします。
計算量が多いって、頂点数10^10とかか?
10^8ぐらいですね。 ただマイフレ動的に生成したいので そこの部分がひっかかるのです。
>>441 有り難うございます。
ざっと目を通してみましたが
球面に近似することで正確な法線がとれる理由がイマイチ理解が追いつきませんw
まだ実装はしていないので速度の点は何とも言えませんが
凸面形状に限っての論文のようで
不定形モデルである自分の場合では上手く使えないかも知れません。
とりあえず簡単に試してみようかと思います。
>>442 自己レス
10^7ですね。
8は限界テスト中にで出そうとしたデータでした。
メモリ消費が半端ない。
1000万頂点で毎フレーム動的計算って、 最終的にはどれくらいの速度を目指してるの?
最低でも300fpsは欲しいですね。
そうですか..
447 :
439 :2010/05/22(土) 15:29:32
439です。445は偽物です。
>>444 15fぐらいなら現実的かな、と思っています。
OpenGLに使う幾何学って何幾何学っていうんですか?
ジオメトリ・シェーダー?
いいえ、位相幾何学とかユークリッド幾何学とか代数幾何学とか色々あるじゃないですか? そのなかのどれなのかなあと思ってます。
計算機科学。
計算幾何学。
計算幾何学。
ふざけないで真面目に教えてください。 よろしくお願いします。本当に困ってます。
おっちんちんびろーん^^
>>450 ユークリッド幾何学
射影幾何学
微分幾何学
解析幾何学
計算幾何学
これくらい押さえておけばOK
そうでしたか、微分幾何学しかよくわからないので。 とりあえず解析幾何学を勉強しようと思います。 ユークリッド幾何学はその次に勉強します。 有難うございました。
てか、単純に OpenGLで使う幾何学とか言われても
何やりたいのかで変わるんじゃね。じゃなかったらざっくり
>>456 みたいな返事しか出来ないんじゃね
OpenGLはただのグラフィクスライブラリで、それ使って何をやるかなんて
自分が何やるか次第っていう基本、ド基礎はどこいった
OpenGLのライブラリーの中で使われている幾何が何かと言うことです。 OpenGLを作るために必要な幾何学といいうことでもあります。
日本語読めないのかおめーは
自分で何に対して何を聞いてるのか意味わかってるのか
ライブラリってそもそも、それぞれ関連する処理を都合で集めた関数群なんだぞ
座標空間での捉え方って話で言えば
>>456 も書いてるがユークリッド幾何学とかそういう大きな返事しか出来ないし、
そもそも中で使われているって、単機能ソフトウェアとかじゃないから、普通に答えづらくね
単に座標空間って言葉でもハミルトン数の空間もあるし、元の質問自体前提が適当すぎ
もういいです。 偉そうな態度の人に何を言っても無駄でしょう。 この書き込みの跡に私を罵倒する書き込みがあるとおもいますが、一切無視します。 さようなら。
まさかのマジキチ。
>>462 もういいですじゃねぇよ。 悪いのはお前。
無知な中学生二年生は言葉の響きで満足なんかしてないで、
真面目に意味を勉強して、実践して理解しろ
なんで偉そうとか思ったんだろうなww 多分何もわからないけどプライドだけ高くて、言葉で知的な気分味わって勝ち誇りたかったのに、 マジレスされて傷ついたから何も返事しないで 偉そうとか言って逃げたんだろうなw
勝間和代とかこんなイメージだな プライドはあるし、自分の中の妄想で期待する答えがあるから相手の話をあまり聞いていない
本当に何か知りたい質問だったら、この後に罵倒する書き込みがあるだなんて、普通そんな謎な想像はしないよな
偉そうな態度の人に何を言っても無駄でしょう。 さようなら。
ロールプレイが足りないな。 そこは丁寧かつ遠まわしにチクリとやり返しておく場面だ。
471 :
デフォルトの名無しさん :2010/05/24(月) 17:56:22
久しぶりにスレが伸びていると思ってのぞいてみれば… もっとOpenGLの話をしようぜ
小僧はニュー速のつもりで書き込んでるのかもしれないな まじめに答えて損しちゃったよ
書き込めるぅ
474 :
デフォルトの名無しさん :2010/05/25(火) 19:16:46
質問です。 gl_line_strip/loopで線を引く時と、ポリゴンを描画するときで1ピクセルずれますよね? これを一致させる方法はありますか? ない場合、全体の座標系は、どっちに都合がいいように合わせるのが一般的でしょうか。
面白いギャグだ。
476 :
デフォルトの名無しさん :2010/05/25(火) 20:01:50
OpenGLの座標系はピクセルの中心ではなくピクセル境界に合うようになっているので GL_LINE_STRIPで線を引こうとすると、(ピクセルと一致する座標系にしている場合は) +0.5しないと正確に目的のピクセルを通らない。 で、ちょうど境界上の座標を指定した場合の切り詰め方が負方向なので 例えば画面左端ギリギリに1ピクセル幅の線を引こうとした場合、1ピクセル右を指定することになる。 (ポリゴンを描くときは画面左端の座標をそのまま指定すれば当然思い通りに塗られる) このずれをなんとかしたいのです。 GL_LINE_STRIPでの境界上の点の扱いを正方向に倒すような機能があるかどうか? そういう機能が無いとして、このずれを補正する目的でglTranslatedするのは一般的なのか?
ん 0.375 の話じゃなくて?
0.375?
なんで0.375なの?
0.25だと0と0.5のどっちに倒れるかわからないので0.25と0.5の中間……ということじゃね?わからん。 ついでにGL_FLAT必須だね。SMOOTHと併用するとテクスチャとか色々ぼける。
日本一わかりやすいボーンのプログラムを作ってください。
作りました
俺も作りました
たぶん俺のが日本一だと思うよ
俺のは残念だけど日本二だ・・・
マジレスすると俺のが日本で一番分かりやすいと思う。
負けた・・・orz
では、そのプログラムを見せてください。
OK 300万くらいでいいか?
ものをみてみないと何ともいえないな。 動画とかでアップしてみてくれる?
あ、コードじゃ駄目なんだ・・・じゃあ俺はおいとましますよ
コードでいいよ
delete from このスレ where num>=482 and num<494 and text not like '%日本%' commit
SQL文を複数打つ時は、文末に;「セミコロン」をいれないとダメでつよ
Frame Buffer objectと深度値を記録するテクスチャを用いて ポストフィルタの作成をしています。 描画プロセスの途中、ある立体のみの深度値が必要だったので、 Frame Buffer objectに描画対象を切り替えて物体を描画しました。 当然この物体の描画以前の深度値とこの物体の深度値は二つに 分かれているのですが、これらを統合することは可能でしょうか? テクスチャに深度値は格納しているので、デフォルトのフレームバッファに対して 深度値を書き込むことが出来れば実現出来ると考えているのですが、 どなたかご教示していただけないでしょうか?
GLSLだとgl_FragDepthに出力すればどうにかなるんじゃないかな
GL_COLOR_ATTACHMENT0_EXT にデフォルトのフレームバッファ GL_COLOR_ATTACHMENT1_EXT にある立体用のフレームバッファ にして同時に描画
496です。レスが遅れてしまって申し訳ありません。
>>497 レスありがとうございます。
レスをいただいてからgl_FragDepthを試してみたのですが、
あまり上手く行かずorz (gl_FragDepthに出力してもなぜか反映されない)
gl_FragDepthは以前にも一度試したことがあるのですが、
その時もあまり上手く行かず、投げ出してしまったことがあります。
深度バッファをレンダーバッファではなく、テクスチャを用いて
作成しているのが問題なのでしょうか。
もう少し色々と試してみます。
>>498 レスありがとうございます。
そういえばMRTという手がありましたね・・・。
でも、深度バッファは同時に複数アタッチ出来なかったと思うのですが、
可能なのでしょうか・・・?調べてきます。
MRTは今回書き込んだ箇所以外に適用することで
問題解決の糸口が見いだせそうな気がします。こちらのほうも模索してみます。
レス本当にありがとうございました。
最後に、返信が遅れてしまったことをお詫びします。
500 :
439 :2010/05/31(月) 23:49:56
flag...?
ワリィ、JavaスレのHN残ってた。
502 :
498 :2010/06/02(水) 18:14:55
>>499 >>でも、深度バッファは同時に複数アタッチ出来なかったと思うのですが
そういえばそうだった orz
アタッチ馬鹿よね〜 お馬鹿さんよね〜♪
う深度ゆ〜び う深度ゆ〜び さされ〜ても〜♪
面白いと思ってレスしてるんだろうけどさぁ・・・
高井麻巳子は神
何の?
>>506 うしろ指さされ組とか今の子は本当に知らない
てかもういい加減スレチだww
どこで質問すれば良いのか分からないのでUNIX質問スレに一度書き込んだのですが、 スレ違いのような気がしてきたのでここで再度質問させてください。 Ruby/GtkGlExtで3Dの描画をしたいと思っているのですが、 (Open GLやGtkGlExtを使うのは初めてです、RubyやGtkを使って個人用の小物を作ったことは何度かあります) その際スクリーンに表示し、かつ必要に応じて保存したいと思っているので、Gdk::Pixmap(GdkPixmap)の使用を考えています。 ところが、断片的な資料を色々当たりながら組んでみたところ、 Gdk::GLContext(GdkGlContext)の設定の仕方が悪いのか、ライト等の設定が全く効きません。 問題を再現する(たぶん)最小のソースコードが以下なのですが、(1)をコメントアウトして代わりに(2)を実行させると正常な挙動を示します。 (1)はどこがまずいのでしょうか? require 'gtk2' require 'gtkglext' def draw GL.Clear(GL::COLOR_BUFFER_BIT) Gdk::GL.draw_sphere(true,0.2,20,20) GL.Viewport(0,0,200,200) GL.Light(GL::LIGHT0, GL::DIFFUSE, [1,0,0,1]) GL.Light(GL::LIGHT0, GL::POSITION, [0.5,0.5,-1,0]) GL.Enable(GL::LIGHTING) GL.Enable(GL::LIGHT0) GL.ClearColor(1,1,1,1) GL.Flush end Gtk::GL.init glconfig = Gdk::GLConfig.new(Gdk::GLConfig::MODE_RGB) window = Gtk::Window.new window.set_size_request(200,200) window.realize
510 :
509 :2010/06/03(木) 23:44:50
#=begin (1) wingc = Gdk::GC.new(window.window) pixmap = Gdk::Pixmap.new(window.window,200,200,-1) glpixmap = pixmap.set_gl_capability(glconfig) glcontext = Gdk::GLContext.new(glpixmap,nil,true,Gdk::GL::RGBA_TYPE) glpixmap.make_current(glcontext) draw window.signal_connect("expose_event") do window.window.draw_drawable(wingc, pixmap, 0, 0, 0, 0, -1, -1) end #=end =begin (2) drawing = Gtk::DrawingArea.new drawing.set_size_request(200,200) drawing.set_gl_capability(glconfig) window.add(drawing) glcontext = drawing.gl_context gldrawable = drawing.gl_drawable gldrawable.make_current(glcontext) drawing.signal_connect("expose_event"){draw} =end window.signal_connect("delete_event"){Gtk.main_quit} window.show_all Gtk.main
def draw GL.Viewport(0,0,200,200) GL.ClearColor(1,1,1,1) GL.Clear(GL::COLOR_BUFFER_BIT) GL.Enable(GL::LIGHTING) GL.Enable(GL::LIGHT0) GL.Light(GL::LIGHT0, GL::DIFFUSE, [1,0,0,1]) GL.Light(GL::LIGHT0, GL::POSITION, [0.5,0.5,-1,0]) Gdk::GL.draw_sphere(true,0.2,20,20) GL.Flush end だとおもう。
glut使ってんですが、わからないことが。 基本3Dで描画してるビューのスクリーン上の座標を指定して線とかを書きたいんですが 方法がわからんから教えてくれないか。 ( 0, 0 ) ( 100, 100 ) を結ぶ線分を描く、みたいな感じで
射影行列を ビューと同じサイズの正射影と入れ替えればいいんじゃね?
514 :
512 :2010/06/04(金) 08:56:37
>>513 ありがと、でも初心者だからよくわからないお
↓↓こんな感じ?でもその肝心の「なんか」のところがピンときません
glPushMatrix();
glMatrixMode( GL_PROJECTION );
// なんか
glBegin( GL_LINES );
glVertex2d( 0, 0 );
glVertex2d( 100, 100 );
glEnd();
glPopMatrix();
>>514 glPushMatrixは行列モードを変えてからやらないと
ビューのサイズが(0,0,800,600)なら
glMatrixMode( GL_PROJECTION );
glPushMatrix();
glLoadIdentity();
glOrtho(0 , 800, 600 , 0 , -1.0 , 1.0);// ニアとファーのプレーンは適当
glBegin( GL_LINES );
glVertex2d( 0, 0 );
glVertex2d( 100, 100 );
glEnd();
glPopMatrix();
必要ならあらかじめ
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
しておく事
516 :
512 :2010/06/04(金) 09:33:25
>>514 できた!超ありがとう!
一つ学習できたよ
517 :
512 :2010/06/04(金) 09:34:36
518 :
デフォルトの名無しさん :2010/06/04(金) 20:46:11
directxと、どっちが速い?
x
520 :
デフォルトの名無しさん :2010/06/05(土) 08:24:53
o
△
☆
523 :
デフォルトの名無しさん :2010/06/07(月) 00:50:22
3Dモデルファイルを読み込む場合に、3角ポリゴンに分割した方が効率良いのかな?
四角が混ざってると描画が面倒。
でもクアッドの方が描画は早い。 まぁ現実的ではないので基本は3角。
WGL_ARB_multisampleで16xマルチサンプリングを使うとテクスチャサンプリングがおかしくなるみたいなんですが同じ現象が出る方いますか? x8以下で設定した場合やnvidiaコントロールパネルで設定した場合は発現しません VistaとGF9600GTで最新ドライバを使用しています
追記、エラー等は出ていません 具体的な現象としてはサンプリング誤差が出てスプライト用途の画像がぼやけたり ClampToEdgeを使用しているのに逆サイドのピクセルを読んだりします
おにゃんこワロタ
>>511 遅くなりましたが、ありがとうございます。
順番が効いてくるのですね。
もう一度勉強し直します。
>>523 インデックスバッファが使えない環境だと、
とにかく頂点数を減らすためにクアッドストリップ使ったりした。
ただクアッドは意図しないカリングが起きたりもした。
PCならインデックスバッファ使ったトライアングルリストが効率良いし使いやすいよ。
531 :
デフォルトの名無しさん :2010/06/07(月) 18:50:53
マテリアル単位で読み込むと効率良いかな?
OpenGL ES はPC向けのAPIもでまわってるのかな? 出来ればPCで開発したい。
glutのウィンドウに表示される内容をVC++のpictureboxに描画する方法ってある?
535 :
534 :2010/06/10(木) 02:57:06
上で質問させていただいたものですが、使用したソースです。 #include <GL/gl.h> #include <GL/glut.h> void disp(void) { glClear(GL_COLOR_BUFFER_BIT); glEnable(GL_LINE_STIPPLE); glLineStipple(1, 0xF0F0); glBegin(GL_LINE_LOOP); glVertex2f(0, -0.9); glVertex2f(-0.9, 0.9); glVertex2f(0.9, 0.9); glEnd(); glFlush(); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitWindowPosition(100, 50); glutInitWindowSize(400, 300); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); glutCreateWindow("Kitty on your lap"); glutDisplayFunc(disp); glutMainLoop(); return 0; }
536 :
534 :2010/06/10(木) 02:59:50
申し訳ありません、一つ言い忘れたことがあります。 glEnable(GL_LINE_STIPPLE) の行を削除すると破線ではなく実線が表示されますが、 この時は複数本ではなく期待通り1本だけが表示されます。
>>536 そのソースを丸々コピって動かしても別に普通だけどなぁ
ちょっと別のPCで動かしてみるとかビデオカードのドライバを新しくするとかしてみれば
気になるところは特にないなぁ。 とりあえず今は次の項目に進んでも問題無いかも。 STIPPLEなんて使わんしな・・・。
データを読み取ってjpegで出力するようなCUIアプリを作りたいのですが、 GLUTやその他のGUIツールキットを使わずにOpenGLを使えないものでしょうか? glutCreateWindow(name); をやらずにいきなり描画すると、どうしてもsegmentation faultが出てしまって困っています。
「データを読み取ってjpegで出力する」過程の何にOpenGLを使うつもりなんだ? シェーダーに計算させようとかそういう話?
>>540 具体的には、データを読み込んでそれをもとに「描画」し、
(ポリゴンを3次元に配置して光を当てて射影するという操作です)
それをglReadPixelsで読み取るという操作をOpenGLでやろうと思っています。
それで、ウェブサイトを参考に、GLUTを用いて何とか作れたのですが、使わずに何とかできないかなと。
「シェーダー」というのがそれを実行してくれるのですか?
>>541 シェーバー使ってピクセルを刈り取るんだよ
>>541 シェーダーは関係ない。
GLUTを使わない方法を解説しているページは沢山ある(たとえば
>>1 のNeHeのLesson1)
だが、今のままGLUT使っといたほうがいいよ
>>543 ありがとうございます。
なぜGLUTやその他のGUIツールを使いたくないかというと、ウィンドウに描画する作業が律速ではないかと非常に強く疑われるからなのです。
特に、リモートのサーバ上で動かすことを想定しているので、その転送の時間が。
glutHideWindowをやっても、大して効き目がないですね。
(ちなみに、そういうわけで環境はLinuxです、明示してなくてすみません)
>>544 とりあえず簡単なプログラムをGLUTと比較して、遅さの原因がGLUTにあることを確認したらいいとは思うが
GLUTをやめても速度は上がらないと思うよ。
glReadPixelsのデーターを転送してるのが遅いんでしょ?。それはglut関係ないし。
>>545 glReadPixelsのデータも転送しないまま、サーバ上でjpegに変換しています。
サーバからこっちに転送が発生するのは、Xのディスプレイだけですし、
実際ローカルでテスト実行したら、サーバから実行するより早いので、
どう考えてもディスプレイの転送がボトルネックかと。
で、結局何が聞きたいの? GLUT使いたくないなら使わないで素のOpenGLでやればいいだけジャン?
意味が分からん 表示するのが前提なのにウィンドウに書きたく無いってどこに表示するつもりなんだよ
>>549 ウィンドウに表示するかどうかはどうでもよく、
glReadPixels(あるいは別の手段でも構いませんが)でビットマップデータを読み取れさえすればよいのですが。
「表示するのが前提」とはどういうことですか?
Windowsならビットマップにコンテキスト作れば描画してくれるけどGPUの支援ナシ 最近のOpenGLならFBO使って要求満たせんかね?これならウインドウは非表示でいいだろ
描画が終わった段階で1回だけglFlushして後は描画とめておけば良いだけちゃうの?
>>546 「転送」がかみ合ってない気がする・・・
555 :
デフォルトの名無しさん :2010/06/10(木) 11:45:49
垂直同期してるから60FPSに固定されてて遅いとか?
その処理はIdleファンクに書いているんだよね?
glXCreateGLXPixmap() で pixmap 作って、 そこに context 割り当ててやればいいのかねぇ?
赤本に書いてある太陽系のプログラムをそのまま写して ビルドしたのですが 太陽の周りを回っている地球が太陽の後ろに行っているはずなのに 太陽に隠されることがないまま動いています。 Zバッファが無効になっているのですか? ちなみに環境はmac OSXです。 よろしくお願いします。
まずはソースコードを読めるようになってからまた来てください。
560 :
558 :2010/06/10(木) 21:57:29
すいません、解決しました。 一応報告します。デプステストをオンにしたらちゃんと 前後関係正しく描画してくれました。 赤本のコードには書いてなかったのですが、環境によっては オートでオンの状態になってるということですかね
561 :
534 :2010/06/10(木) 22:57:32
>>537-538 ありがとうございます。
ソースに間違いが無いということなのでしたら、
とりあえず気にしないで先に進んでみようと思います。
後々どうしても破線を描きたいような状況になったら、
改めて解決策を考えてみます。
どうもありがとうございました。
テクスチャって正方形じゃないとだめなん?
んなことない、ただし2の累乗である必要はある 256x512みたいなのは有りってこと
>>544 1. OSmesa を使う
2. サーバのローカルディスプレイに表示する
3. GLX 有りで FBO を使う
4. GLX 無しで FBO を使う (生 Mesa を使うとか)
5. あきらめて CUDA に移行する
1,5 は ウィンドウシステム内に GL の context を作らなくて良い。
2,5 は リモートの GPU によるアクセラレーションが効く (有れば)。
3 は 手元の GPU によるアクセラレーションが効く。
1,2,4,5 は ディスプレイ間でのデータ転送が発生しない。
2,3,4 は ウィンドウシステム内に GL の context を作らなくてはならない。
1,4 は ハードウェアアクセラレーションが効かない (多分)。
3 は ディスプレイ間でのデータ転送が発生する。
おすすめは:
アクセラレーション不要なら 1
アクセラレーション必要で権限の問題が無ければ 2
問題が CUDA 向きなら 5
>>562 OpenGL2.0から2の累乗の制限は無くなった。
2.0以前でもrectange_textureっていう拡張機能が使えれば2の累乗じゃないテクスチャを使えるよ。
ライブラリというのは プログラムでよく使うコードをまとめた物やプログラムの部品となる物を意味していると思う。 OpenGLはリアルタイム3Dを使うプログラムを作るときのライブラリだと思っている人がいるかもしれない。 だからOpenGLにファイル読み込み機能やベクトルクラスが無い事などからDirectXより劣ったライブラリだと思われているかもしれない。 けどOpenGLはライブラリではないのだ。interfaceなのだ。 OpenGLの仕様書のChapter1 Introductionから引用させてもらうと 1.1 What is the OpenGL Graphics System? OpenGL (for “Open Graphics Library”) is a software interface to graphics hardware. The interface consists of a set of several hundred procedures and functions that allow a programmer to specify the objects and operations involved in producing high-quality graphical images, specifically color images of three-dimensional objects.
ライブラリじゃないのはDirectXの方。 あれはパッケージ。だからDirectX SDK。
パッケージ?
>>566 どうでもいいが、「グラフィックスハードウェアの」インターフェースで
あることを強調しなければ、機能限定の理由にはならんだろう。
>>568 DirectXっていうライブラリは無くて、Direct3DやDirectInputなどのコンポーネントの集合体だって意味では
openGLに相当するのはDirect3Dで、ファイル読み込みやベクトルクラスなどはDirect3DXだから
使いたければDirec3DXはopenGLからでも使えるかも
gluの事も忘れないでください・・・
メタセコのデータを表示するプログラムを作っているのですが 頂点データと面のインデックスデータを読み込んでglDrawElementsで表示する事はできました しかしUVデータはインデックスではなく三角と四角のポリゴン単位になっているのでそのままでは適用できませんでした 表示用にデータを作成し直したりしないといけないんですか?
とりあえず表示するだけで良いなら、面毎に頂点を作成してglDrawArraysでいい
>>572 同一座標の頂点で違うUVがある場合の描画は
通常は重複(duplicate)頂点と言って、頂点を増やす
(座標は同じでUV値だけ違う)
当然glDrawElements単位でのインデックスも増やす
だからと言って、エクスポートや出力データも
まんま馬鹿正直に同じ座標を出してインデックスを変える必要はない、
それがキミが詰まってる原因なんだろう
つGL_POLYGONS
>>574 それってかなり複雑にならないかな?
重複頂点をインデックスに追加する度にインデックスがずれる事になるが…
577 :
576 :2010/06/14(月) 21:23:55
あ、最後尾に追加するからインデックスはずれないのか。 OK、やってみる。 結局、.mqoのインデックスは作り直さないといけないんだな。
描画時は普通ポリゴンセットにするよな? VBOに持たせることを考えると一番楽なんだけどどう?
579 :
デフォルトの名無しさん :2010/06/16(水) 13:02:15
GTX 480 での glDrawElements による描画がやたら遅いんだけれど、 同じ現象にあった人いますか? ・ドライバは最新(257.21) ・ベンダーが別の2枚のGTX 480で確認 ・VBO ありでもなしでも遅い ・Cg shader や他の描画には特に問題なし ・OSは WindowsXP 64bit ・Geforce 8800 よりはるかに遅い です。
580 :
デフォルトの名無しさん :2010/06/16(水) 15:40:58
自己解決しました。 原因はglDrawElementsではなく glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, でした。 glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); から glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); にすると GTX 480 では速度が大幅(1/10以下)に低下しました。 Geforce 8800GT, 9600GS, GTX280, GTX285M ではほとんど速度が低下していなかったので、盲点でした。
581 :
デフォルトの名無しさん :2010/06/16(水) 21:55:15
>>579 参考になったトンクス
今世代のNVはもう駄目だなぁ・・・。
OpenGL 4.0以降ならちょうど本家に情報が載ってたんだけどな。
>582 ドライバ更新して駄目ならゲフォを買うってところじゃないかな とりあえずうちの9600GTでd3d使うやつ2つは動いた
586 :
582 :2010/06/17(木) 12:19:39
新しいビデオカード買うのはちょっと無理そうです Mobility RADEONだと新しいドライバを入手するのも難しそうです・・ まずDirect3Dで動かすのを頑張って、それからOpenGLへの移植を考えようと思います
>>582 ATIのサイトから落とせるShaderMonkey(要登録、無料)の中にOITのサンプルあったよ。
Direct3DだったかOpenGLだったかは忘れたけど、OpenGL2.1あたりの世代だったから4330ならいけるはず。
588 :
582 :2010/06/17(木) 22:26:36
>>587 RenderMonkeyのサンプルですか?
これはピクセル単位でソートしているわけでは無さそうですが
あぁごめんShaderMakerとかと名前ごっちゃになってた。RenderMonkeyだw
大学でこれを使って何か作れと言われたのですが・・・ テクスチャマッピングが簡単にできるライブラリとかありますか? 芸術工学関係でオススメサイトとかあったらヨロシクオネガイシマス。
あります
趣味なら教えてやっても構わんが 大学の課題なら自分でやれよ
593 :
582 :2010/06/21(月) 21:48:20
サンプルが動かない理由の1つが分かったかもしれません Irrlichtエンジンを使っているのですが、OpenGL3.1のコンテキストが作成出来ていないです。 glGetString(GL_VERSION)でバージョンを取得すると 2.1.8918が返ります。作成出来るなら、GL3.1のコンテキストを作成するコードが有るみたいです。 しかし、wglGetProcAddress("wglCreateContextAttribsARB");でこの関数のアドレスを取得しようとしていますが、 0が却って失敗しているようです。そのせいか、glTexRenderBufferNVのアドレス取得も失敗します。 OpenGL Extensions Viewerで3.1のコンテキストを作成するテストは成功しているのに、 なぜ動かないのでしょうか int iAttribs[] = { WGL_CONTEXT_MAJOR_VERSION_ARB, 3, WGL_CONTEXT_MINOR_VERSION_ARB, 1, 0 }; hrc=wglCreateContextAttribs_ARB(HDc, 0, iAttribs);
ずっとDirect3D使ってきたけどWindowsでしか動かないとか新しいバージョンはVista以降じゃないと動かないとか だんだん嫌になってきたのでOpenGLデビューすることにした。 Direct3Dでも最近はコアな部分しか使ってなくて高度な部分は自前で制御してきたからたぶんそんなにOpenGL習得は大変じゃないよね。 たのしいGLライフがはじまるよー!
OpenGLもDXほどじゃないにしろ……
ATIのLinuxドライバとか少しはマトモになったんだろうか
glBeginのパフォーマンスがどうこうで頂点配列使え云々は話はわかるけど そんなとこよりglEnable/glDisable減らした方がよっぽどFPS改善された……。 それでも頂点配列が云々されているということは、 プロのコードは限界まで状態切り替えをまとめているんだろうなあ……。
>>594 大多数のIntelのIGP使用者も対象にしたら
OpenGL1.4までしか使えないけどな…
Intelは最近のでやっとOpenGL2.1対応だからなぁ。しかもフラグメントシェーダーでgl_FrontFacingがバグで使えないっていう面倒さも抱えている。
GLって、状態を一括で切り替えるブロック指定とかできないの?
601 :
デフォルトの名無しさん :2010/06/28(月) 16:22:00
>600 っglPushAttrib(MASK); 3D矩形テクスチャをボリュームデータとして内部も表示したいんだが、 頂点が8点の立方体に貼付けるだけじゃ無理だっけ?
>>598 GLEW使ってるけど、それとは違う話なの?
>>601 とりあえず osg か VTK。
自前でやるなら、
- 四角ポリゴン * 3(最大) を表示して fragment shader で視線方向に
辿って適当な方法で積算するか、
- 亡き OpenGL Volumizer のように視線に垂直なスライス多数 (最大6
角形 * 256枚とか) (枚数は求める分解能次第) を積み重ねる。
shader 内で辿る方法の方は、(試したことはないけど)メモリアクセスが
少ない分描画が(多分)速いし、スライスしなくて良い分プログラムが(多分)簡単。
スライスする方は、他の通常のオブジェクトと重なるような表示ができる、
プログラマブルシェーダ無しでもレイキャストや MIP くらいはできる。
スライス生成はホスト側プログラムかジオメトリシェーダで。
テクスチャで質問していいですか? α情報を持ったテクスチャを面に貼り付けた際に、 α部分に面の色を表示させたいのですが、どうすればよいのでしょうか? GL_MODULATE だと、テクスチャの色合いも含めて全体が転調されてしまうし、 GL_DECAL/GL_REPLACEだと面の陰影がなくなるような。 かといって、GL_BLENDを有効にすると、奥の面も見えてきてしまいます。 どなたか知りませんか?
「α部分に面の色を表示させたいのですが」 <-- これが意味不明 何をやりたいのか説明できてない。 普通はライティングしてテクスチャーをGL_MODULATEだ。
>>605 ありがとうございます。
赤色の面に、例えば市松模様でα値0のテクスチャを貼り付けたときに、
α値が0の所だけ赤くなって欲しいと言うことです。
glMaterialfで赤色を設定した所、BLENDを有効にしなくても表示されました。
ただ、元のテクスチャの色が白の部分を透過として扱うためか、
乗算されて元の色よりかなり明るくなってしまいました。
今回はこれで良いと言うことにします。
難しく考えずにシェーダーでやればいい
>>604 テクスチャ関連は固定機能だけでもいろいろやれそうだけど、かゆいところに手が届かないのが多い。
その点シェーダー使えば自由にやれるけど、OpenGLをどの程度できるかによるな。
テクスチャを投影マッピングしているのですが、下のソースにあるgluLookAtを挿入するとうまくいかなくなり、原因がわかりません。 gluLookAtの第3引数までは変数にし、キーボードで調整できるようにしていますが、いくらタイプしても上手く表示されません。 またテクスチャの視点の位置を把握するために、同じ場所にオブジェクトを表示させようと思いましたが、その方法もわからず仕舞いです。 gluLookAtを挿入して上手くいかない理由と、テクスチャの視点の位置にオブジェクトを表示させる方法をどなたか教えてください。 void resharpFunc(int window_width, int window_height) { //glutResharpFuncのコールバック関数 glViewport(0, 0, window_width, window_height); glMatrixMode(GL_TEXTURE); glLoadIdentity(); glScaled( 0.7, 0.7, 1.0 ); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(30.0, (double)window_width / (double)window_height, 1.0, 100.0); //gluLookAt( right_t - left_t , up_t - down_t, in_t - out_t, 0, 0, 0, 0, 0, 1 ); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }
微妙によくわからんのだが gluLookAtはカメラの位置の設定として使いたいの? それともテクスチャの投影方向の設定として使いたいの?
テクスチャの投影方向として使いたいです glScaledの直後にこのgluLookAtを挿入してもうまく行きませんでした
投影方向として使いたいならglScaledの直後だな どう上手くいかないのか詳しく
glScaledの直後に入れた挙動です gluLookAtなしだと、投影出来ています。 直行投影にみえます。 gluLookAtを入れると、オブジェクト全体が単色で染まってしまいます。 実際のカメラの動画をテクスチャしているのですが、実際のカメラを向ける方向によって色や明度は変わりますが、像は見られずいずれもオブジェクト全体が単色で埋められてしまいます。 gluLookAtの第3引数までをキーボードで調整しても変わりません。
最初は投影マップのサンプルを調べて丸ごとコピペとかしてみれば projective texture opengl example あたりでググるとopenGL.orgやsgiの97年ごろのデモがヒットするみたいよ でも、もうそういうのもシェーダーでやる時代だと思うけど
症状とソースから原因は分かりませんか(´・ω・`)
わからないねぇ 色が変わってる=テクスチャの1部だけが引き伸ばされて投影されてる だろうから多分お前のパラメーターミス どんなモデルに投影してるのかもわからないし答えようがない デバックして欲しいっていうなら全ソース出せよ
keyboardFuncで変数の値を変えてもreshapeFuncは呼ばれないような気がするんだけど 変数操作した後ちょっとウィンドウサイズ変えたら出てきたりして
テクスチャの投影方向として使うなら、テクスチャ行列にgluLookAtを使うべきだと思うけど。 うまくいかなかったのは、テクスチャ座標が (0, 1) 範囲なのを忘れている気がする。
>>618 本当にその通りだ
ウィンドウサイズ変えたら反映された
じゃあ呼び出され続けるupdateTexture関数内に
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
gluLookAt( right_t - left_t , up_t - down_t, in_t - out_t, 0, 0, 0, 0, 0, 1 );
glMatrixMode(GL_MODELVIEW);
入れたら投影の方向も変えれるようになったよ
ところでこのプログラムすごい重いんだけど、悪いコードに気がついてたら教えてください
>>619 >>609 のglScaledの後ってことだよね
最初はそれにしてたけど、うまくいかないから試行錯誤してたときのを貼ってしまった
すまない
その時の挙動は
>>613
glutで文字出したいのですが、画面の隅に出したいのです。 そのためにはカレントラスタ位置を画面隅に設定すればいい。 ということで、画面隅にあたる座標を求めたいのですが、 これは視錐台の頂点の座標を求める、 ということとほぼ同じですよね。 どういう手順で求めたらいいでしょう? glGetでGL_PROJECTION_MATRIXを取得して 連立方程式を解く感じでやればいいんでしょうか。 てゆうか、もっと簡単な方法はないでしょうか、、、
課題の季節か
>>620 デバッグビルドしてんじゃね。
コードはtmp_imgのあたりとか釣りかなと思うほど無駄みたいだけど、どうなのか。
他もいろいろありそうだがopenCVはスレ違いかな
>>622 MATRIXの影響を受けたくないならglPushMatrixしてglLoadIdentityすればいいが、
画面の隅に出したいだけならglRasterPos*の代わりにglWindowPos*を使えば簡単
教えていただきたいのですが、1枚のテクスチャに複数の画像データを 載せて(?)、描画することは可能でしょうか? 例えば、上下2分割の画像があるとして、テクスチャに先に上部の画像を 載せて、次いで下部の画像を載せ、最終的にDrawするようなイメージです。 2枚のテクスチャを利用すれば、いいのでしょうが、1枚で済むので あれば、1枚で処理したく思いまして・・・。 glTexImage2D()と、glTexSubImage2D()をうまく使えばできるので しょうか・・・。
日本語でお願いします
>>624 無駄な努力するより正しい手順で単純な方法を使うべきだぞ
>>624 glTexSubImage2D()をうまく使えばできるよ
GLSLに関する質問です。 GLSLで配列を宣言する場合、組み込み型の場合は float array[3] = float[3](1.0, 2.0, 3.0); のように書くと初期化出来ますが、構造体の場合、 TestStruct array[3] = TestStruct[3](TestStruct(...), ...); としてもcast not allowedとエラーが出てしまいます。 構造体配列では、上のような初期化の仕方は出来ないのでしょうか?
そんな初期化の仕方のできる言語がどこにあるんだ?
>>623 遅レスだけどtmp_imgはモルフォロジー演算のブラックハットとかを試したときの消し忘れ
スレチスマソ
631 :
デフォルトの名無しさん :2010/07/15(木) 06:00:38
>>623 でけた〜!
ありがとうございました。
ようやっとprintf文によるパラメータ表示から開放されます。
nyaosはエスケープシーケンス対応だってゆうし、
それで妥協するか、と考え始めていたところでした。
632 :
622 :2010/07/15(木) 06:21:06
>>623 でけた〜!
ありがとうございました。
ようやっとprintf文によるパラメータ表示から開放されます。
nyaosはエスケープシーケンス対応だってゆうし、
それで妥協するか、と考え始めていたところでした。
633 :
デフォルトの名無しさん :2010/07/15(木) 06:29:11
だいじなことなので(ry
>>629 やっぱり出来ないですか orz
構造体は
TestStruct test = TestStruct(...);
で初期化できるので、これ使えば構造体配列の各要素も初期化できるのかなと思ったのですが…
地道にmainで初期化することにします。
ありがとうございました。
635 :
622 :2010/07/15(木) 08:24:18
すみましぇんX(
636 :
デフォルトの名無しさん :2010/07/16(金) 22:39:38
OSMesaを使おうと思うと、segmentation faultが出てしまいます。
例えば、
http://www.koders.com/c/fid33411A52D69CE7446BD56E959F1FDA00D9FA68A8.aspx?s=matrix#L61 のサンプルコードだと290行目、
#include <stdio.h>
#include "GL/osmesa.h"
int main()
{
GLubyte* buf = new GLubyte[4];
OSMesaContext ctx = OSMesaCreateContext( GL_RGBA, NULL );
OSMesaMakeCurrent( ctx, buf, GL_UNSIGNED_BYTE, 1, 1 );
glClearColor(1.0, 1.0, 1.0, 1.0);
OSMesaDestroyContext(ctx);
}
を実行してみるとglClearColorのところでsegmentation faultとなります。
これは根本的なところでどこか使い方を勘違いしているのでしょうか?
637 :
636 :2010/07/17(土) 00:17:28
自己解決しました。 libOSMesaだけで十分なのにlibGLをリンクしてしまっていたのが原因でした。
GLSL って % ないのな。int 用の mod も無いし、他の人どうしてるのかな? 引き算?
int hoge = int( mod( float( 10 ), float( 4 ) ) ); とかできなかった?
出来ました。でも変数使うとかなり妙なことが。 int(mod(float(14), 3.0)) は確かに 2 を返すのに、 int a = 14; int(mod(float(a), 3.0)) は 1 を返す。 環境のせいかとも思ったが、 GL_VERSION = 2.0 ATI-1.6.16 GL_RENDERER = ATI Radeon X1600 OpenGL Engine でも GL_VERSION = 2.1 NVIDIA-1.6.10 GL_RENDERER = NVIDIA GeForce 9400M OpenGL Engine でも同じ結果。訳が分からん。
相変わらずラデのGLドライバは腐ってやがるな 糞が
GT4xxベースのQuadroはまだですか?
まだ出てなかったんだ。 Quadroで儲け出してると思ってたけど。
複数テクスチャで構成したモデルで、拡大表示などその一部分しか画面上に描画されない場合、画面上に描画されるテクスチャ名(ID)を取得する事はできますか? テクスチャ描画直前にコールバックされるなど
occlusion queryでやるのは?
>>645 644です。
ありがとー、早速使わせて頂きます。
xcodeでiphoneSDKの OpenGL雛形を利用してテクスチャ描画しようとしているのですが テクスチャ作成も成功していて TEXTURE_COOD_ARRAYも指定しているのですが 白いまま、テクスチャの柄が表示されません。 テクスチャ表示に 他に何か設定することありますか?
自己解決 iphoneって テクスチャの幅が2のべき乗じゃないとだめでした
自己解決した GLubyteでキャストしたらなんか意味わかった
プラネタリウムのようなソフトを作っています。 天球の中心にカメラを置いて、注視点をぐりぐり移動させる所でつまずいています。 今やっているのはglRotateで±1°ずつ回転させて(角度変数も用意して増減させる) 実装しています。この場合だとぐりぐり移動はできるのですが現在どの角度を向いているか が正しく取得できません。(斜め移動すると表示と値がずれる) プラネタリウム(というよりは星座早見盤)をつくるのに今見ている角度を正しく 取得しなければならないのですが、いい方法はありますか?
mCamera->setOrientation(Quaternion::IDENTITY); mCamera->rotate(Vector3::UNIT_Y, Radian(mTheta)); mCamera->pitch(Radian(mPhi));
回転を四元数で管理
LoadIdentityの代わりに、単位行列をピヴォットした行列をロードするだけでZ-Upとかに対応できたりするんでしょうか?
OpenGL用の行列やベクトル、クォータニオンなんかのライブラリでオススメあれば教えて下さい。 DirectXのライブラリみたいにSIMD使った最適化までしてくれたら嬉しいです。
Bullet の LinearMath
>>652 Cで書いていて、かつかじったばっかりなので何をやってるのか理解できませんでした。
すみません。
>>653 検索したら参考ページが出てきたので頑張ってみます。
ありがとうございました。
>>651 単に回転する順番とかが間違ってるだけなんじゃないのかな
クォータニオンとか導入しないとならない問題じゃないと思うんだが
普通に天球の極座標も理解出来てないと思う。
661 :
651 :2010/07/31(土) 12:34:43
>>658 ありがとうございます。参考にさせてもらいます。
>>659 そうなんですか。詰まったらまた質問するかもしれません。
>>660 授業の成果物作成で3Dグラフィックなんてやったことないのに作ることなってしまいました。
極座標でやろうと思ったんですけど意図した方向に回転しなくて別の方法に移りました。
663 :
651 :2010/07/31(土) 20:58:38
視点移動なんですが、
例えばワイヤードームがあって、その縦横線と水平な方向に移動させる場合
プログラム開始時の視点位置だと出来るのですが、
まず横に30゜動かしたあと上に視点を動かそうとすると斜めに移動してしまいます。
ワイヤードームの縦横線に水平に動かすにはどうすればいいですか?
>>662 できないと卒業できないのでやめられません・・・
なんか横に移動したあと glLoadIdentityするだけで解決しそうな予感
>>663 いまいちよくわからないけど、移動と回転の順番を逆にしてみたら?
>>663 移動・回転・拡縮をかけると、変換をかけたオブジェクトの座標軸も動くからな?
絶対座標で考えてはならない。
667 :
651 :2010/07/31(土) 22:45:44
ここをこうすりゃとりあえず動くよとかいうコメントはできるけど、根本的にいろいろダメすぎる。 gluLookAtやオブジェクトの回転をPROJECTION_MATRIXでやるとかどこで習ったの 天文が専門でプログラミングは専門外なのかもしれないけど 最初はopenGLの回転やカメラ指定のサンプルプログラムを参考にしたほうがいいよ
なんかよくわからん こんなのgluLookAtのlookを変えればいいんじゃないか?
>>668 modelviewで回転(glRotate)を行っても視点が移動しなくてprojectionだと移動したので
projectionで実行していました。どこかのサイトのソースでそうあったので。
>>669 lookでやったらあらぬ方向に飛んでそのままワイヤードームがフェードアウト
する現象にあって諦めてしまいました。もう一度挑戦してみます。
もう一度入門サイトあさってみます。
サイトもいいけど 本屋で立ち読み祭りも悪くないよ
>>670 そりゃDisplayListのなかで描画直前にglLoadIdentityしてりゃMODELVIEWをいじっても動かないよ
>>672 動くようになりました。LookAtもちゃんと動くようになりました。
これなら極座標でLookAtのLookいじる方法で行けるかもしれません。
ありがとうございます。
openglって右手系ですよね? 中心(0,0,0), 辺が軸に平行で一辺の長さ2の立方体を描画して、 それを gluLookAt(0,0,5, 0,0,0, 0,1,0) で見たら、Z軸正方向から原点を見てるわけだから ( -1, -1, 1 ) ( 1, -1, 1 ) ( 1, 1, 1 ) ( -1, 1, 1 ) で作られる面が見えるはずですよね? でも実行してみると ( -1, -1, -1 ) ( 1, -1, -1 ) ( 1, 1, -1 ) ( -1, 1, -1 ) で作られる面が見えます。 私は何か勘違いをしているのでしょうか?
LookAtを0, 0, -5からにしたら目的の面は見える?
Near/Far
677 :
674 :2010/08/02(月) 21:40:54
678 :
674 :2010/08/02(月) 22:23:08
>>676 near>farになっていたのが原因でしたorz
こういう指定の仕方も出来るんですね。。。
本当に助かりました
お二方ありがとうございました
法線って指定しないと ライト当てたときどうなるの?
最後に glNormal を呼んだときの値をずっと覚えていて、それが使われる 一度も呼んでない場合は初期値 (0, 0, 1)
全く4.1が発表されたというのにおまいらときたら。
無駄にバージョン上がってるよね
夏の風物詩
ここの人たちあまり最新の機能については興味なさそうだしな。 あまりシェーダとかの話題もないし
これからというか既にモバイルではOpenGLがかなり伸びてるし、いっそのことPCもOpenGLにシフトしてくれたらなぁ。 まぁそのためには補助ライブラリの整備が大切だが。
最新機能を使いたいならD3DでいいしGLで最新機能を必要とするシチュがない
最新じゃないけど 凝ったことするなら2.0スレでやる
マイクロソフトが DirectGL作ってくれないかな
GL#
そういえばこの前、openGL 4.0 の発表があったな。
>>688 ファーレンハイトとか言うのがその昔あってだな
黒歴史…
ファーレンヘイト
OpenGLの拡張機能を使えばwindowsXPでもDirectX11世代のGPUの機能にアクセス可能だ。 GF100でshaderからテクスチャへランダムライトとかatomicアクセスできる拡張機能 NV_shader_buffer_store が追加されたけど これが標準機能になるのは4.2か4.3ぐらい?
glTexImage2Dに与える画像データなんだが callocで動的確保してるポインタだと上手くいかん。 なんか変えなきゃいかんとことかある?
任意の点 double x,y,z; をglRotatefで座標変換したいんですが、 どうすればいいでしょうか?
どう変換したいんだよ。
>>696 glRotatefのことは忘れて自分で回転行列作って掛ける
>695 callocで確保した領域を与えたからといって問題が起こることは無いです。 うまくいかない原因は別にあります。 >696 多分OpenGLの座標変換の役割と仕組みが理解できていません。 赤本とか読むと良いと思います。
gluLookAtがなんか腑に落ちない eyeとlookのyが同じなら xz平面に引いたグリッドが 横線に見えるはずなのに 上から見た視点になってる
画像とコード上げてみ。
>>702 eye.y = 2;
look.y = 2;
画像
http://www.uproda.net/down/uproda122512.jpg ソース
http://www.uproda.net/down/uproda122513.zip です。
描画手順は、下な感じです。
glMatrixMode(GL_PROJECTION);
glViewport(0, 0, width, height);
glLoadIdentity();
gluPerspective( 60, width / height , 1, 1000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt( eye[0] , eye[1] , eye[2] ,cent[0] , cent[1] , cent[2] , up[0] ,up[1], up[2] );
// for(...)
{
glPushMatrix();
drawGrid();
glPopMatrix();
}
>>701 ファーストヒント:遠くの物は小さく見える。
ファイナルヒント:透視変換
OpenGL3.x, 4.x時代においてgluは使いたいけどそのまま使えない・・・もどかしい物になってしまった。
*但し非推奨機能を使わない場合に限る。
グリッドは y = 0 平面。eye は (0, 2, -10) にあり、Zマイナス方向を見、Yプラス方向を上としている。 故に、視線の水平面 y = 2 より下にあるグリッド平面 y = 0を見下ろすよう、かのように描写されるのは自明。
707 :
701 :2010/08/06(金) 00:08:07
あああ そうかパースかかってるのか これであってるのか アホでした。 ありがとうございます><。
10.7でラデの糞みたいなバグ修正されてたんだな 褒めてやろう
glBindTextureの意味がわからん。 別に呼ばなくても問題なく表示できた。 というか、glGenTexturesでテクスチャオブジェクトを生成するには個数しか指定できないし それでどうやって関連付けられてるのかさっぱりわからん。
glBindTextureの引数で指定した番号のテクスチャが有効になる。 テクスチャ周りの設定も現在有効な番号のテクスチャに対して行われる。 呼ばなくても反映されるとかは考えないほうがいいぞ。
glBindTextureを呼ばない場合は0番のテクスチャに対して操作がされる 呼んでない状態はglBindTexture(GL_TEXTURE_2D, 0)が呼んであるのと同じ 複数のテクスチャを同時に扱うときにglBindTextureは必須
glEnableClientState(GL_VERTEX_ARRAY); : : glDisableClientState(GL_VERTEX_ARRAY); というサンプルコードをよく見ますが、Enableしたままだと何か不都合があるのでしょうか?
結構そこらへんの扱いはGPU・ドライバーによって違うというか適当だから、不必要なものまで有効化していた場合に不具合が出ることがある。
ソフトウェアエミュレーションしつつ、まずい状態を指摘してくれるような リファレンス実装があればいいんだけど
C++ならこんな感じで class Enabler : private boost::noncopyable { public: explicit Enabler(GLenum cap) : cap_(cap) { glEnable(cap_); } ~Enabler() { glDisable(cap_); } private: GLenum cap_; };
C++だけど、glVertexPointerとglDrawElementsって第四引数をポインタで参照するから 頂点とインデックスをクラスのユニークなメンバ変数にしてる時なんかは、ポリゴンごとにインスタンス作らなきゃいけないよね 多数のポリゴンをディスプレイリストでまとめようとすると、ものすごく膨れあがる みんなどういう風に構造化してるんだろう
ちょっと何言ってるかわからないです
俺もよく意味がわからなかった。
>>717 インスタンスを作らずとも、頂点とインデックスのポインタをオブジェクトの数作ればいい。
つか、glVertexPointerはオブジェクトの数だけポインタが必要。
ポリゴンが100個あるなら、それぞれ100個のポインタ。
721 :
デフォルトの名無しさん :2010/08/21(土) 12:27:31
ディスプレイリストにポインタ渡したら解放した時に危ないだろ VBO使うか、素直にループで回しとけ
は?
ディスプレイリストってまだ現役だったのか
もうdeprecated。
>>720 やはり作らないといけませんか
一括で読み込めることを売りにしているのに、結局はオブジェクト分のポインタが必要になるなんて実に中途半端な設計の関数ですね・・・
まあ速度は改善されるのでしょうけど・・・せめてglDrawElementsのように読込み範囲を指定できるようにしてほしかった
可読性に欠ける気持ちの悪いソースになりそうです・・・
ありがとうございました
glVertexAttribPointerARBとglDrawRangeElementsしか使ってない俺には やっぱり何言ってるのかわからん
まあ正直その辺のOpenGLの仕様はグダグダだよな。 APIとして非常に見通しが悪い。 だれかOpenGL Lite作ってくれ。 わりとマジだ。
かといって手作り構造体+ビットフラグもちょっと・・・
OpenSceneGraph
glViewportでビューポート設定してもglClearすると全画面分クリアされちゃうのは仕様? 指定領域だけ色クリアするにはどうしたらいい?
ディスプレイリストに線と点を描画する命令を格納するとき、line_switchによって線を描画するかどうか 決める関数を格納し、あるキーを押すとline_switchがトグルして再描画するようなプログラムを作っています。 作ってみると、line_switchはしっかりトグルしているのですが、線が描画されたり、消えたりしません。 あらかじめ、ソース内でline_switchを書き換えていると描画されたり消えたりします。 プログラム実行中だと変わりません。なぜでしょうか? glNewList(・・・・・・); if( line_switch ){ glBegin(GL_LINE); ・ ・ } glBegin(GL_POINT); ・ ・ glutPostRedisplay(); glEndList();
732 :
731 :2010/08/27(金) 21:24:30
すみません。 glutPostRedisplay(); はキーを押して、line_switchをトグルした後記述しています。 ディスプレイリストには記述していません。
>>730 DEPTH_TESTをdisableしてクリアしたい色のポリゴンを描く
DEPTHBUFFERはglClearする
もしくはglClear()+glScissor() やったことないけど
>>731 ディスプレイリストはOpenGLの命令のみを保存する。
命令リストの中にif文入れるとか、そこまでおいしい話はないよ。
>>734 あ、そうなんですか。解決できそうです。ありがとうございます。
このスレの9割ぐらいの質問はverいくつの仕様書のどの章を読めって言えば解決するんじゃないかと思う。
このスレにかぎった事じゃない
元々、芯のないブレ設計で、バージョンアップの度に二転三転するから体系的に学べるものでもない 巷に出回っているものも、バージョン表記すらない翻訳ソフトにかけただけのようなカタコトマニュアルばかりだしな 翌日には汎用的な命令がこっそりと大幅変更をされていて、混乱を招くだけのゴミ知識と化してたりすることが多いから 常に言語の最前線を追えるような奴じゃないとまず使えないな 学生さんには厳しい
OpenGLって言語なのか?
基本APIだけどシェーディングランゲージも含んでるから微妙
>>736 じゃあお前はこれから9割ぐらいの質問に対しては、
ちゃんと仕様書の ver 番号と章番号だけで答えてくれよ
矢印キーでオブジェクトが動くプログラムをglut + gluiで作っています。 gluiのサブウィンドウにあるチェックボックスをクリックすると、 メインウィンドウの画面の線が表示したり消えたりする動作をします。 チェックボックスをクリックすると、フォーカスがglui側のサブウィンドウに移ってしまい、矢印キーで画面が動きません。 メインウィンドウ画面を一度クリックするとフォーカスが元に戻って再度動くようになります。 この"メインウィンドウ画面をクリックする"という手順が面倒なので、 チェックボックスをクリックしてもフォーカスがメインウィンドウから移らないようにしたいのですが いい方法はありますか?
glutのキー入力を見るのをやめてプラットフォーム固有のAPIで直接キーの状態を見るとかすればいいんじゃないかな
glui使ったこと無いんだけど、チェックボックスの処理の最後にglutSetWindowでカレントウィンドウをメインに戻しとけばいいんじゃないのかな
gluiで const char* を引数にとる関数で、char配列を渡すとコンパイルは通るのですが、 実行するとエラーで落ちてしまいます。なぜでしょうか。 void func() { char buffer1[32] = "test", buffer2[64]; strcpy(buffer2, "_test "); strcat(buffer2, buffer1); text->set_text( buffer2 ) //text は main()で生成したgluiのstatic_textのポインタです。 } アプリケーションエラー 0x・・・・・の命令が0x・・・・・のメモリを参照しました。メモリがreadになることはできませんでした。 環境はVC++2008, OpenGL + gluiです。
>>746 × OpenGL + glui
○ glut + glui
でした。すみません。
buffer2をグローバルスコープに置いてみ。
>>748 ありがとうございます。
buffer1,2 ともにグローバルスコープでやってみました。
出来ませんでした。すみません。
あと、引数の部分を "test" みたいに定数でやってもエラーがでます。関係がありますか?
gluiの配布サンプルプログラムは動くんですが、なぜか作っているプログラムだと動きません。
textそのものが間違ってたりして。 main()も見ないとなんとも言えないよ
751 :
746 :2010/09/05(日) 16:26:23
char *look_pos[] = {"theta = 0", "phi = 0"}; int main(int argc, char *argv[]) { glutInit(&argc, argv); //初期化 : main_window = glutCreateWindow("test"); //ウィンドウを生成 : /*glui UI設定 */ glui = GLUI_Master.create_glui_subwindow(main_window, GLUI_SUBWINDOW_RIGHT); //gluiサブウィンドウ生成 glui -> set_main_gfx_window( main_window ); //メインウィンドウに結合 GLUI_Panel *star_search_panel = glui->add_panel("Search"); //探索系パネル GLUI_Listbox *star_list_ = glui->add_listbox_to_panel(star_search_panel, "Select Star", &star_list_number, -1, DummyCB); glui->add_button_to_panel(star_search_panel, "Search", -1, Star_Search); glui->add_button_to_panel(star_search_panel, "Look Up", -1, Star_Look_Up); : theta_text = glui->add_statictext(look_pos[0]); phi_text = glui->add_statictext(look_pos[1]); : init(); object(); Init_Look(); glutMainLoop(); //無限ループで待受 return 0; } つづく
void Refresh_Text(void) { /* 角度のテキストを更新する */ sprintf(buffer1, "%5.1lf", now_houi); strcpy(buffer2, "houi = "); strcat(buffer2, buffer1); //look_pos[0] = buffer2; theta_text->set_text(buffer2); sprintf(buffer1, "%5.1lf", now_keisha); strcpy(buffer2, "keisha = "); strcat(buffer2, buffer1); //look_pos[1] = buffer2; phi_text->set_text(buffer2); } この関数を、display()で呼んで現在の角度をテキストで表示しています。 look_pos[]がコメントになっているのは、ポインタで試したけど駄目だったということです。
デバッガー使えば?
>>752 GLUI_StaticTextのset_textの話だと思うけど。
set_textは内部でバッファ確保してないからな、ポインタ格納してるだけだから。
phi_text->set_text実行した時点でtheta_textの内容も変わるからな。
それと肝心なbuffer1とbuffer2の定義がないのはわざとか?
もういいや、バカの相手は時間掛かる
ヒント 同じ穴の狢
>>754 ということは、theta_textと,phi_textの文字列を格納しておくchar配列を
グローバルスコープに置いてそのポインタを渡せば通るのかな?と思い
試してみました。
char theta_value[32], phi_value[32]; //新しくchar配列を追加。テキストの文字列を代入
void Refresh_Text(void)
{
char buffer[16];
/* 角度のテキストを更新する */
sprintf(buffer, "%5.1lf", now_houi);
strcpy(theta_value, "houi = ");
strcat(theta_value, buffer);
look_pos[0] = theta_value;
theta_text->set_text(look_pos[0]);
}
これに変更して実行してみましたが、やはり落ちてしまいました。
printf("%x", theta_text); したら?
>>759 c60da482
とでました。ポインタはしっかり設定されていると思います。
とりあえず、全ソースコードをどこかに上げよう 部分的なコードだけでは推測しかできない
で、パスは?
>763 いろいろ試したら glui がpasswdみたい
パスがわかったのでダウンロードしてみたが、なんか全然違う所に原因があんじゃね データ読んだりCOMポート開けたりSheelExecute(こえー)とかgetchar()とか外したらエラーが出ずに動いたけど?
>>763 すっかり忘れてました。すみません。passは"gl"です。
>>765 その部分ですか。とりあえず要件を満たすような動作を調べながら書いたので
その部分にエラーがあると直しようがないかもしれませんorz
特にセンサー部分はさっぱりですので。
可笑しいなそのロダ。最初の二文字がglならパス通るとか。
パスワードを平文で保存してるなんて…
最初の2文字だけハッシュ化してるのかもしれんぞ
すげーロダだなwww
Perlのcryptか
773 :
デフォルトの名無しさん :2010/09/07(火) 19:22:09
引数の順番間違えてる馬鹿発見
774 :
デフォルトの名無しさん :2010/09/08(水) 22:31:52
質問です 法線を自動的に生成する命令として glEnable(GL_AUTO_NORMAL); ってのが良く紹介されてるんですが、これってGL_QUADSなどで 自分で図形を表示するときには使えないんですか? というか上記の命令で自動的に法線が生成され、照明が適用されるようになったことが 一度もなくて、毎回自分で面の法線を頂点ごとにいちいち計算してglNormal3dとかで 設定してるんですけど、皆さんのところではちゃんと法線が自動で生成されるんですか?
法線を自動生成する命令は無いですよ。
>法線を自動生成する命令は無いですよ。 レス見てはっと気づいて赤本(原著第五版日本語版第2刷)を確認したら GL_AUTO_NORMALなんていう命令は載ってない・・・ まさかデマなの!!? とりあえず法線計算はいつも通り自前ですることにします でも法線のスムージングとか超めんどくさいんだよな・・・ Java3DのNormalGeneratorみたいなのが欲しいところです
それくらい自前で作ってもすぐですって。がんばれがんばれ。
1. 全部の法線を0にする 2. 全ての三角形について 2.a. 三角形の法線を外積で求める tn = (v1-v0)x(v2-v0) 2.b. 三角形の三つの頂点の法線に tn を加算 3. 全部の法線を正規化する ほら簡単♪ 2.の段階で正規化とか余計なこと考えなきゃ早いのよ〜。
The OpenGL
Graphics System:
A Specification
(Version 2.1 - July 30, 2006)
でAUTO_NORMALを検索してもヒットしないからそんなん使わないほうがいいんじゃない?
>>778 2の段階で法線ベクトルを正規化しないことによって
三角形の面積比が入った頂点法線ベクトルが得られるんだよね。
これをあるサイトで初めて知ったときはこいつ天才かと思ったよ。
俺がバカなだけかもしれんが。
でも頂点法線ベクトルをGPUで計算しようとするとちょっと面倒じゃない?
頂点毎に隣接する頂点のインデックスを保持々するとかしないといけないし。
将来ベクトルの足し算がatomicにできれば楽になるかも
GL_AUTO_NORMALって ベジェパッチ作成する glEvalMesh2とかに適用される奴だよ
GLSLを用いたフラグメントシェーダ内部で glEnable(GL_LIGHTx)でどの光源が有効になっているかを知る方法があれば 教えていただけないでしょうか?
シェーダー使うんならもう3.0以降にあわせてLIGHT使うのやめちまえよ。 uniformでライトの色、場所とかをMat4なりで渡すといい。 有効になってる光源も適当な変数で知らせてやればいいんじゃないか。
OpenGL Shading Language Specification v1.20 の7.5 Built-In Uniform State を読みなさい。 それとver3以降の仕様書のThe Deprecation Modelの章も読みなさい。 これからはDeffered shadingの時代かもしれない。
半透明がなぁ・・・。
785 :
デフォルトの名無しさん :2010/09/10(金) 13:19:05
質問です。 立方体をOpenGL ES(iPhone)で描画するプログラムを作っています。 行列で変換(回転)後,ライティング用の法線の値を取り出すことはできるでしょうか? 立方体の手前に見えている面を判別するのに,法線の情報を使いたいのです。
できません 逆に視線をモデルのローカル座標に変換すればモデルの法線情報をそのまま使えると思います
>>785 ありがとうございました。
できる/できないの切り分けができただけでも,調べる時間が省けて助かります。
自前でがんばってみます!
781です。
>>782 レスありがとうございます。
確かに、固定パイプラインの関数の多くが廃止予定になっているので、
そういう意味では全て移行してしまったほうがいいのかもしれません。
しかし、今回の自分の場合、既存のグーローをフォンに変更したいだけなので、
出来るだけソースコードの変わらない方法を模索したいと思っています。
>>783 レス、ありがとうございます。
uniform variableのほうは見てみたのですが、有効無効を調べる箇所は
見つかりませんでした。無効になっていれば、
ambient、diffuse、specularのいずれかの値が0.0になる、などであれば
良かったのですが、そういうこともありませんでした。
もう一度自力で調べてみます。レス、ありがとうございました。
>>788 遅レスだが、解決に行き着いていなかったようなので
自分はシェーダーで固定パイプライン機能を使用しないのだが、
glEnable()で指定する各ステートはシェーダーから参照できなかったような
もともとのProgramable shaderの生い立ちから、LIGHT0のみなら、LIGHT0のパラメータのみ参照するシェーダーをロード。
LIGHT0とLIGHT1を使用するなら、LIGHT0とLIGHT1を参照するシェーダーをロードっていう流儀なんだろうね
どうしても1つのコードで処理させたいなら、uniformでenable相当の値を渡して、分岐させればよいかと
glPointParameterfvを使った後 無効化するにはどうしたらいいのでしょうか? 使用以後POINT系のパラメータが のっとられたままになってしまいます。(pointSizeとか)
デフォルト値を設定し直す 面倒なら glPushAttrib 〜 glPopAttrib で
792 :
デフォルトの名無しさん :2010/09/21(火) 16:35:06
板違いならすみません。 joglのopenglなんですがGLCanvasとJscrollpaneの組み合わせて スクロールしたところ、スクロールされて出てくるはずのキャンバス 部分が表示されず、またスクロールで見えなくなるはずの上部が フレームの枠を超えて飛び出します。 組み合わせて使えないのでしょうか?
AWTとSwing混ぜるな危険 Frame, Button, ScrollPane, GLCanvas ・・・ AWT JFrame, JButton, JScrollPane, GLJPanel ・・・ Swing 実際には混ぜて使える状況もあるけどまだ理解できてないならやめた方が無難
最近のアップデートで制限ゆるくはなったんだけどそれでも制約あるんだよね
opengl で height fieldを表示したいのですが どーにもこーにもTIPSが無く
円系のレイヤードウィンドウをOpenGLで描画するということは可能でしょうか?
可能。FBO使って円を描画、アルファ値持ったデータとして取得・設定。
>>800 ありがとうございます
早速勉強してみます
>>791 遅くなりましてすいません。
まさかぁ〜と思ってやってみたら
上手くいきました!
ありがとうございました!
OpenGLでffmpegを使って動画を描画したいんだけど、似たことやってるようなオープンソースかサイトってある?
ffmpegじゃなければいくらでもありそうだけど… 自分もOggTheoraを立方体に貼り付けてみたことならある
VLC MediaPlayerやSMPlayera辺りのメディアプレーヤーは OpenGLでの描画に対応してたはずだから調べれば情報が出てくるかもね
(0,0,0)と(1,0,0)を結ぶ線があって それを平行移動、回転して (i,j,k)と(i+x,j+y,k+z)を結ぶ線にしたいのですが どうもうまくいきません どなたか教えて下さい
(i,j,k)と(i+x,j+y,k+z)を結ぶ線を描いてはどうか
>>806 ヒント:移動、回転(角度は逆三角関数と、3平方の定理使ったらわかるよね)、拡大(これもベクトルの長さからわかる)
普通に回転移動行列作って掛ければいいだけじゃ
>>808 線だけじゃないので
平行移動、回転を使った方が楽なんです
>>809 回転ってやっぱり一発じゃ無理ですよね
(x,y,z)に適当なベクトルを外積して2本の直行するベクトルを決めれば、変換行列は求まる
↓のように書いたのですが 矢印の頭の方向がおかしくなってしまいます glPushMatrix(); { glTranslated( i, j, k ); //棒部分 glBegin( GL_LINES ); glVertex3d( -x/4, -y/4, -z/4 ); glVertex3d( x/4, y/4, z/4 ); glEnd(); norm=sqrt(x*x+y*y+z*z); theta1 = acos(x/norm); theta1 *= 180/PI; if(y==0) glRotated( theta1, 0, 1, 0 ); else if(z==0) glRotated( theta1, 0, 0, 1 ); else glRotated( theta1, 0, 1/y, -1/z ); //頭部分 glBegin( GL_TRIANGLE_FAN ); glVertex3d( norm/4, 0.0, 0.0 ); glVertex3d( norm/4-0.2, 0.05, 0.0 ); glVertex3d( norm/4-0.2, 0.0, -0.05 ); glVertex3d( norm/4-0.2, -0.05, 0.0 ); glVertex3d( norm/4-0.2, 0.0, 0.05 ); glVertex3d( norm/4-0.2, 0.05, 0.0 ); glEnd(); } glPopMatrix();
>>813 自己解決しました
acosの返り値の範囲を考慮してませんでした
フレームバッファオブジェクトと単精度浮動小数点バッファを用いてSSAOを 実装したいと思っています。 ただ、デプスバッファ、法線バッファとして単精度浮動小数点バッファを 作成するところで上手く出来ていないようで、レンダリングが正常に行えません。 glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA16F,width,height,0,GL_RGBA,GL_UNSIGNED_BYTE,0); 以下の構成でレンダリングに失敗しました。 CPU:C2D E6600 GPU:Radeon X1950XTX もう一つの開発環境(以下)では正常にレンダリングが行えました。 CPU:C2D T9600 GPU:Nvidia QuadroFX 2700M X1950XTXが少し古いのに起因しているのかと思ったのですが、 ハードウェア的には浮動小数点バッファを扱えるという記述をいくつか見つけたので、 もしRadeonでOpenGLを浮動小数点バッファを作成している、という方がいましたら 教えていただけないでしょうか?
>>815 です。追記
RadeonのCatalystドライバのバージョンは2010.0210.2339.42455です。
勿論glGetErrorでエラーがないのは確かめたんだよね? FBOが不完全なんてこともないんだよね?
>>815 揚げ足とるわけじゃないが、記述を見かけたなんて言ってないで
glGetString()で自身の環境で機能を確認すれば言いだけの話
その方法を知っていてやらないのは駄目だろ
あとは旧ATIのGLドライバは、GLの規格に厳密すぎる所がある
ちゃんとリファレンス読んで、その通りに実装しないとエラーになる
同じコードで、NVIDIAでは動いて、ATIで動かないなんてザラ
でネット拾ったり、本なんかに載ってるコードを
リファレンス通りに修正するとATIでも動くようになるw
ATIボードの機能が有効なのにNVIDIAでしか動かないなら、この辺りじゃね
>>817 レス、ありがとうございます。
glGetErrorではエラーは吐きませんでした。
FBOはCOLOR_ATTACHMENT0_EXT、DEPTH_ATTACHMENT_EXTは設定していますが(共にテクスチャ使用)、
ステンシルに対しては使用しないので設定していません。
一応レンダーバッファのほうで設定してみます。
>>818 レスありがとうございます。
使用可能かどうかはglGetStringは使用していないのですが、
OpenGL Extensions Viewer 3.32のほうで確認を行いました。
(GL_RGBA16,GL_RGBA_FLOAT16に使用可能のチェック有)
確かにATIのドライバは仕様に厳格なところがありますね。
GLSLコードを書くときもよく弾かれてました。
Nvidiaは逆に良くも悪くも柔軟+最適化されていて判断に困ることがw;
厳格なATIで動けばNvidiaはまず動く、というのが自分の考えなので
ATIで動かないコードは書きたくないなぁと思って・・・。なかなか難しいですね。
>>819 いや、不完全ってのはglCheckFramebufferStatusで
ちゃんとGL_FRAMEBUFFER_COMPLETEが返ってくるか確かめろってことだろ。
すみませんが質問させて下さい…。 glBegin()〜glEnd()の間に行列操作を入れたいのですが、glBegin()〜glEnd()間の 関数制限で実装出来ずに困っています。 そういう事ってOpenGLではどうやっても出来ないのですか? 宜しくお願いします。
glEndして改めてbeginするなり、入力する座標を変換して入れるなり幾らでも方法はある。 キミがアホなだけ。
823 :
821 :2010/10/02(土) 16:29:04
レス有難うございます。 座標変換を外でやって実装する方法はやりました。 (それでコードやデータに問題が無いのを確かめたので…) 今やりたいのは、GL_TRIANGLE_STRIP 等の途中で行列演算が 挟みたい状態ですので、途中でEnd()〜Beginも挟めずに困っています。
822の言う、入力する座標を変換して入れるってのは、GLまかせでなく自分で座標変換を計算するってことでしょう 自分で (C言語の + 演 算子や * 演算子や sin 関数、cos 関数等を使って) 行列の計算をするのにEndもBeginも要らない
無理だしやるべきではない
>>823 glBegin()〜glEnd()の間に実行できるGL命令の種類は極めて限られています。
基本的には、頂点アトリビュートの変更しかできないと思ってください。
行列の変更も無理。
同じ事をやりたいなら、行列を変更したい部分でストリップを切って、
別の行列の元で別のストリップとして描画するしかありません。
(切ったストリップ間は適当なTRIANGLEなりなんなりでつなぐ)
頂点シェーダが使えるなら、頂点ごとに別の行列を参照することで
821さんのやりたいことができますけどね。
行列パレットでもできるね。
828 :
821 :2010/10/03(日) 01:11:35
みなさんご親切にありがとうございました。 基本的にはOpenGLの機能としてはシェーダを使わないと無理という感じなのですね…。 大変参考になりました。有難うございました。m(_ _)m
なぜシェーダを使わないと無理とか言う結論になる
ごめん行列パレット完全に忘れてたww
そういう問題か。
じゃぁどういう問題なの?
オブジェクトを分割して描画するって言う考えには何故か至らんらしいな。
(゚д゚) ・・・。 ・・・・・・・えーーーーと・・・・????
CPUで計算できる頂点変形モデルを描画するのにシェーダーが必須なわけがないだろ
そもそも元発言者が本当は何をやりたいのかがよくわからん。 通常はglBeginを始めた時点で全てのデータは既知(固定)だ。 glBegin~glEndの中でこねくりまわす必要は普通はない。
スキニングしたいってことかと思った。 なら頂点シェーダーか行列パレットであってるでしょ。
838 :
821 :2010/10/03(日) 11:52:24
>830 すみません。 「行列パレット」という機能がシェーダの機能の一部なのだと 勘違いしてしまいました。 「行列パレット」を使えば出来そうなのですか!? >833 >826さんにも同様のアドバイスを頂きましたが、TRIANGLE_STRPI中の プリミティブを分割するとなると、結局プリミティブを分割する時点で 一番最後の関連する頂点座標を個別計算しておく必要が出てきてしまい、 処理がとても煩雑になってしまうので…。
>>838 行列パレットでできます。というかまさに821さんのやりたいことを実現するための機能です。
もっとも、821さんがお使いの環境で行列パレットが使用可能かどうかは分かりませんが・・・。
840 :
821 :2010/10/03(日) 13:38:42
>>839 有難うございます!
行列パレット関係でググってみたところ、「ボーンの数だけ行列をあらかじめ計算して
保存しておいて(マトリックスパレット)、あとはこれとデータをGPUにおくってやればOK」
という感じの、自分がやりたい方向性の記事が見つかりました!
ですが、>839さんのいうように、普通に使える機能ではなさそうな感じで、しかも
導入ページみたいなものも無さそうで難しそうですね…。
>>840 もしかして拡張機能の取得の仕方が分からないですか?
環境(OS)と、グラフィックスカードは何をお使いで?
821が何をしたいかがわからないな。 なぜポリゴン描画中に行列の操作が必要だと思ったのかわからないし、 具体的にどんなモデルを描画しようとして困ってるとかも言った方が答えやすいよ。
843 :
821 :2010/10/03(日) 14:14:03
>>841 はい、拡張機能関連が正直言って良く分かっていない状態です。
------------------------------------------------------
OS:Windows7
ビデオチップ:(GeForce9400/PCI/SSE2)
OpenGL:Version3.0( OpenGL Extensions Viewer3.32より )
------------------------------------------------------
ここにfreegltとglew-1.5.6-win32.zipを入れた状態です。
ですが、glewは上手く入っていない感じで、
glewInit()が「Missing GL version」で失敗してしまったり、
glewIsSupported("GL_VERSION_1_2")がfalseを返したりしています。
>>842 一般的ではないモデルデータで情報共有できないのですが、そのモデルデータのデータ構造が
そうなっているのです。
(プリミティブの頂点リストの中に行列の差し替えがコマンドとして入っていて、それらにはノードの
計算結果を入れておく構造)
>>843 環境的には、行列パレット使えそうですけどね。
僕はGLEWじゃなくてGLeeばっか使ってるので、エラーはよく分からんw
もしできるなら、GLeeの方で試してみるとか?(「glee opengl」でぐぐれ)
ARB_matrix_paletteに関しては、さすがに説明面倒臭いんでリファレンス見てください。
しっかし気持ち悪いモデルデータ使ってますねw
僕が知らないだけで、そういうデータ構造って割と一般的だったりするのかなぁ。
845 :
821 :2010/10/03(日) 15:44:39
>>844 ご親切に有難うございます!
色々トライしてみます。
本当に有難うございましたm(_ _)m
>気持ち悪いモデルデータ DirectXも昔はそういう感じだったんだけどね 821がなんかの移植をやってるならできれば両方に詳しいような人を捕まえたほうがいいと思う
今も頂点シェーダー使えないコンシューマーはそんな感じだから別に気持ち悪いとは思わないな。
>>846-847 んー、いや、バッチの中に色々なコマンドが入ってるのは分かるんですよ。
ただ、821さんの話だと、一つのストリップを構成する頂点リストの中に、
行列操作コマンドが入っているような感じを受けたので。(合ってるのかなぁ?)
さすがに、DirectXやコンシューマ機でも、そういう形ではデータ保持しないですよね。多分。
いや、メモリ上でのデータ構造としてはナシとしても、ファイルフォーマットとしてはアリなのかな??
821が勘違いしてるに10^10ジンバブエドル
いまどきみんなシェーダでやってくださいだと思います
852 :
821 :2010/10/03(日) 23:05:12
>>850 自分の環境では OpenGL Extention Viwer でチェックがついていたので
運よく使えるみたいです。
折角みなさんに ARB_matrix_palette を教えていただいたのですが、
リファレンスを見てもサッパリ使い方が分かりません。
(↓リファレンスはこれで合っていますか?)
ttp://oss.sgi.com/projects/ogl-sample/registry/ARB/matrix_palette.txt glCurrentPaletteMatrixARB (GLint index);
glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, GLvoid *pointer);
glMatrixIndexubvARB (GLint size, GLubyte *indices);
glMatrixIndexuivARB (GLint size, GLuint *indices);
glMatrixIndexusvARB (GLint size, GLushort *indices);
これらの概要というか使い方を知っている方がおられたらご教授ねがえませんでしょうか?
お願いばかりで本当にすみません…。
ARB_matrix_paletteをサポートしてるハードって一体何使ってるのか気になる Extension Viewerのデータベースには一個もないよね
>>852 有効化は glEnable(GL_MATRIX_PALETTE_ARB);
行列パレットは glMatrixMode(GL_MATRIX_PALETTE_ARB); と glCurrentPaletteMatrixARB(i); で選択して glLoadIdentity 他で設定する
各頂点に glWeight{b,s,i,f,d,ub,us,ui}vARB で1つ以上のウェイト値を指定する (w_0〜w_n)
各頂点に glMatrixIndex{ub,ui,us}vARB で1つ以上のインデックス番号を指定することによって、さっき設定した行列から使うものを選択する (M_0〜M_n)
座標変換は (xe,ye,ze,we) = sum(w_i * M_i * (xo, yo, wo, zo)) のように計算される (i=0〜n)
およそこんな感じじゃないでしょうか? そのリファレンス読む限り
正確なところはもう一度自分で読み直してみてください、必要なことは一通り書いてあるように思います
855 :
821 :2010/10/04(月) 01:57:41
>>854 有難うございます。さっそく少しいじってみたところ、
glEnable(GL_MATRIX_PALETTE_ARB);
glMatrixMode(GL_MATRIX_PALETTE_ARB);
glCurrentPaletteMatrixARB(0);
と順番に呼んだ時点でアプリケーションエラーで停止してしまいました。
明日、英語をじっくり解読して原因を調べます。
本当にご親切に有難うございました。
>>855 glCurrentPaletteMatrixARB()の関数ポインタがNULLになってないかな。
デバッガで(printfでもいいけど)要確認。
読んだけど錯綜していて結局よくわからないな。オレの直感が触っちゃダメといっている。 シェーダー使わないスキニングの需要はあると思うんだけどね…… 何というかOpenGLにもいろいろ残念な仕様がある。
三次元で立方体を描画しているときに二次元の三角形を 画面に表示したい場合はどのようにすればいいのでしょうか? (三角形をglVertex2fみたいにウィンドウの座標で表示したい、ということです。) 方法を検索しようにも用語がわからず困っています。
gluOrtho2D
gluUnProject
単純にProjectionMatrixをOrthogonalに変えて描画してもいいだろう。 ただこの場合気をつけなければいけないのはz値の処理がPerspectiveとOrthogonalで違うこと。
glRasterPos2iとglDrawPixelsを使って 画像を表示するプログラムを作ったのですが、 ウインドウの拡大縮小に合わせて 画像の大きさも変わるようにできますか?
ウィンドウの拡大縮小に合わせて glPixelZoom を使ってください
できます。
俺もちょうど同じ事知りたかったところだ!! ありがとん
画面覆うテクスチャ使ったほうがいいんじゃないか?
GPUレイトレやるときは画面全体を覆う矩形をレンダリングして フラグメントシェーダで全ピクセル毎に計算やるのが主流だ。 glDrawPixels、glPixelZoomのようなCore profileに含まれていない関数を使うのはやめて ポリゴンとテクスチャで2D処理したほうがいいんじゃないかな。
GPUレイトレやるときは画面全体を覆う矩形を glRectf()で描くのが俺のジャスティス!
871 :
821 :2010/10/06(水) 13:28:27
>>856 有りがとうございます!
printf("func = %x\n", glCurrentPaletteMatrixARB );
でのテスト結果はご指摘の通り0でした。
これってOpenGLが拡張機能に対応していないっていう認識で良いのしょうか?
自分のPC環境ですが、Extention Viewer で全ての機能がチェックになっているのも
何かおかしいのでしょうね…。OSがWindows7だからでしょうか、Extention Viewer自体
何回か起動すると時々アプリケーションエラーで起動できないことがあります。
いずれにしろ、トライがちょっと難航し過ぎているのでFbx等の一般的なフォーマットに
一旦変換してから「普通の」表示方法で出すように方針転換する事にしました。
実機と扱うデータが異なってしまう時点でかなりデメリットは大きいのですが止むをえません。
結局は、シェーダを自分でコントロールできるようになったら改めて実現できるとのことなので、
いずれそちらで対応しようと思います。
MatrixPallete周りで具体的なアドバイスを頂いた方々には本当に感謝しています。
本当にご親切な対応をして頂いて有難うございました。(成果につなげられず済みませんでした…)
872 :
デフォルトの名無しさん :2010/10/06(水) 17:30:26
フラグメントシェーダとは、ピクセルシェーダの別名。
画面全体を覆う矩形(くけい)とは、つまりビルボードの事。
ビルボードをレンダリングした後、テクスチャにエフェクトかけてビルボードのポリゴンさんに貼り付ける仕事をするのがシェーダー言語。
エフェクトとは拡大・縮小に限らず様々な事がGPU様にお願いできる。
>>869 の認識としてはこれでおk?
テクスチャとかガン無視して、 ソースデータはシェーダのuniformあたりに入れておいて、 画面全体を1ピクセルごとに舐めるように計算しろって話だと思う gl1.4以前の関数をほぼ使わずシェーダのみで解決という邪道計算は やったことがある人でないと勘所がつかみづらいと思われ
874 :
デフォルトの名無しさん :2010/10/06(水) 19:49:08
glBitmapの表示を拡大縮小する方法ってないの?
ないよ そもそもglBitmapなんて使うか?
>>872 GPUメーカーはよく使われる機能をチューニングしてマイナーな
機能は徐々に廃止していく。その結果、曲面・四角形・ピクセルやビットマップの
直接描画など三角形の描画以外の仕事はハードウェアでネイティブに処理されず
ドライバエミュレーションで処理される等の理由で遅い可能性が高いので
なんでも三角形(とテクスチャ)でやるのが最速、というあたりを
説明しないといきなりレイトレとか出しても混乱させるだけじゃないかと思った
>>870 glRectf()はcore profileに入ってないから使うのはヤメタマエ(`・д・´)
でもVBOとか使って矩形レンダリングするよりはglRectを使ったほうが楽なんだよね。
>>872 OpenGL 2.0以降の仕様書を読みなさい。
ピクセルシェーダというのはDirect3Dでの用語
フラグメントシェーダというのはOpenGLでの用語
画面全体を覆う矩形はビルボードとは別物。
ビルボードをレンダリングするときはちゃんとカメラの設定に合わせてレンダリングする必要があるけど
矩形の方はカメラとか無視して, 単に画面を覆うように四角形か三角形2枚をレンダリングするだけ.
このときvertex shaderでは座標変換とかする必要はない.
このサイトを見れば具体的な内容がわかると思う.
ttp://kioku.sys-k.net/4kgfxmon/ >>872 テクスチャはGPUレイトレみないな事をやるときでも役に立つよ。
uniform変数はテクスチャの置き換えになるものではないんだよ。
>>876 deprecatedな機能は遅かったり, 将来使えなくなるんかなと思ったけど
NVIDIAはOpenGLの古い機能もちゃんとチューニングするらしい。
参考サイト
ttp://www.slideshare.net/Mark_Kilgard/gtc-2010-opengl
>>877 つーかなんでみんな三角形2枚で画面を覆うの?
三角形1枚で画面を覆う方がcoolじゃね?
>>878 テクスチャ座標の計算が面倒になるだろ。
以前CPUとGPUの差を見るために画像処理プログラム書いたら800x600くらいの画像に5x5のガウシアンフィルタかけた場合には
CPU(1 thread) : 16[s]に対し、GPUは0.07[s]とかそんなんだったわwCPU側のはまだ最適化の余地はあるけどそれでも数十倍の違いはあった。
最近はOpenCLとか出てきてるからある程度整備されたらGPUレイトレとか画像処理とかはそれにやらせるべきなんだろうけどね。
>>877 > deprecatedな機能は遅かったり, 将来使えなくなるんかなと思ったけど
> NVIDIAはOpenGLの古い機能もちゃんとチューニングするらしい。
限りあるトランジスタをどの機能にどれだけ配分するかの問題だから全部の機能が
時代相応に速くなりますってことはないんじゃないかな
仮にNVIDIAはMarkさんが頑として譲らなかったとしてもIntelとAMDはどうだろうねぇ
>>873 >>876 >>877 うぉー、皆様懇切丁寧にありがとうございました。
何だか意図せず昔やりたかった事柄を勉強しないといけなくなりそうでwktkです。
てか4kGfxMon落としたらトロイ検出された/(^o^)\
OpenGLは1990年代ぐらいから互換性を維持しながら機能を追加していった。
↓
プログラマブルなGPUが主流になる
↓
古いOpenGLの機能は今時のGPUにあわなくなる。
同じ事をするのに何通りもの方法があると混乱する。
↓
新しいGPUにあった機能だけが使えるOpenGLをCore profilesを制定
古い機能が必要なときはCompatibility profilesという拡張機能を使おう
↓
俺ら「よし, これからはCore profilesの機能だけを使って新しいGPU時代を謳歌しようぜ!」
「仕様が雑多なCompatibility profilesはわすれようぜ」
↓
ドイツ人・フランス人「Core profilesだけを使った現代的なOpenGLのチュートリアルを書いたぜ!」
↓
nvidia「うちは古い機能も全力でサポートするよ!」
>>881 4kGfxMonはCrinklerっていうプログラム圧縮プログラムが使われている。
そういうプログラムは解凍しないとウィルスかどうか判断できないとかいう理由で
頻繁に誤検出されちゃう。
たぶん実行しても大丈夫だろうけど心配なら4kGfxMonを自作すればいいんでない?
誰かOpenGL整理し直してOpenGL Lite作れよ。 冗談抜きに複雑になりすぎて自己崩壊しつつある。
専用ハードのOpenGLなら作ったことあるけど 今の複雑な仕様じゃ作る気にならねー
>>882 毎度詳しく説明していただいてありがとうございます。
テンプレとして保存させていただきました。
>>883 OpenGL3.0になってから
ライティング, 座標変換, ディスプレイリスト等の固定機能はdeprecatedになって
結構シンプルになった。
その代わり自分でライティング, 座標変換しないといけなくなったけど
アルゴリズムさえ理解していればそんなに大変なことではない。
それでも複雑でいやならOpenSceneGraphとかのライブラリを使えばいいと思う。
>>884 今の仕様だとGLSLコンパイラを作らないといけないのがちょっと大変そう。
日本語のOpenGLのサイトでCore profilesの機能だけに絞った解説ページが無いっぽいけど
そういうサイトの需要はある?
うまくいけば広告で稼げるか?!稼げるわけないか・・・
ある!とだけ言っておこう。
桃鉄の畑みたいな収入かもしれなが重要な要素ではある筈です
NeHe's Tutorial とか続けるのに十分な利益を得ているんだろうか。 単なるボランティア?
すいません。質問なのですが、 現在 300x800の画面で作ったアプリを 300x400のサイズのウィンドウに左右分割したいと思っています。 glPerspectiveの値をいじってたりしましたが、左右キッチリと分割できませでした。 もし解決法などをご存知の方がいらっしゃいましたらご回答よろしくおねがいします。
おお・・DirectXで作ったゲームのOpenGL移植ができた・・ つかれたー
>>890 glFrustum()は左右非対称の錐台も設定できる
894 :
デフォルトの名無しさん :2010/10/13(水) 10:27:08
テクスチャー関数のGL_BLENDってどういう時に使うのでしょうか。 下地の色と特定のカラーをテクスチャーの色で分配(ブレンド)する(?)、 どう見えるのでしょうか?
895 :
デフォルトの名無しさん :2010/10/13(水) 11:58:45
趣味で3Dのプログラムしてみたいと思った。 OpenGL入れてみた。 DirectXは画面の初期化からして全然理解できなった。 OpenGLの方で趣味として実用化できそうなので テンプレの参考書求めて本屋さん行ってきます。
ここはお前の日記帳じゃねえんだ
897 :
デフォルトの名無しさん :2010/10/13(水) 12:25:35
お前の仕事上のゲロ吹く場所でもねー
反論になってませんね
899 :
デフォルトの名無しさん :2010/10/13(水) 13:26:46
まあ、いいよ。 頭の中がコピー&ペーストで成り立っているということだけはわかった。 自律的発想に乏しく、文章構成能力が低いのな。 IT業界にはコミュニケーション能力が必要らしいから、 ちゃんと日本語で物事が考えることができるように努力するんだな。 流行り言葉の反復ばっかりしているんじゃねえ。笑わせんな。噛みつきワニ。
笑わせんな。噛みつきワニ。(キリッ
分かったのでゲロ吹き合戦はやめてもらえませんか? とても汚いです。
902 :
デフォルトの名無しさん :2010/10/13(水) 13:57:05
知らんって。OpenGL始めたっつったら、 どこにもあるようなコピペで噛みつくは、人の言葉反復して返してきやがるし。 脳みそが入力情報に決まった値返すだけの単純サブルーチンかなんかなんだろう。 言語の雑談しに来ただけなのによー。
お前の書き込みのどこに雑談に発展する内容があるのか。
>>896 は、下らないどうでもいいお前の独り言書くなよカスって言いたいんだろ、言わせんな恥ずかしい。
なら俺が真面目な質問を。 透視変換をかけた後のクリッピング空間での視体積はz,y,z軸ともに-1〜+1ですよね にも関わらずglClearDepthで指定するzバッファーは0~1なのですが、これおかしくないですか zテストするときはz軸をさらに変換しないといけないのがおかしいと思います。 どうでしょうか。
そのあと glDepthRange の変換がかかるから
907 :
905 :2010/10/13(水) 15:14:39
でもこの辺赤本でも明確に書かれていないよね。 まずウインドウ座標が2次元なのか3次元なのかが明確でない。 デプステストがウインドウ座標で行われるのか明確でない。 もうちょっとわかりやすく書いて欲しい。。。。
赤本は単なるプログラミングガイドであって、仕様書とかじゃないから・・・ 正確なところを知りたければ仕様書を読まねばなるまい わかりやすくはないけど
お前の日本語まわりくどいな
うん
こんにちは。 テクスチャUVに回転行列を使って回転させる方法について質問なんですが、 Y軸で回転させたあとにX軸で回転させて持ち上げるような感じにしたいのですが、 まず「Λ」をY軸に90度回転させると「>」になりますが、このあとに X軸回転させようとすると、最初の回転でX軸まで回転させた感じになって、 |> ←が持ち上がる感じになってしまいます。 x軸 これを >  ̄x軸 として回転させるためにはどうようにしたらよろしいのでしょうか? うまく説明できなくて申し訳ありません。
その回転行列を転置
そもそも赤本は訳がおかしい
日本語版かよ
>>907 その辺、赤本にちゃんと書いてなかったっけ?
僕は赤本読めばすっきり理解できたけど。
ポイントスプライトにテクスチャ張りたいんだが フラグメントシェーダのtexture2Dの引数に gl_PointCoordを指定するとアルファ値が0になる。
917 :
895 :2010/10/16(土) 21:27:02
ん、OpenGLオモロイw GLとC++組み合わせて簡単なの組み始めているけどオモロイ。 趣味日曜プログラマ、俺の日記帳じみた書き込みだけどオモロイ。
今日は土曜だ
うっせ、こっりは出社だ!
920 :
895 :2010/10/16(土) 23:08:20
うへへ。俺は〆切納期に縛られないのぜ。 プログラミング技術がどうかも関係ないのぜ。 プロから見ればヘタヘタでもいいのぜ。 でも諸氏がんがるのぜ。 プロの技術は尊敬に値するのぜ。
921 :
デフォルトの名無しさん :2010/10/16(土) 23:16:47
プロっていってもクリエイティブなことしているのは一部 奴隷社会です
開発時は 既存のコピペ 独自クラス・独自関数の使い方だけを覚えていって 管理になると 書類や調整ばかり そんなもんです、このクソ業界
マ板いけ
楽しんでいるのならなによりですよ。 895さんのOpenGL経験に幸の多からんことを。
GLSLのgl_PointSizeと OpenGLのglPointSizeって何が違うん?
glPointSizeで設定した値を読み取るための組み込み変数がgl_PointSize
927 :
895 :2010/10/22(金) 23:34:52
>>924 ありがとうございますー。
テンプレ本のソースを使ったり、sin・cosなどして
基本的なモノを作ってます。
928 :
デフォルトの名無しさん :2010/10/23(土) 00:22:39
GLUテッセレーションで困っています。 指示する隣り合う2点ABの延長線上に、別の指示する点Cがあった(A−B C) 場合、 ACXを結ぶ三角形(エッジABと内部BCを繋ぐエッジフラグfalseの辺ACを持つ) が求まり、ワイヤフレーム描画でエッジABを描くことができません。 2つの三角形ABXとBCXが求まるといいのですが。。 どうすればいいでしょうか? 因みに、GLU_TESS_COMBINEコールバック関数を登録しても、 こちらには入ってきませんでした。
テッテレー
930 :
デフォルトの名無しさん :2010/10/23(土) 01:08:29
ただいまJOGLを扱っていてこれの gluLookAt なのですが 物体に対して見る位置をだんだん遠ざけていくと物体が消えてしまします。 物体自体を合わせて大きくしていってもやはり何も表示されなくなります。 そこでふと、JOGL自体にスケールが存在するのかと思い投稿させていただきました。 詳しいかたよろしくお願いいたします。
farクリップより遠くにいっちゃってるんじゃないの?
最新のOpenGLではGLUも無くなってテッセレーションも使えないから自分で作ったわ。 面倒なコールバックとかもなくてラク。
意味不明 最新のOpenGLでこそ、まともにテッセレーションが使えるんじゃん ジオメトリシェーダーでGPUでテッセレーション出来るのが最新たる所以でしょ (対応してないグラフィックボードの時点で最新とか論外) そもそもGLUとか言ってる時点でCPU処理だし、 ソフトウェア上でテッセレーションするならポリゴン描画出来る時点で OpenGL1.x でも自前でポリゴン分割するだけで出来るだろ 結局、GLUにテッセレーションの機能を作れたぜ!ってだけでしょ ジオメトリシェーダーでやるなら当たり前の処理になるから良かったなw
>>933 ?
OpenGL 4.0でハードウェアのテッセレーターがついたのは知ってるよ。
そもそも最新のHWテッセレーションはジオメトリシェーダーじゃなくて制御シェーダー、評価シェーダーの2つのプログラマブルシェーダー
と固定機能のテッセレーターで実現されるものなんだが。
名前こそ同じテッセレーションだけど性格が違うだろGLUのテッセレーターとは。
4.0でついたモノは主にLOD制御用だしGLUのは閉じたパスの集合から凸ポリゴン形成するものだろ。
fbxやってるんだけど、ボーンの親子関係ってどうやって取得するの? KFbxMesh.GetNode() で取れるKFbxNodeはどうも違うみたいだし…。 宜しくお願いします!
それOpenGL関係無いよね?
>名前こそ同じテッセレーションだけど性格が違うだろGLUのテッセレーターとは。 性格が違うってさ… 用途を変えてるだけで同じ物を使ってるだけでしょ 結局、テッセレーションとか語れる奴はこのスレにはいねーんだね
あのテッセレーションやテッセレータとは、GPUでもGULでも意味は同じなんです テッセレーションってのは、簡単に言うとポリゴン分割 GLUで提供された用途が、根底でテッセレーション処理を行っているのに >名前が同じだけで、関連する技術ではありません。 って、モロに表面しか理解出来てないかと… シェーダーを使って影だしてる描画メソッドがあって それを使うだけの人間が、そのメソッドについて 影を出すんであってシェーダーとは用途も仕組みも何もかもが違うんです・・・。 とか言い出してるようなモン
>>932 コールバック無しで作ると、汎用性が無くなっちゃいません?
別の機会でも使えるように作ると、結局コールバックとかクロージャ渡しとかまぁとにかくそんな感じの
仕組みになるような気がします。
あと、テッセレートする前に与えられた頂点を平面に投影すると思うんですけど、その平面って
どうやって決めるんでしょう。その辺の知識が無いので、もし良かったらどんな感じで作ったのか
教えてぷりぃず。
>>942 いや、あの・・・941のURLは見て頂けました・・・???
932さんが言ってるテッセレーションてのは、そのページのPolygon Tessellationのことなのです。
GPUではまだ実装されてないし、効率良くやるのはちょっと難しいんじゃないでしょうかね・・・。
GLUで提供されてる機能が、== テッセレーションなんて無知もいい所 このスレには、gluTessBeginPolygonをシェーダーで実装できるレベルの人間がいない事は分かった…
勝手にテッセレーションの意味を、個人の意味で置き換えないで下さい ***さんの言ってるシェーダーてのは、そのページのノーマルマップのことなのです って、シェーダーってのは、ノーマルマップ”だけ”するモンじゃないだろ テッセレーションも一緒だ テッセレーションとは、ポリゴンを再分割することで GLUで提供してる機能を指すんじゃないだろ
誰もそんなこと言ってませんよ・・・。 もう!どうしたらいいの!?コレ!?
>GPUではまだ実装されてないし、効率良くやるのはちょっと難しいんじゃないでしょうかね・・・ あのさ OpenGL 4.0 の機能紹介とかで余裕でデモされてるでしょ さらに言えば、DirextX11では、普通にSDKサンプルで中級でシェーダーテッセレーションがあるし DirectXでは始まってるが、GLもこれからプログラマブルシェーダーが全盛になれば 技術を理解せずに、自分で実装出来ないライブラリが無ければ分かりませんってレベルは淘汰される
>テッセレーションとは、ポリゴンを再分割することでGLUで提供してる機能を指すんじゃないだろ もともとGLUの話してるのに、勝手に最近のHWのLOD用途のテッセレーターと勘違いして何騒いでるの? 933 = 938 = 942 = 946 = 948
>932さんが言ってるテッセレーションてのは、そのページのPolygon Tessellationのことなのです。 これってモロgluTessBeginPolygonの説明じゃんw gluTessBeginPolygonの処理はテッセレーション処理を行って凸面のプリミティブを作るのであって 凸面のプリミティブを作ることをテッセレーションとは言わない
>勝手に最近のHWのLOD用途のテッセレーター 無知もここに極まれりw 別にシェーダーのテッセレーションでgluTessBeginPolygonと同等の機能も実装出来る テッセレーションにより、低ポリゴンモデルのエッジを分割して 輪郭を綺麗にして低ポリゴンなのを気づかれにくくする等 当然、凸面のプリミティブに分割する事も有り テッセレートの用途ってか、理解が無いのがモロバレ
まぁそんな話はどうでもいいので、932さんが作ったテッセレータの 速度とか精度とかがどんなもんか知りたいです。
>>954 その最新のフィーチャーのテッセレーターは自己交差ポリゴンの再分割とか、複数の閉じたパスによって作られた図形から描画するべき部分の三角形の算出とかできるわけ?
理解があるならそこらへんの実装例を見せてもらいたいね。
もともと、GLUのテッセレーション処理に相当する部分は、 最新のOpenGLではシェーダーで行う方向なのに、頓珍漢な発言してるのを突っ込んでるだろw さらに、GLUのテッセレーションだろうが、シェーダーのだろうが テッセレーションの処理の意味は同じ gluTess***関数のテッセレーションと、シェーダーのは違うとかw プログラマブルシェーダーって意味わかる? 自分で組むんだよ? gluTess***関数相当の処理だって組めるに決まってるじゃん
>その最新のフィーチャーのテッセレーターは自己交差ポリゴンの再分割とか、複数の閉じたパスによって作られた図形から描画するべき部分の三角形の算出とかできるわけ? ふざけるなよw 自分で判断出来ないくせに、えらそうに書き込んでたのかよwww ちゃんと OpenGL 4.0 のシェーダーのテッセレーションを調べて 出来ないと判断してから書き込めよ
>>957 お前プログラマブルシェーダーでなんでも完全に自由に作れると思ってるのかw
>>944 頂点群が2次元的に分布している前提で話すけど、適当な3点とってそれらを含む平面を計算→法線ベクトル算出、法線ベクトルを例えばZ軸に重ねる。
Z座標は無視して三角形だけで描画できるようなインデックスを求める→インデックスが持つ意味は元の頂点の座標でも一緒だからそれを用いて描画でいいんじゃないか?
3次元的に分布しているGLUテッセのサンプルは見たことがないな。
なんでも完全に自由に作れないとシェーダー組めないレベルの人は黙ってるべきw
>>959 三点の選び方によっては精度が落ちそうなので、できるだけ外周に近い三点を選ぶとかするのかなー
とか思ったんですけど、実用的にはそこまでこだわる必要は無いってことでしょうかね。
3次元的に分布してる場合は、GLUでも平面の法線を明示してやればおっけーでしたよ。
サンプルは確かに見たことないですね。
>>962 まぁ誤差のせいで投影時にある2頂点が一緒になってしまうとかならあると思うけど、もともとそこまで近い頂点なら片方消しても良さそうだ。
法線を精度よく求めるなら離れたところにある3頂点のセットを何サンプルかとればまず問題はないだろう。
964 :
デフォルトの名無しさん :2010/10/31(日) 22:10:15
.NET Framework4 C++/CLI でOpenGLのプログラミングについて 書いてあるサイトありますか? C++/CLI OpenGL 勉強し始めたばかりですけど, 一緒にマスターしたいと思っています. Win32 API, C++は結構バッチリだとおもいます
じゃぁそれでやろうぜ!!
966 :
デフォルトの名無しさん :2010/11/01(月) 01:09:16
どうしても, Formアプリで作りたいんですけど
OpenTKのGLControlをフォームにはる GLControlのPaintイベント内で普通にOpenGLで描画 描画の最後にGLControlのSwapBuffesを呼び出す これだけ
>>964 指摘したいことがあれこれあるけどスレ違いな部分だな
ヒント : 過疎スレ
970 :
デフォルトの名無しさん :2010/11/02(火) 00:40:33
OpenTK をインストールしたんだけど GLControlのアイコン(?)が出てこない Visual Studio 2005です 助けてください ToT
>>970 プロジェクトの参照設定でOpenTK.GLControl.dllを参照するば
ツールウィンドウに出てくる筈だよ。
972 :
デフォルトの名無しさん :2010/11/02(火) 22:13:03
>>971 ありがとうございます.うまくいきました
OpenTKって日本語ドキュメント誰か書いてほしい.
>>972 よく言った!
・・・あとは、分かってるな?
言いだしっぺの法則というやつだな
975 :
デフォルトの名無しさん :2010/11/02(火) 23:42:04
まずは中学英語の復習からだな
ソースがドキュメントです
977 :
デフォルトの名無しさん :2010/11/03(水) 10:05:36
ソースよりも醤油か塩コショウ派です ソースは味覚音痴御用達です
978 :
デフォルトの名無しさん :2010/11/03(水) 20:40:14
え,もしかしておまえが訳せってこと? 僕は,あとは自分で調べろってことかと, 鈍くてすいません
>>979 どうやってつくるんでちゅかね?
たいへんでちゅね〜?
おちゅかいのおーえすはなんでちゅか?うぇwww
981 :
デフォルトの名無しさん :2010/11/05(金) 11:30:42
>>981 くそもらしちゃったんでちゅか?おむつはそのままにしておきまちょうねwww
>>979 質問するスレが違うですよ。
ttp://www.codeproject.com/KB/openGL/glenabledview.aspx が元記事ですね。
このサイトはユーザー登録するとソースをDLできます(ライセンス注意)。
ソースを覗くとGUI部分はMFCで作成されてますね。
GUIは基本的に色々な言語で実装できます。
何で作るのかは知りませんが、該当のスレで質問して下さいな。
例えば、cやc++ならwinapiで実装するならwinapiスレで。
c#ならc#スレでって感じよろしく。
まぁ、基本的にはMDIで実現できますよ。
c#ならフォームの中にフォームを表示すれば可能です。
>>983 ありがとうございます。
フォームの中にフォームとか
MDIとか情報が少なすぎて。