2 :
デフォルトの名無しさん :2010/11/17(水) 20:24:35
OpenSceneGraph 楽しいよ。 OpenGL の形を保ったまま便利な皮被せてるから、OpenGL の空気そのままで扱える。
Windows環境で使用するんですが、OpenGLでレイヤードウィンドウの描画はできますか? オフスクリーンレンダリングしてコピーではなく直接ウィンドウに描画したいです
4.1とかの最新バージョンってどうすればプログラム作れるの?
>>6 OpenGL4.1に対応したGPUを取り付ける
OpenGL4.1に対応したドライバをインストール
OpenGL4.1に対応したglewをインストール
OpenGL4.1に対応したプログラマを雇う
>>7 上2つとドキュメントは分かったけどどのライブラリをインストールすれば良いか分からなかったんだよねw
ありがとう
オフスクリーンレンダリング先をどこにするかで 直接に近い形にはできると思うけどね。
必死だなw
>>10 マジで無理だと思っていたので
方法があるなら教えて下さいお願いします。orz
今のところ手元で使っている方法は、
GL_BACK に描画→SwapBuffer() せずに glReadPixel() でRGBA画像をメモリに書き出し
→UpdateLayeredWindow() でデスクトップに描画
または、
FBO→に描画、glReadPixel() でRGBA画像を(以下略)
の2通りです。
PIXELFORMATDESCRIPTOR のフラグに
PFD_DRAW_TO_BITMAP |PFD_SUPPORT_OPENGL |PFD_SUPPORT_GDI,
を指定する。(手元にソースが無いので合ってるか確認してない。)
DIB を作成して wglMakeCurrent() でDIBのDCをセットする
オフスクリーンレンダンリングが DIB に対して行われるので。
DIBのDCでUpdateLayeredWindow() を行う。
DIB×OpenGLのコードは↓参照。
ttp://son-son.sakura.ne.jp/programming/opengl_3.html
DRAW_TO_BITMAPは常にソフトウェアレンダリングになるんじゃなかった?
16 :
13 :2010/11/26(金) 01:26:39
>>14 ありがとうございます!
>>15 確かそうだったかもと思ったんですが
wglChoosePixelFormatARB() で検索すれば
WGL_DRAW_TO_BITMAP_ARB と WGL_FULL_ACCELERATION_ARB が
同時に True の PixelFormat が取れるかも…。(未確認)
手元の RadeonHD4850 で試してみます。
17 :
デフォルトの名無しさん :2010/11/26(金) 19:22:02
なあOpenGLってハードウェア(GPU)と通信するためのAPIだよな。 これを人間が使って3Dを描画するのが間違えてないか。 CPUで言えばアセンブリで直接ゲームを作るようなもの。 3DにもC++に相当するような「高級言語」が必要だと思うのだが、どうだろうか?
それはいわゆるゲームエンジンみたいなものじゃないのかい いろいろあると思うけど
>>17 たとえば、どのように表示するために、どのように記述できると
「C++に相当するような高級言語」と言える?
20 :
17 :2010/11/26(金) 21:24:06
少なくとも、 - レンダリングコマンドが呼び出し順に依存しない - レンダリングデータのメモリ配置、型を考慮する必要がない - レンダリングステートの変化の影響が自明 な事が必要だと思う。 OpenGLを使ってちょっと複雑なものを表示しようとするとこの変がネックになる。 あまりにプリミティブ過ぎないだろうか。
>>15 PFD_DRAW_TO_BITMAPを指定してGLSLを使ったらどうなる?
シェーダー処理も全てソフトウェアレンダリングされるのか?
そうはならないでしょ…多分。
一部の機能がソフトウェア処理される程度じゃないかと。
>>20 上二つは分からなくもない。
ただ、それはゲームエンジンあるいはライブラリがする仕事と何が違うのか?
> レンダリングステートの変化の影響が自明
これがちょっと分からんな。
これは、レンダリングステートをAからBに変えた時、
どのように表示が変化するのかがプログラマにとって自明である事を言ってるの?
もしそうなら、それは「高級言語」で解決できそうな類の問題なのか?
>>17 Open Inventorとかそうじゃないかな
24 :
17 :2010/11/26(金) 22:02:52
こういうこと。「効果と影響範囲が自明」の方がいいな。 mesh0.color = {255,0,0}; mesh1.color = {0,255,0}; カラーだけだとありがたくも何とも無いけど。 ある「ステート」の及ぼす効果、範囲がわかり難い。
「ライブラリ」と呼ぶのが良いのか「3Dのための高級言語」と呼ぶのが良いのかは定かではないが。 OpenGLに変わるもっと見通しが良く、人間が使いやすい形の3D記述APIが必要だ思うですよね。 GoogleのO3Dもこの方向だと思う。作ったら世の中に受け入れられないだろうか。
>>24 それって、ポリゴンの集合に対してカラー属性を付与して、
そのカラー属性の値を関数で与えてるんだよな。
やっぱりライブラリで事足りるような気がするんだが・・・
ていうか、そういうの普通に自作してないか?
わざわざ新言語作るんだから、既存の言語+ライブラリでは不可能、
あるいは意味を明確に表しにくい表現が簡単にできないと意味が無いと思うぞ。
27 :
17 :2010/11/26(金) 22:30:32
現状GPUと通信する部分は必ずOpenGLになるので、 OpenGL+ライブラリではできない事ができるかと言われるとできない。 使いやすいだけでも訴求ポイントにはなると思うけど弱いかなあ うーーん、もう少し革新性が必要ですね……
>>27 いや、OpenGL+ライブラリと同じ事しかできなくても、
その言語だと「こんなに楽に、見やすく書けて、メンテ修正もしやすいよ」
でもいいと思うんだ。
ただ、言語を設計するというのは、
ライブラリを作ること以上に骨の折れる作業だよ。
既に既存のライブラリがあるんだから、少なくともそれ以上の
「こんなに楽に、見やすく書けて、メンテ修正もしやすいよ」でないと、
言語を作るメリットがね・・・
俺は何かをやるとその根幹がどんどん気になってしまう人間だからOpenGLくらいのほうが気がラク。 色々と隠蔽したものはゲームエンジンの類になるんじゃないか?OpenGL公式のトップニュース見てるだけでもよく見かけるが。
>>17 確かにOpenGLを直接使って3Dを描画するのは大変かもしれない。
世界にはそんな風に考えている人が沢山いて,
OpenSceneGraphとかIrrlichtのようなライブラリが作られたんだよ。
17はOpenGLの欠点だけを挙げているようだけど
そういったライブラリを調べた上でOpenGL+ライブラリ方式が不味いと言ってるの?
ライブラリとかゲームエンジンを使うと開発は楽になるけど
制限も発生するんだよ。
ライブラリに実装されていない特殊な技術を使おうとしたり
ハードウェアの性能を最高に引き出そうとしたりするとOpenGLのような
ハードウェアに近いAPIが必要になるんだよ。
メガデモ野郎の俺様はいつもOpenGL3.3のAPIを直接呼び出して使ってるぜ!(キリッ)
17がレベルが低すぎて笑えるw OpenGLが高級言語だろ グラフィックでアセンブラ相当と言えばフルスクラッチで、 頂点情報をラスタライズしてポリゴン描画や、画像のピクセル拾ってテクスチャマッピング ってレンダラを自前で作るくらいの部分だろ 17の理屈で言えば、人間がプログラミングなんてやるのが間違ってて 口で処理を言えば即プログラムが出来上がる高級な仕組みが欲しいってレベルだろ
>>32 無理やり難癖つけなくてもw
OpenGL = アセンブリ という例えはあってると思う。
どちらもハードウェアの機能をフルに使いたいときには使うが
それだけでゲームを作るのは狂気の沙汰。
問題はダイクストラの構造化プログラミングに相当するような
3D APIにおけるパラダイムシフトは何か? という点にあると思う。
上の例で言えば
- 命令が記述順に依存しない
- データがメモリ配置、型に依存しない
というのは十分にパラダイムシフトになってると思う。
ゲームエンジンみたいに余計な機能は付け加えずに描画に絞った
ライブラリ(高級言語)はアリだと思う。
だから、どっちがOpenGLのレベルまで降りてくるかの問題 OpenGLを叩いてゲームを作るのは狂気の沙汰と思ってる奴が、 ゲームを作りたいと思う事自体が”狂気の沙汰”だろ って言ってんの OpenGLは、OpnnGLを叩けるレベルの人間に向けて出されてるんのに 勝手に自分の低レベル目線に持ってきて狂気とかw そう言うレベルの人間は、ツクールとか 金出して他人にゲーム作成を依頼しろって事
>>33 で、どういうのが欲しいか
>>19 や
>>22 で具体例を訊いたが、答えが
>>24 だ。
これだけ漠然とした答えだと、既存のライブラリと何が違うの?と言わざるを得ない。
しかも
>>24 の例は mesh0 や mesh1 と言っていることからして、
どうもポリゴンの集合としてのオブジェクトの概念をも言語レベルに入れたがっている。
しかし、ライブラリではなく言語がそこまで高次の領域の面倒を見るべきかな?
そこまで行くと、逆にかゆいところに手が届きにくくなるような気がする。
命令が記述順に依存しないというのは、
要するに命令的ではなく宣言的に記述できるといいな、ということだろう。
Haskell などの関数型で OpenGL のラッパーを作ればいいのでは?
>- 命令が記述順に依存しない Zバッファの仕組み等の 3Dプログラミングの知識もスキルも無いだけだろw
>>36 いや、さすがにそんな基礎は分かってるだろ
でなければ OpenGL は使えない
ある程度ヒントを与えればコンパイラが適切な順に命令を並べてくれる
という意味だと思うぞ
本人じゃ無いなら否定出来ないなw OpenGL程度のAPIを使ってゲーム作るを狂気の沙汰と言ってるんだから OpenGL分かりませんって言ってるのも同然なレベルだろ だって基礎知ってれば、OpenGLでゲーム作るのは普通 そもそも言っちゃえばプログラミングの知識すら怪しい 命令が記述順に依存しない なんて、基礎を知ってるなら素人でも最初に自分で組む部分 APIのステートとかを登録していき、実際に実行するときに解決される なんて誰でも思いつくし、自分用に作る部分だろ 命令がAPI発行順に依存しない なら話は違うと思うがw これだけで、どんだけ低れべるなのか知れる
>>36-38 自分が理解できないからといって他人を否定するのはよくない。
glTranslate (0,0,1);
glRotate (90, 0,0,1);
と
glRotate (90, 0,0,1);
glTranslate (0,0,1);
が等化で有るべきと、俺は解釈したね。
ついでに言うと
>>36-38 はアセンブリ使いがCなどの高級言語が登場した時に言っていた攻撃文句と同じな。
現実は誰でも知っているようにその後はアセンブリはCに取って代わられたわけだ。
現状のOpenGLが良いとは俺は思ってないし多分みんなもそうだろう。
じゃあ代わりの3D APIがどうあるべきかというと、俺にもアイデアはない。
この辺は恐らく目線の違いで、現在使えればいいだけの
>>36-38 みたいな人間は
新しいAPIについて考えることはないし、自分で何かしようとは思わないだろう。
恐らく新しい事をやりたい人間は
>>36-38 みたいな他人を否定したくてしょうがない人間と付き合ってはいけなし、
アイディアを話すのは害にしかならない。
>>39 てめぇ、バカに俺(
>>22 >>26 >>28 >>35 >>37 )も含めるな。
俺は現在使えればいいだけなんて一言も言ってないし思ってもない。
ただ単に「
>>17 の言うような新言語」であるなら、
それは既存のライブラリとどこが違うのかと訊いている。
ここが違うと言えないのなら、新言語を設計するメリットが少ないと思うぞ。
これはお前の目には否定に見えるのか?
そして、
>>35 でもちょっと言ったが、新言語を設計する時は、
言語が担うべき仕事と、ライブラリに任せるべき仕事をちゃんと区別した方がいい。
まずは、本当に言語が担うべき仕事をちゃんとリストアップすべきだ。
あと、命令が記述順に依存しないの意味が宣言的に記述する事であるなら、
ネタではなく本当に真面目に、Haskell で書かれた OpenGL ラッパー
例えば FieldTrip なんかからアイデアを集めた方がいいと思う。
OpenGLは低レベル過ぎて使いづらいからもっと高級にすべき(新しい言語を作る?)派
vs
OpenGLは十分使い安いので現状でOK派
の論争になっているようだね。
今のOpenGLのAPIが完璧だとは言わないけど
OpenGL並にハードに近いAPIは必要なんだよ。
下手に高級にすると制限が生まれて、できるハズの事ができなくなっちゃうんだよ。
OpenGLが使いづらい、3D APIがこうあるべきだ!
と世界中には同じような事を考えてる人は沢山いる。
そういう人たちが3D APIを使いやすくする為にOpenSceneGraphとかのライブラリを作ってるわけだ。
自分と同じような事を他の人が既に考えていて、それなりに結果がでているなんて事はよくあること。
OpenGLが使いづらいよ派の人は
まずは既存のライブラリやゲームエンジンとかをよく調べて、それでも満足しないなら
既存のライブラリの問題点とか、こんな問題はライブラリでは解決できないとか
○○という理由でOpenGL上には俺の理想する3D APIを構築する事は不可能だと言ってくれ。
>>39 class mesh
{
vec3 position;
matrix direction;
...
};
みたいなクラスがあって、そこに位置と向きを指定しておくだけで
その通りレンダリングするライブラリがあればそれでいいんじゃないの?
OpenGLが難しいからといって、今よりずっと理解し易さ重視で速度を犠牲にするような変更を加える事はあってはならないと思う。
OpenGLが難しいなら使いやすいライブラリを探して, それでも解決しないなら文句を言ってくれ。
でもJavaなんてどこまでが言語仕様で、どこまでがライブラリなのか非常に曖昧だよね。 ライブラリで全てが解決する派の欠点は、そう都合良く自分の欲しいライブラリがあるとは 限らないところだと思う。新規のものは学習コストもそれなりにかかるし。 個人的にはスキニングとアニメーションは3D API(言語)として標準化した方がいいと思うけどね。 誰かやって。
>>40 >恐らく新しい事をやりたい人間は
>>36-38 みたいな他人を否定したくてしょうがない人間と付き合ってはいけなし、
>アイディアを話すのは害にしかならない。
既存の環境に適応している人間ほど別の環境に移るコストは相対的に大きくなるわけで、
パラダイムを変えるようなアイディアをその環境に適応した人間ばかりの場所に
投げ込んでもいろいろ批判されるのは仕方ないことじゃないかな。
お前コテ外すなよ
>>44 > でもJavaなんてどこまでが言語仕様で、どこまでがライブラリなのか非常に曖昧だよね。
言語仕様ははっきりと定められているはずだが。
http://java.sun.com/docs/books/jls/ 例えば仕様のどこと、ライブラリの何の境界が曖昧?
> ライブラリで全てが解決する派の欠点は、そう都合良く自分の欲しいライブラリがあるとは
> 限らないところだと思う。新規のものは学習コストもそれなりにかかるし。
求めるライブラリが無ければ自作するという選択肢もあるんだが。
新言語を設計するよりは、学習も含めて低コストではないのか?
> 個人的にはスキニングとアニメーションは3D API(言語)として標準化した方がいいと思うけどね。
だからさ、現状「標準化」されていないことで何が不満なのか一つ二つでも例を挙げてくれ。
でないと、じゃあどうやって解決しようかという話に繋がらないだろ。
まさかその例の列挙も含めて全て「誰かやって」なのか。
>>44 ライブラリだと都合良く自分の欲しいライブラリがあるとは限らないというなら
言語にすれば都合良く自分の欲しい物が手に入るの?その理由は?
それをさらに他人にまかせて、自分の思った通りに作ってくれるの?
>>45 いままで出たアイデアの中でOpenGLの代わりに3D API言語を作ろう
というアイデア以外で
目新しいアイデアは無いよ。
パラダイムを変えるようなアイディアってこれの事?
> - レンダリングコマンドが呼び出し順に依存しない
シーングラフ系のライブラリでOK
> - レンダリングデータのメモリ配置、型を考慮する必要がない
レンダリングデータを頂点毎, ピクセル毎に呼び出して設定すればOK
主要な型を自動的に変換してOpenGLへ送ってくれるテンプレート関数を作ればOK
> - レンダリングステートの変化の影響が自明
ちゃんとレンダリングパイプラインを理解していればレンダリングステートの変化の影響は自明だよ。
レンダリングパイプラインが難し過ぎて理解できないなら、理解可能なライブラリを探して使う。
で, 新しい言語を作るメリットは?
ライブラリを作る事に比べてどのようなメリットがあるの?
いや、分かってる事は プログラム以前に数学すらおぼつかない奴が吠えてるって事だろ お前ら人が悪いな… 黙ってニヤニヤしながらROM気取ってるのかw
ものには対象、定義ってのがあるんだよ OpenGLは低レベルのグラフィックAPIって前提で世に出されてるの プログラマ向けなの 低レベルでプログラミング出来ないからって、 プログラムも怪しいゲーム作りたい房が文句言ってるなよ って話 そもそもプログラム(英語とかスキル全般だな)が怪しいからこそ OpenSceneGraphで間に合ってるような内容を、低レベルAPIに求めだすんだろw
車の運転が出来ないくせに、 車の構造に文句言ってF1レーサーになりたいって言ってるようなモン
>>49 >パラダイムを変えるようなアイディアってこれの事?
それは>40のアセンブラ〜Cへの行を受けたものだけど、
API呼び出しが言語になるのなら十分同じ程度の変化だと思う。
ポインタに躓いたことがなくてしかもそれを便利に使ってるような人に、
ポインタのない言語作ろうぜ、とか言っても説得は不可能だと
思うから個別のことには答えられないけど。
OpenGLは低レベルAPIだな。それに比べるとDirectXはかなり高レベル。 OpenGLもせめてDirectX並みに拡張子した方がいい。
出来ない奴って必死だな ポインタが無い言語が出来た理由は ポインタが理解出来ない人の為ではなくて ポインタと言うメモリアドレスを直接さわると バグやセキュリティ低下の原因になるから アセンブラ〜Cの下りも比較になってない お前らが求めるのは、 C言語でプログラム組むのは狂気の沙汰、BVじゃないとって位の話 ようは、OpenGLやC言語の問題を指摘してるんじゃなくて 俺達分からないから簡単にしてって言ってるんだろ
例えば、アセンブラには for文 に相当するものはない でも for文 に相当する処理は頻繁に行う これならアセンブラ->C言語の移行も納得の機能だろう だが、今OpenGLに変わる高級3D言語?を求めてる奴等って OpenGLで出来る規定処理を簡単に、とかって話のレベルじゃないんだよな OpenGLが使っている、3Dの基本的な原理、手法や現在のHWの仕様などなど を問題視してるように見える それは、C言語でプログラミングしてコンパイラでバイナリを作るって言う C言語の大本を問題視してるようなもの それはC言語を辞めて下さいって話で、C言語をどうこうって話ではないだろ つまりOpenGLをどうこうではなくて、OpenGLとはまったく違う3D APIって事だろ 現在のGUPアーキテクチャがどうなってるとか、それをAPIでどう吸収するのか ってそう言う話なら歓迎だが、単にOpenGL難しいよね的な理由のレスはかんべんしてくれw
>>56 それはちょっとおかしい。
3D APIに誰もfor文やその他の制御構文を求めているわけではないと思う。
最初に問題にされていたのは命令の記述順だったり、グローバルなレンダリングステートだったはず。
確かにOpenGLはその辺の仕様が良くないので、OpenGLに変わる何かはアリだと思う。
勝手に誰かが簡単ライブラリを探している事に矮小化するレスを除外して考えないと本質を見失う。
命令の記述順 グローバルなレンダリングステート なおさらw どれもOpenGLを叩く言語上の問題であってOpenGLの問題じゃない さもOpenGLの問題のようにすりかえてるだけで、プログラミング能力がないだけ for文の構文仕様に文句言ってるのも同然 最初に初期化、条件、変化は分かり辛いとかw そもそも、そう言うOpenGLの仕様になってるのは GPUのアーキテクチャや仕様から来てるんだよ その仕様に最低限のシンプルな実装になるようなAPI仕様になってるの それが気に入らないなら、自分でライブラリ作るなりしろ 命令の記述順 グローバルなレンダリングステート これらは十分すぎるほど個人の言語処理のレベルw
命令の記述順 モロに”記述”ってプログラミング言語の問題だって自身で言ってるだろw どう記述しようが、実際の実行(APIコール)は整合がとれている そう組めば言いだけだろ、なんでGLの問題に摩り替えようとしてるんだw グローバルなレンダリングステート APIを使えるようになってから文句言おうな ステートのPOPとPUSHはあるぞw (糞重いけど)
最初に問題ってコレだろ - レンダリングコマンドが呼び出し順に依存しない これは59でも言ってるが、直接API呼び出してる プログラミング能力の無さを棚にあげてる - レンダリングデータのメモリ配置、型を考慮する必要がない これも同じ 配置、型を考慮しないインターフェイスを自作して そのインターフェイスの中で振り分ければ言いだけ 人はそれをライブラリと呼ぶw - レンダリングステートの変化の影響が自明 これも同じ、各ステート値を保存しておいて…って GLにステートをゲットするAPIがあるだろwww メッシュがろうがポリゴンだろうがゲームループの先頭から、 直接API呼んじゃって制御してるようなレベルの素人さんの 個人的レベルの意見に過ぎないだろ、どう見ても
>レンダリングステートの変化の影響が自明 今現在、明白だからOpenGLでレンダリング制御できると思うんだが・・・ やっぱり、どう見てもOpenGLを使いこなせてないだけのような・・・
新言語欲しい派は、「今のOpenGLの何が問題」で、
新言語で「どうやって記述するとそれが解決すると思うか」例を挙げてくれ
その記述をどうコンパイルするかは脇に置いていいから
とりあえず
>>24 の書き方で「効果と影響範囲が自明でない問題」が解決するのなら、
新言語を作るまでもないと俺は思う。
ライブラリを探すどころか、OpenGL でゲームやアプリを作ろうと挑戦してきた人間なら、
たいていは自作しているレベル。
「今のOpenGLの何が問題」 ・俺に使いこなせない これ一択だろ
とりあえず日本人は全力で他人の足を引っ張ることだけは分かった。
OpenGLは プログラムが出来て、3D等の理論、GPUアーキテクチャを理解している人向けのAPI それ以外の人は御遠慮下さいってだけだろ 出来ない君が欲しがるのは自由だが 欲しがって勝手に使った挙句、使いこなせない状況を OpenGLの問題とか言い出すのは違う そんなのが通じるなら、 世の中のプログラム出来ない人間が 全てのプログラム言語は問題がるとか言い出して プログラミングしなくとも好きなバイナリを作れるようにすべき って理屈が通じる事になる
言ってる理屈や理論が否定され、 それを万人が認めるくらい覆す内容を言えてないのに、足を引っ張るって… ほんと最近は、自己中心的なガキか増えたよなw
>>65 だから万人向けのAPI(高級言語)を作ろうという話だったはず。
OpenGLはそのままで、もう1つ別のAPIを定義しようぜって話。
>>67 万人向けのAPIを作る「動機」が不明確
もう少し言うなら、ライブラリで解決しようとしないで、
より困難を伴う新言語の設計で解決しようとする理由が不明確
>>67 そうなら、この"OpenGL"スレから出て行ってくれよw
マサカと思うが
>>17 の言いたいことはこうか
「馬鹿の17にもわかるライブラリよこせやごるぁ」
今年のSIGGRAPHで「馬鹿の17に分かるようなライブラリねーから!」と発表があったのが堪えたんだよ彼は。
API(高級言語)って時点でもう
DirectXやOpenGLはマシン語に相当するからな。 一つの言語でグラフィック界のマシン語にコンパイルできたらかなり便利だろ。 あとGUIもその言語によって環境によって一つにまとめれたらますます便利になるな。
言語というより共通のインターフェイスだな。 C++標準ライブラリーに組み込んでほしいな。
>>73 一つの言語でグラフィック界のマシン語にコンパイルというのは、
グラフィックに関係ない部分(AIロジックなど)も全部その新言語でプログラムするの?
それとも、グラフィック以外はA言語、グラフィックはB言語とかって分けるの?
どちらも違うOpenGlは言語ではなくてライブラリーだから Cなどの言語に相当するものもライブラリーになる
>17 間違えてない。 アセンブラでプログラムを組むことも間違いではない。 お前は何か大きな勘違いしている。
>>76 言ってる意味が分からんな
もしかして「一つの言語でグラフィック界の・・・」の「言語」というのは比喩なのか
面倒だから 解決策述べずにGL批判する奴は ・OpenGLが使えない ・自分では何もできない ・プログラミング・数学ができない ・日本語が分からない としてこのスレを出て行ってもらおう みんなシカトな
>>79 とりあえずレス全部読んでから書き込んでいただけます?
お前は一体誰と戦ってるんだ
glfwってコンテキストスイッチはサポートしてないんだな それって何の意味もなくね
>>81 コンテキストスイッチってマルチウィンドウという意味かな?
だったら次の3.0で対応
コンテキストといえば、glewContextInitもかな 海外のサイト見てもリンカエラー、実装されてねえぞとの報告ばっかり
glewやglfwで現サポートしているマルチスレッドは レンダリングコンテキストの扱いを度外視してるから どの道APIを直接叩かないとダメだよ ライブラリに依存したソースに後からマルチスレッドを実装するとなれば、おそらくソース全修正レベル まあそれが”ライブラリ”の常なんだけどね バージョンアップの度に指向を二転三転させ、開発者の脳と体を爆発させかねないブレを見せてるのはこれくらい 上にも挙がってるけど、GLが嫌われてるのはそういうところかな なまじ汎用性が高いからタチが悪い
初心者の質問ですいません 頂点バッファ+固定機能(OpenGL1.5くらい)で、モデルの透明度を毎フレームを変化させたいのですが こういう時は頂点カラーを変更して頂点バッファを送り直すものなんでしょうか? 頂点カラーはそのままで、もうひとつ任意のアルファ値を乗算させる方法はありますか? つまり glBlendFunc(GL_SRC_ALPHA * GL_CONST_ALPHA, ...); みたいなことはできます?
それ俺も知りたい。頂点カラーってα値だけでいいから あとから一括して乗算できると便利なんだけど。
半透明なテクスチャを貼って乗算する
テクスチャ・・・1x1のテクスチャをアルファ制御用に貼っておいて 透明度が変わるたびにそのテクスチャだけ転送しなおせば 転送量が小さくなるってことでしょうか? でも元々テクスチャを貼ってある場合はどうするです? あ、テクスチャコンバイナ関数・・・とかいうのを使う?
glTexEnvでテクスチャの合成方法を設定できる しかし標準でGL_MODULATEだから特にいじる必要なさそうだな GL_TEXTURE1にアルファだけの1x1テクスチャをバインドして有効にするだけ GL_COMBINE使えば1x1テクスチャ用意する必要もなく定数設定してかけることもできそうだが試したことはない
頂点カラーをテクスチャに焼き付けて頂点カラーやめるのはだめなの?
>>90 その発想はなかったですが、頂点カラー配列を自由に使えるようになったとしても
頂点バッファを毎フレーム送り直すのは変わらなくないですか?
glDisableClientState(GL_COLOR_ARRAY) したら単にデフォルトの白になりますよね?
(・・・あれ?デフォルト色って指定できるんでしょうか?)
>>89 のGL_COMBINEでテクスチャ用意しなくても定数乗算っていうのが一番イメージに近いですが
特殊っぽいので、もしうまくいっても結局グラボによって動かないとかありそうですね・・・
難しそうなのは分かりました。シェーダが使えない場合は素直に頂点バッファ送りなおしの方向で考えます
ありがとうございました
あ、違った。1x1テクスチャの方法はいずれにしろ有効でした 汎用的に実装できるかな・・・ありがとうございました
結局うまい方法は無いってこと?
つまり頂点カラーを毎フレーム送るのがスタンダードなやり方。 (BVOの意味ないじゃん)
頂点バッファで頂点カラー使わないならglColor*だけでできなかったっけ
スレ的には身も蓋もないけど、ピクセルシェーダで書いた方が捗りそうだね
ピクセルシェーダより頂点シェーダで頂点カラーのアルファだけいじるのが効率いいけどな しかし元が固定機能でって話なので
GLSL勉強中なのですが、教えてください。 Shader中で、forループを使うと、非常に遅くなるんですが、繰り返し処理をべた書き(9周程度の処理なので、9行のコードを記載)したところ、サクサクうごきました。そういうもんなんでしょうか? ちなみに、実行環境はiPhone4です。
かつては高コストな処理が潜んでたんだよ。
現在の話をしているときに過去の話をしても意味が無いだろ。 典型的な会話ができない人だな。
何 急に出てきて意味不明なこというやつ。
102 :
デフォルトの名無しさん :2010/12/15(水) 18:17:21
頂点を決める場合は、renderに打ち込むしかないんですか? テキストや別ファイルから読み込む方法ってありませんか?
>>98 GLSLコンパイラによってはループの展開など最適化を自動でしてくれるがiPhoneではそんなものかも
>>102 renderに打ち込むの意味がわからないんだが、
テキストや別ファイルから読み込むコードは自分で書くか
読み込み用のライブラリを使ってくれ
OpenGL画面内でウィンドウとかダイアログを表示して取り扱える オープンソースなライブラリご存知ないでしょうか?
GLUI?
笑った。すげーな Qtの中でOpenGL使うのは普通だけど逆は初めて見た。
面ごとにテクスチャ画像を変えたい場合どうすんの。
面ごとにバインド
自己解決した。 UVマッピングだな。
いや解決してないだろそれ テクスチャー画像変えたかったらバインドし直すしかあるまいて
画像変えたいって言い方はおかしいわな
画像変えるしかないと思ってたんだよ
114 :
104 :2010/12/20(月) 10:17:26
>>105 GLUT系はオープンソースではないので、少し躊躇してしまいました。
#今後趣味として、ライフワーク的に改良するアプリを作りたいなぁと...
>>106 Qtは仕事で触っているのですが、このような使い方ができるとは思いませんでした。
(
>>107 さんと同じ考えでした)
少し研究してみたいと思います。
ありがとうございました。
初心者質問で申し訳ないんですが、OpenGLを使ったゲームを作りたく、1から勉強したいと思っています
OpenGL4.0がリリースされたそうですが、
>>1 の必読書やっとけば鉄板でしょうか?
また、サウンド関連などは何を使えばいいのでしょうか?
正直4.0の内容までわかるってなったら相当時間かかるし、まだまだ全然情報ないから
>>1 だけじゃ無理。とりあえずはシェーダー使えるようになることを目指すべき。
サウンドはOpenALとかかな。
>>116 OpenALですか。ありがとうございます!
DirectXが10・11から大幅に仕様が変わったという話なのですが、
OpenGL4.0は以前のバージョンからの拡張という感じなのですか?
それとも、まだそういった情報はあまり来ていないのでしょうか。
DirectXは10でだいぶ変化して過去の機能切り捨て。11でテッセレーションとDirectCompute機能の追加。 それにそれぞれ対応するのがOpenGL3.xとOpenGL4.0。ちなみに最新版はOpenGL4.1。 でもOpenGLは互換プロファイルってのを使えば過去の機能も一応使える。 これらの習得は君が思ってる以上に長い道だと思うけど頑張って。
>>118 おお・・・。DirectXと同じような形になってるのかぁ・・・。
どっちをやっても労力は一緒っぽいですね・・・。
とりあえずOpenGL3.xあたりから勉強してみます。
OpenGL3.0以降からの学習について書いてあるサイトは皆無だから、まずは固定パイプラインである古典OpenGLから勉強するのが良いよ。慣れてきたらプログラマブルシェーダーに手をつける。
121 :
デフォルトの名無しさん :2010/12/20(月) 19:54:11
122 :
デフォルトの名無しさん :2010/12/20(月) 19:55:14
>>121 よくみたら、仕様書の翻訳か・・・
それにしても高いな
OpenGLの新刊を久しぶりに見た気がするw アホな本出されるより仕様書を訳してくれた方がありがたい。
仕様書系はただの翻訳でも責任が重いからな かなりの分量ある物全体に渡ってチェックの質を高く保つために、 価格も高いんだろ そうだと信じたい
仕様書はパイプラインの順を追って書かれてるから調べ物するにはちょっと使いづらいよな あらためて読むと知らないことが意外にあったりするんだが OpenGL SuperBibleあたりが訳されたら便利そうだけど厚いから翻訳は望めないか
126 :
デフォルトの名無しさん :2010/12/21(火) 12:14:23
最近(?)のnvidiaのOpenGLドライバーにGL/glu.hがなく、 gluBuild2DMipmaps がエラーになります。 これはもうglu.hは使うなということでしょうか? 助けて。
libglu1-mesa-dev パッケージを入れたらgluが使えるようになりました。 何でやねん。 このパッケージを入れるとOpenGLがnvidiaからmesaに変わりそうで入れなかったのですが、 特にそういうこともないようです
俺の英語力が低いだけかもしれんが、OpenGLの仕様書の英語って難しくない? 書いてある事がよくわからないときはExtension Restoryとかどっかのサイトを調べたりするけど。
俺の日本語力が低いだけかもしれんが、仕様書の日本語って難しくない? 書いてある事がよくわからないときは転職サイトを調べたりするけど。
うわ、つまんね
131 :
デフォルトの名無しさん :2010/12/22(水) 06:42:40
スレチならすみません;w; OpenGLのオンラインゲームをSCFH DSFを使ってフルスクリーンでニコ生とか配信したいのですが Windows7だとフレームバッファの違いなのか真っ暗にしか映りません。 XPだとちゃんと配信できるみたいですが・・・ DxtoryというソフトもありますがあまりにもSCFHの仕様が好きすぎてソフトを変えずに配信したいです。 その場合SCFHのプログラムをどのように扱えばいいのか、またコマンド?次第ではWindows7でも 配信できるのか知りたいです。 プログラムとかはまったくの初心者です。 知恵をお借りしたいです。
>>131 SCFH DSFでググレば色々でてくるわけだが・・・
134 :
デフォルトの名無しさん :2010/12/22(水) 07:39:34
>>132 ちょっと覗いてきます!
>>133 色々ぐぐって探しましたがSCFHを使ってWindows7でフルスクリーン配信は無理という結果しか
出てこず頭をかかえておりました。
これはもうSCFHを改良するしかないと思いここに書き込ませていただきました。
スレチっぽかったですね・・すみません;w;
ありがとうございました!
Linux(Ubuntu)環境で動画キャプチャーできるソフトない? どいつもこいつも何故かOpenGL使ってると失敗する。
xvidcap でできたよ (Debian sid + 8600 GT + nvidia の 260.19.21)
glReadPixelsを使って、連続でデスクトップのキャプチャー画像を取り出しているんだが、 これを高速で拡大/縮小したい。 なんかいい方法ない?
138 :
デフォルトの名無しさん :2010/12/24(金) 19:32:39
WindowsでOpenGL使ってるんですが、テクスチャオブジェクトが勝手に 消える(ように見える)現象に悩まされています。 1. CreateWindow()でウィンドウを生成 2. WM_CREATEが発生した時にテクスチャオブジェクトを作成する。 3. 再描画が発生した際(WM_PAINT発生時)に、2で生成しておいた テクスチャオブジェクトをglTexCoord2f()、glVertex2fs()で表示する。 という処理で、3でテクスチャの内容が表示されません。 (テクスチャが表示されるべき箇所に、白くベタ塗りされる) 3の処理が発生する度に、glTexParameteri()で拡大縮小フィルタの設定と、 glTexImage2D()で画像の設定をしてやると、正常に描画されます。 GLUTで同様のコードを書くと、正常に描画されるのですが。 何が悪いんでしょうか。
139 :
デフォルトの名無しさん :2010/12/24(金) 19:45:15
openglでアプリを作っているんですが、図を描くための頂点を設定する際にそれをテキストファイルから読み込むことは可能なのでしょうか? 使っているのはMacのXcodeです。 - (void) render { static const GLfloat squareVertices[] = { -0.5f, -0.5f, 0.5f, -0.5f, -0.5f, 0.5f, 0.5f, 0.5f, }; ↑この『-0.5f, -0.5f,』の部分をテキストファイルから読み込んで表示したいと思っています。
141 :
138 :2010/12/24(金) 20:01:14
よくよく調べてみると、初回のテクスチャ生成時にglGenTextures()が GL_INVALID_OPERATIONを返しているのが直接の原因のようです。 エラーが出るような変な場所で呼んではいないと思うんだけどなあ...
142 :
138 :2010/12/24(金) 20:11:44
glGenTextures()を呼ぶ場所を[3]にして、初回のWM_PAINT発生時にのみ テクスチャオブジェクトを呼ぶようにすることで、テクスチャオブジェクト の描画に成功しました。 気持ち悪いですが、解決ということで。
Windowsは知らないけどGLコンテキストがまだ有効でないところで glGenTextures()を呼んでいるのでは? まれによくある。
>138 CreateWindow()がデバイスコンテキストを作成する前じゃないの?
145 :
144 :2010/12/24(金) 20:59:52
146 :
144 :2010/12/24(金) 21:01:16
途中だった orz
>>85 glLightfv で alpha を変更すれば?
147 :
デフォルトの名無しさん :2010/12/24(金) 22:52:37
>>139 に乗っかるわけじゃないですが、
テキストからの読み込みってどのような方法がありますか?
fopenまたはifstream
149 :
デフォルトの名無しさん :2010/12/24(金) 23:18:52
>>148 やっぱりXcodeでもfopenでいいんですね!
それってプログラムのどの辺に書き込めばいいんですか?
たびたびすいません
失せろカス
151 :
デフォルトの名無しさん :2010/12/24(金) 23:26:38
さーせん
152 :
デフォルトの名無しさん :2010/12/24(金) 23:50:33
スクリーンにテクスチャを描画したいのですが スクリーン座標をうまく得ることができず、 視点移動するとどうしてもおかしくなってしまいます glReadPixels GluUnProject この2つを使ったのですがZ値が奥にいったりしてしまいます・・・ なんかいい方法はありませんでしょうか? よろしくお願いします。m(_ _)m
(0,0)〜(640,480)を指定して2次元っぽく板ポリゴンを描きたいのなら、 投影行列をこう設定して、 glMatrixMode (GL_PROJECTION); glLoadIdentity (); glOrtho (0, 640, 0, 480, -1, 1); 例えば画面全体を覆う板ポリゴンを描くには、 glBegin (GL_TRIANGLE_STRIP); glVertex3f (640,0,0); glVertex3f (640,480,0); glVertex3f (0,0,0); glVertex3f (0,480,0); glEnd () でOK。
155 :
153 :2010/12/27(月) 15:01:10
ありがとうございましたm(_ _)m 無事解決できました。
156 :
デフォルトの名無しさん :2010/12/27(月) 15:22:13
ボタン画像の同じtex_idの画像をx.y座標を変えて複数個表示(透過)する処理を書いているのですが、 この関数(drawTexture)を実行する前に行った↓のglColor4fが1つ目のボタン画像にしか摘要されず 、1つ目のボタン画像以外透過処理されずに出力されてしまいます。 gl.glColor4f(0x10000, 0x10000, 0x10000 , 0.5f); 関係ないかもしれませんが、draw処理の前に一度かならず下記の処理を記述しています。 gl.glColor4x(0x10000, 0x10000, 0x10000, 0x10000); どうかこのボタンすべてに透過処理を行う方法をご教授くださいませんか? drawTexture関数 // テクスチャユニット0番をアクティブに 省略 gl.glBindTexture(GL10.GL_TEXTURE_2D, tex_id); // モデルビュー行列を選択 gl.glMatrixMode(GL10.GL_MODELVIEW); // 現在選択されている行列(モデルビュー行列)に、単位行列をセット gl.glLoadIdentity(); // 行列スタックに現在の行列をプッシュ gl.glPushMatrix(); gl.glTranslatef(x, y, 0); gl.glRotatef(angle, 0.0f, 0.0f, 1.0f); gl.glScalef(scale_x, scale_y, 1.0f); ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4); // square vbb.order(ByteOrder.nativeOrder()); vertexBuffer = vbb.asIntBuffer(); vertexBuffer.put(vertices); vertexBuffer.position(0); gl.glVertexPointer(3, GL10.GL_FIXED, 0, vertexBuffer); gl.glTexCoordPointer(2, GL10.GL_FIXED, 0, IntBuffer.wrap(texCoords)); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); gl.glPopMatrix();
1つ目のボタンを表示してから2つ目のボタンを表示するまでに、誰かがglBlendFunc()を呼んでいる。 そっちも多分理由があって呼んでるはずだからdrawTextureに入ったら改めて自分でglBlendFunc()を呼んでセットし直せばいい。
あとこれ間違えな。 ×:gl.glColor4f(0x10000, 0x10000, 0x10000 , 0.5f); ○:gl.glColor4f(1, 1, 1, 0.5) 1以上は1にクランプされるから平気だけど。
159 :
デフォルトの名無しさん :2010/12/27(月) 18:19:43
>>157 ボタンラベルを描画するクラス内部でglBlendFuncを行っていました
のでラベル表示のループとボタン描画のループを分けることで無事解決しました。
有難うございました。
>>158 参考書通りの記述ですが、結構前から疑問に思いつつ放置していた部分です。
2つも同時に学べることができました。
13000円の参考書を買おうか、この時点で迷っていましたが助かりました!
背景と背景以外を分けたいと思い、depthが1かどうかで分岐するような コードを書いたのですが、明らかに背景の点が背景以外に入る事があります。 調べてみるとdepthが0.99くらいの微妙な数値になっているようで、 透視投影の設定がまずいのかと見返しましたが原因がわかりません。 原因としては何が考えられますでしょうか? もしよろしければご教授ください。
計算機ではよく有ること。 有限桁の浮動小数であらわしている以上微妙な誤差は出る。
>>161 そういうものですか…。
ありがとうございます。他の方法を考えてみます。
163 :
デフォルトの名無しさん :2010/12/28(火) 17:20:06
2枚のテクスチャを画面に並べて表示するプログラムを作成中ですが、 2枚とも並べると画面に入らないため、画像で特に表示させたくない部分は 画像を切り取って表示させようと思っています。 すでにロードしているテクスチャを座標を指定して切り取る方法をご存知の 方、教えて頂けませんでしょうか?
何言ってるかわからん。 glTexCoord2f(s,t)で(s,t)を変えれば終わりだろ。
頂点のテクスチャ座標を調節するだけではいけないのですか?
だからそう言ってるだろ。
かなり既出だと思うんですが探しても分からないんで聞きます。 glDrawArraysをした後、レンダリングした実座標を取りたいんですが何を見ればわかるんでしょうか?
わかりません 必要ならgluProjectなりなんなりで自分で計算してください
実座標ってのは画面での座標ってこと? それなら描画しようとしてる頂点の座標にプロジェクション×モデルビュー行列かけて、さらにビューポートの座標でどこに相当するかを考えればわかると思うけど。 固定機能でならgluProjectとかがあった気がする。
こんにちは。 球とかドーナツ型とかのメッシュを自動生成してくれるライブラリみたいのはないでしょうか? 座標と描画順を吐き出してくれるライブラリがあるとすごくうれしいんですけど。
Direct3Dとかw Cylinder, Sphere, Torusはいけるはず
glutWireTorus とか
>>172 >>173 球はSphereで、ドーナツはTorusなんですね。Ballとかdoughnutで調べてました。
Direct3DでTeapotって関数を見つけたんですけど、さすがに使い道はなさそうですw
OpenGLの仕事が入ってきたのですが、Direct3Dも含めて3Dは初めてだったので困っていました。
ありがとうございます。早速調べてみます。
vrml 2.0のパーサのライブラリのリンクが全然たどれない。。 モーション作るのに他にいいのある?
kinect
GTX480 で glReadPixels がやたら遅くなってる問題を今頃知ったのですが、 なにか回避策ないでしょうか? Quadro買わなきゃダメかな。 あと、GTX580 でこの問題を試した方いますか?
ポイントスプライトにテクスチャ座標って指定できないの?
glmultmatrix等のOPenGLでの行列演算をを使うと 自作の行列計算のプログラムを使うよりも速いのですか?
180 :
デフォルトの名無しさん :2011/01/05(水) 18:45:52
Android実機で作成したアプリケーションを動作確認中ですが OpenGLESで2Dテクスチャを画面サイズに合わせて表示すると白画面に なってテクスチャが表示されません。(エミュレータだと表示可能) すべてのテクスチャを2の累乗にしても駄目でした。 画面サイズに合わせてテクスチャのサイズを変更したのがまずかったのでしょうか? どなたか何故この状態になるのかご教授頂けないでしょうか?
>>179 ユーザが計算した行列をglMultMatrixとかglLoadMatrixで読み込ませるのは遅いらしいと聞いたことはある
OpenGLがそこから逆行列を計算しなければならないためらしい
glTranslateとかglRotateとかglScaleとかで操作するときは逆行列の計算もその逆向きの操作をするだけなので速いということらしい
本当かどうか確認したことはないので正しいのかどうかはわからない
>>180 あまり役に立たないかもしれないがglGetErrorでどこかエラーが発生してないか確認してみては
183 :
デフォルトの名無しさん :2011/01/05(水) 19:15:17
解決しました。 よく確認するとテクスチャが2の累乗画像(正方形)ではありませんでした。
∧∧ ヽ(・ω・)/ ズコー \(.\ ノ 、ハ,,、  ̄
185 :
デフォルトの名無しさん :2011/01/06(木) 16:31:45
2D画面のフェードアウトフェードイン処理を記述しております。 フェードアウト処理は gl.glColor4f(1, 1, 1 , fdInAlphaNum);のfdInAlphaNumを徐々に 増やしていきながら、黒の画像をフレームバッファに描画する形で 出来ていますが、フェードイン処理については黒の画像のアルファ値 徐々に減らしても、黒い画像から一気に描画させたい画像を表示して しまいます。 フェードイン処理をうまくやる方法を教えてください。
186 :
185 :2011/01/06(木) 17:08:15
フレームレートを調整したら解決しました。
∧∧ ヽ(・ω・)/ ズコー \(.\ ノ 、ハ,,、  ̄
基本的にはノート用だね。ローエンド単体GPUより上の性能を低消費電力で提供。 それよりIntelがやっとまともなOpenGLを提供するのがうれしい。
Arrandale が酷すぎた。
初歩的な質問で恐縮ですが C++での配列確保するときに テクスチャの配列を動的に作りたいと思っています。 GLubyte teximg[TEXHEIGHT][TEXWIDTH][4]; vector型などでは大丈夫なのだと思っていますが GLubyteでこのような取り方をするためにはどのような記述になるのでしょうか
GLubyte *p = malloc(4 * TEXWIDTH * TEXHEIGHT);
出来れば3次元で。。。ソースの変更箇所が多く
GLubyte (*teximg)[TEXWIDTH][4] = malloc(4 * TEXWIDTH * TEXHEIGHT); てかOpenGL関係ないじゃないか
お手数かけてしまい申し訳ないです GLubyteでの格納の仕方があるかと思い mallocでCと同じようにやるのですね。ありがとうございました
>>196 (一般的に)GLubyte = unsigned char だぞ。
メモリのとり方なんぞCである以上そんな変わらん。
C++ならnewな。
フォームのりサイズされたときに、回転とかしてたオブジェクトが元に戻ってしまいます 以下抜粋 glViewport(0,0,w,h); //投影変換モード glMatrixMode(GL_PROJECTION); //行列を初期化 glLoadIdentity(); //平行投影 if (w<=h) glOrtho(-nRange,nRange,-nRange*(h/w),nRange*(h/w),-nRange,nRange); else glOrtho(-nRange*(w/h),nRange*(w/h),-nRange,nRange,-nRange,nRange); //モデルビュー変換モード glMatrixMode(GL_MODELVIEW); //行列を初期化 glLoadIdentity(); } glLoadIdentifyの使い方がいまいちよくわかりません どなたかご教示お願いします
それはglLoadIdentityがわからないのではなくて、 行列がわからないのだ
そりゃ最後でMODELVIEW行列を単位行列にしてるんだから当たり前だろう。 そこでMODELVIEW行列をいじる必要はない。
freeglutを使っているんですが、 マウスの左ボタンと右ボタンの同時押し判定ってできますか? VS2010のC++で開発してます
先に押されたほうが離される前にもう一方が押されたら同時押し開始ってことで
どちらかのボタンを押したらタイマー開始して、指定した時間以内にもう片方のボタンが押されたら同時に押されたってことで
204 :
デフォルトの名無しさん :2011/01/14(金) 15:16:11
openglでjpegの読み込みを行おうとしているのですが decode-jpeg.obj : error LNK2001: 外部シンボル "_jpeg_start_decompress" は未解決です。 1>decode-jpeg.obj : error LNK2001: 外部シンボル "_jpeg_stdio_src" は未解決です。 1>decode-jpeg.obj : error LNK2001: 外部シンボル "_jpeg_CreateDecompress" は未解決です。 1>decode-jpeg.obj : error LNK2001: 外部シンボル "_jpeg_destroy_decompress" は未解決です。 1>decode-jpeg.obj : error LNK2001: 外部シンボル "_jpeg_read_header" は未解決です。 1>decode-jpeg.obj : error LNK2001: 外部シンボル "_jpeg_finish_decompress" は未解決です。 1>decode-jpeg.obj : error LNK2001: 外部シンボル "_jpeg_read_scanlines" は未解決です。 1>decode-jpeg.obj : error LNK2001: 外部シンボル "_jpeg_std_error" は未解決です。 fatal error LNK1120: 外部参照 8 が未解決です。 とエラーが出ます jpeg8bのヘッダーのライブラリを入れて行っているのですが、どうすればいいでしょうか? VB2010C++でビルドしました
ヘッダだけじゃなくてソースも入れないとだめなんじゃ?
一瞬VBで使おうとしてるのかと思った
>>204 そりゃlibjpeg.aがリンクできてない。
もとからリンクするように指定してないのか、見つけられないか。
物体と球の衝突シミュレーションをやっているんだが、なかなか反射がうまくいかない 例えば中心(0,0,0)の立方体をgluSolidcube()で作ったとき、この立方体のどこに球が当たっても反射するようにするには球の座標を(x,y,z)として if( x≧-1 && x≦1 && y≧-1 && y≦1 && z≧-1 && z≦1) この条件だとどうしてだめなんでしょうか?
半径は?
何がやりたいのかいまいちわからんが、 A:球の中心 B:衝突地点 C:衝突地点の法線 A-Bで入射ベクトルを計算してCを軸とした反射ベクトルを計算すればいい。
>>209 仮に半径r=0.5とすると、衝突判定に用いる球の座標には半径分(0.5)加算しています
球はgluSolidSphere()で描画しています
>>210 球が物体に接触しても反射しないで物体を完全に貫いてしまったり、一部の面でのみ跳ねかえったりして不思議に思い質問しました
OpenGL全然関係ないような気がするけど
>>211 実際には
if( x≧-1-r && x≦1+r && y≧-1-r && y≦1+r && z≧-1-r && z≦1+r)
みたいにしてるってことですかな。で、当たってたら球の速度の壁の法線方向を反転。
一度跳ね返ったら、干渉しなくなるまで次の反射の処理を行わないみたいな条件入れないとだめ。
とか。
まあ何をどう計算してるかわからないので原因もはっきりしないな。
214 :
デフォルトの名無しさん :2011/01/15(土) 01:12:52
>>207 libjpeg.aとはなんでしょうか?
jpeg.libとヘッダー各種はプロジェクトのプロパティ設定で指定しているのですが違うのでしょうか?
>>214 jpeg.libだけだと足りてないのでは?
dumpbin /symbols で、_jpeg_start_decompress他がjpeg.libに含まれてるか要確認。
>>208 > if( x≧-1 && x≦1 && y≧-1 && y≦1 && z≧-1 && z≦1)
これ立方体だろ?
立方体の中に球の中心が入り込んだら反射にしてるんじゃね
>>208 球と立方体の衝突はそこそこめんどくさい
衝突判定でググってみれば
219 :
208 :2011/01/15(土) 11:57:57
もっと勉強してよく考えることにします レスくれた方ありがとうございました
GLUIに詳しい方いらっしゃいますか?
いませんさようなら
>>219 まじめに衝突だけ勉強するなら分厚い本とかあるけど
とりあえずなら「実例で学ぶゲーム3D数学」って本がオススメ
色んなことがひと通り書いてある
224 :
201 :2011/01/17(月) 15:15:36
GL_LINE_STRIPで線が描写されたりされなかったりするんですが、 (起動して描写される回とされない回がある)(頂点はglVertex3d) GeForceでなくQuadroじゃないとダメって事なんでしょうか? Qtでハードウェアアクセラレーションを有効にするにはどうすればいいか わからないので教えてください。
225です。 GL_LINE_STRIPの件については自己解決しました。
227 :
225 :2011/01/19(水) 14:08:33
と思ったらやっぱり表示されなくなる事がありました。 CAD作成中なんですけど 線は円柱で書いた方が良いんでしょうかね?
GeForceでGL_LINE_STRIPは使えます。 描画されないことがあるのなら、それは描画しないことがあるプログラムだからです。 デバッグしてください
プログラムに問題がありそうな気がするけど、これだけの情報からではなあ。 あとラインとかポイントは自体不明瞭な動作をすることがあるし、よくわからん。
230 :
225 :2011/01/19(水) 21:57:44
線の生成過程に領域外アクセスが含まれており、うまくいくときとうまくいかない時があった模様です。失礼致しました。 以下参考 配列をvectorにした所、領域外アクセスを検出できました。 C言語による最新アルゴリズム辞典のspline.cのmaketable関数中にありました。
半年以上悩んでいる問題があるので質問します。 OpneGLでV同期を取る方法ですが、 SwapBuffers()を高優先度スレッドで呼ぶようにし、 メインスレッドをシグナルで起こすように実装しています。 なぜかSwapBuffers()がV同期待ちをしてくれず、 高優先度スレッド側でsleep()を呼ばないと、 メインスレッドにCPU時間が回らない状況です。 高優先度スレッドでV同期&スワップバッファが終わった後、 メインスレッド起動、メインスレッドの仕事が終わったら V待ち関数(条件変数待ち)でメインスレッドをスリープし、 あまった時間を低優先度スレッドに渡すようなフレームワークを考えています。 グラフィックボードはATI Radeon HD4550です。 wglSwapIntervalEXT()をつかってもV同期が取れません。 PCのOpenGLの設定も、常にV同期待ちを行うように設定しています。 原因、解決方法がわかるか方がいたらお願いします。
OpenGLはスレッドセーフではないから
Geforceだと、glMap2*()のuorderかvorderが10超えるとINVALID_VALUEになるのはなんでなんだろな MAX_EVAL_ORDERは4000程なのに。 Radeonだとすんなり通る 今時glMap2*()なんて使ってる方が悪いのか
そもそも、Radeonの結果が正しいのを確認して言ってるの? ustrideやvstride等の指定と、uorderかvorderとその配列の内容が間違っていて バッファオーバーランしてるのを、ATIのドライバがエラー出さずに動いてるだけかも知れないだろ 因みに、glMap2*()のINVALID_VALUEの内容はもっと他にあるからね GL_INVALID_ENUM is generated if target is not an accepted value. GL_INVALID_VALUE is generated if u1 is equal to u2, or if v1 is equal to v2. GL_INVALID_VALUE is generated if either ustride or vstride is less than the number of values in a control point. GL_INVALID_VALUE is generated if either uorder or vorder is less than 1 or greater than the return value of GL_MAX_EVAL_ORDER. GL_INVALID_OPERATION is generated if glMap2 is executed between the execution of glBegin and the corresponding execution of glEnd. GL_INVALID_OPERATION is generated if glMap2 is called and the value of GL_ACTIVE_TEXTURE is not GL_TEXTURE0.
>>231 OpenGLの初期化を行ったスレッド以外ではGL関数を使わない設計にする
普通はメインスレッドで初期化を行って、メインスレッドでしかGL関数を使わない
他のスレッドは、GL関数を使わない処理や何かに回す
>>234 レスありがとう
Radeonではもっともらしい結果が出力されたので、Geforceドライバが悪いと思い込んでいました。
よく考えたら、glMap2*()なんて枯れたコマンドが正しく動作しないはずがないですよね。
もっとよくテストしてみます。ありがとう。
>>236 >glMap2*()なんて枯れたコマンドが正しく動作しないはずがないですよね。
どうなんだろう、そのコマンドは調べてないけど
3.0以降は2.0以下の機能を切り捨てるって話じゃなかったっけ?>GPUベンダ
>>237 glMap2*()は確かにdeprecatedみたいだったので、compatibility profileで動かせば
サポートされると思って使っていたんですが、違うのかな。
しかしどちらにしろ、引数を変えるとエラーが出るという状態なので機能切り捨てのせいではないんじゃないかと思います。
glMapってglEval呼ぶ度に計算(CPU側で)してそうだから、 コントロールポイントが常に変わるようでなければ 自分で計算した結果をバッファに置いた方が速いと思うよ。 それかシェーダー組むか。 glutSolidTeapotが重いのもそのせいだと思う。
>>235 回答ありがとうございます。
>普通はメインスレッドで初期化を行って、メインスレッドでしかGL関数を使わない
SwapBuffers()の呼び出しをメインスレッドで実行するようにしても、
SwapBuffers()がV同期してくれません。
(すべてのGL関数はメインスレッドからコール)
何か根本的に間違ってそうなので、実装を再確認してみます。
WebGL対応サイトがfirefox4やchromeのbeta9入れても 古いノートパソコンだと動いてくれない ビデオカードの制約あるの?
少なくともシェーダー要るぞ。 正確なバージョンは知らん。
firefox3のままプラグイン入れるだけでwebgl動かす方法ないでしょうか 管理者権限ないパソコンで動かしたい
>>240 PFD_DOUBLEBUFFERで作ってglDrawBuffer(GL_BACK)はしてる・・よね?
でもRADEONは知らないけど、うちのオンボードチップだとSwapBuffers()でV同期しない
同じコードでGeForceならV同期する。ドライバによるんだと思ってたんだが
wglSwapIntervalEXT()って知らなかったので今度試してみるトン
電機メーカーは結構参加してるのに任天堂ってkhronos groupに入ってなかったんだな
そういうグループに入るメリットって何なの?
策定中の仕様に文句言えるとか 枯れた技術選ぶ企業には不要
>>247 たとえ1社が文句言ったって、普通は採用されないだろ
グループ内の多数の企業が同意して、しかも更に細かい差違を吸収した折衷案が
グループの総意として仕様に盛り込まれるんだろ?
「グループ内の多数の会社が同意して」という案は、
グループに入っていない多くの企業もたいていは求めてるものじゃないの?
文句を言えるくらいじゃメリットは分らんな
でもどこも参加しなかったらkhronos自体が成り立たないし 会社でかいくせにコミュニティに貢献しないケチって思われるデメリットはあるかも
オープンな規格を使うのは自分のところだけでやっていくと効率悪い場合だけど 任天堂はグラフィックスに関しては必要ないんじゃね プラットフォームはそう頻繁に変わらないしデベロッパはいるしな
VisualStduio2010のC++でfreeglutを使っているんですが、
キーボードの同時押し判定のやり方がよくわかりません。
ttp://d.hatena.ne.jp/yumeno/20071218 このページによると、freeglutではキー同時判定ができると
書いてはあるのですが、具体的な方法が載ってませんでした
glutKeyboardFunc()を使うと思うんですが、誰か知りませんか?
freeglutは知らないけど、普通のglutでもglutKeyboardUpFunc使えば同時押し判定できるけど
やり方は
>>202-203 と同じで
つかそのブログの人今でもブログ続けてるみたいだし、直接コメントでも付けて聞けばいいんじゃないの?
管理者権限ないlinuxでWebGL動かしたい firefo4動かすまではできた firefoxのabout:configで libGL.soまでのパス通したらいいらしいんだけど なんとかmesaなんとか という関数がねえ というエラーを吐いて何も表示されない 多分mesaなんとか.soというのは自力make installしないといけないんだろうけど どのファイルからmakeしたらいいのかわからない
254 :
251 :2011/01/28(金) 19:44:24
>>252 glutKeyboardUpFuncは知りませんでした。
さっそく使ってみます。ありがとうございました。
255 :
デフォルトの名無しさん :2011/01/28(金) 21:50:58
glWindowPos2i() で文字を描こうと思うですが、 error: ‘glWindowPos2i’ was not declared in this scope と言われてコンパイルできません。 gl.hとglut.hをインクルードしてますが、他に何をインクルードすればいいでしょうか。
>>255 openGL1.4 のextensionなので、自分でどうにかするか、もしくはglewとかの便利ライブラリを使ったりする
257 :
255 :2011/01/28(金) 22:39:17
ありがとうございます。 それでやってみます。
258 :
255 :2011/01/28(金) 23:11:26
しっかしOpenGL1.4の機能でさえextensionが必要とか、 狂ってるとしか思えないのですが・・・・もう少し何とかならないのか
そろそろOpenGL3のcore profileの関数を拡張機能を使わずに使えるようにして貰わないと4k introの作成に支障がでる. 大量の拡張機能の関数のポインタをゲットするのに関数名を文字列リテラルとしてプログラムに埋め込まないといけない. それ用のgl3.hとopengl3.libとドライバをnVidiaが配布してくれれば・・・. しかしそれ以外に現在の拡張機能を拡張機能でないようにする利点はあるだろうか。
>>243 firefoxってportable版だと管理者権限いらんのとちゃうか?
firefox4版があるのかは知らんが。
ちゃんと読んではないが、mesa3d.orgに書いてあるインストール方法ではだめなのか?
263 :
デフォルトの名無しさん :2011/02/04(金) 23:24:00
半年悩むくらいなら、nvidiaのフォーラムとかで聞いたほうが早い
FBOをいじっているのですが フレームバッファとレンダーバッファの違いがよくわかりません。 レンダーバッファとはどういうものなのですか? またどのような場面で活用するんでしょうか? よろしくお願いします。
レンダーバッファは対象 フレームバッファはコンテナ
床井先生のところによると >フレームバッファオブジェクトはカラーバッファやデプスバッファなど, いくつかのバッファの集合体 (collection) です. >カラーバッファにレンダリングされた画像を後でテクスチャとして使うので, カラーバッファにはテクスチャを割り当てます. >デプスバッファは隠面消去処理だけのために使う (内容をテクスチャとして参照しない) ので, レンダーバッファを割り当てます.
レスありがとうございます!
>>265 余計わからなくなりました・・・。orz
>>266 両方フレームバッファに割り当てていましたが
>(内容をテクスチャとして参照しない)
とのことで
「テクスチャとして再利用しない場合は
レンダーバッファの方が効率いいよ!」
みたいな感じなのでしょうか?
フレームバッファーオブジェクトはレンダリングする先(カラーバッファー)とデプスバッファー(+ステンシルバッファー)を持つ。 で、カラーバッファーとデプスバッファーはその用途に応じて、書き込み先をレンダーバッファーもしくはテクスチャーを指定できる。 描画結果をテクスチャーとして使う予定があるなら、もちろん後者のほうが手軽。 でも名前からもわかるようにレンダーバッファーは描画専用に用意されているものだから、マルチサンプルが使えたり比較的高パフォーマンス?っていう利点がある。
>>268 なるほど!
わかりやすい説明ありがとうございます!
>マルチサンプルが使えたり
この部分を知らなかったのでもう少し調べてみようと思います。
パフォーマンス以外にも何か色々と使えそうな気がします。
質問です。 メモリリークがあったので調べていたら 以下のところで発生していました。 glGenTextures( 3, tex ); で、以下のように書き直したら発生しなくなりました。 if( tex [0] ) glDeleteTextures( 3, tex ); glGenTextures( 3, tex ); glGenTexturesはGPU上にこれから確保するメモリ領域に IDをつけて返すものだと思っていたのですが メインメモリにも何か領域を確保していたりするのでしょうか? よろしくお願いします。
tex 配列のサイズは?
固定値3です。
よく分からないけどglDeleteTexturesしないで何回もglGenTexturesしたら メモリーリークしてたってこと?それはそうなるんじゃない・・・? VRAM確保してもどっかにテクスチャ保存しとかないとアプリ切り替えでVRAM破棄された時に困りそうだし
テクスチャの実体はファイルから読み込んで VRAMに転送したあと破棄しています。 リークしているのはここ(ファイル読み込み)かな?と思って調べてみても 特に問題が見当たらず、問題を切り分けていくと どうやらglGenTexturesの部分でリークしていました。 自分の認識ではglGenTexturesの段階では VRAM内へのID(ハンドル)だけの発行で メインメモリにはテクスチャの領域等は 何も確保していないものだと思っています。 VRAMが溢れるならともかく何故メインメモリが?と不審に思い こちらに質問させて頂きました。 XP/VC2010です。
>>274 IDとテクスチャーの関連付けの情報がメインメモリ上にあるのではないか、
そして、同じIDにたいしてglGenTexturesを繰り返すことによって、
破棄されない情報が溜まり続ける、とエスパーしてみる。
glGenTexturesした時点で違うIDになるのでは・・・w 多分、glGenTexturesで確保したら必ずglDeleteTexturesするってことで問題はないんだけど、 何か自分の信念と違う動きをするのでGLの内部の実装が気になるってことじゃないかなあ 内部実装は分からないけど、もし1つのアプリがVRAMを専有しっぱなしだと他のアプリがVRAM使えなくなるので WindowsのglGenTexturesはVRAM領域だけじゃなく一時的に解放するための管理領域も確保すると思うよ WindowsのGLはDirectXのラッパーのはずだからDirectXのデバイスロスト関係を調べてもらった方がよい気が
>>276 あ、ごめん。うろ覚えで適当言ったけどwglがDirectXのラッパー?ってのは間違いかもしんない
なんかどっかでそういう話を見た気がしただけ
専用の単体プロジェクトを作ってテストしました。 どうやらメモリのリークを発生させるには glGenTexturesだけでなくglBindTextureも必要なようです。 ID確保前にglDeleteTexturesを行えばリークは発生しません。 (↓もりもりメモリが食われていくのでテストする際は注意してください。) void test::update(void) { for( unsigned i = 0; i < 100000; i++ ) { for( unsigned j = 0; j < 3; j++ ) { glGenTextures( 3, this->m_textureId ); glBindTexture( GL_TEXTURE_2D, this->m_textureId[j] ); } } } glBindTextureが現況だとすると たしかにメインメモリ上にラッパというか IDとHWとの関連付けの情報を格納しているかもしれませんね。
おいおい、 >for( unsigned j = 0; j < 3; j++ ) このループの中で >glGenTextures( 3, this->m_textureId ); すれば、都合9つのテクスチャIDを取得しようとしてるんだがw こうするべき glGenTextures( 3, this->m_textureId ); for( unsigned j = 0; j < 3; j++ ) { glBindTexture( GL_TEXTURE_2D, this->m_textureId[j] );
そこはどうでもいいんじゃね? お行儀悪いのは確かだが。
というかdeleteしてないんだから当然だろ。 これをメモリリークとは言わん。出直してこい。
>>281 デリートし忘れ=メモリリークじゃないの?
意図せず尿が出るのが「お漏らし」、 意図して尿を出すのが「小便」。 あとはわかるな?
>>283 おむつに連続でおしっこすると漏れてしまうんですが
吸水できなくなって溢れるならともかく何故横漏れが?
>>283 ライブラリがバグのために漏らしてしまうのも、
ライブラリ使用者が意図せずして(不注意で)漏らすのも、
どちらも同じメモリリークだと思ってた
この場合は意図して漏らしてるんだから「小便」だろう。
どーでもいいが下品だな もう少しお上品に喩えてくれないか
要件にない機能を「バグ見つけたよ」とか言われると、ちょっとカチンとくるよな
バグあったから消しといたよ
OpenGL ESだけど良いですか? glTexParamter()でGL_CLAMP_TO_BORDERがないのですが、 同様の機能を実装するにはどうすればいいですか? テクスチャーで(s,t)を[0,1]以外の領域を指定された場合、境界色を返せればいいです。
freeglutでNURBS曲面を描こうとしている者です。 VC2010で開発してます。 glEnable(GL_AUTO_NORMAL); gluBeginSurface( theNurb ); gluNurbsSurface( theNurb, Nu+4, U, Nv+4, V, 3, 3*Nu, P, 4, 4, GL_MAP2_VERTEX_3 ); gluEndSurface( theNurb ); glDisable(GL_AUTO_NORMAL); って感じに書いたら、曲面を描画することはできたんですが、 法線が反対向きみたいで、曲面が暗くなってしまいます。 GL_AUTO_NORMALで計算した法線の向きを逆向きにするにはどうすればいいでしょうか?
glFrontFace(GL_CCW); でどう?
294 :
291 :2011/02/23(水) 11:06:31.17
Clamp to Edgeじゃいかんの?まぁClamp to Borderとは意味は違うけど。 テクスチャーの最外周を目的の境界色に塗っておけば代用は効きそう。 まぁ2次元的に扱うとかの理由でピクセル単位でテクスチャー表示しないといけない場合とかは、2のべき乗テクスチャーを諦めないといけなくなるから、 パフォーマンスとして好ましくないけど。
それじゃBORDERの代用にはならないでしょ。 元の画像width, heightに1ピクセル継ぎ足してwidth+1, height+1にすればいいけど、もっとめんどくさい。 プログラマブルシェーダーが使える2.0系列ならやりようはあるけど、 1.0系列ならあきらめるしか。
だからそういってるじゃん。
複合したアフィン変換の行列が 以下のよう定義されている場合 回転成分とスケーリングってどの 値を見ると判別できるのでしょうか? 0.866 1.0 0.0 -0.5 1.73 0.0 5 0 1
スケーリングとトランスレーション、ローテーションとトランスレーションの組み合わせならぱっと判るだろうけど、その組み合わせはぱっと見で読み取るのは難しいんじゃないか。
一番右の列の数値それであってます? 直行してないと難しいんじゃないでしょうか
glGenBuffers()で作った頂点オブジェクトに付ける変数名ってどうしてますか? vbo_name, vbo_posとかつけてましたが、もっといい名前がありそうで... くだらない質問ですみません。
glLoadMatrixdって内部でどんな実装で 処理しているの関数なのですか?
もしglLoadMatrixの単なる使い方を聞いてるのでなければ MesaっていうMITライセンスのOpenGL実装がありますよ
独立した2つのカメラの位置の 丁度中点となる新しい位置をOpenGLで 簡単に求める関数ってありますか?
足して割ればいいんじゃね?
(x1+x2)/2, (y1+y2)/2, (z1+z2)/2
それでよかったのか!?
w
位置だけじゃなくて視線方向や上の方向も半分にする方法も要るんじゃ・・・
クォータニオンってすごく難しくて 自分でアルゴリズム作れないのですが OpenGLに関数ないですか?
数学系でOpenGLならglmがよさげ
>>311 クォータニオン扱うライブラリのソースみて実装すればいい。使うだけなら簡単だろう。
だからOpenGLはグラフィックライブラリで、 数学ライブラリじゃないっつーの
半端な俺は参考書見ながら実装しようとしたけれど 行列の計算の仕方が参考書と違ってて断念したorz
316 :
デフォルトの名無しさん :2011/02/28(月) 02:22:25.89
>何も起こりませんでした パルプンテでも唱えたような物言いだな。
最低、ウィンドウが表示されたとか、エラーメッセージは出たか、 とか書かないとエスパー募集にしかならない。
319 :
デフォルトの名無しさん :2011/02/28(月) 21:47:10.69
テキストファイルにtest.pyって名前で保存してダブルクリックしても
何も起こりませんでした。
↓このページのこのコードをコピーして
http://www.not-enough.org/abe/manual/program-aa08/pyopengl1.html #!/usr/bin/python
from OpenGL.GL import *
from OpenGL.GLUT import *
def draw():
glClearColor(1.0, 0.0, 0.0, 0.0)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glFlush()
glutSwapBuffers()
glutInit(sys.argv)
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH)
glutInitWindowSize(320, 240)
glutCreateWindow("PyOpenGL 1")
glutDisplayFunc(draw)
glutMainLoop()
>>317-318 EclipseのPyDevで実行するとこんなエラーが出ました
Traceback (most recent call last):
File "C:\Users\username\workspace\PyOpenGL\src\PyOpenGL1.py", line 3, in <module>
from OpenGL.GL import *
ImportError: No module named OpenGL.GL
2つの異なる座標系A、Bをカメラから見たどちらかの 座標系に統一する場合 Aの逆行列 x Bの行列 x GL_PROJECTION行列 で求めることが可能ですか?
>>319 ImportError: No module named OpenGL.GL
OpenGL.GLという名前のモジュールがありません
知らんけどそのページの頭に
>PyOpenGL は、Python で OpenGL を使用するためのモジュールです。
って書いてあんだからPyOpenGLってのが必要なんじゃねの?
PyOpenGLでググれ
課題の季節か?
>>320 「Aの逆行列」とは、どの座標系で定義されたベクトルを
どの座標系で定義されたベクトルに変換するための行列か?
「Bの行列」とは、どの座標系で定義されたベクトルを
どの座標系で定義されたベクトルに変換するための行列か?
「GL_PROJECTION行列」とは、どの座標系で定義されたベクトルを
どの座標系で定義されたベクトルに変換するための行列か?
それぞれ、「座標系X -> 座標系Y」というフォーマットで説明してみてくれ
そして、結局のところ「どの座標系で定義されたベクトルを
どの座標系で定義されたベクトルに変換したいのか」を
同じフォーマットで説明してみてくれ
でなければ、それが [Aの逆行列 x Bの行列 x GL_PROJECTION行列] で求められるのか
答えようがない
>>311 床井さんのところのサンプルに、クォータニオン使ったやつがあったはず。
> 2つの異なる座標系A、Bをカメラから見たどちらかの > 座標系に統一する場合 専門用語の使い方がおかしいから誰も真意を理解できない。 座標系はA,B,カメラの3つだと思う。 変換行列とはある座標系(X)からある座標系(Y)に変換するもの。 その逆行列なら(Y)から(X)へ変換する。あとは自分で考えろ。
326 :
デフォルトの名無しさん :2011/03/03(木) 18:07:25.06
#include <GL/gl.h> でOpenGLを読み込んだ時と、 #iclude <GLES/gl.h> でOpenGL ESを読み込んだ時で処理を変えたいのですが、 必ず定義されている #ifdef で使える文字列とかあったら教えてください。
今から学び始める場合、GLSLなども最初から考慮した方がいい? それとも最初の内は見なかったことにして1.xの機能に絞って学んだ方がわかりやすい?
後者の方が良いよ、絶対。
分かった。ありがとう
Win9xにプリインストールされてるのって opengl32.dllだけ? glu.dllとかglu32.dllは手動だっけ?
いやopengl32.dllもないだろ。 ソフトウェアレンダー?
98にはあるようだけど95はMicrosoftからダウンロードしないと駄目っぽい
>>331 OpenGLの文字が荒ぶるスクリーンセイバーってNT系だけでしたっけ
>>332 なるほどどうもです
OpenGLで気に入らないのは右手座標系なこと 左手座標系なら左手でフレミングの法則の手を作りながら イメージ沸かして右手でコーディングできるのに 右手座標系ではそれが出来ない!非常に残念です。 あと右手座標系はZ軸が自分に向かう方が大きい値なのが許せない 観測者視点になっていなくて気持ち悪い。 どんな経緯で右手座標系に決めちゃったんでしょうか。詳しい方います?
単純に数学で扱ってるのが右手系だからだろ。
別に左手座標系で組んだっていいんですよ? 変換行列で最後に座標系を反転するようにして辻褄合わせとけば問題ないはず 経緯は知りません
>>2 >JavaScriptから --> ???
JavaScriptから --> WebGL
丁度 WebGL 1.0 のリリースが発表されましたが、Firefox 4.0, Chrome 9,
Safari nightly, Opera preview をインストールすれば直ぐ使えてラクチンです。
これから OpenGL を勉強したい人も、ブラウザで簡単に試せるので良いかも。
お勉強サイトは↓ここがお勧め。
http://learningwebgl.com/blog/?page_id=1217 説明が丁寧なので、JavaScript, WebGL, OpenGL, 三角関数、シェーダー、
全てに於いて初心者に毛が生えた程度の自分でも楽しく理解出来ました。
>>334 殆どの物理や数学の本だと右手座標系だったと思うので
その習慣がそのままOpenGLに採用されただけじゃない?
射影行列のどっかを変えれば左手系になる。
そういえばWebCLというのも出てくるらしいが・・・
>>338 > そういえばWebCLというのも出てくるらしいが・・・
ちょ・・・ マジで?
>左手座標系なら左手でフレミングの法則の手を作りながら >イメージ沸かして右手でコーディングできるのに かわいい
美少女が、モデル表示しながら、 えっと、えっと。。。OpenGLは右手座標系だから。。。 ってコーディングしてるんだぜ。 そりゃ、かわいいだろ。
>>341 美少女の、モデル表示しながら、
えっと、えっと。。。OpenGLは右手座標系だから。。。
ってコーディングしてるんだぜ。
そりゃ、かわいいだろ。
こうだろ?
>>342 うたがって悪かった。
いやー、しかし、時代はそんな方向を向いているのか。
びっくりした。
美少女読者モデルが3Dプログラミングを始めたと聞いて
長野まゆみ的美少年を 3D で動かすことが俺の夢
かむぱねるら
Tony絵が出せるシェーダー作ろうぜ。
ハナハルじゃなきゃヤダヤダー
ていうかキーボード打つのに両手使うからどっちでも一緒だと思うんだがw あと、中指x、人差し指y、親指zとすれば、左手でも右手系は考えられるぞw
>>350 のいうとおりだし、「右手」座標系、「左手」座標系っていうネーミングセンスってどうなんだろうね。
Right Top Far Coordinate、略してRTFCとかのほうが分かりやすいと思うんだが。
RTFC は右手、左手、どっちの座標系? Z方向を地面からの高さ(上)と捉えて、 右をX、手前をYとする左手座標系を考えるときもある 同じく高さ方向をZと捉えて、 奥をYとする右手座標系も考えるときもある 何を右とし、何を上とするかなどは一概に言えないから、 Right Top Far Coordinate の方が分りにくいよ
353 :
352 :2011/03/11(金) 07:32:53.28
>>352 なんかあんまり良い反論の仕方じゃなかった
私は RTFC は直感的に分りにくかったことを伝えたかったんだが、
ごめん、忘れてくれ
日本語で質問できるOpenGLのメーリングリストって無いですかね? 多分ないと思うのですが、ないとうのが信じられません。
355 :
352 :2011/03/17(木) 20:52:33.99
「OpenGL メーリングリスト」でググると Yahoo のが出てくるんだけど、これは違うの?
356 :
354 :2011/03/17(木) 21:06:56.94
そこは既に死んでいます。 ものすごい勢いでスパムしか流れてないのと、 参加するのにオーナー承認が必要にもかかわらず ずっと(多分オーナーが管理を放棄していて)承認されません。
ひどす
359 :
354 :2011/03/18(金) 11:08:17.67
えーっと、作らないか? 2ch掲示板だけだとまずいだろう
いらね
あほす
よくわからんけどメーリングリストってめんどくさそう まあ2chはしょっちゅう規制するのが困るが
OpenGLはオワコンなんです。 でもオワコン好きなのでこれからはじめようと思う。 まずは立方体を動かしたりカメラ動かしたりとかやります。 どうもよろしくおねがいします。
メーリングリストはメールがウザイ
むしろOpenGLは最近始まってる。
OpenGL1.2やります
Androidあるし、これからうなぎ上りじゃね? いい加減レガシーな仕様を作り直して欲しいが。
368 :
デフォルトの名無しさん :2011/03/18(金) 23:12:16.39
D3D使ってるのはWindowsだけ。 D3Dに似た別の何かは360でも使ってるが。 OpenGL使ってるのは PS3/PSP Wii/DS iphone/Mac Linux その他組み込み OpenGLのほうが勢力は上だ
OpenGLではAPIレベルでやってくれるからジオメトリインスタンシングしなくてもいいって聞いたんですけど本当ですか?
Qtのオープンソース版のソースをでnmakeしたら、ノートンがウイルスを検知しましたよ。 自分の環境: Microsoft Windows XP SP3、Microsoft Visual C++ 2005 見つかったウイルス: imageanalyzer.exe (Suspicious.Cloud.5) %QTDIR%\examples\webkit\imageanalyzer\release\imageanalyzer.exe 脅威の種類: ヒューリスティックウイルス検出。マルウェアヒューリスティックに基づく脅威の検出。 ノートンの処理: imageanalyzer.exe を削除 これって必要なんですか?
レガシー設計を変えるといったってプロファイルで旧式もサポートしないと ソフトウェア開発者はなかなか移行しないし そうなるとハイリスクだからGPUベンダーも実装しない かといってプロファイルにすればいいかというと 設計が見直されれば見直されるほど GPUベンダーはOpenGLという名を持つ複数のAPIを サポートするような状態になる気がするんだが
つまり詰んでるのか
>>373 ハゲ同
よし俺達で別のAPIを作ろうぜ
スクリーン座標→ワールド座標への変換のサンプルってどっかに転がってない?
377 :
デフォルトの名無しさん :2011/03/20(日) 17:57:13.68
>>376 ワールド→スクリーン変換をglProjection と glLookat でやってるなら
まずそれを自前で作ってから逆行列にするとスクリーン→ワールド変換できるとおも
まあ面倒だよね
gluUnProject とかそこらだろ
>>378 gluProjectでいけたサンクス。
ローカル座標でも実装できた。
>>375 ネタなのを承知で言うがそれはもっとない
RSS 1.0とRSS 2.0とAtomの件や世の中にいくつ存在するか分からないGUIツールキットでも分かるけど
いくら既存の問題点を解決するとしても新しい設計の競合は選択肢が増えるだけに終わることが多い
初めからできるだけ正しくやれたら一番いいんだけどな
初めてOpenGL使った時操作対象のオブジェクトが引数のどこにもなくて困惑した 何もかもグローバルだと分かったときOpenGLの設計者は頭おかしいんだと思った
あるある。 C言語での利便性やらを考えたら、副作用地獄のあの形になるのは理解できるが。 C++クラスを使いまくってAPIを一新したら、色々美味しくなるんじゃないのかねぇ、とは思うわ。
ES対応(スマートフォン等)を含む全対応ハードウェアが 現PCと同じくらいの性能になったらGLも一新されそうだな
私女子校生だけど携帯電話向けにまったく新しいAPIを定義したほうがいいと思うの。 OpenGL ESなんてやめようぜ。誰が得するんだ
俺も女子高生だけど、まったく新しいAPIは現実的に無理っぽいし、 既存の API に対する使いやすいラッパーを考えた方がいいと思うぜ そういえば昔、同じような話をここで見た記憶があるわね
使いこなせないor分からない→新しい言語or新しいAPI
OpenGLでモデルデータ読み込めねえええええ パーサがミスってるのか頂点配列構造体のアラインメントのせいなのか・・
∧_∧ (´・ω・) 知らんがな ノ^ y丶 ヽ_ノ==|ノ / || """~""""""~"""~"""~"
>>388 じゃあうちの話聞いてよ
GLUT使ったアプリの閉じるボタンでウインドウ閉じたあと
しばらくしてPCの調子悪いなと思ってプロセス見たらプロセスが残ってて
1.5GBメモリリークしてるの!!!
GLUTの中でウィンドウ閉じる時にexit();ちゃんとできてないよどういうこと??
GUIはSDL使えっていうことなの?! やだーー!!
glfw使ってもいいのよ
391 :
デフォルトの名無しさん :2011/03/24(木) 12:42:49.71
>>391 90度回転してから、今のカメラの回転を適用すればいいじゃない。
どうしても今の角度から軸を割り出したいなら、(0,1,0)を今の行列で変換すれば上の軸がわかるだろ。
カメラだから最終的に逆になるのは考慮してな。
393 :
デフォルトの名無しさん :2011/03/30(水) 15:42:54.73
OpenGLでVBOを使って以下のように描画しています。 static GLfloat *vertexBuffer = NULL; unsigned int vertexCount = 0, ...(vertexBuffer,vertexCountの計算)... GLuint vboID; glGenBuffers(1, &vboID); glBindBuffer(GL_ARRAY_BUFFER, vboID); glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * vertexCount * 2, vertexBuffer, GL_STATIC_DRAW); glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(2, GL_FLOAT, 0, 0); glBindTexture(GL_TEXTURE_2D, brushTexture); glDrawArrays(GL_POINTS, 0, vertexCount); 上記コードで描画したものを削除して画面から消したいのですが、方法が分かりません。よろしければ教えていただけないでしょうか?
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
395 :
デフォルトの名無しさん :2011/03/30(水) 16:19:50.04
ありがとうございます。 glClearだと複数描画した場合にすべて消すことになると思いますが、 最後のひとつだけ消す方法はありますでしょうか? つまりUndoをしたいということなのですが。
あらかじめ glReadPixels で画面のピクセル情報をすべて読み出し保存しておき、後でそれを glDrawPixels で書き戻す もしくは すべて消して最初から描き直す
397 :
393 :2011/03/30(水) 16:39:26.66
>>396 なるほど。やってみます。ありがとうございました。
android開発をしてます 今までglDrawArrays(GL_TRIANGLE_STRIP..)で描画していたデータがあります esの本にいろんな理由でglDrawElements()のが早いというのを 勉強がてらやってみたがテクスチャがおかしく表示されてうまくいかず・・ ユニークUVだった場合、glDrawElements()の方はテクスチャの配列って どうやって設定しておけばいいのでしょうか? ちなみにデータはXSIからモデル情報を書き出すプラグインでやっていて、 どういう状態にしておけばいいかが分かればありがたいです 無理なのかな
普通に glTexCoordPointer で設定しておけばいいはずだが
401 :
399 :2011/04/02(土) 13:05:53.44
ほんと!できるってこと? 一応テストで使ってる実例だと※↓()は無視で ・頂点[(0,5,0),(0,0,0),(5,5,0),(5,0,0)] ・UV[(0,0),(0.2,0.7),(1,1),(1,0),(0.5,0.7),(0.2,0.4)] ・index[3,2,1,0,1,2] をglDrawElements()のGL_TRIANGLESで描画するとおかしくなる UV用のindex設定する方法とかでもあるって事かな 一応 UVindex[3,2,0,1,5,4] も用意してるんだけど、 なんか実例があるサイトがあれば是非教えてください
あぁそれは勘違いをしている インデックスは頂点とUVの両方に対する共通のインデックス (もしカラー配列や法線配列があれば、それも) 各配列それぞれから N 番目を取ってきてひとまとまりの頂点データになる 例えば GL_TRIANGLES でインデックスが 3,2,1 なら ・3 番目の頂点と 3 番目のUV ・2 番目の頂点と 2 番目のUV ・1 番目の頂点と 1 番目のUV を使って三角形が作られる
頂点の数とUVの数が違ってるけど、それでいいのか?
404 :
399 :2011/04/02(土) 14:21:05.75
>>402 なるほど、いま色々テストしていたけどそうみたいですね
じゃあやっぱりメッシュの頂点は共有しているけど
UVの座標は別々になっているようなデータの場合は
glDrawElements()は適してないって事かな?
おとなしくglDrawArrays()でやろっかな、なんかくやしいな
頂点数が少ないならどっち使っても大差ない、誤差みたいなもん 頂点数が多い滑らかなメッシュで座標が共有できてUVが共有できないケースはあんまりないと思う
406 :
399 :2011/04/02(土) 14:40:03.89
>>405 わかった
これの検証に時間とられまくってたから次進むわ
気が楽になったありがとう
忍法帖まとめ 忍法帖は名前欄に !ninja とすれば出てくる。 って最近知った。どれどれ ●だか買うと最終書き込みから5分経過すればレベルが一つ上がるらしい。 そうじゃない人は24時間経過すればレベルが一つ上がるらしい。 あと、cookieの設定がうまくいってないとレベルが上がらないらしいから、 何日たってもレベル0,1の場合はHap cookieの設定をチェックだ。 レベル10以上になると Lv=NN,xxxP『T』 ってなってスレ立てできるようになるらしい。
test
GL_PIXEL_PACK_BUFFER_ARBのARBって何の略だ?
Architecture Review Board
バージョン名みたいなもんか。 どこみてもARBが何か書いてないんで、謎の色空間指定だったらどうしようと悩んでたんだぜ。
どこにでも書いてあるが・・・。
>>411 何を勘違いしてるのか知らないけど、Googleで「OpenGL」って検索して
一番目に出てくるWikipediaのOpenGLの項目を開いて歴史の項目を読めよ・・・
>>412 が言うように検索すればどこにでも書いてる
歴史を知ってる人にしちゃそうかもしれんが、 定数名に開発委員会名みたいのが入ってるとは思わなんだだよ。
そうじゃなくててググったらすぐ出てくるレベルの情報くらい自分でなんとかしろっての。
>>410 が何の略称かも書いてるのになにが「どこみてもARBが何か書いてない」だよw
まぁOpenGLかDirectXかだろうね。 GLUTかどうかとかそういうのは関係ないと思う。FBOとか使って描画結果をα値ありで取得、合成してるだけだろう。 特に読むべき本とかは無いと思う。
>>417-418 レスthx
>>417 FBOって何でしょう?ググっても、航空機とかが出てきたのですが…
>>418 一応AR勉強用に、
3Dキャラクターが現実世界に誕生! ARToolKit拡張現実感プログラミング入門は手元にあるのですが、
マーカー関連、モデルの描画方法に関しては上記本で解決出来ました。
OpenGL関数?を使ってglutWireCubeや、glutSolidTeapot等も書いて有り、実際に実行したのですが
URLにある、ホログラム?的な映像はどうやってやるのかなー・・・と
綺麗に出ているので、カッコイイですし、リアルタイムに文字が変わるのも凄いですよね。
モデルにしては、あのように沢山の連番mqoを用意するのは難しいでしょうから、
OpenGLでやっているのかな?と思い、聞きました。
OpenGLでああいった処理をするなら、どういった予約語とか使えばいいかも分からないので
お勧めの本があったら紹介してほしいなと
OpenGLに関しては右も左も分からない状態です。
右も左も分からないのなら「手抜きOpenGL」でも見て試せ。
>>420 そかー、了解
取り敢えず 手抜きOpenGL見て勉強してみます。
文字はどうかは分からないけど、線描画位はできそうだ
>>419 べつに特別なことは何もしてないと思うよこれ。ホログラムホログラム言ってるけどどれのこと?
ただポリゴンにαもたせたテクスチャ貼って表示するだけでこういうのできるけど。
数字が表示されてるポリゴンはFBOでもつかってんじゃね。(FBOはFramebuffer Objectのこと)
OpenGLやDirextXがサッパリわかんねーって状態でいきなりこういうのは無理。
よく動画で「xx作ってみた」みたいに軽く書いてるけどああいう人達はもともとプログラミングができるか、
1からとっかかったけど相当頭よくですぐできちゃった人。
OpenGL自体が判らないのなら手抜きOpenGLのページで判るまで勉強すればいい。
>>422 なるほど、thx
ポリゴンにα持たせて出来るのは、自分で確認は出来てるんだけどそれを踏まえて
リアルタイムに細かく描画内容を変更出来てる(例えば、メーター的なゲージとかは出来ないよな〜と
※出来たとしても相当量のモデルが必要になる
ホログラムじゃないのは分かるんだけど、パッと見アニメ世界でいうあんな感じに見えるから
ホログラム?的と表現してみた。それ以外になんとよべばいいか
動画でいえば、複数マーカーの方なら
ANGLEって浮き出てる奴や、周囲の円マーク(回し具合によって形変わる)や
距離の奴なら、測定中[数字]とかかな、透過緑で表示されてる全般
FBOthx、おかしいなググッたときはでなかったのに、OpenGL FBOでぐぐったら普通にでるね…すまない
手抜きOpenGLとFBO見てみるよ、有難う
事前にツールでモデルを作ってそれを読み込むばっかりじゃなく プログラムでその場で計算してモデルを組み立てたって全然構わない 頂点の座標やインデックスを配列に入れて描画させるだけだし
ARToolKitはOpenGLだよ。 どっかの博士(日本人)が作ったもの。 研究用の3DはOpenGLが基本。 ホログラムって言ってるのは ポリゴンを加算で表示しているだけ。 特に難しいことはやっていない。 FBOも関係ない。 モデルが出せるなら ホログラムもすぐ出来る。 OpenGL1.1レベルの内容かな。
趣味でボーンアニメーションの勉強をしています。 並べられた直方体を滑らかにうねらせる程度の基礎的なプログラムは書けたのですが、次にパーサーを作成しようとして難儀しています。 元々はMikoto形式のパーサーを作成する予定でした(いくつかその形式の素材が手元にあるため)が、作者のページが閉鎖されてしまっており、 ファイルフォーマットの仕様がまるで分からず立ち尽くしております。 ・多くのモデリングツールでサポートされている ・プログラム上扱いやすい ・ファイルフォーマットの仕様詳細が公開されている このようなボーン情報、重みを格納できるフォーマットはないでしょうか
>>426 独自フォーマット作ってそれのパーサつくって終わり。
できないならおとなしくxファイルでも使う。
あとその話題GL関係ないよね。スレチ。
>>427 レスありがとうございました。
自由な独自フォーマットでの書き出しなら作れと言われれば作りますが・・・
必要なのは、私とは別の方が作成なさった素材を読み込むことなのです。
流石に独自フォーマットを扱えるモデリングツールを用意・普及させる力は到底ありませんので、
直接扱うにせよ、一度独自フォーマットへ変換してから扱うにせよ、どちらにせよ
一般的なモデリングツールで編集可能なフォーマットのパーサーが必要でして・・・
それにあたって、どのフォーマットを選択すべきかと言う質問でした
スレ違い申し訳ありません
>>428 スレチ言っといて引っ張るのもアレなんだけど気になるので。
>必要なのは、私とは別の方が作成なさった素材を読み込むこと
っていうのは例えばblenderやらXSIやらで誰かが作ったファイルを読みたいわけだよね。
>流石に独自フォーマットを扱えるモデリングツールを用意・普及させる力は到底ありませんので
いやだから、上の他の人が作ったファイルを独自形式に変換するパーサー書けばいいじゃない。
>一般的なモデリングツールで編集可能なフォーマットのパーサーが必要でして
ちょっとイミフ。一般的といわれてもモデラなんてたくさんあるしそれぞれフォーマット違うし。
相手が出してくるフォーマットが固定ならそれから独自形式に変換すればいいんでない?
モデラー→パーサーで独自形式→プログラムで
>>428 が使う。この流れじゃだめなの?
何が問題なのかちょっとワカンネ。
>>429 レスありがとうございます
「モデラー→パーサー→独自形式→使用」
まさにこの方法で良いのですが、仰る通り世の中で用いられているモデリングツールと
その各々の独自形式の種類が多すぎて、どのパーサーを作るべきか分からないのです。
元々準備していたMikoto形式は作者様の仕様公開終了により潰えてしまい、途方に暮れております。
そこで、仕様がよく公開されていて、ある程度よく用いられているフォーマットが知りたかったのです
>>428 が聞きたいことは、
・なるべく多くの3Dモデラのデータ(ボーン付き)を読み込みたい
・なるべく多くの資料があるフォーマットが良い
ってことじゃないの?
たぶん、Miku Miku Danceクローンみたいなものを作りたいんじゃないかな?
もしもMMDクローンが作りたいのなら素直にPMDを読み込むようにすれば良い。
そうでなくても、
・事実上勝手に使っても誰も文句いわなさそうなモデルがいっぱい転がっている
・インターネットで「作ってみた」でウケそうなのでモチベーションが維持しやすい
ということで、PMDが候補として良さそうな気がする。
この辺を見てみるよろし:
http://www6.atwiki.jp/vpvpwiki/pages/220.html#id_327804fb
>>431 ありがとうございます。
説明が下手で申し訳ありません。聞きたかったことはまさにその二点です。
昔作ったアクションゲームに物理エンジン組み込んで遊んでいるうちにボーンアニメも実装したくなりまして…
PMDについて勉強を進めてみます。
解放されないよ サイズが同じならglBufferDataは一回呼んでおけば十分 そこのサンプルがglBufferDataを毎度呼んでる理由はわからんが
>>431-432 俺の読解力が足りなかった。申し訳ない
>>432 パーサーは形式で作り直さなきゃいけないのは諦めるしかないね。
PMDは流行ってるけどメジャーではないからとりあえずPMDと、他に多い
(気がするのは)LigthWaveとかMAXかな。
とりあえず「これでやっていこう!」って決めたらそれつかったらいいと思うw
COLLA・・・あ、いや、何でもない
MikotoとかPMDなんて、日本のごく一部でしか扱ってない、ドマイナーな 形式を勉強したって意味ないよ。こんなの扱ってるのは狭い世界だけの話。 作者が辞めたらそれで終わりだしな。 今すぐならXファイル、将来性も含めれば.FBX、.COLLADA、.blend このあたりだけ扱えればアニメーションはオッケーだ。 あ、アニメ無しの静的モデルだけならなんでもいいよ。アニメ付きに比べれば超簡単、単純だシナ。
こういう話でると必ずと言っていいほど
>>437 みたいなの出てくるけど、
PMDとかMikotoはマイナーだけどそれを選んじゃいけないなんて決まりはないけどな。
たかだか個人の作るモンにファイルフォーマットの将来性だのなんだのアホかと思うけどね。
ファイル解析と独自形式のパーサなんてすぐできるんだし、独自形式への変換やデータの
扱いを勉強するならフォーマットなんざなんでもいい。
肝心の素材がないのがなあ モーション付きの3Dモデルなんて、探してもほとんど転がってない たまにあっても形式や方便がバラバラで、それぞれのローダを作るだけで日が暮れそうだ ニコ厨御用達のMMDは、素材が豊富とはいえプロの界隈では全く汎用性がないし どうしたもんかね
プロ(仕事)なら探したら転がってるような素材を使うわけにもいかないんだから デザイナーが使うソフトを軸に考えればいいんじゃね 遊びで作ってるならプロ界隈の汎用性なんてほっといて素材からのパスが簡単な形式を選べばいい
そのデザイナの使うソフトと様式が仕事のたび毎回違うのがマジでFUCK いい加減誰か統一書式作ってくれよ・・・そんな独自形式なんて中学生でも作れるもので個性主張しなくて良いから
じゃあ、お前が作れよ
>そんな独自形式なんて中学生でも作れるもので個性主張しなくて良いから 何を解釈して個性主張になったの?wwwwwwwwwwwwwwwwwwwwwww
製品に暗号化かけるとかそういう意味では重要だが、内部で使ってる 構造体の中身そのまんまファイル出力するだけで独自フォーマット(笑) だとか言い出す奴は流石に笑うしかないな 入門本レベルだわな ただただ汎用性を損なうだけで、他の書式覚えて書き出すの挫折しただけだろと
∩_ 〈〈〈 ヽ 〈⊃ } ∩___∩ | | | ノ ヽ ! ! / ● ● | / | ( _●_) ミ/ こいつ最高にアホ 彡、 |∪| / / __ ヽノ / (___) /
複数のフォーマットのパーサかけばいいじゃんとしか
COLLADAがその一つの光明になりえるはずだったんだが・・・。 モーションについてはKinectが未来を切り開いてくれるかもしれない。 プログラマでもモーションを作りえる環境ができそうだ。
COLLADAは仕様が定まらなさ過ぎてイライラする
しようがないな。
仕様は定まってるよ。1.5なんて誰も使ってないしな 問題は仕様書がバグだらけなだけ
手前味噌でよければM3G(JSR184)とかどうだろうか。 仕様はJavaの標準化コミュニティで完璧に定義されていて公開されている。 自分で作らなくても俺の作ったパーサーがフリーで公開中。 日本人開発者(=俺)がいるのもメリットだと思う。 今M3Gの描画エンジンをAndoridに移植していてNDKでは動いた。 Javaから使えるバインダーも作っていて現在実装中。
Java ME用のAPIの中にモデルデータの規定があるのか まあ公開され安定した仕様があって、必要な機能があるならME由来だろうがなんだろうが別に良いけど JSR読んで決める
>>444 確かに。
構造体をそのまま書きだすと、ファイルに構造体アライメントのpadding!(ゴミ)が入り汎用性を失う。
おまえよく知ってるな。
>>449 吹いたwwwww
やぱり3Dモデルのファイルフォーマットに決定版は無いのか・・・。
たぶんそれぞれ独自の拡張をしたりとか
表示するソフト側でいろいろやるため柔軟にするんためだろうけど、
普通にモデルの表示がOpenGLでできればいいと思ってた自分には
パーサとか、頂点やら法線やらテクスチャの部分まで自分で一から書くのも納得いかなんだ
そういう人はまずどうすればいいか教えてください!m(_ _)m
なんか変なのが沸いてるな。
>>453 自分で作るのが嫌なら誰かに作ってもらえばいいのです
まずお金をいっぱい用意してください
456 :
デフォルトの名無しさん :2011/04/11(月) 15:34:31.83
どっちもレガシーに配慮しすぎてグダグダだけどな。 FBXとか仕様書を何回読み直しても理解できない。
FBXってシーンを作る時に異常に時間かからないか? 遅すぎて自作ソフトで使うのはやめた
459 :
453 :2011/04/11(月) 18:11:54.77
>>456 意匠権名ググりましたが両方ともいまいちOpenGLで表示する方法はわかりませんでした。
お金をいっぱい用意する事を検討してみます。
>普通にモデルの表示がOpenGLでできればいいと思ってた自分には >パーサとか、頂点やら法線やらテクスチャの部分まで自分で一から書くのも納得いかなんだ >いまいちOpenGLで表示する方法はわかりませんでした。 納得いかないんじゃなくて基本的なことが出来ないだけじゃんかよー 大人しくDirect3D9でxファイルでも読み込んでろよもー
OpenGLやりたいなら、大学レベルの数学知識が必須。 簡単に手を出せるものじゃない。 まともなアプリ出すまで1年かかる。
「車に乗ってドライブに行きたいんだ。」と言ったら スパナを渡されたでござる。
463 :
459 :2011/04/11(月) 22:49:58.11
>>460 全く経験も知識も無い素人でわからんのだが、それは基本的な事なのか?
素人の感覚で、「納得いかない」と言ったのは、モデリングソフトで表示できるモデルと
同じようにするのに、なぜその表示する機能の「コピー」を手でもう一つ書く作業が必要なのか
そんなの時間の無駄じゃん、納得がいかない!と言いたかった。
たぶん自分が大きな勘違いしてるのはわかるけど、やっぱりわからん。
なんで普通にモデルを表示するのに、皆それぞれそんな長い手順を踏む必要があるんだ?という質問。
別に「面倒だし適当にやらせろ」っていう文句じゃなくて。
まあ簡単に言えば「便利な既存ライブラリは無いの?」だし
「楽したいだけだろ!」と言われたらそれまでだが、
でもそれを1人ずつわざわざやる事は合理的なのか?
その調べが全くつかない
似たような質問してる人は他の場所にも大勢いるけど、
「できない」「自分で作れ」って解答ばかりでさっぱり・・・
この辺りが一般凡人に3Dのプログラミングが普及しない原因に見えて仕方ないんだが
それとも、OpenGL自体がそこを追及する分野なのか?
純粋に「3Dのゲーム作りたい!」とかいう人は既に場違いなの?
>>463 はいきなりOpenGLを触るのではなくて、
もっと大きなミドルウェアとかを使った方がいいのではないか。
Unreal EngineとかUnityとか。
そうだな、そういう人のためにゲームエンジンというものが存在するんだ OpenGLはエンジンを作る人が触るような低位のAPIだ
汎用性のあるファイルなら、描画するのに必要なパラメータの大半は読み込んだ構造体にそのまま詰まってるから、 バイナリデータの取得ができて、テクスチャ付きの三角メッシュを表示して思うように動かせれば、OpenGLでのパーサを書くのはそんなに難しくない。 一般的に普及していないのは、ゲームができるほどのモーションが付いた3Dモデルデータが普通のプログラマには用意できないからだと思う。 アニメーションのない3Dなんか動かしてもモチベーション上がらんし。
468 :
463 :2011/04/12(火) 00:06:33.62
なるほど、やっぱりそうだったのか・・・ 最初から思いきり勘違いしてた。 どうやらエンジンを使う方が自分には正解だったようです。 みんな誘導乙でした、thxです。 これでやっとドライブができるでござる
>>463 もともとOpenGLは研究室とかで3次元曲面をプロットするような用途で使うものだし
3次元空間に多角形表示できるからそれ利用すればモデリングデータ表示も出来るけど
そんなのは副次的なものだし
研究者の使うPC環境に左右されないように最低限のI/Fだけ備えて汎用的に作られてるし
別に数式を視覚化できればモデリングデータとか表示できなくていいし
ゲームとかに使いたい人間が望んでるものと畑が違うし
極論言うとOpenGLは数学物理好きが使うツールだし
でもその汎用性とオープン性からゲームに利用されるのも確かだけど本来ゲーム向けじゃないし
OpenGLと組み合わせて使うライブラリはいくつもあるけどDirectXほど簡単には行かないし
>>469 の言う事も違うと思うが。
DirectXから便利機能を取り除いてHardwareへのインターフェースだけにすると
機能的にはほぼOpenGLと同じになるしな。
OpenGLは3D hardwareへのインターフェースの共通規格のような物。
モデルデータを読み込むとかの便利機能はOpenGLの範囲外。
ゲームエンジンが3D HWへアクセスするときのインフラみたいなもんか。
詳しくはOpenGLの仕様書を読め
>>469 本来とかもともととかはしらんけど、ゲームでOpenGLは使われまくりだよ
逆にDirectXだって学術分野で散々使われているし
最近のゲーム機とかOpenGLサポートしてたりするもんな
スマートフォンでは独壇場だし WebGLも来るぜを。
さぁみんな、夢に向かってOpenGLプログラミングしようぜ!
glBegin( OpenGL );
つかOpenGLと比べられるのはDirect3Dじゃないの?
ゲーム機でOpenGL使ってるのは、ライセンスの問題だとは思うが・・・
ゲーム機で使われるのはDirectXはMSが許可しないし他に選択しないからな。 別にOpenGLが理想なわけじゃない
ソニーがPS3にDirectX使わせてくださいって言ったらMSはどうぞどうぞって言いそうだけどなw
そりゃーどうぞどうぞだろう 有料だしバージョン少し古いかもしれんがw
ライセンスがゆるい3DAPIが新しく登場すればはっぱとOpenGLは捨てて移行するけどな OpenGLはさすがに設計が古すぎる・・
opengl1.2を使っています
モデルの影の色を指定したい場合どうすればいいでしょうか。
例えば肌は普通に光源を設定すると影が黒くなってポップなモデルには似合いません
肌の影は濃いオレンジ色にしたいと思っています
かといってアンビエントを赤っぽく設定すると影じゃない部分も赤っぽくなって赤鬼みたいで変です
光源と対角の位置に赤い光源を置くと肌以外の部分にも赤い光が当たってこれもだめ
通常どんな方法で対応するんでしょうか
↓こんな感じの表示をしたいです
http://www.teatime.ne.jp/infor/lovedeath/char/ch_ay.jpg
ライトの設定じゃなくてシェーダー側じゃね? 肌とそれ以外で分ける。
1.2の頃ってシェーダあったっけ?
というか、材質(マテリアル)の色のアンビエントじゃなく光源の方変えてるのか メタセコ?肌の材質の「周囲光(環境光)」を上げてみては
>>487 固定シェーダーね。
呼称はマテリアルだったか。スマン
>>488 拾い物のobj(mtl)ファイルをテキストエディタでいじってます
マテリアルのアンビエント色をオレンジに書き換えても光源があたらない影の部分は
黒くなってしまってさっきみたいな絵になりません(光源色+マテリアル色〜黒のグラデになる)
昔六角大王をいじってた時はポリゴン毎に光のあたる強さに応じてグラデを指定できたんだけど
openglでそういうことって出来るんでしょうか
>>485 光源/マテリアルどちらのアンビエントを設定してもシェイド部分は黒になってしまいます
なので光源の逆側から影用の光源を当てればいいと思ったんだけど
そうするとその影色を適用したくないマテリアルにも光が当たってしまって・・・
アンビエントは全体に当たる。 光と材質の色のかけ算だから、 片方のアンビエントが0,0,0(黒)だと必ず黒になるよ。 肌には肌色を設定して、光源は白色(というかアンビエントなので灰色とか暗めが普通)でいいと思う
>>491 今は光源のアンビエントは(0.2, 0.2, 0.2)で指定しています。
これだと影が黒(灰色ですね)になっていて肌色の影としてはくすんでてヤだなあと
でも(0.4, 0.2, 0.3)みたいにオレンジっぽくすると今度は夕焼けにあたってるみたいに全体がオレンジに。
局所的にこれが出来ればいいんですけどやっぱないのかな・・
で、局所的にといえばマテリアル毎のアンビエントになるわけだけれど
シェイド部分は光源のアンビエントの影響を受けて局所的に指定ができないというハマリパターンになって泣きそうです
>>484 まさか綾乃さんをこのスレでみるとは・・・
確かうろ覚えだがソレは少なくともPixel Shader1.1を使ってるからGLSLが使える
OpenGL2.0以降のバージョンじゃないと完全な再現は無理かもな
>>492 ライトにもマテリアルにも
アンビエントはあるぞ?そこは大丈夫か?
両方に値を入れてやらにゃならん。
>>492 できるって。
光源のアンビエントは(0.2, 0.2, 0.2)でいい。
材質にもあるでしょ?それを灰色でなくオレンジに。
トゥーン・レンダリングは考えてないと思われる。
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, materialcolor);の事です。
>>494 大きいおっぱいが好きなので!!
>OpenGL2.0以降
orz
連投すみませんです
>>493 トゥーンレンダリングは今のところ考えていないですけど
そんな何時で影の色を変えたいです
>>497 最初はglMaterialfvで出来ると思ってた・・・
とりあえず光源は白のままでいい。でないと夕日になるんで。 絵の【理想】に近づけるとすればマテリアルが アンビ(0.8, 0.4, 0.0) ディフ(1.0, 1.0, 1.0) って感じじゃないか 影の部分がオレンジで、光当たってる部分は白っぽいし。 試さないで口だけでスマソorz
ごめん、 さっきも言ったとおり掛け算だから光源アンビエントが0.2だと影が黒に近くなるや 全体的に明るめだし、もっと上げていい。 本当に絵みたく影を鮮やかなオレンジにするにはそれこそ 光源アンビ(1.0, 1.0, 1.0) 材質アンビ(1.0, 0.5, 0.0) しかないと思う。でもこれってどうなんだろ;
>>501 やってみたけど黒くなるとこは黒くなるのであまり効果なかったです
>>503-504 めっちゃ蛍光色w
503のは黒っぽいけどいい感じ
組み合わせ次第で黒っぽさを目立たなくすることは出来そうです
色々試すしかないかな メタセコもそろそろ使い方覚えないと・・
オレンジ色の光源をもうひとつ用意して、肌だけに適用したら?
さすがに明るすぎたかw それとも、 光源アンビ(0.2, 0.2, 0.2)のままで 材質アンビ(3.0, 1.5, 0.0) とか1.0以上指定してもいいのかな(できた気がする) 2Dみたいな陰の色をマテリアルで表現するにはどうするか自分も気になる・・・。
好きなライティング用テクスチャを描いて、 glTexGen 系関数を使って環境マッピングと同じ要領でレンダリングすけば 比較的簡単に実現できそうな気がするが、1.2 では使えないの?
さぁ、次はScreen Space Subsurface Scatteringを実装しようぜ!
>>509 それなら なおさら一つめの光源アンビエントを上げるだけで済むはずなんだが…
なんでそれじゃ駄目だったんだ?
なあ
>>463 とかでも誰も答えてないんだけど。
モデリングツールで作ったモデルをopenglなりDirectXで表示させるには
モデリングツールのスクリプトで頂点やら法線やらを出力するべきなんじゃないのか。
コードをそのまま出力させても良いと思うし。
フォーマットの問題もメタセコイアみたいにモデリングツール自体が複数フォーマットに対応してるんで解決できると思うし・・・
わざわざフォーマットのパーサなんか作るもんなの?
>わざわざフォーマットのパーサなんか作るもんなの? 何を答えりゃいいのかさっぱりわからんが 出来合いのパーサが提供されてるフォーマットを選べばいいだけしょ?
Ambient :全体に当たる光。光源の反対側からも当たる。 Diffuse :光源の方向に向かってグラデーションみたいに当たる光。 Specular:光源がそのまま反射して映って見える光。 光源と材質ではそれぞれの色が掛け算だけど、 これら3つ自体は足し算のようで、Ambient上げれば全体が明るくなる。 パーサ作るの自体は実は難しくないみたいなんだが
現在、GLSLの勉強中でPhongシェーディングを組んでいます。 テクスチャを使用しているかどうか(GL_TEXTURE_2DがEnableか否か)を シェーダ内で取得する方法はないでしょうか。 Uniformで渡す手法は、他人の3Dモデル読み込みライブラリを 用いたときにコードの修正が必要なのでそれ以外の方法を探しています。
>>516 GLSL使う場合はTexture2Dが有効無効は関係なく、シェーダーのコード内で貼ってれば貼られるし、貼られてなければ貼られない。
textureユニットを指定した時点で かってにenableになるぞ。
>>517 レスありがとうございます。
こちらの説明不足でした。
例えば、固定パイプラインを用いてポリゴンを描画する場合の
テクスチャを使用しない→glDisable(GL_TEXTURE_2D)
テクスチャを使用する→glEnable(GL_TEXTURE_2D)
の切り替えをシェーダ内で行ないたいのです。
Texture2Dがシェーダ内のsampler2Dに影響を与えないため、
テクスチャを使用したくないポリゴンに
以前指定した画像が貼られてしまって気持ちの悪い状態になっています。
ですので、Uniformで渡す手法以外(組み込み変数等)で
Texture2DのOn/Offを取得する方法がないか探しています。
if( isTexture ) gl_FragColor = texture2D( texture0, gl_TexCoord[0].st ); else gl_FragColor = gl_Color;
OpenALスレも欲しいな
言いだしっぺのry まぁすごい過疎りそうだけどな・・・最近GLスレがちょっと元気でうれしい
>>518 レスありがとうございます。
自動でenableですか・・・。
glGetで調べたことがなかったので知りませんでした。ありがとうございます。
>>520 レスありがとうございます。
やはりUniform以外だと厳しいみたいですね;もう少し調べてみます。
調べるもなにも変数で渡すかテクスチャの有無でシェーダごと切り替えるかのどっちかしか無いって 小さくて透明なテクスチャを常に貼ってしまう手もあるけど
OpenALは長いこと使ってるけど、語り合うほどの話題があるとは思えないな…
>>525 追ってないからわからないんだが
順調に進化してるのかね?>AL
というか過去にOpenALのスレがあった気がする そして即落ちたような
上の人とは別人だけど、GLSLで同じように有り合わせのPhongシェーダーを 自前のプログラムに追加してみたらテクスチャーが貼られなくなっちゃったんだけど これも全部シェーダーに実装しないとだめ?
そりゃそうだろ ピクセルの色を決めるのがピクセルシェーダーなんだから
デフォルトの処理をごそっと置き換えることになるのか。 まんどくさ。
過去にOpenALのスレを作りましたがすぐにDAT落ちしました。
だれかエロゲーみたいな塗りのGLSLシェーダー作って公開してくれませんか? Tonyかべっかんこう塗りシェーダーがいいです。
2Dのイラストだから生きる風合いってのが大きいと思うが
クレクレはお帰り下さい。 ってか自分で作れよ。
シェーダ使ってリアルタイムで頑張るよりも テクスチャで頑張った方がそれっぽくなるんだよね プロジェクションマップに弱めのライトマップとか 実例という意味ではmmViewer関連が参考になるかも
あとポストエフェクトが重要だと思うんだけど OpenGLでのポストエフェクトって Direct3Dに比べると資料がすごく少ないんだよね 何かいい資料があったら教えてほしい
シェーダーでどうこうするポストエフェクトまでいくとDirect 3DもOpenGLもほとんど変わらんと思うがw 資料はどっちのでも使えそう。
確かに原理的な話は共通なんだけど 実際にはドライバ依存とかでハマるんだよなぁ 「動くものが実在する」というのは心の支えになる
ポストエフェクトの実装でドライバ依存でハマる?
本当に理屈が判ってるならまずCPUでやってみろよ。
αチャンネル付きのテクスチャ・・・・どうすればちゃんと表示できるのかorz
glEnable(GL_BLEND); を忘れてるとか?
デプスも切れよ。
>>542 αポリの描画順序がどうこういう話でαありポリだけ奥から描くとかなんとか
>>543 α以外の部分もおかしくなるじゃんかー
奥から描画順ソートしたりα付きポリが他のポリと交差する場合αポリを分割するとか
みんなこういう処理自前で書いてるん?
それと描画順ソートとかしたら頂点配列使えなくならない?
ある程度妥協する。
そこが昔からのプログラマの腕の見せ所。 デファードとか原理的に半透明使えない筈だが みんな色んな工夫をかまして頑張っているのさ。
>>544 ポリゴンごとにソートしないで、
いくつかのかたまりを適当に作って奥から順に描画するのが
普通だと思っていた
交差するポリゴンとかは諦めるんだと思う。
ケースバイケースなんだろうけど、自分は 不透明を全部描いてからDFPTHTEST ON/Depth書き込みOFF/CULLING ONで半透明ポリの裏向き/表向きをソートせずに描画 でうまくいくパターンが多かったかも
>>545-548 ありがとうございます。
みんな色々試行錯誤してるんですね。難しい・・
モチベーション下がらないように他の部分進めながら考えていくかな
FFの髪の毛はどうやってんだろう? αブレンドしてるのに見た目おかしくない。 交差してても平気みたいだし。
FFの髪の毛とか言われても
職人が毎フレーム、ドットを打ち直してるって うちの爺ちゃんが言ってた。
中の人も大変だな
FFはプリレンダムービー中心だからな 環境的にはなんでもありだよ
髪の毛なんてどうでもいい 眼鏡をどうするか それが死活問題だ
>>556 「前髪を描いてから、目を描く」というテクニックは勉強になった。なるほどなぁ。
頭(あるいは視点)をグルグル回転させるアニメーションをしたときに違和感でそうだけど、角度を限定していれば、それなりにうまくいきそう。
でも、なんか「このライター、頭悪いんじゃねぇの?」と感じる文章だな。
> めがねをかけた場合、顔>メガネ>目>前髪と描画される。
> まず顔を描き、前髪を描画してから前髪のデプス値をクリア、顔のデプス値を書き込み目を描画。
> ツルをのぞいたメガネを描画してから、前髪のデプス値を書き込み、目立つめがねのツルを最後に書き込む。
前後の文章が連続しているとはとても思えないんだが。
Z まわりをゴニョゴニョするのはゲームだとよくあるよね。
>>558 結果的にその順で描画される事になると言いたいんじゃね?
前髪を書き込んでから前髪のデプス値をクリアってあるけど 部分的なデプス値のクリアってなんだ
>>561 デプスバッファのコピーをもどしてるのかもね
BlendFuncってPopできたっけ?
1.4までのハードウェアでハードウェアジオメトリインスタンシングやるには?
スペクトログラムアナライザーを作りたいのですが、 以下のようにx軸を時間,y軸を周波数,信号成分の強さを色の明るさとして描画すると、重くなってしまいます。 float df = 22050 / (float)(ps.maxrect.width()); double logmax = log2(1+df*vdata.at(0).count()/1000.0); glBegin(GL_POINTS); for(int j = 0; j < vdata.count(); j++) { for(int k = 0; k < vdata.at(j).count(); k+=2) { glColor4f(0,vdata.at(j).at(k),vdata.at(j).at(k),1); glVertex2d(j, log2(1+df*k/1000.0)/logmax * height); glColor4f(0,vdata.at(j).at(k+1),vdata.at(j).at(k+1),1); glVertex2d(j, log2(1+df*(k+1)/1000.0)/logmax * height); } } VBOとか頂点配列使うと余計に重くなります。なんとか高速化する方法はないのでしょうか。 OpenGL初心者なんで変なこと言ってたらすみません。
全部の点を1枚のテクスチャとして読み込んで1回で描く
ただ単に描いてるポイントの数が多すぎるのなら 減らせとしかいいようがない。 1フレーム何個描いてるの?
operator[]じゃなくてat()を使うと何かいいことあるんだっけ?
範囲チェックをしてくれたと思う
pointSmoothは使うなよ。
572 :
566 :2011/04/26(火) 22:34:23.89
返答ありがとうございます。 1フレーム約50万個の点があります。 やはり点の数が多すぎるのでしょうか・・・ テクスチャですか、試してみたいと思います。
毎回50万回 log2() 呼んだら重いんじゃね 描画位置は変わらないなら1回計算した値をとっとけ
おまいは何を言っているのだ。
575 :
566 :2011/04/26(火) 22:53:53.97
>>573 変換テーブル作ったらちょっと速くなりました!
けど他の表示(波形やスペアナ)に比べるとやはり遅い・・・
点の数を減らすしかないですね。
入ってきたデータを全部マップするんじゃなくて、2D画像のx,y座標から配列のどこを読むかのプログラムに変更して、 その上でOpenCLだかGLSLだか使えば一瞬だと思うんだけど、どうなんでしょう > 識者の方
FFTとかデータのコピーとか時間かかってそうだけど 点の数を減らせば猛烈に速くなる? 時間で動くバッファはリングバッファにするとコピーしなくてすむはず
578 :
デフォルトの名無しさん :2011/04/27(水) 00:42:20.91
GLFWを使おうと思ってダウンロードしたけど、詳しい設定方法載ってるサイトない? もちろん日本語で
50万ってことは800x600くらいのウィンドウ全部を点で描画しようとしてる? もしそうならフラグメントシェーダーかOpenCL使った方がいいでしょ
580 :
デフォルトの名無しさん :2011/04/27(水) 12:39:02.92
>>578 GLFW使ってるけど、日本語の解説は探しても無かったから公式の英語リファレンス見て使ってる。
公式リファレンス英語だけど中学生でもわかるレベルだから一度目を通すことをオススメ。
あとglutとか使ったことあるなら感覚は同じだよ。
床井研究室に解説あったぞ
583 :
580 :2011/04/28(木) 09:01:48.20
580です。 Win7クラシックモード特有の問題でした。 解決策は分かりませんが、お騒がせしました。
OpenGLでマウスを用いて球などの図形を凹ませたりといったリアルタイムに変形させたいのですが 参考になる本やサイト等ありましたら教えていただけないでしょうか?
>>584 マウスピックアップ とか セレクションバッファ でググってみればいいんじゃね?
>>585 ありがとうございます。
マウスというよりWiiリモコンを用いて3次元を操作できるマウスが正確です
正解て・・・ 書いてないことまで推測できんわしらんがなw
オレの見ているプログラミング関係のいくつかのスレで、曖昧な単発質問をして、回答者に人をなめたような、あるいは人を食ったような慇懃無礼なお礼をするレスがここ数日目立つんだけど。
ここ数日じゃなくていつも見かけるけどなそういうの。 自分から情報小出しにして、望んだ解答が得られないとスネちゃう子ばっかりなんだろ・・・
glutSwapBuffers()の垂直同期を無効にするには、 wglSwapIntervalEXT()を使うしかありませんか?
glutBitmapCharacter() の文字の大きさを自由に変更するにはどうすればよいですか?
glutBitmapCharacterをやめてglutStrokeCharacterを使います
ここってうざいのしかいないね 糞の集まりだわ
だから自分が望んだ解答もらえないからってふくれんなよ。 お前みたいなのが一番うざいんだよw
>>590 WindowsならwglSwapIntervalEXT()か、それすらOS依存がヤダっていうならなんかライブラリ使うしかない。
GLFWとか使うとglfwSwapInterval()なんてのがある。SDLだったらSDL_GL_SetAttribute()でパラメータ渡したらできたきがする。
>>596 丁寧に感謝します!
なるほど、ひとまず今回はwglSwapIntervalEXTのアドレスとってwindows依存でいきます
ありがとうございました!
glPushAttribがうまくいきません。 glColor3f(1.f, 0, 0); glPushAttrib(GL_COLOR_BUFFER_BIT); glColor3f(1.f, 1.f, 1.f); glPopAttrib(); (三角形描画) としたのですが、三角形が赤になると思ったのですが、白になってしまいます。 なぜでしょうか?
>>599 ためしてないけど、GL_CURRENT_BITじゃね?
>>600 ありがとうございます。
すみません。GL_CURRENT_BITでもだめでした・・・
なるわけねーだろ。 1.push 2.描画 3.pop の順だ。
>>601 ためしたが、GL_CURRENT_BITでうまくいったが
>>602 1. push
2. color
3. pop
で2のcolorが無効になるはずなのにならないのはおかしいって話
604 :
599 :2011/05/01(日) 22:35:03.72
すみません glBegin glEnd の外でpush popすることでうまくいきました。 中ではだめなのですね・・・ ありがとうございました。
( ゚д゚)
クイズじゃないんだから
>>586 は正解とか書いてないよく見ろw
ちょっと訂正したかっただけだろw
ためしてないけど、まだ終わってないんじゃね?
>>603-604 話が噛み合ってなくて笑った。
何がどうなったのかw
>>599 はpush,color,pop,描画してるから白で描画されるのは当たり前な(
>>602 でそう指摘されている)。
それにたいして
>>604 で頓珍漢なことをやって解決したことになってるw
>>608 赤,push,白,pop,描画 なら赤だろ。なんで白で当たり前なんだよw
>>572 面白そうなので自分で試してみた。PARTICLE_NUM=100万個として
glBegin (GL_POINTS);
for (int i = 0; i < PARTICLE_NUM; i++) {
glColor3fv (colors[i]);
glVertex3fv (positions[i]);
}
glEnd ();
これでうちのHD5770だと35fps出た。
ちなみにディスプレーリストを使うと550fpsぐらい。
現代のGPUでも100万パーティクルを毎回描画するのはきつい。
1パーティクル4頂点で計算すると22億頂点なので性能的にはこんなものだろう。
OpenGLで描画しながら他のプログラムも走らせなたいのですが glutMainLoop()でループに入ってしまい抜け出せないのですがどうすればよいのでしょうか?
まず走らせるか走らせないかはっきりしろい。 マジレスするとその用途ではGLUTは使えない。 理由はスレッドセーフでないから。
>>612 そうなんですか
OpenGLかDirectXでCG描画しながら
OpenCVのプログラムを走らせたいのですがどのような方法がありますでしょうか?
別プログラムを走らせたいって実はプロセス間通信したいってことだったり
普通に別スレッド作ればいいんじゃないの。 そっちのスレッドからはOpenGL関数を呼び出さないことを条件で。
>>618 たぶんリトルエンディアンだからじゃね
リトルエンディアンで GL_RGBA で GL_UNSIGNED_BYTE で unsigned int の 0x000000ff なら R=255, G=0, B=0, A=0 だ
620 :
618 :2011/05/04(水) 20:38:43.45
>>619 そうでした。並びが逆になっていました。
解決しました!ありがとうございます!
621 :
デフォルトの名無しさん :2011/05/04(水) 21:43:25.37
VisualC++6.0で使う方法ありますか?
普通に使えると思いますが?
623 :
デフォルトの名無しさん :2011/05/04(水) 21:51:48.45
もう一度調べてみます
フレームバッファのテクスチャを作業用に複製したいのですが どういった方法がありますか?
>>624 glCopyTexSubImage2D
>>625 ああ、なるほど。
盲点でした。FBO関連のコマンドを探していました。
テクスチャなのでglCopyTexSubImage2Dが使えるんですね。
使ったことが無いので描画ルーチン内で
速度がどうなるのかが気になりますが
ちょっとこれでワークをtmpに退避させてみます。
ありがとうございました。
遅ければ、普通にONEZEROで描画すればいいじゃない アルファコピーされないけど
OpenGLには、 DirectXでいう グローバルアンビエントライト device->SetRenderState( D3DRS_AMBIENT, 0xff030303); みたいなやつってありませんか? GL_LIGHT0〜が関係ない明るさです
629 :
628 :2011/05/05(木) 04:41:03.40
事故解決しました
>>629 どのように解決したかも書いてもらえると嬉しいです。
glBindBufferで指定したPBOの識別値を一時的に退避させるには glPushAttribに何を指定すればよいのでしょうか? 赤本が2.0までしか記述されていないので代わりにVBOの節を探してみましたが 見つからず・・・。 申し訳ありませんが、どなたかご存知の方、教えていただけないでしょうか。
>>631 glPushClientAttribにGL_CLIENT_PIXEL_STORE_BITを指定…っぽい
>>627 ONEZEROってなんですか?BlendFunc?
メタセコイヤのmqoファイルって頂点の法線ベクトル情報持ってないんだけどどうやって正しく表示させてるんだろう 面の法線を計算したものから推測させることは出来るけど頂点は共有してるけど面としては無関係って場所は法線が狂う気がするんだけど 例えば顔の頂点と髪の頂点が重なるようなとことか顔の面と髪の面の法線から頂点法線を求めてしまって モデル製作者の意図した頂点法線とはならないんじゃないかと 顔と髪でオブジェクトを分けてあればこんなこと起こらないけどそういう制限ないよね?
メタセコスレへどうぞ
そんな ビシッm9っ`Д´) アナタは鏡でもみてなさい
オープンGLを始めるのは「いまどき」なんですか? いまどきは何を始めるのがいまどきなんでしょうか。
周りの目を気にして躊躇するなら止めたら? お前様にとって今が「旬」なのだから好きに始めればいい
openGLの売れてる本をアマゾンで買おうと思ったら レビューでいまどき発言が多かったので急に萎えて止めました。 これからもそうします。
はやくMacで4.1書けるようになんないかなぁ GPUは対応してるってのがもどかしい
>>639 そんなに最新がいいならDirextX11でもやれよ。
流行がどうとかこうとかで言語とライブラリを選ぶようなら何もできないから
プログラムなんかやらないほうがいい。多少選ぶことは必要だけど。
×DirextX11 ○DirectX11
OpenGLで日本語をtruetypeフォントで描画するのは どんなアプローチが多い(定石)ですか? またいくつか選択肢があれば教えてください
644 :
643 :2011/05/07(土) 00:34:37.46
すみません wglUseFontBitmapsW でやることにしました。 スルーしてください
glGenListsと wglUseFontBitmapsWで文字を描画できましたが、 この二つの関係がイマイチ理解できません。 glGenListsで生成し、 wglUseFontBitmapsWで作られるディスプレイリスト とはいったい何なんでしょうか? 1文字分のビットマップ?はたまた命令郡? wglUseFontBitmapsWは中で何をしているのでしょうか?
>>646 なるほど、glBitmapを読んで文字を描画する命令郡ですか。
ありがとうございました
openglでのzバッファは -1〜+1で 奥が+ですか? 右手座標で奥が-じゃないかと思っていて結果が逆転したので 質問です。
OpenGL が右手座標系だとかいう話は gluPerspective 等の投影行列が作り出すものです つまり投影行列が Z を反転しているんです 投影行列を通した座標系と投影行列を通さない生の座標系は違って見えます Zバッファ自体 (ウィンドウ座標) は 0〜1 でプラスが奥です 正規化装置座標は -1〜+1 でプラスが奥です 投影行列が作り出す眼点座標はマイナスが奥です
質問です。 OpenGLのバージョンは2.1.0なんですが、3.0から固定シェーダが無くなり GLSLを書く必要があると聞きました。 自分は固定シェーダの表示で全然満足なんですが 将来性を考えるとGLSLを書く必要がありますか。 GLUTによる「手抜き」(ry等で紹介されているような GLSLを書かずいきなり立方体を表示するようなコードは 3.0からは動かなくなるのでしょうか。
固定機能も互換プロファイルとして残ってるよ
実装依存だから必ず動くわけではないけど
http://www.opengl.org/ ここの右側のThe OpenGL 4.1 Quick Reference Guide (PDF)で青文字になってる関数が互換プロファイル必要
趣味なら別に固定機能だけ使っててもいいし気にしなくていいよ
固定機能使えない環境に遭遇したり、ゲーム業界入りたいとか思ったら覚えたらいい
ありがとう、かなり安心しました。 こんなにたくさん廃止されてしまうのか・・・ (逆に、GLSLでこれだけ書けるのか・・・)
すみません、質問です。 以下のコードが、Linux環境では普通に動くのですが、 MacportsにてMesaをインストールしたものでコンパイルの上実行すると、 GLUの関数を用いたところでsegmentation faultになってしまいます。 おそらく非常に初歩的なところで詰まっていると思うのですが、 どこがまずいでしょうか。 #include <GL/osmesa.h> #include <GL/glu.h> int main() { const int width=100; const int height=100; const int u=3; unsigned char* pix = new unsigned char[width*height*u]; OSMesaContext ctx = OSMesaCreateContext(GL_RGB,0); OSMesaMakeCurrent(ctx,pix,GL_UNSIGNED_BYTE,width,height); glLoadIdentity(); gluPerspective(30,1,1,-1); //↑をコメントアウトすると動く glFinish(); OSMesaDestroyContext(ctx); }
呼び出し規約違うんじゃね?
zFar に -1 って指定できた?
試したら-1できた
658 :
654 :2011/05/09(月) 01:11:12.40
このサンプルコードで試したところ、こちらは特に問題ありませんでした。
なぜでしょうか。
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
void hoge()
{
glLoadIdentity();
gluPerspective(30,1,3,1);
}
int main(int argc,char** argv)
{
const int width=100;
const int height=100;
glutInit(&argc,argv);
glutInitWindowPosition(100,100);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutCreateWindow("");
glutDisplayFunc(hoge);
glutMainLoop();
}
なお、
>>654 のコンパイルオプションは
g++ -lOSMesa -lGLU hoge.cppおよびg++ -lOSMesa -lGL -lGLU hoge.cppで、
このサンプルはg++ -lGL -lGLU -lGLUTでコンパイルしてます。
MacPortsのライブラリが置いてある/opt/local/libはLIBRARY_PATHにもLD_LIBRARY_PATHにも含めてあります。
659 :
654 :2011/05/09(月) 01:11:52.55
>>655 呼び出し規約が違うとはどういう事でしょうか?
どのようにその可能性を確かめて、どのように対処すれば良いのでしょうか?
質問ばかりですみません。
>>656-657 私も試しましたが、そこが問題ではないようです。
というか、任意のGLUの関数(他にもgluLookAtなど)でsegmentation faultするようですね。
>>659 呼び出し規約っていうのは関数を呼び出すときに引数をどう受け渡すかとかの決め事で
アセンブラレベルの話。引数を一番後ろからスタックに積むとか前から積むとか
引数はレジスタに設定するとかスタックを戻すのは呼び出し側か呼び出し先かとか色々ある
例えば
>>655 が呼び出し側でスタックを戻す呼び出し規約で関数を呼んで
ライブラリ側では呼び出し先がスタックを戻す規約を使ってた場合
スタックのズレが発生して内部データぐちゃぐちゃ→変なアドレスにreturnとかやばいことになる
俺はWindowsしかわからないから他のOSの事は知らないから
GL/osmesa.hとライブラリの組み合わせがおかしいんじゃないとしか言えない
>>660 ありがとうございます。
一応全てOpenGL関連のライブラリは自分のMacでgccでコンパイルしているはずなのですが、
コンパイラが一致していればアセンブラレベルへの落とし方の違いが問題になるとは考えにくいですよね。
MacPortsスレで聞いたほうが良いですかね?
自分もwindowsしかしらないのでコメントできないのだけど、 前スレの636-637で -lGLするとよくない的なこと書いてあるけど関係ない?
>>662 ありがとうございます。
あの質問者、実は自分でしてw
それで、-lGLを付けたり消したりしたのですが、変わらないですねえ。
Mac OS X なのにわざわざ Mesa を使ってるのか・・・
>>664 一つには、ウィンドウに描画せずに直接画像に落としたいから。
そしてもう一つ、LinuxとMacでできるだけ共通のコードを使いたいから。
以上の理由からMesaを使っているのですが、もっと良い方法はあるでしょうか。
>>665 ひとつ目はテクスチャに書いて glGetTexImage とか使えば良いんじゃないの
Mac OS X にもデフォルトで OpenGL は入ってるよ
二つ目は分からないけど Makefile とかで解決出来そうな気がするけど
外してたらゴメンね
お手軽固定シェーダを廃止じゃなくてもっと増やしてほしいと思ったど素人は俺だけですか
固定シェーダを増やすってどういう意味? どういう形で増やすの? 誰が増やすの? お手軽固定シェーダ廃止を決定する人=お手軽固定シェーダを増やす人?
べつにシェーダー使ったからってすごい難しくなるわけじゃいし、 アセンブラ書けって言われてるわけでもないんだし覚えろよ。 だいたい板一枚表示するとかそういう簡単な作業は現状固定機能で できるわけだし何が不満なんだ。
ど素人が1行書き込んだだけなのに、なんでそんなピリピリしてんの?
ここがム板だからさ!
>>670 たとえOpenGLのど素人でも、質問だけはしっかり意味が通るようにしてほしい
楽したいならゲームエンジンでも使えばいいじゃないか。 Unreal EngineとかUnityとか無料で使えるし。 綺麗な画面がすぐ作れるよ。
674 :
ど素人 :2011/05/09(月) 21:18:14.69
>すごい難しくなるわけじゃいし、 わかった。もう少し頑張る方針で。 今やっと車の一部が出来上がった所でござる
うぜえ
↑結局負けてやんのw
アプリケーションの実行の時、 DirectXではエンドユーザーランタイム等の形で、 実行するための環境を整えなければなりませんが、 OpenGLの場合は、OSにデフォルトで入っている場合が多いと聞きますが、 実行環境を整えるのにどのようなことに気をつければいいのですか? 例えば、GLUTを使っていれば.DLLも同時配布しなければならない等
Windowsの話であればopengl32.dllとglu32.dllはOSに既に入ってる それ以外はないから必要であれば添付する あとはグラボのドライバ更新するくらい
グラボのドライバ更新しなくても最低限保証されるOpenGLの機能セットってどっかに資料まとまってたりしますか
glBegin(GL_LINE_LOOP); glVertex2f(-1.f, -1.f); glVertex2f(1.f, -1.f); glVertex2f(1.f, 1.f); glVertex2f(-1.f, 1.f); glEnd(); と書きましたが、左と下の枠は表示されません。 これは左下のピクセルが(-1,-1)よりも少し+の座標である? と思い glBegin(GL_POINTS); glVertex2f(-1.f, -1.f); glEnd(); と書きましたら点がでました。 OpenGLでは端っこのピクセルの座標は-1や1とは違うんですか? ビューポートをいじくってはいないデフォルトの状態での話です。
ピクセルの端が-1とかになるね。数学的な座標をピクセル系の座標に直そうとするのなら、頂点座標はそれぞれ+0.5px分、座標間の距離などは-1.0px分ずらさなければならない。
赤本には0.25って書いてなかったっけ?
ビューポートと射影行列の関係によるだろう。
685 :
681 :2011/05/11(水) 00:37:55.95
テクスチャ座標とおなじかんじってのがわからんが 点と線は半ピクセルずらせとは言われてるな。
687 :
681 :2011/05/11(水) 01:48:34.13
すみません変な言い回しでした テクスチャでも例えば、正確には0,0が左上のピクセルではなくずれますよね そういった意味で同じ感じという次第です
689 :
681 :2011/05/11(水) 16:15:42.13
>>688 読んでみてもイマイチよくわからなかったですが
とりあえずずらしているというのは分かりました。
まあ何とか今の理解でできそうなのでやってみます。
ありがとうございました。
ココですよね
position.xy -= 0.5;
// Viewport adjustment.
position.xy /= ViewportSize;
position.xy *= float2(2, -2);
position.xy -= float2(1, -1);
OpenGLで雷とか炎みたいなエフェクトを描画してみたいんだけど、 参考になりそうな、サンプルソースとか そういう系を詳しく解説してるサイトってないかな? OpenGL 雷 OpenGL エフェクトとかでググってるんだが見つからない・・
エフェクトのアルゴリズムてDirectXと同じなんだしDirectXのエフェクト参考にしたら? そのほうが資料も多いし。
fire とか effectとか 英語でググれば出てくるよ
絵描きさんに綺麗な雷の絵を描いてもらって板ポリに貼る
雷を細長い4角ポリゴンを繋げて表示するとして ポリゴンをぼやっと光らせるにはどうしたらいい? よくゲームでキャラの周りがぼやっと光ったりするみたいな感じで
>>694 もともとそういうテクスチャ使うかブルーム使う。
雷なぼやけてるテクスチャ描いて加算合成すればいいんじゃないの。
696 :
デフォルトの名無しさん :2011/05/13(金) 23:36:45.19
テクスチャに透過 png を貼り付けて mag_filter の linear した時って透過部分はどういう扱いになるんでしょうか?透過が考慮されていない気がします。単色のオブジェクトにエッジができてしまっている?回避方法ってありますか?
よく覚えとらんがPremultiplied Alphaとかで解決するんじゃなかったっけ
RとGとBとAは別々に補間されるから Aが0の部分でRGBも0になるような画像は補間すると境界部分に黒が見えるってことじゃないでしょうか Aが0の部分もRGBちゃんと色を保ってるような画像なら問題ないでしょう Premultiplied alpha もおすすめ
乗算済みアルファの話はいまだに良くわかんない・・・作り方からしてどうすればいいのやら ひにけにブログとかいくつか読んだんだけど
いわゆるアルファブレンディングは、ふつう、 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); の形で行うけど、これはつまり dstRGB' = srcRGB * srcA + dstRGB * (1 - srcA) という意味だね 乗算済みアルファは、この srcRGB * srcA の部分が事前に処理済みのものを言うんだ srcRGB' = srcRGB * srcA これを以下の形でアルファブレンディングするよ glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); dstRGB' = srcRGB' + dstRGB * (1 - srcA) これだけだ 作り方といってもRGBそれぞれにあらかじめAを乗算しておくだけ 処理時間が許すならglTexImage2Dでテクスチャをロードする直前にやったって構わないし、 そんなところで時間食うのが嫌ならあらかじめ乗算済みのものをファイルとして保存しておけばいいよ
>>700 ありがとう、なんか分かりやすい
なるほどロード時に変換するのでもとりあえず困らないよね
こんだけでバイリニアのサブピクセル処理がうまくいくってのは、計算が分かってもなんか不思議だなあ
ところで何か気をつけることあります?テクスチャ以外でも、たとえば頂点カラーの付け方が違うとか
一緒に使うのなら頂点カラーも乗算済みにしておく必要があるね
あーそうなのか。ライトは同じで問題ないよね? 乗算済みアルファの要点ってこんな感じ? やり方 ・テクスチャの各ピクセルをあらかじめ R*=A, G*=A, B*=A に変換しておく ・ブレンド関数は glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) にする メリット ・バイリニア補間時に黒いフリンジが出ない ・描画がちょっと速い デメリット ・頂点カラーや定数カラー、セカンダリカラー等も乗算済みアルファで設定する必要がある ・テクスチャは不可逆変換なので編集ワークフローへは戻せない(R/=A, G/=A, B/=A でも一部のRGB情報は失われる)
ライトのアルファは使わないから問題ないよ 速いかどうかは知らない、ハードウェアのやることだし同じかもしれない、実環境で測って確かめてみて 俺的には元絵はPhotoshopかなんかでレイヤーとか使って作業してるだろうからpng化した時点で不可逆だと思うよ あとはそんな感じだと思うよ
705 :
デフォルトの名無しさん :2011/05/15(日) 03:58:03.18
>>697 >>698 ありがとう!
確かに透過色黒だったので適当な色にして試してみます!
それでもダメだった場合は premultiplied ぐぐります。
また質問するかもなのでその時は宜しくお願い致します。
Windows上でOpenGL描画領域上にボタンとか置くのってどうやってんだべ。 GoogleEarthとかで出来てるからなんかやり方あるんだろうけど、何もせずに置くと描画のたびにボタンがチラついてまう。
>>706 OpenGLのクライアント領域にボタンおいてもチラつくのは普通。
GEは描画領域とそれ以外の領域に分けてるからできてるんじゃない?使ってないからどの画面を指してるかわからないけど・・・
MFCの上に領域きめて描画とか、.NETでやるならOpenTK入れるとか。
>>708 GoogleEarth をインストールしてないから単なる予想だが、
これってボタン類も OpenGL で描画してるだけとちゃうの?
たとえば、Spy++ でちゃんとウィンドウ ハンドル取れる?
自前のGUIやんけw
OpenGLで2D描画 平面にマップチップを隙間なく敷き詰めたいんだけどウィンドウのサイズによって 隙間があきますどうすれば隙間なくマップチップを描画できますか?
ビューポート
>>708 それコントロールするUI自体がOpenGLで描画してると思うの。フォームでボタンとかじゃなくて。
>713 イベント逐一拾って処理すればそれで出来るだろうけど、組み込みじゃあるまいしそんなスマートじゃないことしてるんかなあ? OpenGL描画領域にボタンを置くと、表示がちらつくだけであって、ボタン自体が見えなくなったり、ボタンが押せなくなるわけじゃあない。 なので、UI領域の描画とOpenGLによる描画が衝突してるだけで、UI領域をOpenGLに描画させないようにすれば なんとかなるんじゃないかなあ、と思ったんだよね。
どう見ても普通のボタンじゃないだろ
>UI領域の描画とOpenGLによる描画が衝突してるだけで、UI領域をOpenGLに描画させないようにすれば これのほうがよっぽどスマートじゃないと思ったわけだが そもそも一般的にGLやDirectXの描画領域にフォームのUI置いたりしない。
OpenGL使うなら普通はUIもOpenGLで書くと思うんだが
ためしにCreateWindow("BUTTON"で作ったボタンを上に乗っけてみたら、特にチラつかないけど( windows7 ) そういう話じゃない?
それはXPDMとWDDMの差だな
# 実際やるかどうかは別にして 例えばglutで LRESULT CALLBACK testFunc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) { switch(msg) { case WM_LBUTTONUP: break; } return CallWindowProc(WCDefButtonProc , hwnd , msg , wp , lp); } ... glutCreateWindow(WINDOWTITLE); HWND hWnd = FindWindow(0,WINDOWTITLE); HINSTANCE hInst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE); HWND hTESTButton = CreateWindow("BUTTON", "color",WS_CHILD | WS_VISIBLE,250,250, 50,24, hWnd,0, hInst, NULL); WCDefButtonProc = (WNDPROC)GetWindowLong(hTESTButton , GWL_WNDPROC); SetWindowLong(hTESTButton , GWL_WNDPROC , (LONG)testFunc); みたいにしてみたらXPでもチラつかなかったけどダメかな
あんな感じにオーナードローとかサブクラス化とかカスタマイズしまくるなら 自前制御の方がよっぽどスマートだと思うけど最近の人は考え方違うの?
自分の場合は金とか時間とかその他モロモロで自前制御不可になることがよくある
Googleアースがカスタマイズしたコントロールを使ってるだけであって、 >714がカスタマイズしたボタンを使いたいって話ではないでしょ。
glOrthoしてZ座標固定でマップチップを敷き詰めたいけどずれるな・・ 0.5とか足さないとダメ?
0.375 かな。
727 :
デフォルトの名無しさん :2011/05/21(土) 18:31:31.17
0.5じゃ多い、でも0.25じゃ少ない。間を取って0.375だ!いまんとこ不具合はねーぜ! っていってた希ガス
d そうなのか なんという・・ グラボのバグでずれたりしません様に
案外ヒューリスティックなのな
730 :
デフォルトの名無しさん :2011/05/25(水) 01:32:20.78
すみません 今シェーダーを使ってワンメッシュスキンアニメーションを表示させるプログラムを作ったのですが パイプライン処理のみでやりたいのですが可能でしょうか? glBeginからglEndの間でGL_MODELVIEWを変化させたいのですが出来ないようです. 普通はどうやっているのか,何かAPIがあれば教えてください よろしくお願いします.
行列パレットやスキニングでググる
>>730 スキンメッシュアニメーションなんて固有の都合をやってくれるAPIなんて
当然ある訳無いってのと、個人の都合で書く処理だから普通は、なんて定石みたいな物も無いんだが、
例えば1例で言えば GLSL でattribute として必要な行列(ボーンとか)と、描画するそのサブセットの頂点分並べた
行列のインデクスでも渡して、VertexShaderで計算して、とかになるんじゃないの?
さもなきゃ変形しない面とする面を分けて、変形はしないけど回転する面群の分は、glMultMatrix で回転して
単純にVBOで描画、変形する面は頂点位置を計算して描画、みたいにするんじゃね
あくまで俺がやってる例で、ただの1例だけど
733 :
デフォルトの名無しさん :2011/05/25(水) 01:55:15.06
>>731 頂点データを弄る感じでしょうか,やってみます.
>>732 >例えば1例で言えば GLSL でattribute として必要な行列(ボーンとか)と、描画するそのサブセットの頂点分並べた
>行列のインデクスでも渡して、VertexShaderで計算して、とかになるんじゃないの?
多分今やってるのがこれだと思います.
>さもなきゃ変形しない面とする面を分けて、変形はしないけど回転する面群の分は、glMultMatrix で回転して
>単純にVBOで描画、変形する面は頂点位置を計算して描画、みたいにするんじゃね
なるほど参考になりました.
ありがとうございました.
>>732 スキニング用の固定機能APIはあるから
ねーよ。OpenGL ESにはあるけどな。 使ったこと無いけどあれ動くの?
glMatrixMode()でGL_MATRIX_PALETTE ってやつはES専用なのかすまんかった
739 :
デフォルトの名無しさん :2011/05/25(水) 15:16:27.40
頂点シェーダについて質問です。 uniform mat4 uBoneMatrix[]; GLES20.glUniformMatrix4fv(_uBoneMatrixHandle, 1, false, _testMatrix, 0); private float[][] _testMatrix = { {1,0,0,0, 0,1,0,0, 0,0,1,0, 0,-100,0,1}, {1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1}, }; としたいのですが、glUniformMatrix4fvに配列(複数の行列)が渡せず、1行列のみ「_testMatrix[0]」などとしなければうまくいきません。 どうやれば配列のMatrixが扱えるでしょうか? スマートフォンのAndroidでOpenGL ES 2.0です。
[][16] [2][] [16][] [][2] どれかならいけると思う どっちだっけな
lineを重ねて描画しようとしたらチラツキが発生してしまいます。 lineはglPolygonOffsetがきかないようですが どうすれば解決しますか? 少しずらすは、チラツキが無くなるところまでやろうとすると 結構ずらしているのがわかってしまいました。
GL_POLYGON_OFFSET_LINEを有効にすればPolygonOffset効くようだけど? だめならシェーダでちょっとずらせ
744 :
デフォルトの名無しさん :2011/05/26(木) 16:22:38.45
740さん、ありがとうございます。 どれも駄目みたいです。
745 :
デフォルトの名無しさん :2011/05/26(木) 16:27:11.47
スマートフォンAndroidのOpenGL ES 2.0のJavaで2D描画するにはどうすればいいでしょうか? OpenGL ES 1.1の拡張機能で「glDrawTexfOES」という関数があったのですが、 そういう感じで3Dの座標でなく、2Dの画面の座標で描画できないでしょうか?
3角形を二つつなげて Z 形を作ります。 それらの頂点にたいしてテクスチャのUVをしていまします。
|Z|<フォォォォ
Ortho で奥行き固定にすればいい
>>743 ちらつきますね。
色が違うとはっきり出ます。
仕方ないので現状は
2度書きの部分をlineWidthで太くしてごまかしてます。
そもそも2本の直線が重なるのか? 動かさなければチラつかないし、動かしたら重なることはないと思うが。 どうもお前の言っていることは信用できない
モニターが壊れてるんじゃね。古いテレビはよくチラつくからな
>動かしたら重なることはないと思うが。 カメラの方を動かしてます。 信用できないってのが良くわかりませんが・・・。
画面うp
ソースupで
ソースはいらないから、まず現象をキャプチャに丸書いて線引いて詳細に
人気に嫉妬 glBegin( GL_LINES ); glColor3f( 1.0f,0.0f,0.0f ); glVertexi( 0,0,0); glVertexi( 1,0,0); glColor3f( 0.0f,1.0f,0.0f ); glVertexi( 0,0,0); glVertexi( 1,0,0); glEnd()
あれじゃない?服と肌のポリゴンが極限に近接してるようなモデルを表示させた場合 GLFloatの精度で足りなくてというか各種誤差が原因でオブジェクトとかカメラ動かすと 服と肌のZが微妙な関係になって乳首が見えちゃうやつ
服の下の頂点は不要データ 俺のモデルはCGソフト上では全裸があるが、自作アプリケーション向けに書き出す版では全部切除してる お前にだけは乳首を見せないい
>>752 同じ頂点からなる線を、同じ行列で変換すれば、たとえ丸め誤差があっても同じ位置になるはずだぞ。
ちらつく原因は何?
>>745-746 OpenGL(固定機能)で2D描画するときって、まず
平行投影にして、原点が画面左上の角になるようにしたら
glRotatef( 90.0f, 1.0f, 0.0f, 0.0f );でY軸を逆さまにして、
そして三角形×2=四角形にテクスチャ貼って画像を描画
て感じが普通なんだろうか。
そもそもカメラつかって座標変換しなくてええよ。 もうちょいプリミティブナ関数があったとおもたよ。 多分初心者向けのチュートリアルで2D座標を直接指定して3角形各サンプルあるっしょ。 あれをちょっと応用するだけで大丈夫。
2D描画する時ってカメラ使わないけどな普通 それからひっくり返しもしない
>>759 多分zfightingだと思います。
ポリゴンの上にエッジを描画するとちらつきますが
それはPolygonOffsetで回避できました。
glColor3f(1,1,1); glutWireTeapot(2); glColor3f(1,0,0); glutWireTeapot(2); 回転させようが、カメラを動かそうが、全くチラつきませんが
ちらつくと主張してるのは1人だけなので 彼がソースを公開するかきちんと自分のやっていることを説明しないと話が進まない
ディスプレイがブラウン管だとか、あるいは目の病気か
glsl の VertexShader でスキニング処理をしてみようと思っています。 uniform mat4 boneMatrices[ボーン数]; のようにして各行列を必要な分だけ送り込みたいのですが、 この行列の配列は、例えば 100個とか送り込んでも問題無いでしょうか (n個が限界、みたいな既定はあるでしょうか)
自分で試す気はないので教えてください。
769 :
767 :2011/05/28(土) 20:28:29.99
最近のグラボはメモリ無限にあるから上限はないよ
771 :
767 :2011/05/28(土) 20:44:58.08
つまりメモリの量で物理的な上限があるから、 既定値でMAXいくつ、って訳じゃないって事ですね。 もうちょっと素直に言えよこの野郎。ありがとう。
いいってことよ
(1/3) Android+NDKでOpenGLを使っています。 glDrawArraysで四角形を描画しているのですが、テクスチャを貼り付けた上で頂点カラーを変えるのは何か設定が必要なのでしょうか。 glColorPointer( 4, GL_FLOAT, 0, vertexColor ); // vertexColorに4頂点のRGBA(=floatが16個分)が設定済み glEnableClientState( GL_COLOR_ARRAY );
774 :
773 :2011/05/29(日) 21:00:37.80
(2/3) glEnable( GL_TEXTURE_2D ); を使用するとテクスチャは貼られても頂点カラーは変わらず glDisable( GL_TEXTURE_2D ); を使用するとテクスチャは貼られないが頂点カラーは設定通り ブレンドは glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); という感じで設定しています。
775 :
773 :2011/05/29(日) 21:02:39.89
(3/3) テクスチャの有無で頂点カラーが反映されるかどうかが変わるのは 何か設定が抜けているものかと予想しているのですが、そもそも出来なかったりするのでしょうか。 (忍法帳がゴタゴタしてて、1レスにまとめられず分割で失礼しました)
glTexEnv つーかシェーダ使えよ
777 :
773 :2011/05/29(日) 21:36:11.58
>>776 ありがとうございます。
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
を入れてやることで期待通りのカラーで表示されました。
GL_TEXTURE_ENV_MODEのデフォルトって元からGL_MODULATEじゃなかったっけ? どこかでREPLACEに変えたのか?
Androidだと挙動が怪しい
OpenGLでsphereとcubeとか基本立体を自分で作ろうと思います。 解説が載っているようなサイトはあったりしますか? 検索したらGLUTとかがいっぱい引っかかって イマイチいい感じのが見つかりませんでした。 よろしくおねがいします。
>>780 自分で作るなら、まずは検索しないで作ってみれば
>>782 ざっと見た感じ全体的にOpenGLの勉強に
やさしい構成になってますね。
ただプリミティブとかは余り記述されてなかったように思えます。
spin.cとかぐらいですかね・・・。
とりあえずもう少し読み進めてみます。
座標さえ計算すれば直ぐできるだろ...
立方体の座標も分からない小学生なんだよ。
>>783 こんな事改め言うのもなんだけど、立方体や球は何で出来てるか、くらいは知ってるだろ?
頂点があって、それらで面を形成してるだけだ。
そして頂点には位置があり、面には向きなんかもあって、これらの組み合わせだろ?
そしていくつの頂点が集まったら最小の面になるか、四角形は三角形の組み合わせ、三角形から頂点一つ取ったら
線分にしかならない。 だから最小は三角形で、差し当たりそこに目星が付くだろ?
という事は、頂点は n個の配列からなり、そして 「どの頂点群をして、面とするか」 は、
なんらかの方法で伝えないといけないだろ? その方法はいくつかのアプローチがあるが、結局どの手段使っても
これらを伝えないと形状にならない事はわかるだろ? って、ここまでは、
実際に三次元CGとか目にしていて、そして cube や sphere を目にしているなら、
特に誰から教えてもらわなくても想像できるだろ? 後はこれらの仮定を実際に形にする関数群が分かれば良いだけ。
プリフィクス "gl" が付いた、なんちゃらプリミティブ、みたいな関数があるはずだと想像。 俺はすぐここまで想像した。
そして大抵の人は普通、そのくらい出来る。 人からのこぴぺじゃなくて頭働かせろ
GL_TRIANGLESとかQUADSとかだったらどうにでもなるんだろうけど 多分、見本のプリミティブはGL_STRIPとかで描いてるんだろうなと思って 探してました。 自分でやろうとすると中々うまくいかなくて 考え方が間違ってるのかなと思い色々探してました。 自分でも何を聞こうとしているのかがあいまいで 質問の仕方が悪かったと思います。 すみません。
そういう事は自分で書いてから家
1次レイしか計算しないならOpenGLでいいわ レイトレなんてどうでもいいからハードウェア(リアルタイム)AOまだー? あと点光源を10000個ぐらい処理できるハード作って
今からOpenGLに入門するなら、前方互換コンテキストでやるべきですよね。 glBeginが許されるのは小学生までですよね。 固定機能でレンダリングしてるロートルなチュートリアルばかりで困る。
チュートリアルなんて宛てにしないで、ヒントを集めてリファレンス辿って仮定の上で実験 その結果、さくっとVBOで実装テスト → 実装まで半日でいけました
そんなわけで床井先生2011年度版OpenGL入門(アドバンス)頼むわ
床井先生も「今風 OpenGL の使い方」っての書いてるじゃん。
>>793 やっぱ固定機能なしだと、OpenGL入門が
リアルタイムCG技術入門みたいな内容になっちゃうんだな。
個人的には無理にシェーダーで何でもやらずに 固定機能をもっと充実させて欲しい。 誰か俺にGPUの作り方を教えろ。
真空管の作り方なら指南できるんだが……
GPUの作り方がわかる頃には、全部プログラマブルシェーダでいいやって心境になるよ。 たぶん。
VBOってアップデートなしの全てのグラボで対応してるの?
>>800 VBOはOpenGL1.5で導入。GeForceFXとかRadeon9X00とかの時代。
相当古いマシンじゃない限り対応してると思う。
OpenGL1.5じゃWindows標準インストールのDLLで対応してないな・・・ DLL添付めんどいから頂点配列でいいか・・・
>>798 真空管をいっぱい繋げたら宇宙になるんだろ?
どなたか、PBOとFBOとは何なのか、というかどういう場面で使うのかを、 三行で説明してくれませんか。
なんちゃらバッファが多くて混乱するよな。 VBO, IBO, PBO, UBO, FBO, TBO, あとなんかあったっけ。
806 :
デフォルトの名無しさん :2011/06/01(水) 23:30:22.19
>>805 Vertex Buffer Object?
Index Buffer Object?
Pixel Buffer Object?
Uniform Buffer Object?
Frame Buffer Object?
Texture Buffer Object?
でいいのかなぁ?
どれも、「どの用途で使う、バッファか」 の違いでしかなくて、 どれも glGenBuffers で作れるからコード上は同じでは
厳密に言うと FrameBuffer と RenderBuffer は専用のglGen*がある。
今OpenGLに入門しているんですが、不安になってきました。 gluPerspectiveとかglLightとかを使うのは時代遅れのやりかたで、 全部(シェーダとかで)自分で計算するのが新しいやり方という理解でいいですか?
>>810 まあそういうこと。
座標変換は、変換行列を自作してシェーダに入力して、シェーダで頂点位置と掛けて出力。
ライティングしたいなら、例えばPhong Shadingとかをシェーダで実装する。
計算式とかを学びながら一歩ずつやっていけばそんなに難しいことじゃないよ。
ちなみに、OpenGL3.xは互換プロファイルで過去の機能も使えるけど、DirectX10以降はこれやらないと何も表示できない。
>>811 ありがとう。雰囲気がだいたい分かりました。
今さら古いやりかたを学ぶのは嫌なので新しい方法に切り替えて挑戦してみます。
>>812 射影変換→ビュー変換→モデル変換→基本的ライティング→基本的テクスチャリング
の流れで1つずつ行列作ったりシェーダ書いたりして進んでいくと良いよ。
Now Loading画面をマルチスレッドでやろうとしてるんだけど、 データ読み込みスレッドでデータをロードしたとしても、OpenGLはスレッドセーフじゃないから、 最終的に描画スレッドでglBufferDataとかを呼ばなきゃならないですよね。
メインメモリからGPUメモリへの転送は一瞬だからそれで問題ないんじゃね。
>>814 俺の方法(OpenGLでもDirectXでも)だけど、
起こしたスレッド側でデータロード
→ 予めスレッド側に渡しておいたコールバック関数で進捗報告 → カウントさせる
それはそれとして、timerfunc で呼び出す描画処理ルーチンは、↑のカウントをいつも見ている
それに従って単に描画。 こんな感じ
読み込みスレッド→メインスレッドは同期キューでデータを受け渡して、 キューにデータが送られてきたらOpenGL命令でGPUへ転送ってのがシンプルな気がする。 だけどC/C++でやるのは手間かかるか。Java/C#/Pythonとかなら標準ライブラリに同期キューあるんだけど。
>>817 >だけどC/C++でやるのは手間かかるか
全然。
俺はいつも boost::thread、boost::mutex 使うから楽勝。C#、Javaよりドシンプル
同期キューってスレッドセーフなキューってことか。 教養ないから知らなかったわ。マルチスレッディング界では常識なのか。
GLES2.0の本はあるのに、GL3.0の本がない。
4.0の本もあるね
4.0のは仕様書で、教育的な本じゃないよね。
すまぬすまぬ
いえいえ
825 :
デフォルトの名無しさん :2011/06/03(金) 16:09:21.77
2D画像を全画面で読み込むときにOpenGLだと2のべき乗表示にする為 スマホが比率 横2/縦3に合わせると画像の収縮で画像が横長になった り縦長になったりします。 この場合、もと画像の比率を調整して2のべき乗と近いサイズで作る しか方法はないのでしょうか? Androidスレで質問しましたが、こちらのほうがよさそうなので転記します。
OpenGL 2.0 ESは non-power of 2 texture 使えないのか。
827 :
825 :2011/06/03(金) 16:30:05.44
>>826 端末ごとに使えたり使えなかったりすると困るので
使えても使わないです。
>>827 >使えても使わないです
それならば
>もと画像の比率を調整して2のべき乗と近いサイズで作る
>しか方法はないのでしょうか?
この質問出ない気がするが
自前でbitmapデータをtransform するとか、予めそのような画像用意するしか無くね
質問の意図がいまいちわからんのだが、 非正方形テクスチャが使えないなら、正方形のテクスチャ用意するしかないよ。 width' = int(2 ** Math.ceil(Math.log(width, 2))) height' = int(2 ** Math.ceil(Math.log(height, 2))) なサイズの画像の左上に元画像をいったん転写して描画。
ああ、ES2.0は使わないという意味か。
なまじ2の階乗サイズでないテクスチャーが使えるのが悪いよな。 男は黙って2の階乗。
>男は黙って2の階乗 総画素4pixelで何を表現するの?
まあ、いったん2のべき乗まで画像の余白を広げて、 適切なUV設定して描画するしかないわな。
834 :
825 :2011/06/03(金) 18:16:44.35
>>829 2のべき乗であれば正方形じゃなくても大丈夫ではない
でしょうか?
>>830 ES2.0対応の端末ばかりだとよいのですが・・。
>>833 今その方法で検討中です。
835 :
825 :2011/06/03(金) 18:19:44.74
>>829 なるほど!返答の意味がわかりました。
2のべき乗の画像を用意して転写して、端末から見える領域を
指定するということですね。
836 :
829 :2011/06/03(金) 18:29:47.79
>>835 混乱させてすまん。
"2のべき乗"と書くべきところをなぜか"正方形"と書いてしまったんだ。
837 :
829 :2011/06/03(金) 19:37:11.57
WebGLのことを、シーングラフを作って描画する程度のAPIだと思い込んでいた。 実際は、OpenGL ES2.0 のAPIを直接叩くものなんだね。こりゃ楽しめそうだ。
WebGLは脆弱性がどうたらこうたらって。 あれ解決したのかな。
JavaScriptでOpenGLとか何の冗談だと思う
x-y平面にZ座標固定で2D描画した場合ポリゴンを最後にglBeginしたものが 一番手前にみえるようになると思ったんだんだけど最初に書いたものが手前になる気がする そういうルールなんですか?
>>842 Zテストの通過条件は glDepthFunc(func) で変更できる。
引数funcは、GL_NEVER, GL_LESS, GL_EQUAL, GL_LEQUAL, GL_GREATER, GL_NOTEQUAL, GL_GEQUAL, GL_ALWAYS のどれか。
初期値はGL_LESSなので、既に描いてあるものよりもさらに手前じゃないとZテストを通過しない。
GL_LEQUAL (less and equal) にすれば同じZ値でも通過するので、お前さんが意図してた挙動になる。
>>842 どっかでglEnable(GL_DEPTH_TEST)ってやってる気がする
DEPTH_TESTやめちゃえば最後優先になる
寝ろ
(^o^)/ オヤスミ-
>>843 デプスなファンクもあったんだ・・・なるほど覚えておきます
>>844 エスパーきたこれ 3D描画やったときの初期化関数コピって入ってた・・・
ファンクなデブス
おぺんぐる楽しいお。
>>840 これは非常に乙。
次スレ、テンプレに入れるべき。
852 :
デフォルトの名無しさん :2011/06/04(土) 19:47:24.98
man-pagesからスクリプトで抽出しただけだよ。 サマリーが付いてると便利かなと思って。あと固定機能が邪魔だったから。
853 :
デフォルトの名無しさん :2011/06/04(土) 20:33:38.59
ところで、最近はOpenGLにも3Dモデリングソフトで作成したデータ を読み込む機能、あるいはそのようなライブラリが第3者によって 提供されているのでしょうか?DirectXのように。
提供されてなければ作ればいい
ちょっとまえに作ってた人がいなかったっけ? Androidのスレだっけ?
んなもん無数にあるだろ。
>>853 俺もそうだけど、大抵は自前で書いたのずっと使ってたりするんじゃないの?
特殊な用件でもなければ、書く内容は決まってる訳だし
ファイルフォーマットがそれぞれ各人の都合でバラバラで、
安直に 「これだけでおk」 みたいなのはあり得ないから、そんな訳でみんな自前で1度は書くと思う
めんどくさがりの俺ですら自分で書いた
>>853 そんな者あったら、その第三者の都合に沿った物しか作れないじゃん
COLLADAは各種ソフトを連携させるための中間データという位置づけ。 最終的には効率のよい独自形式に変換したほうがいい。
>最終的には効率のよい独自形式に変換したほうがいい まさにこれ。 例えば DirectX だって、D3DXMESH とかデモ書く時くらいしか使わないのと同じこと
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)をセットしたとき、 glDrawArrays (VBO) で描画するときにはちゃんとポリゴンがワイヤフレームで表示されるんだけど、 glDrawElements (VBO+IBO) で描画するときは一切何も表示されなくなる。 これって仕様? それともドライバのバグ? 誰か検証してくれるとうれしい。
864 :
863 :2011/06/05(日) 08:29:58.96
他のマシンで試したらちゃんと表示されたので、 ドライバかグラフィックボードの問題のようです。
こっちでも普通に動いてる。
新しい機能じゃあるまいし以前からある機能がグラボ・ドライバに影響されるとかまじやめて欲しい
>>855 オレオレ。
OpenGL気に入らないからM3G作った。
LinuxとAndroidで動く。公開してるけどユーザーは(俺以外)居ない。
Android ABC 2011どうすべ。出すか出さないか...
>>867 多分OpenGLerの半分は似たような事してんじゃね?
M3Gは色々知識不要で作れるからな
Android の OpenGL ES 2.0 で EGL_CONTEXT_LOST が起きたときの動作を確認したいのですが、 どのようにすれば簡単に EGL_CONTEXT_LOST を起こせるでしょうか? 複数の OpenGL アプリを同時動かしてもプロセスがキルされてメインメモリが先にが消えるのですが。
スリープから起こすとかじゃだめか
スリープから起こしても EGL_CONTEXT_LOST は発生しなくて、テクスチャや VBO は再読み込みせずに そのまま使用できています。
テクスチャのuv座標が同じ設定でも貼り付けるxyz座標によってuv座標もずれる気がするんだけどそういうもの?
気がするだけなら気のせいだろ
あ、ずれる
マッピングがUVじゃなかったりして あるいは誤差か
テクスチャにperspectiveかかってんじゃね。
ソースも出さずにズレるだとかチラつくだとかいうのは全部釣り
Android 2.1 (android-5) をターゲットとするとき NDK で拡張関数のアドレスを得るにはどのようにすればよ いでしょうか? "GL_OES_mapbuffer" に対応していることが分かっているときに glMapBufferOES のアドレスを得るために以下 のようにしたのですが NULL が返ってきました。これを呼び出すスレッドにはカレント EGL コンテキストが 設定されています。 void* handle = dlopen("/system/lib/libEGL.so", RTLD_LAZY); PFNEGLGETPROCADDRESSPROC GetProcAddress = (PFNEGLGETPROCADDRESSPROC)dlsym(handle, "eglGetProcAddress"); PFNGLMAPBUFFEROESPROC MapBuffer = (PFNGLMAPBUFFEROESPROC)GetProcAddress("glMapBufferOES");
二言目にはソースをという奴は 本当にOpenGLさわったことあんのか?って奴も多いけどなw
そうだな。悪いのはお前のコードじゃなくてOpenGLだからな。
glViewport(0, 0, Window幅, Window高さ); glOrtho(0, 固定幅, 0, 固定高さ, 0, 1); で例えば赤と青の市松模様のテクスチャの青の部分を貼っといて Windowのサイズをぱこぱこ変えるとサイズによって赤い部分が0.5ピクセルくらい表示されることあるね
フィルタかかってるだけじゃね
あぁあるね 0.5とかシフトしないと1ピクセルの線が綺麗に出なかったりする
ちなみにDirectXでもなるよね
>>884 0.375を入れろと紙(赤本)は言っている。
ほんの200レス前でも話題になってるけど、 0.5って言う定数じゃなくて、ビューポートのサイズに合わせて計算するのが正しいんだろうね、MSの実装を見た感じだと。
その辺は気にしたら負けだと思ってる
シェーダーでピクセル座標、直接指示出来ないんだっけ?
できない。テクスチャからピクセル座標指定してとってくるのは確かTexelFetchかなんかでできたけど。
WindowsのAeroとかLinuxのcompiz/mutterとかは どうやって綺麗にテクスチャ貼ってるんだろうか。
CGソフトでUVを好きに指定して、結果を吐いて自分でロードするだけでは
>>896 ぐは。そういう事かスマン
それ、例えばWindowsなら現在のウィンドウのDCから
Bitmapイメージ取れるから、それをリアルタイムでテクスチャとして渡してるんだろうなって
普通に思った。 win32としてWindow領域のBitmapデータ
OpenGLとして動的変更テクスチャ。 そんな連携
898 :
デフォルトの名無しさん :2011/06/10(金) 21:43:22.09
>>896 Windowsも、今はこうやってポリゴンにウインドウ貼って描画してるんだよね。
ここまで派手なエフェクトは実装されてないけど。
質問です。 ラスタライザで perspective-correction するのにビュー座標系でのz座標の情報が必要になると思うのですが、 クリップ座標系のw座標を使っているという理解でOKですか?
>>899 たしかそう。
Vertex Shaderの次でw除算されるけど、そのときに実はwの値を保持していて、
パースペクティブコレクションに利用する。んじゃなかったかな。
Vertex Buffer Objectが、APIではGL_ARRAY_BUFFER。 なんで名前付けがこんなにいい加減なのか。
そこに颯爽とVertexArrayObjectが登場! 混乱に拍車をかけるぜ
OpenGLのネーミングセンスは脳みそにウジが湧いてるレベルだよな 本当にどうしようもない。
>>901 とりあえずそれについて言うなら、単にそれ専用じゃないからじゃね
単に配列バッファを 「Vertex Buffer Objectとして」 使ってるだけだから
なので、
>>901 についてだけなら、別にいい加減とは言えない。見方が違う
VAOはわざと混乱を誘ってるとしか思えないネーミング。 DirectXとは比べたくないが、あっちは確かInputLayoutっていうまともな名前だし。
慣れれば気にならない。
VertexArrayObjectの名前は確かにひどいな。100%誤解を招く名前だろw
ディスプレイリストの複数ID取得もカオスだぞ。 ポインタじゃねぇのかよ・・・。
>>908 そういう用途は普通ポインタじゃなくてハンドル(ID)形式にするだろ
常識的に考えてww さもなきゃ P-Implポインタみたいにするだろうけど、そこまで冗長にする必要無いし
要はこういう実装
#define HANDLE unsigned int;
std::vector<なにか> g_list;
HANDLE glCreate(いろいろ) {
// コードイメージ
g_list.push_back(なにか(いろいろ));
return (HANDLE)g_list.size()-1;
}
void glほげほげ(HANDLE id) {
なにか *p = g_list[id];
// 略
}
Openになる前のglからの仕様だし、古くさいのはしょうがない
携帯端末のおかげでいきなり賑わっててワロタ
いろんなところで使われるようになったね。 * Android (ES1.x, ES2.0) * iPhone/iPad (ES1.x, ES2.0) * PlayStation Vita (ES2.0) * Nintendo 3DS (ES1.1+拡張) * WebGL (ES2.0) * Wii (OpenGL風API) * Wii U (わからん)
風でもよかったらDSやPSP,PS3も入れてやって
WiiUはラデHD4xx0相当らしいし OpenGL3.x+ATI&AMD独自拡張相当かと
そろそろOpenGL ES 3.0とかが出てきても良い頃だな。
917 :
デフォルトの名無しさん :2011/06/19(日) 19:16:41.37
最近ここがにぎわっていて嬉しい。この調子で行こうぜ
こんな奴がいるからシラケるんだよな
シラケていこうぜ!
シ☆ラ☆ケ!
未だに固定機能も需要あるんだし 同じOpenGLの古バージョンにしてほしくないような
OpenGL ESや固定機能関係の話題が多いが OpenGL3, 4あたりの話題が少ないような気がする。 そこらへんの機能を使っている人はちゃんとOpenGLの仕様書とか読んでいる人で 質問する事もないのかもしれないが。
間とって1.1しようよ
8thマダー?(・∀・)っ/凵⌒☆チンチン
925 :
デフォルトの名無しさん :2011/06/21(火) 01:11:38.96
使っている人が居ないだけと断言できる。 どう考えてもOpenGL3や4をバリバリ使っている人がいるとは思えない。 OpenGLはこのまま衰退してく斜陽API
OpenGLが衰退ってのはまずなくてESのおかげで伸びてる。 まぁPCのみに限るならそこまで伸びてないだろうけど。 ただ、DirectXにしろOpenGLにしろそろそろラスタライズベースの3DCGがあと数年でレイトレとかに代わられそうな気がするから、そうなれば激変すぎて新しいAPIの登場、 もしくはOpenCLとかに取り込まれたりするのかな。
レイトレになったとしてもHWはともかくAPIがそんなに激変するとは思えないけどな。 せいぜい数十個単位で命令が増えるぐらいだろ。
既存のシェーダーがいらないなら解放して、シェーダーをコンパイル・リンクしなおしてglUseProgramで切り替え。
>>929 単に上のDeleteして元のプロセスを繰り返せばよかったのですね
ありがとうございました
931 :
デフォルトの名無しさん :2011/06/23(木) 10:56:05.81
AndroidでOpenglのアプリケーションを作っています。 画面タッチイベントでどんどん画像を切り替える画面で タッチをかなりの速度で行うと、画像の読込が追いつかないのか テクスチャが表示されなかったりします。 マップオブジェクトでテクスチャIDの再利用などを行って 同じテクスチャを読ませないなどの工夫をしているのですが、 処理がバックグラウンドにいくとロード済テクスチャが消えたりするので 随時読み込むようにしています。 タッチイベントが続くと何度も読み込むので、読込速度を 早くする対応をしていますが、限界があります。 画像の質にこだわりたいのでこれ以上読込速度は改善できません。 その場合、タッチイベントが複数会発生した場合の 速度を下げてテクスチャを読み込む時間を確保してあげるのが 得策でしょうか?できれば一般的にどうしているかという点が聞きたいです。
OpenGL の話じゃねーな。スレチ
どうみてもOpenGLの話だろう。バカか
一般的には間に合わなくなったらチョッと待ってね画面でアイコンがクルクル回ったりすんじゃね
お前がそう思うんならそれで良いよ。
アイコンクルクルとか正にOpenGLの話題。
3Dデータ読み込むときって何のファイル形式使ってる? やっぱファイル解析から始めないとダメ?
メタセコイアのmqoのローダなら作った
mqo読み込むのは作者が非推奨にしてるがな・・・
自前でadd-in作って独自のフォーマットで出力を推奨だっけか
blenderのマテリアル設定が個人的に簡単だから メタセコでモデリング→blendで諸々設定にしてるんだけど 解析をわざわざ勉強してまでblend読み込みやった方が良いと思う?
>>941 俺 Blender ユーザだけど、blend ファイルを直接読んでもメリット薄いから
普通に Python で書いた Exporter で欲しい情報吐かせてる。
言い方変えると自前フォーマットとも言うが。 内容はメッシュとボーンとマテリアルとテクスチャと、あとモーション
プログラムでプロシージャルにモデル, テクスチャ, アニメーションデータを作れば ファイル読み込みなんて面倒な事を考えなくて済むのに。 プログラミング好きなら、モデリングソフトと格闘するよりプロシージャルにやる方が楽しいのに。 趣味プログラムならそれでいいけど、実社会ではそうはいかないよね。 世知辛い世の中だよ・・・
>>944 それ考えた事ある。テクスチャについてはレンガ模様をロジックで作った。
モデルに関しては、天球とかビル街の遠景は作るが、人体はロジック練ってる途中であと忘れてた
商業用に満足なクオリティにはほど遠いからな。 趣味でいいなら随分前から研究はされている。
シェーダーならPixarが20年前から実践してるな。 あそこはテクスチャーなどという軟派な事はしていない。
ボカシとかゴミみたいな、本当にちょっとした 表現のテクスチャはプログラムで作っちゃうなあ。 こないだやった仕事でもプログラムでやっちゃった。
949 :
938 :2011/06/24(金) 19:29:14.42
自分は機能的にはobj形式で十分だけど、 メタセコ無料版はなぜかobj吐けないんだ・・・ で、わざわざ変換させるのも面倒だったのでmqoで読んでるorz
5000くらい出してやれよ・・・
もう十分稼いだんじゃないか?
OpenGLをちょこちょこネットで調べて3Dをやり始めてます。 OpenGLプログラミングガイド買おうか悩んでるんですが やっぱり英語版でも最新版無理して買ったほうがいいんですかね? 実際バージョン3〜4って必要なのかよくわかりません。 ただ古いと推奨されてない関数なんかもあるみたいで悩みます ここで必読とされてるのは プログラミングガイド 原著第5版 なんで最新の機能とかあんまり使われてる感じでもないんですが…
こんな奴は買ってもどうせ読まないんだろ
>>949 メタセコ無料版でモデリング → 3DAceでmqoをロード → そのまま objでもなんでも書き出し
これでおk。3DAce についてはググれ
>>953 熟読はしないですね
辞書的な使い方をしたいと思ってます
私ぐらいのレベルならネットで調べれば十分かもしれませんが、
日本語の情報がネットでは少ないと感じたので
体系的な本が一冊あればと思いました
俺は結局本買わなかったけど、持っていたい気持ちはわからないでもない
>>596 たしかに持っていたい(買いたい)のも大きいですね
でも「もっと簡単な方法があるかもしれん」とか
「ネットで調べまわるより時間が節約できる」
とかも思っています
個人的にはバージョン2でも問題ないのかな思っていますが、
3Dプログラミングをバリバリやっている方は
どう思っているのか気になりました。
学ぶのに使うなら最新じゃなくてもいいんじゃないかな しかし慣れるとリファレンスとしては公式の関数リファレンスの方が便利だし読まなくなるのでまずは図書館とか探してみるのをおすすめする GL2以前の古い機能は使わないようにしたいというなら、GLES2の情報を調べてみるのはどうだろう GLES2の本も最近は多いだろうし古い関数は省かれてるから、デスクトップのOpenGLでも参考になる
・大きな本屋が開いてる時間に買いにいけない。 ※いつも帰りが遅い為 ・Amazonとかで取り寄せようにも、知りたいポイントが書かれているかどうかがわからない本は買えない ・週末まで待つくらいなら、夜中や昼飯時に調べて実験した方が早い ・いくつかの情報照らし合わせて実験して、ヘッダ覗いてテスト書いて… 結局買わなかった。 とりあえずやりたい事をさくっと実現出来てるのでOKだが、単純にリファレンスなら欲しいかもしれない
>>958 ありがとうございます
すみません…公式の関数リファレンスとはネットの情報ってことでしょうか?
古い機能は使わないようにしたいというわけではありません。
ドライバ?グラフィックボード?なんかで今後ある程度サポートされるなら
別に古い機能でもいいと思っています
うぜえ
>>959 ネットで検索したら日本語でも十分ってことでしょうか?
私も今の時点では、やりたいことはできています
2枚重ねるような、なんちゃってオーバーレイもなんとかできました
ただ本当にこれでいいのかなって疑問が消えないだけなんです
でも買わなくてもある程度できそうですね
>>962 十分かどうかはその人の要求次第だから聞かれてもなんとも言えない。
ただ、「本当にこれでいいのかって疑問が消えない」 感じは別に悪い感覚じゃないから、
それを晴らすために何か手に取るのは良い事じゃね
俺はとりあえず、BlenderからExportしたキャラクターをリアルタイムでアニメーションさせて
ウォークスルーの延長が出来れば良かっただけさ。 あとGLSLとか
>>963 専門で3Dをやるわけではないので、要求は高くないです
学ぶんなら最新でなくてもいいという意見もあるので
高すぎるのがネックですが
OpenGLプログラミングガイド 原著第5版
を検討したいと思います
古本でも12000円ぐらいするのは
まだまだ需要があるんでしょうね…
次スレ。
正直俺はOpenGL勉強し始めた頃は日本語情報少ないとかあっても古い固定機能ばっかりって感じだったが、 色々試しつつ海外のフォーラムで質問したりとかしてるうちにある程度は使えるようになった。 中高生レベルの英語でもあればちゃんと推敲すれば海外のフォーラムでも答えてもらえる。
>>966 やっぱり日本語情報少ないって感じるんですね
正直、3D興味なかったころでもDirectXとかOpenGLなんかは
よく目にしててよっぽど情報あるんだなと勘違いしてました
英語のサイトも見に行きますが
ソース見て雰囲気だけ分かった気になるのが
ちょっと怖いです…動けばいいんですけどね
逆に考えると日本語のちゃんとしたOpenGLのサイトを作ればアフェリエイトで稼げるんじゃねーの?
ビジネスチャンス!!
>>964 3Dで何をやるのかな?
簡単に3Dなプログラムを作りたいという程度なら直接OpenGL使うより
OpenSceneGraphとかUDKとかの有名なライブラリ、ゲームエンジン等を使った方が楽だよ。
OpenGLはライブラリではなくて、
様々なGPUの機能を共通したインターフェースで扱えるようにするための仕様に過ぎない。
最新ハードの性能を最大限に引き出したクールな4k intro作りたいとかなら
OpenGLの仕様書(無料)をダウンロードして勉強すべし!
お前頭いいな! 床井先生みたいに書籍にするという手もある。 OpenGLのサイトが増えるのは大歓迎。
970 :
デフォルトの名無しさん :2011/06/25(土) 11:25:52.41
LinuxでOpenGLのコンテキストを作成するのにXを使わない方法は無いでしょうか? やりたい事は3Dモデルをフレームバッファにレンダリングして画像として保存するだけ、画面上に表示は行いません
>>970 CUI上でバックグラウンドレンダリングしたいって話?
OpenGLって、最終的にグラフィクスボードへ描画指示をする関数群と
その周辺の関数群になるわけだけど、そんな奴に対して、
「描画系の関数に描画させずに結果だけ欲しい」 って話にならないかそれ
…GLUT使わないでGL関数だけにしたら、行けるのかな? 確認しないとわからないが
ちなみに、リアルタイムレンダラでない、既存の統合系3DCG製作ソフトとかは、 ソフトウェアで各種計算をして最終的に描画結果を得る訳で、 そっちのイメージを持ってるのだとすると、そもそもレイヤが違う。 OpenGLやDirectXが担当するのは、その手のソフトで言うなら編集作業の方の画面だから
コンテクスト作れば簡単にできるだろ。お前は何を悩んでるんだ。
974 :
970 :2011/06/25(土) 11:46:01.99
>>971 >CUI上でバックグラウンドレンダリングしたいって話?
その通りです
>>973 そのコンテキストを作成する方法を教えて頂けますか?
今はglxCreateContextでコンテキストを作成しています
mesa とか改造すればできるんかね。
そこまですると、めさめさ大変になってしまうな とか言って
以前Mesaを弄ったときに、 新興OSでもMesaが使えるように任意のメモリ領域をカラーバッファとして使えるようにするオプションがあった気がする。 MesaのMakefileにそういうオプションの説明があったような気がする。 でもオフラインレンダリングしたいなら、オフラインレンダリング用のライブラリを探して使ったほうが 簡単に綺麗な画像が得られるんでないだろうか。(pov-rayとか?) どうしてもOpenGLを使わないといけないというわけでないなら、そういうのも考えてみたら?
978 :
970 :2011/06/25(土) 16:43:25.76
>>977 なるほど
精度より速度が重要だったのでOpenGLを検討していましたが、
そういうライブラリも検討してみます
ところで
>>973 のようなxglにもwglにも依存しないコンテキストは
簡単に作成出来るのでしょうか?
wgl で pbuffer のコンテキストを使ったことあるが、pbuffer のコンテキストを作るためにウィンドウに結びついたコンテキストが必要になるから一時的に見えないウィンドウを作りました。 おそらくコマンドラインでもで動くと思います。 egl の場合はコンテキストとサーフェスが切り離されているのでウィンドウなしで pbuffer サーフェスを作成できます。
準備 ・トゥーンシェーダをひと通り調べる ・余力があれば周辺の論文を読んでみる 実践 ・3DCGソフトで試行錯誤して自分の理想のレンダリングを作る ・ブレイクダウンしてシェーダにする
1ランク上を狙うなら茶時方式がよいかと
でもお高いんでしょう?
茶時方式ってなんぞ
頂点数とエフェクトとCPUで頑張る。 一番重要なのはテクスチャーだと思うけど。
ベイクしたテクスチャでいいならそれが一番楽
そこでセンシティブトゥーン
エロで技術革新が進むことは稀によくある
次スレそろそろ立てんと落ちるんでないかい?
お
と
し
ま
り
す
Lv不足で立てられんっす
よ
1000!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。