1 :
デフォルトの名無しさん :
2005/11/06(日) 01:29:26 このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
OpenGL使いが優しくコメントを返しますが、
お礼はOpenGLの布教と初心者の救済をお願いします。
OpenGL Home Page
http://www.opengl.org/
とりあえず2
3 :
デフォルトの名無しさん :2005/11/06(日) 01:36:32
カスどもがwww
4 :
デフォルトの名無しさん :2005/11/07(月) 14:29:40
光源の設定方法がわかりません
>>4 具体的にどこがどうわからんのか書かないと、答えようが無いよ。
物体が真っ黒なのか、色はつくけど光のあたり方がおかしいのか。
OpenGLは終了が確定したから、今から3Dやるなら素直にDirectXにしとけ。
7 :
デフォルトの名無しさん :2005/11/12(土) 03:50:56
このスレでは回答者は全員ツンデレという設定。
>>4 フン、どうせ法線を設定し忘れたか
glEnable(GL_LIGHT*)書き忘れてるんでしょ!
図星でしょ?それくらい分かるわよ!いつもあなたの事見てるから…
>>6 べ、べつにOpenGLなんかどうなってもいいんだから!
10 :
デフォルトの名無しさん :2005/11/20(日) 15:17:44
OpenGLとDirectX共用できるコードの書き方はありませんか?
何を聞きたいのか意味不明。
これの意味が分からないってのはなんだな もっとも説明しようもないが それ系のいまいちなライブラリ漁るか、高いエンジン買うか、 自分でAdaptorパターンあたりで実装するしか無いんじゃね
そこでエレファントですよ
14 :
デフォルトの名無しさん :2005/11/22(火) 15:20:32
一定時間ごとに更新してアニメーションさせたいのですが 一定時間ごとに関数を呼ぶような命令か時間を計る命令はないでしょうか?
>>14 glutTimerFuncという関数を使って、一定時間ごとに呼びたい関数を
指定すればよいと思います。
>>15 使い方を調べているとglutTimerFuncのほかにglutIdleFuncも見つけました
比べてみてglutTimerFuncが最適でした
ありがとうございます
光源に対してスペキュラとかディフューズとかアンビエントとかを設定するのがキモスです。 どうにかして下さい。 概念的に正しいの?歴史的な理由でもあるの?
スペキュラとかディフューズとかアンビエントとかっていうのは、 別に物理的に光がそういう振る舞いをするわけではなく それっぽく見えるような計算式で近似しているだけ。 近似の仕方には色々あるのだから 出来るだけ色々な設定が出来るAPIが良いと考えたんだろう。 同じ値で使いたければ同じ値を設定すればいい。
GL_AMBIENT_AND_DIFFUSEもあるしな。
教えてください。 立方体とそのエッジを書いたとき、エッジのところどころが面に 隠れてしまって、点線に見えてしまいます。 陰面処理は行い、データ上同じ座標になるエッジを面より前に 表示するにはどのような処理をすればいいのでしょうか。
glPolygonOffset
22 :
20 :2005/12/05(月) 10:03:35
>>21 ありがとうございました。できました。
glPolygonOffsetというのは、ポリゴンとポリゴンが重なるとき初めて影響が
出てくるものであって、ポリゴンと線分(GL_LINES)ではダメなのかと思っていました。
アドバイスを頂き、ダメモトでやってみたところ、あっさりと実現できました。
本当にありがとうございました。
23 :
714 :2005/12/10(土) 01:31:32
DirectXでXfileを読み込むように、3DCGソフトでモデリングしたデータをopenGLで読み込むような関数ってありますか? やはりみなさん自分で作っていたりするんでしょうか。
>>23 DFXとVRMLならライブラリがあるぞ。
25 :
デフォルトの名無しさん :2005/12/11(日) 00:25:53
>>23 OpenGLには備わってナイYO
自作するか、他人の作ったライブラリーかな
26 :
23 :2005/12/11(日) 03:27:59
なるほどー、ありがとうございます ライブラリ探してみます
D言語でOpenGLを使いたいんですが 何処かに解説してるサイトはないですか?
あとは、ABAさんのゲームのソースとかか?
質問です。 openGL+GLUTで効果音使おうと思ったのですが、使えない・・のですよね? クロスプラットフォームならSDL等。 依存ならWIN32APIとかdirectXとかになるのでしょうか?
だね。 OpenALって手もあるけど、なにぶん資料が少ない
>>32 OpenALって知らなかったです。
しかし、SDLはかなり昔ちょこっと使ってた事があるので、SDLにします。
ありがとうございました。
pilotviewを使った、キーボードによる3D空間の移動を行いたいんだけど どうしてもうまくいかないのです・・・ カメラの回転がどうしても原点中心におこなわれてしまうのですが、どうすればいいのでしょうか?
gluLookAtを使えばいいと思います
36 :
34 :2005/12/27(火) 14:06:30
gluLookAtは最初使ってみたんだけどダメで、pilotviewの方がいけそうな気がしていたんですけど・・・ LookAtにもう一回チャレンジしてみます
37 :
34 :2005/12/27(火) 15:52:54
結局、pilotviewを使って完成しました。ありがとうございました。
OPENglの画面表示ってレイトレーシングで行われているんですか?
>>38 ちょwwww
それ初耳だが凄いw
マジだったらあの速度で動くGLは神だww
OpenGLで表示したものを画像として保存したいのですが 方法があるのでしたら教えていただけないでしょうか?
41 :
デフォルトの名無しさん :2005/12/29(木) 02:26:34
一つのオブジェクトの、とある部分にはテクスチャを張って、とある部分には張らない、ということを 行ないたいのですが、どうもうまくいきません。 張りたい部分のところで glBindTexture, glEnable(GL_TEXTURE_2D) を行なって、張りたくないところで glDisable(GL_TEXTURE_2D)しているのですが、これって間違ってますでしょうか? もしかして EnableDisable は全体に影響してしまう?
>>40 PrintScreen KeyもしくはglReadPixels()
>>41 それで良いが、glBegin() glEnd()の間でやっちゃダメ。
glutSolidSphereで球を表示されると一つ目に表示させた球だけ Z軸に沿う方向に変な黒い丸が表示されてしまうのですが回避できないのでしょうか?
44 :
41 :2005/12/29(木) 23:22:48
>42 glBeginとglEndの間でやっちゃってました…。 修正したら動きました。どうもでした。
点光源を沢山並べて麺光源として扱いたいのですが、OpenGLでは8個以上並べることは出来ないのでしょうか?
面光源を使いたければ、自分でライティングの計算をしなさい。 シェーダでやってもいいし、事前に計算して頂点カラーなどに入れても良い。 処理速度に気を使うなら、点光源を大量に使うことは、たとえ出来たとしてもお勧めしない。
三角ポリゴンをワイヤ表示しようと思って GL_LINE_LOOPでglArrayElement3回ずつ呼ぶより GL_TRIANGLESでglDrawElementsをglPolygonMode(GL_FRONT,GL_LINE)で 呼んだ方が早いじゃないですか>< こんなテクもっと教えて^^
gluLookAtで指定した視点とかのパラメータを 後からglGetDoublev(GL_MODELVIEW_MATRIX)で取得した値から 取り出せないでしょうか
上方向ベクトル(up)は必ずしも取得できる訳ではありませんが、 視点(eye)と参照点(center)への逆方向ベクトルは取得できます。 glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); gluLookAt( 0,0,0, 0,0,-1, 0,1,0 ); float matView[16]; glGetFloatv( GL_MODELVIEW_MATRIX, matView ); MatrixInverse( matView ); // 逆行列を算出 としたときに、 mat[12]〜mat[14]が視点の座標、 mat[8]〜mat[10]が参照点への逆方向ベクトルになります。 一応mat[4]〜mat[6]は上方向ベクトルなのですが、 gluLookAtで指定したupx,y,zを正規化した値と 同じになるとは限りません。
53 :
52 :2006/01/14(土) 07:23:24
すいません、mat=matViewです。
>>52-53 逆行列で視点の位置等でてきました
ありがとうございます
55 :
デフォルトの名無しさん :2006/01/14(土) 18:41:25
openglには円を描く関数がないんですか?
HDRIみたいな背景画像をやってみようと、法泉を内側にした球に貼って 内側からlookatでグリグリして見たんですけど redqeen2で同じ座標でレンダリングしたと比べたら、球の半径を数万とかにしないと 同じような画像にならないんですけど、でもまだ微妙にずれがあって迷ってます。 こういうのって半径を無限として考えて見える範囲だけ切り出して 平面に貼り付けたほうがいいんでしょうか? 計算方法が思いつきません・・・
57 :
デフォルトの名無しさん :2006/01/20(金) 22:36:50
>>56 High Dynamic Range Imagingのこと?
だったら、背景画像は本質とは関係無いじゃない。
でも背景は6枚のテクスチャにして立方体に貼るようにするわね。
Image Based LightingでCubeMapを使うのにも
そのまま使えるから、そうした方がいいんじゃないかしら…
って、べ、別に私だったらそうするってだけで、
あんたなんかにアドバイスしてるわけじゃないんだからねっ!
59 :
56 :2006/01/21(土) 02:19:33
うまく説明できてなかたごめんなさい>< redqueen2とかでHDRI画像使った時みたいに背景が写って マウスでグリグリさせて見たかったんです HDRIで環境マッピングさせたかった訳じゃなかったんですけど CubeMapでググッたらなんか方向性見えてきました^^
/ ̄ ̄ ̄ ̄\ ( 人_____,,) ブツブツ・・・ヤマト・・・ |ミ/ ー◎-◎-) (6 (_ _) ) カタカタカタ | ∴ ノ 3 .ノ ______ ヽ、,, __,ノ | | ̄ ̄\ \ / 粘着 \.____| | | ̄ ̄| / \_ | | |__| | \ |つ |__|__/ / /  ̄ ̄ | ̄ ̄ ̄ ̄| 〔 ̄ ̄〕
61 :
デフォルトの名無しさん :2006/01/22(日) 14:10:13
1,あ、突いて、突いて ○ ○ ○ ○ ○ /-l--- /-l--- /-l--- /-l--- /-l--- /┐ /┐ /┐ /┐ /┐ 2,あ、押して、押して ○/ ○/ ○/ ○/ ○/ /X /X /X /X /X /┐ /┐ /┐ /┐ /┐ 3,あ、払って、払って ○./" ○./" ○./" ○./" ○./" /メ /メ /メ /メ /メ /┐ /┐ /┐ /┐ ./┐ 4,最後に斬る w パーン ○ / ○ / ○ / ○ /○ / /× /× /× /× /× /┐ /┐ /┐ /┐ /┐ 5,志村ー! ○ ○ ○ ○"゚・ = \○# = /|ヽ /Φヽ /|ヽ /⌒/⌒ = X\ = | 人 | ∧ /人 ⌒└ = ノ└ = これをopenglでやりたいのですが
例えば立方体の角のひとつをつまんでひっぱると、 みょーんって伸びるような弾性体をつくりたいのですが どういった方法があるのでしょうか?
NURBS
おまえら本当の馬鹿だな 氏ねよwwwww 氏んじやったほうがいいよwwwwwww
67 :
デフォルトの名無しさん :2006/02/06(月) 14:54:00
68 :
デフォルトの名無しさん :2006/02/06(月) 15:11:25
>>55 遅レスだが、円はある。gluDisk 参照。
70 :
66 :2006/02/07(火) 01:38:35
>>67 どもです
DXFやVRMLのものはどこかな
72 :
デフォルトの名無しさん :2006/02/07(火) 21:44:38
OpenGLにはデバイスロストありますか?
ありません。
C/C++は猫でも分かるで勉強したのですが、 OpenGLはどこのサイトがオススメでしょうか?
76 :
デフォルトの名無しさん :2006/02/15(水) 01:23:05
教えてください。 WindowsXPで、MFC+OpenGLでプログラムを作成しています。 SDIのViewにOpenGLで描画しています。 ウィンドウをディスプレイの右端に持って行き、ウィンドウの半分が外側に はみ出す形にします。 その後、ウィンドウの左側の境界線をつかみ、左側に移動させます。 つまり、ウィンドウサイズを大きくします。 ウィンドウを中央に持ってくると、画面の外側にあったクライアント領域 が再描画されていません。 ウィンドウが全部見えている状態でのサイズ変更ではきちんと描画されます。 パソコンによってきちんと描画できたり、できなかったりします。 というより、ディスプレイドライバーの違い、能力の違い?のようにも思われます。 OSの画面プロパティ - 設定タブ - 詳細設定ボタン - トラブルシューティングタブ の、ハードウェアアクセラレータのスライダーを最大にすると、描画されないパソコン でも表示されるようになります。 しかし、今度はマウスカーソルの軌跡を残すように設定している場合に、 マウスカーソル位置の再描画がうまく行われません。 マウスカーソルを囲む矩形範囲で再描画されなかったり、ズレたりします。 他のOpenGLを利用しているアプリを使ってもこのような現象は起きません。 自作したプログラムのみで起きるようなので、なにか回避策があるように 思います。 どなたかご存知ありませんか?
WM_MOVEでフルリペイント
>SDIのViewにOpenGLで描画しています。 OnDraw()で描画するようにしていれば >ウィンドウを中央に持ってくると、画面の外側にあったクライアント領域 >が再描画されていません。 このときに画面が無効化されてOnDraw()が呼ばれて再描画されるはず。
81 :
78 :2006/03/02(木) 13:16:23
>>79 ,80, レスありがとうございます。
書いてなかったのですが、きちんとOnDrawには飛んできています。
ビューポート、視体積、その他描画に関連することは、通常通りのパスを通過しています。
ウィンドウサイズも、画面外の領域を含んだサイズが取得でき、それをビューポートに設定しています。
それでもなお表示されない領域が出てきます。
追加調査で、だいたいどのパソコンでも自作のプログラムだと黒い部分が出ることが分かりました。
設定は
>>78 の通りで、ディスプレイの設定を触るとそうなります。
念のためCView(の派生ですが)のOnSizeで、OpenGLの再表示を行っていますが、結果は変わりません。
この場合も、サイズ変更時にOnSizeに飛んできて、再表示まで行っているのは確認しています。
長くなりますが、もう少しだけ補足させてください。
ウィンドウをすべて見える位置まで、黒くなった部分をひきずり出してから、ほんの少しサイズ変更をして
やると、黒い部分の大きさに関わらず、再表示はクライアント領域すべてに広がります。
黒い部分は、描画時のデバイスコンテキスト領域が削られているような感じを受けます。
OnSize時にInvalidateを呼んでもダメでした。
現在、OnDrawが飛んできたとき、引数のDCを利用せず、OpenGL関係の描画を行う関数内にて
目的のCViewからGetDCしたものを利用しています。
一度、OnDraw時のものを利用するように修正しましたが、そのときは状況は改善されませんでした。
ディスプレイの設定で結果が変わってくるので、ウィンドウが画面外に出たときに、再描画の領域を
小さくして、表示速度を上げるような処理が入っているように思います。
そのような処理が入っていたとしても、クライアント領域全体を再描画するようなデバイスコンテキスト
を強制的に取得するような手段はありませんか。
82 :
デフォルトの名無しさん :2006/03/02(木) 16:48:57
教えてください。 glutCreateWindow(argv[0]);で画像を描画する為のウィンドウを作りますが、 新たにウィンドウを作るのではなくて、既存のウィンドウに描画部分を 埋め込むことは出来るのでしょうか? よろしくお願いいたします。
83 :
80 :2006/03/02(木) 18:18:53
ハードウェアアクセラレータのスライダーを最小に設定して >ウィンドウをディスプレイの右端に持って行き、ウィンドウの半分が外側に >はみ出す形にします。 >その後、ウィンドウの左側の境界線をつかみ、左側に移動させます。 >つまり、ウィンドウサイズを大きくします。 >ウィンドウを中央に持ってくると、画面の外側にあったクライアント領域 >が再描画されていません。 こちらでも確認しました。 >しかし、今度はマウスカーソルの軌跡を残すように設定している場合に、 >マウスカーソル位置の再描画がうまく行われません。 これも確認しました。 20世紀に納品したもので確認したのですが、このようなバグが存在していたとは驚きです。 この点についてのクレームはきませんでしたので私はとても運がいいです。 つぎにOpenGLにかかわる仕事があるとしたら、上記2点は既知のバグとしておき、 回避不能ということでお客様には納得してもらった上で仕事を請けることにします。 本当にありがとうございました。
うろ覚えだけど、そういえばMFCはInvalidateがdcに設定された状態でイベントに飛んでくるから 独自にDCを作ってglMake....だっけをやるとかなんとかちらっとどっかで見た気がする CreateCompatibleDCでやってみたら?
85 :
78 :2006/03/09(木) 10:23:48
>>84 返答が遅くなりましたが、教えてもらった方法でビットマップ作って貼り付けることにしました。
ありがとうございました。
ビューポートを2つ | ̄ ̄ ̄ ̄ ̄ ̄| | | ̄ ̄| | | |__| | |______| こんなかんじで作って、 内側、外側両方にDrawPixelで画像の表示をしたいのですが、 ビューポートを重ねる?みたいなことはできないのでしょうか。 外側ビューポート作成 外側に画像描画 内側ビューポート作成 内側に画像描画 の順で処理しているのですが、 外側の画像が表示されるだけになってしまいます。
>>86 返答つかないですね。
初心者なんでDrawPixelが良くわかりませんが、通常の描画でビューポートの重ね合わせ
はできていますので、できるんじゃないでしょうか。
88 :
デフォルトの名無しさん :2006/03/16(木) 20:38:01
FMV C4/665 ・Intel(R) Pentium(R)III プロセッサ-667 ・Intel社製 810E Chipset+ディスプレイキャッシュ4MB を使用してましてOpenGLが必要なゲームをやりたいのですがダウンロードすれば搭載した事になりますか?
エ ス パ ー 登 場 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
90 :
88 :2006/03/16(木) 23:09:25
逆にOpenGLを着けるにはどうすれば良いですか?ご教示の程宜しくお願いします。
>88 そのゲームを作った奴に聞けよ。 市販のゲームならマニュアルに書いてあるだろ。
92 :
デフォルトの名無しさん :2006/03/17(金) 02:28:29
ハァ?超初心者スレだから聞いてんだろ?解らないなら解らないとハッキリ言えよ!w
>92 ああ、わからないよ。 OpenGLを使ったゲームがどの環境で動くかなんてそのゲームを作った奴にしかわからないよ。
>>92 ハッキリ言ってやる。
スレどころか板違い、ゲームの名前を出してPCげーか同人げーで訊け
64bitに対応したトリップ検索プログラムありますか? TextSS のWindowsXP(Professional)64bit化おながいします もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
OpenGLでテクスチャの読み込みを別スレッド化すると、テクスチャが描画されなくなるのですが、 対処法をご存知の方、いらっしゃいませんか? WinXP-VC++2003の環境で、処理としては、 プライマリスレッド ウィンドウ、OpenGL初期化>データ読み込みスレッド起動>メインループ データ読み込みスレッド PNGをロードして展開>OpenGLのテクスチャ生成>データ読み込み完了を通知するbool値をtrueに メインループ データ読み込み完了を通知するbool値がtrueなら描画処理を呼び出す という感じになっています。 データ読み込みが完了するまでメインループに突入しないように変更してもダメで、シングルスレッドに戻すと正常に描画されます。 OpenGLのテクスチャはスレッド間で共有されない、ということでしょうか?
OpenGLはクライアントサーバでサーバは1つしか動いてないので今の操作がどの アプリケーションによるものかを区別してるはず スレッドが違えば当然インスタンスが違うので別のアプリケーション操作として認識してるのでしょ 回避策は良く知らない
と思ったがテクスチャ作成なんてほんの一瞬だから スレッドで読み込みとテクスチャ用の加工をして そのデータを引き受けてメインスレッドで描画する前にテクスチャ作ればいいだけじゃないか?
>>98 スレッドが違えばインスタンスが違うかどうかは実装依存では?
シリアライズする限りは大丈夫だというのを読んだ時がある気はするが、
どこで見たか忘れた。
OpenGLのコマンド呼び出し自体はシングルスレッドで処理するのが安全だろうな。
>>97 wglShareLists()について調べてみるが吉
>>98-101 回答ありがとうございます。
OpenGLはスレッドごとに動作を管理しているから、
wglShareList()を使ってスレッド間でデータを共有してやれ、という事ですね。
OpenGLで家の壁と窓みたいなの作ってるんだけど、 窓から中を覗けるようにしたいんで、壁に任意形状の窓の穴を開けた様にしたいんだけど プログラム的にはどうするのか、教えて下さい。 オフスクリーンレンダリングとか使ったりすんのかな? 三角形や四角形にメッシュ切ればなんとかなるかなと思って、幾何学の本やら ドローネ三角の分割方法とか読んではいるんだけど......。 みんなは、自前で穴あけたりメッシュ作成するときはどんな方法使ってるん??
>>103 超初心者なのに頭が硬いなあ。
発想の転換をしてみれば?
>>104 すいません。色々考えてみたんですが、今いち解決策が浮かばないです。
一枚の灰色の壁に、三角形や四角形または菱形や台形の窓が数個配置してあって、
その窓部分を全部くり抜きたいんですが、OpenGLの命令で重ね合わせると透明になっちゃう
みたいな命令があるんでしょうか?
>>105 つ glEnable(GL_ALPHA_TEST)
108 :
デフォルトの名無しさん :2006/05/12(金) 14:42:27
OpenGLではDirectXのxファイルのようなものはないのでしょうか?
ない
>>108 OpenGL って訳ではないけど Collada はどう?
111 :
デフォルトの名無しさん :2006/05/15(月) 02:53:10
PS3も売れないし、 Vistaでもひどいもんだし、 OpenGLを使う企業は、もう無いだろうなw
>>113 pcしか知らない田舎モノw
>>111 1週間遅れのド低脳w
オマイらにはDirectXがお似合い
3D用のAPIを使うメリットは、第一にスピードである。 だが、VistaになればDirectXのラッパーでしかないOpenGLは描画スピードが大幅に落ちてしまう。 Vistaになれば、Windows上ではOpenGLは使われなくなるだろう。
Vistaでは、OpenGLは低速APIになる
完全に枯れた技術だなwwwwwwwwwwwwwww
>>115 >>DirectXのラッパー
それうそだから。
DirectX厨必死だなw
VistaからOpenGLは 低速API である
学んでないな...
123 :
122 :2006/05/22(月) 12:20:46
すみません解決しました。 ポリゴン自体は描画されていたようで、色が黒だったので背景に隠れてしまっていました。 で、色が出なかったのはbyte引数なのにunsigned byteで指定してた・・・ スレ汚しすみませんでした
124 :
デフォルトの名無しさん :2006/05/23(火) 01:39:24
超初心者質問でアレなのですが glEnable(GL.GL_LIGHTING) ってのをつけると glColor3f(r,g,b,) で設定したテクスチャが無効化(?)されてしまうと思うんですが テクスチャとシェーディングを同時に実現することはできないでしょうか?
超初心者なのは分かったからもうちょっと落ち着け。言ってることが意味不明だぞ。 とりあえず「テクスチャ」「シェーディング」「ライティング(LIGHTING)」「頂点カラー」の意味ぐらい調べとけ。
126 :
124 :2006/05/23(火) 05:47:44
ぐあ、なんかめちゃくちゃですんません。 サーフェスを作成し法線を設定→glEnable(GL.GL_LIGHTING) で、ライティングによる影が表現されますよね。 そのあと、サーフェスに画像を貼り付けたいと思い、 glColor3f(r,g,b,)でサーフェス頂点に色をマッピングしてみたんです。 そうすると、ライティングの効果が消えて(?)、 ベタッと画像を貼っただけの立体感0のものになってしまったのですが glEnable(GL.GL_LIGHTING)だと、色情報が無視されてしまうのでしょうか?
素直にテクスチャを貼ればいい気がするが… 基本的にはライティングしないときはglColorの色、 ライティングするときはglMaterialの色が使われる。 だが、 glEnable(GL_COLOR_MATERIAL); として、たとえば glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); とかしておくとglMaterialで設定するAMBIENTとDIFFUSEの代わりに glColorで設定した色が使われる。 glMaterialはポリゴン単位でしか変更できないがglColorは頂点ごとに変更できる。
128 :
124 :2006/05/25(木) 22:34:37
>>127 遅くなりましたがありがとうございました。
おかげさまで解決いたしました
129 :
デフォルトの名無しさん :2006/05/31(水) 03:12:42
Vistaでは低速API
130 :
デフォルトの名無しさん :2006/05/31(水) 03:14:07
OpenGLプログラマー達の悲鳴 海外版 Vistaでは OpenGL performance will be significantly reduced - perhaps as much as 50% OpenGL on Windows will be fixed at a vanilla version of OpenGL 1.4 No extensions will be possible to expose future hardware innovations
131 :
デフォルトの名無しさん :2006/05/31(水) 03:16:34
日付も読めず最新情報も手に入らないデジタルデバイド乙
しかたないよバカなんだから
OpenGLの印刷について教えて下さい。 今現在、印刷プレビューや印刷を行う際に、OnDrawの中で、印刷解像度(6000x4000)等の大きさの BITMAPを用意し、そのBITMAPに描画してStrectBITitsで印刷用のDCに渡して印刷しています。 ですが、BITMAPにレンダリングする際はGPUの恩恵を受けることができなく、CPU依存の描画に なっているため、印刷プレビューの画面を出力するだけでも5〜10分のレンダリング時間を要して しまいます。 GPUでレンダリングしたデータをそのまま取ってくればいいのかと思って、glReadPixel命令を 使用しているんですが、glReadPixel命令は、フレームバッファの大きさに依存するらしく、 クライアント画面の大きさ(例えば800x600)のレンダリング領域のデータしか取得できません。 で、結局やりたいことは、GPUでレンダリングした6000x4000等の大きさのレンダリングデータを 全て取ってきたいんですが、方法はないんでしょうか? よろしくお願いします。
>>134 同じようなことをやっていた人に話を聞いてみたところ、
Game Programing Gems 2 と 4 にやり方が書いてあったらしい。
片方は、小さいブロックに分けて別々にレンダリングした後、絵をつなげて1枚にする手法。
もう片方は、低解像度の絵をちょっとずつ(1ピクセル未満の幅で)ずらしながら何回もレンダリングして、
それをうまく合成することで高解像度の絵を得る手法。
後者の手法ならアンチエリアシングをかけたような絵になるらしい。
ちなみに、そのGemsを書いた人はNintendo Americaの人で、GAMECUBEで実装したとか。
>>134 ではないがGemsを大学の図書館から借りていたので見てみた
思いっきり3だったorz
>>135 134です。
何となくそういった手法しかないのかなと考えていたんですが、そういった本があったんですね。
調べてみようと思います。
大変参考になりました。ありがとうございます。
良い本なんだが、Game Programingだと校費で買いづらいw
Gemsが大学にあるなんてうらやますぃ
初歩的な質問なんですが、glPushMatrix()・glPopMatrix()は、 多用しすぎると処理が遅くなるとかってありますか? 別に、気にしない方がいいのでしょうか?
>>140 遅くなるかどうかは知らんけど、
スタックが32段しか使えないのは問題になるんじゃないか?
用途にもよるけど。
>>140 初歩的な質問に対する答えなら、「気にしなくて良い」
それでも気になるなら自分で計測してみる
>>141-142 レストンクス
32段しか使えないんですか・・・それは知らなかったです。
まだ、始めたばかりで複雑なプログラムは書けないのでとりあえず気にしないで、
慣れてきたら自分で測定してみようと思いますm(_ _)m
144 :
デフォルトの名無しさん :2006/06/12(月) 16:49:17
MacとWindows両方で動かす場合、OpenGLで書いておいた方が移植はしやすいですか? それともDirectXでも対してかわらない?
>>144 Win -> Macと軽くエスパーしつつ答えると
DirectXを直接使うのならMac(最近はMacOSといった方が正確か)への移植は厳しい。
DirectXも他のAPIも利用してWindowsにもMacにも対応しているライブラリを使うのならば簡単。
OpenGLを直接使うのなら描写そのものは書き換えずに済むけど
OpenGLを使えるようにするところ(wglMakeCurrentとか)は書き換える必要がある。
GLUTを使えば他でWin32APIを使っていない限り書き換える必要はない。
もうBootCampあるから初心者はDirectXでいい希ガス
>>146 Windowsと対比する文脈で「Macで動かす」という表現が出てるから
>>144 は多分ハードとしてのMacではなくMacOSの話でしょ。
マカーが全員XP買いに走ってるんならDirectXでもいいだろうけどそうでもないし。
質問させて下さい。 スイッチ文でGLUT_KEY_UPで↑、GLUT_KEY_RIGHTで→にはキャラを動かせる事は出来るのですが、 右斜め上になると、方向キーの↑と→を押した時後におした方のアクションを起こしてしまうのですが、 なんとかならないのでしょうか? キーボードで作る場合は無理なのでしょうか?
>>148 if(上){ 上を押したとき; }
if(右){ 右を押したとき; }
switchだと
if(上){ 〜 }
else if(右){ 〜 }
という意味になる。
上と右を同時に押しても、順番にコールバックが呼ばれるからじゃないのかな。やりたいことを想像するに、 glutSpecialFuncでどこ押されたか、 glutSpecialUpFuncでどこ離されたか、を覚えて、 状態によってglutIdleなどの適当なとこでアクションをすればいいんじゃないの。
glutSpecialFuncだけだとOSのキーリピート頼みになるから面倒なんだよな。 2つ同時押しで両方交互に送ってくれるOSってあるのかね。
くたばれOpenGLに見えた
glMatrixMode( GL_PROJECTION ); glLoadIndetity(); glOrtho( 0, 100, 100, 0, -1, 1 ); glMatrixMode( GL_MODELVIEW ); glLoadIndetity(); glBegin( GL_LINE_STRIP ); glColor3f( 1, 0, 0 ); glVertex2i( 1, 1 ); glVertex2i( 3, 1 ); glVertex2i( 3, 3 ); glVertex2i( 1, 3 ); glVertex2i( 1, 1 ); glEnd(); のようにして四角の枠を描画しようとしているのですが、 下のようになぜか左上のドットが欠けてしまいます。 ■■ ■ ■ ■■■ これは何が原因でしょうか?
もしウィンドウの大きさが100x100ならglOrtho()は0,99にしたらうまくいくんじゃまいか
156 :
デフォルトの名無しさん :2006/06/21(水) 02:41:50
glutを使ってmacでopenglのプログラミングをしているのですが、 いろんなサンプルを見るとglutCreateWindow(char *name)で ウインドウをつくっていますが、このウインドウをつくらずに、 macのapiでつくったウインドウにデータを描画するといったことは出来ますか (つまり他のソフトに組み込みたいのです)?出来るなら方法を教えてもら いたいのですが。よろしくお願いします。
>>158 ってことは同様に Windows でもコンソールアプリじゃなく、自作の Windowアプリの
なかに描画することはできるのでしょうか?
キーメッセージなどはどうやってくるのでしょうか?
159 :
154 :2006/06/21(水) 11:41:10
>>155 レスありがとうございます。
自分のウィンドウの大きさは適当な大きさで、
ビューポートの大きさを
glViewport( 0, 0, 100, 100 );
としていました。
それで glOrtho や glViewport の値を
色々いじってみたのですがやはり駄目でした。
ただ座標値を
glVertex2i( 1, 1 );
glVertex2i( 4, 2 );
glVertex2i( 4, 4 );
glVertex2i( 2, 4 );
glVertex2i( 1, 1 );
のようにしてみたら
一応欠けることなく描画されました。
とりあえず当面はこの方法で対処したいと思います。
160 :
156 :2006/06/21(水) 14:20:56
>>157 返答ありがとうございました。まだよくわかっていませんが、
この返答を糧にがんばってみます。
3Dのアクションゲームを作ろうと思っているのですが、キャラがマップ上を動くとき、 マップの座標を動かせばいいのですか?それともキャラ+カメラの座標wp動かすのですか? HPの表示とかするつもりなのでどちらが向いてるか教えてください。
>>161 そゆ質問が出る状況では、まだ無理>3Dのアクションゲーム
163 :
161 :2006/06/22(木) 17:59:08
(´・ω・`) 諦めます
winのVisual C++2005 ExpressEdition でGLUTをつかったOPENGLのプログラミングを始めたいのですが、 公式で落としてきたdll,lib,headerをwebなどを参考にしながらインストールし、 プログラムをコンパイルしてみたところ、 "LINK : fatal error LNK1104: ファイル 'winmm.lib' を開くことができません。" 表示されて、コンパイルできません。 C:\Program Files\Microsoft Visual Studio 8\VC\libに'winmm.lib'が存在せず、 WEB上で探してみたのですが、見つかりません。WEBの情報をもとに、 DLLから変換しようともしてみたのですが、うまくいきません。 どうすればいいでしょうか? 非常に初歩的な質問で申し訳ありません。 どなたかわかる方いらっしゃいましたら、教えていただけたらと思います。 どうかよろしくお願いします。
>>164 スレ違いだな。
ヒント:Platform SDK
166 :
164 :2006/06/23(金) 19:17:47
スレ違いの質問、失礼しました。 「Platform SDK」について調べてみたところ問題は解決いたしました。 スレ違いの質問に対して、親切にもヒントを与えてくださり誠に感謝します。 本当にありがとうございました。
0penGLは終わったって友人に言われたんですけど、んなことないですよね? これから勉強始めようと思ってるのですが。
OpenGLは、PS/PS2/PS3の標準APIだよ。正確には独自拡張部分があるけど UNIX系やMac系でも標準API ただし、Windowsだけに限れば終わったも同然 VistaからはDirectXに命令が変換されて実行されるので6割程度しか速度出ない。 ま、WindowsしかターゲットにしないならDirectXいっときな。 ただWindowsでしか動かせないけどw
170 :
167 :2006/06/30(金) 00:43:29
べつにMicrosoft信者じゃないんでWindowsにはこだわりません。 光通信専門なんでWDMと言われると波長分割多重しか思いつきませんが、やっぱ違う・・・な?w ありがとうございました―。
OpenGLが終了なのではない。 お前が終了なのだ。
172 :
デフォルトの名無しさん :2006/07/01(土) 01:00:22
glut32.dllは再配布可能なのでしょうか? 調べたところ国内サイトで再配布可能と言うところが2つほどあったのですが、 公式には確認できませんでした。
>>172 glut32.dll の添付ドキュメントにちゃんと書いてあるよ?
曰く、パブリックドメインではないが、ライセンス料無しで配布して構わない。
原文
COPYRIGHT:
The OpenGL Utility Toolkit distribution for Win32 (Windows NT &
Windows 95) contains source code modified from the original source
code for GLUT version 3.3 which was developed by Mark J. Kilgard. The
original source code for GLUT is Copyright 1997 by Mark J. Kilgard.
GLUT for Win32 is Copyright 1997 by Nate Robins and is not in the
public domain, but it is freely distributable without licensing fees.
It is provided without guarantee or warrantee expressed or implied.
It was ported with the permission of Mark J. Kilgard by Nate Robins.
THIS SOURCE CODE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OR MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
OpenGL (R) is a registered trademark of Silicon Graphics, Inc.
174 :
デフォルトの名無しさん :2006/07/01(土) 08:50:11
winのVisual C++2005 ExpressEdition を無料でダウンロードして glut.hやglut.lib,glut.dilなども所定のファイルに置いたのですが プログラムをビルドしたら、 d:\c3-2\c3-2.c(4) : fatal error C1083: Cannot open include file: 'GL/glut.h': No such file or directory というエラーがでてきてしまいました。 何がいけなかったのでしょうか?超初心者ですいません
>>174 No such file or directory
>>174 よく見てみればOpenGLによる3次元CGプログラミングのサンプルコードか。
俺も最初にOpenGL触った時の本はこれだったな。
エラーが出てるって事は所定のフォルダにないってことだからよくチェックしろ。
ExpressEditionとはちょっと違うかもしれないが、具体的には標準のパスでインストールすると
C:\Program Files\Microsoft Visual Studio 8\VC\include\
ここの中にGLってフォルダを作ってその中に放り込む。
あとPlatformSDKはインストールしたか?ExpressEditionでは別途必要になるぞ。
177 :
172 :2006/07/01(土) 11:22:53
>>173 ありがとうございます。
見落としてました・・すいません・・・
openGLで3次元グラフ書くことになったんですが、参考になるサイトとか本ってありますか? openGLで検索するとアニメーションとかはあるんだけどグラフとかはなくて、 openGL グラフで検索すると商品紹介ばっかりで、目当てのものHITしにくい・・・
>>178 OpenGLには「グラフを描画する」といった、特定の目的用の機能はついてない。
つまり、OpenGLとグラフは直に結び付いてない。
なので、分けて考えることが出来ると思うよ。
1) OpenGLで何が出来て、何が出来ないのか
2) 「OpenGLで出来ること」を利用してグラフを描くにはどうすればいいか
こんな事を調べたり、考えてみれば良いと思う。
180 :
デフォルトの名無しさん :2006/07/01(土) 14:02:07
>>176 ありがとうございます
でも今度は
LINK : fatal error LNK1104: ファイル 'winmm.lib' を開くことができません。
ってのが出てきちゃったんですが・・・・
182 :
デフォルトの名無しさん :2006/07/01(土) 17:18:13
>>181 PlatformSDKはインストールするだけで良いんですよね?
それでもエラーが消えなくて
>>179 なかなかネット検索で見つからないのはそれが原因ですか・・・
GL_TRIANGLEとか使いまくってなんとか形には出来ました
恐ろしく不恰好ですがorz
また問題発生したらよろしくお願いします
>>183 Tesselatorに丸投げしちまえばいいじゃん。
『OpenGLによる3次元CGプログラミング』を半分くらい読みました。 分かりやすく初心者にとって良い本だとは思いますが、重要な所をかなり端折って書かれてるような気がします。 一通り読み終えたら別の本に移ろうと思いますが、程良いステップアップになるオススメの本あったら教えて下さい。
>>185 端折ってるなんて前書き読めばわかるだろうに。
もし網羅的にやるんなら赤本でもどうぞ。
187 :
デフォルトの名無しさん :2006/07/01(土) 21:59:46
誰も網羅的なんぞ言ってない。 つか性質が全く異なる本勧めてどうする。
>>187 別の本に移るっていってるでしょ?
むしろ同じような代物勧めてどうするの?
m9(^Д^)
>>182 164ですが、VC++expressの方の設定もいじらないといけないみたいですよ。
自分の場合、ツール>オプション>プロジェクトおよびソリューションの左の+ボタンを押す>
VC++ディレクトリ
で、実行可能ファイルにC:\Program Files\Microsoft Platform SDK\Bin
インクルードファイルにC:\Program Files\Microsoft Platform SDK\Include
ライブラリファイルにC:\Program Files\Microsoft Platform SDK\Lib
を入れたらできました。
この前の恩返しがしたくて…
スレ汚しすみません。
OpenGLってたのしいですね!!
そうでもない。
ククク、楽しーうちが華なのヨ(笑) 今を目一杯満喫するがいいサ
193 :
デフォルトの名無しさん :2006/07/11(火) 18:17:56
あの、塗りつぶされた枠付きの(例えば)三角形を描くときって、 塗りつぶされた三角形をかいてから線描の三角形を描くのでしょうか? 一発でできませんよね?
「塗りつぶされた三角形をかいてから線描の三角形を描く」関数を呼び出せば一発だじぇ そして、その関数をどうするかって話だじぇ
openglのx,yの座標って(-1.〜1. , -1〜1. )ですよね。 それを(0〜n1, 0〜n2)にする方法はどのようにすればよろいしいの。
ポカーン
またおまゑか
>>195 好き勝手な (x0,y0)-(x1,y1) で使っていますけど。。。
あほな例題が多いのが欠点ですね。。日本語のHPは; (-1,-1)-(1,1) だと思いこんでいる。。
>>195 glOrtho() あたりを調べてみる
>>199 ありがとう、できました。
windowのサイズで(例えば、640x480)とかで座標を指定するのは
一般的でないのですかね?
あと、z軸っていうのはこう言ったときどう指定しているのでしょうか
(よくわからなかったのでそのまま-1〜1にしましたが)?
201 :
デフォルトの名無しさん :2006/07/13(木) 16:22:19
OpenGL上でMPEGを再生するライブラリは存在しますか?
202 :
デフォルトの名無しさん :2006/07/13(木) 20:38:19
テクスチャが複数あったとき、 glTexSubImage2Dって 対象のテクスチャをどうやって指定するの?
>>201 昔見たようなレスだがOpenGLにそんなもんない。
>>202 現在バインドされているテクスチャが対象。
204 :
202 :2006/07/13(木) 21:02:21
glBegin( GL_LINE_LOOP ); glVertex2f(x1, y1); glVertex2f(x2, y2); glVertex2f(x3, y3); glVertex2f(x4, y4); glEnd(); で囲まれた部分を塗りつぶすにはどうしたらいいんですか?
ポリゴン作れ
>>206 そうでなくて、GL_LINE_LOOPだと最初と最後が繋がりますよね。
そうしたら、値によっては四角形ではなくて蝶々だったりリボンのような三角形を
二つ向かい合っているような図形になるんですよ。
GL_POLYGONで塗りつぶしすと違う形になるのです。
つまり上の図形を枠に内面を塗り潰したいです。
だれか教えて下さい。よろしくお願いします。
>>207 GL_POLYGONは凸状のねじれの無いポリゴンのみ正確に描ける。(3角形に分割している)
大体リボンの形は4角形では無い。(一枚の紙(4角形)をどうねじってもリボンにはならない)
ねじれる可能性があるなら、自分で2つの領域に分けてください(交点を求める)
4点を順にa,b,c,dとするとdot( cross( ab, ac) , corss( ac, ad ) )が負ならねじれてるのかな。(嘘かも)
そんな感じでがんばってください。
0.全領域を0で埋める。 1.三角形abdの領域を1で埋める。 2.三角形bcdの領域を反転する。 3.1で埋められている領域に色を塗る。 とかやればできるかな? ステンシルってそんなふうに使えるのかな?よく知らんけど。
>>209 面白いけどちょっと境界が怪しそうだね
と思ったら赤本に似たようなの載ってた
面倒だから全部Tesselatorでやっちゃえばいいじゃない
212 :
デフォルトの名無しさん :2006/07/22(土) 10:19:41
雲っぽいエフェクトをGLで作りたいんですが どこから調べればいいか分かりません。 何か糸口になるようなヒントをいただければありがたいです。
213 :
デフォルトの名無しさん :2006/07/22(土) 14:54:37
雲のポリゴンを沢山置く
ビルボード
原因も何も、そういうプログラムを作ってるからだろ。
GLのライブラリがリンクされません。 開発環境はXP-VC++2003です。 vcのlibフォルダにopengl32.libなどは入っています。 以下のようなエラーが出ます。 test error LNK2019: 未解決の外部シンボル __imp__glClear@4 が関数 "void __stdcall display(void)" (?display@@YGXXZ) で参照されました。 test fatal error LNK1120: 外部参照 16 が未解決です。
#pragma comment(lib,"opengl32.lib")
glBlendFunc(GL_SRC_ALPHA, GL_DST_ALPHA)を使用して球を半透明にしたのですが、なぜか球の側面に2つ穴が開いてしまいます。 その球の後ろに何もない状態なら普通に表示されるのですが、後ろに物を置くと穴が開いてしまいます。 原因分かる方、ご教授お願いしますm(_ _)m
つ google "Zソート Zバッファ" だけだと可哀想なのでもうちょっとヒント Zバッファによる陰面消去は、透明ありだといろいろ問題が発生する 対象物をZソートしてみ
>>221 ありがとうございます。
調べてみたのですが、Zソートは陰面消去の一つの方法という事みたいですが、
これをどうopenglで表現するのか・・・もう少し調べてみます。。
やりたいことにもよるけど、ソートせずに、 非透明を全部描いてからデプスバッファを書き込み禁止にして半透明を描けばokになる場合もあるかと
>>223 ありがとうございます。
glDepthMask(GL_FALSE)で無効化してから不透明を書いても、やはりダメでした。。
やりたいことは、不透明な物の周りに不透明な球をいくつか置きたいです。
225 :
223 :2006/07/27(木) 15:31:01
その穴ってのがどういうのか判らんけど、 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); でうまくいくとかいう話ではない?あとは球の裏向きポリゴンのカリングとかかな... でも不透明な周りに不透明で重なりあうなら、正確にはZソートしないとダメかもね。 が、glDepthMask(GL_FALSE)で穴が開くのはそれはそれで変だけど。
>>225 ありがとうございます!
球の裏向きをカリングするようにしたら、正確に表示されるようになりました。
以前ポリゴンを両面化したものを表示しようとしたら筋が入ったので、
それも関係しているのでしょうかね。。
みなさん、親切にご回答いただきありがとうございましたm(_ _)m
227 :
デフォルトの名無しさん :2006/08/01(火) 16:38:30
-1.~1.の範囲で描画した図形は回転できますが、 glViewport(0, 0, 100, 100); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0. , 100. , 0. , 100. , -1. , 1.); gluPerspective(45, (double)w / (double)h, 1.0, 100.0); みたいに設定した0~100の図形だと上手く回転できません。 いろいろ調べたけれどわかりません。 回転のときは-1.~1.の範囲で描画しないとダメなのでしょうか?
赤本読み直せ。 マトリクスによる座標変換の意味が分かってないだろ。
赤本って12000円の奴? あれいいの? OpenGL関連の書籍って数少ないからどれ買うか迷う・・
使えない本が氾濫してるDirectXよりはましじゃね? いうなればDCソフトみたいなもんだ。
GTK+ と OpenGLで2Dの画像処理をしたり,アニメーションさせたりする場合, どっちが描画早いですか? あほっぽい質問ですいません...
232 :
デフォルトの名無しさん :2006/08/25(金) 13:41:08
OpenGLでスクリーンキャプチャ機能を付けたいんですが、 プライマリバッファへのポインタはどうやって取得できますか? DirectXだとプライマリサーフェイスをLockすればいいんですが…
glReadPixels
234 :
デフォルトの名無しさん :2006/08/25(金) 18:17:56
すみません、232の方とは別の人間なのですが、 GLubyte * bits; GLint width,height; width = 513; height = 407; bits = (GLubyte *) malloc( (width * height)*3 ); ::glReadPixels( 0,0,width,height,GL_RGB,GL_UNSIGNED_BYTE, bits); このように指定した際に、glReadPixelsのところで必ずエラーがでます。 いろいろ調べたところ、widthとheightの値がこの数値の組み合わせのときのみ起こるようです。(513,407) 実際にはこのコードは別の3Dツールのプラグインのために書いているのですが、 その3Dツールが原因以外になにか原因になりそうなことありますでしょうか?
235 :
デフォルトの名無しさん :2006/08/25(金) 18:47:05
>>234 ReadPixelする前にコレ
↓
glPixelStorei(GL_PACK_ALIGNMENT,1);
236 :
234 :2006/08/25(金) 19:06:12
>>235 ありがとうございます!できました〜。
glPixelStoreiでどういうふうにデータが格納されてるのかOpenGLに伝えないといけなかったんですね。
どうもありがとうございました。
237 :
デフォルトの名無しさん :2006/08/26(土) 11:49:58
>>236 デフォルトではwidthは4バイトの倍数と勝手に仮定されちゃうわけ。
その方が処理が速いから。
だから513って設定しても、内部では516として扱われちゃう。
そうなるとmallocで割り当てたサイズじゃ足りないからエラーが出ちゃうの。
だからglPixelStoreiで「widthは1バイトの倍数でお願い」ってやれば解決するの。
238 :
234 :2006/08/26(土) 15:13:57
>>237 解説ありがとうございます。よりくわしく理解できました。
…というか、glPixcelStoreiをちょっと違う風に誤解してました。
重ね重ねありがとうございます。
OpenGLで被写界深度をやりたいと思っています。 glCopyTexImageでフレームバッファをテクスチャー化して、gluBuild2DMipmapsでミップマップを作ってみたり、 glReadPixcelでフレームバッファを読み取って、gluScaleImageをつかって拡縮をしてみたりして、 ぼかしたテクスチャーをつくっているんですが、いずれもとても重たくて使い物になりません。 他になにかいい方法はありますか?
シェーダー使え。
241 :
239 :2006/08/29(火) 15:53:28
GLSLとかCgとかですか?>シェーダー 実はまだ使ったことないんですが、がんばってみます。
242 :
デフォルトの名無しさん :2006/08/31(木) 14:09:47
OpenGLでvsync同期を取るにはどうすればいいんですか? 横スクロールでティアリングしまくって困ってます。
つwglSwapIntervalEXT
244 :
242 :2006/09/06(水) 12:48:13
>>243 レスサンスコ
でもwglGetProcAddress("wglSwapIntervalEXT")でNULLを返されちゃう
ウチの環境ではvsync同期は不可能なのかしらん。
245 :
243 :2006/09/06(水) 16:33:00
環境がわからないのでなんとも言えないが、 とりあえずドライバを新しくしてみるとか。 wglSwapIntervalEXTはWGL_EXT_swap_controlなので それが使えるかどうかglinfoとかで調べてみるとか
GLの座標系から画面座標系に変換するにはどうしたらいいですか?
射影変換のこと聞いてるの?
glRasterPos と ARB_window_pos のことだろ。
ええと、OpenGLの中心を原点とした座標からglutでマウスを押したときとかにわたってくる座標の形式にしたいんです。
gluProject() ?
GLの質問とちょっと違うんだけど、スムージング角度を指定して面の法線から 綺麗にみえる頂点の法線を求めるにはどうすればいいの? ぐぐったら、面法線と面法線を合成して出した頂点法線との内積を スムーズジング角度のradのcosと比較して 面法線を使うか頂点法線を使うか切り替えてる例があったけど、 やってみたらメタセコの表示とだいぶ違うし・・・ 上を参考に頂点ごとに面法線を使うか頂点法線を使うかのフラグ配列作って フラグを見ながら頂点法線を使うのだけ面法線を合成した頂点法線作って見たけど うまく行かなくてもうわけわかめです
>>251 プラグインSDKにそれのコードあるよ。
>>251 >>252 のを見ずに言うけど、面法線の合成方法が違うんじゃないか?
単純な加算じゃなくて頂点の角度の割合みたいなもので重み付けしているはず。
>>252 >>253 そのものずばりの関数が用意してあったんですね
試してみます。ありがとうございます
255 :
デフォルトの名無しさん :2006/09/09(土) 00:48:18
CADの作り方を教えてください。
断る
257 :
255 :2006/09/09(土) 03:01:41
>>256 そこをなんとかお願いします。
VC++ MFC MDIでと考えています。
頂点の情報とかどうやって保持するのがいいですか?
258 :
251 :2006/09/09(土) 16:50:41
スムージングできたヽ(・∀・)ノ
260 :
デフォルトの名無しさん :2006/09/10(日) 12:35:51
>>257 struct Vertex
{
float x;
float y;
float z;
};
float(笑)
OpenGLで簡単にモデル(メッシュ?)を読み込む方法はないですか?
sscanf(笑)
その適当なのが初心者には分からんのだよ
初心者ならneheとかのゲーム系覗いて来ればいいと思うお^^
うん、neheはいい。
どれどれ
もっとわかりやすいのないですか?
キューブマッピング用の画像とかどっかに落ちてない?
500万の点群のすべてにそれぞれ名前つけるのって無謀ですか? やりたいことは点の選択です。
nameは一応メモリのある限り名前振ってくれるとは思うけど 一気に500万から探すのはどうだろ オブジェクトごとに分かれてるなら一度オブジェクトを調べて それから絞り込むとかどうよ
>>273 おおー凄い
ありがとう
やっぱ海外のサイトにしか落ちてないのかな
クリックして選択した頂点をマウス移動でぐりぐり動かせないお>< 逆行列とか使うの?
そういえば、OpenGLって逆行列を作成する関数無いよね どこかにないかな〜
自作
4×4ってきつくね?w
こっそりD3DXMatrixInverse使ってます...
紙に随伴行列書き出して頑張るのですよ。
gluUnProjectのZの深さを勘違いしてただけだったおヽ(´ー`)ノ
>276 そもそもCPUで純粋に行列計算だけをする関数が無い。それはOpeGLの担当ではない。
馬鹿の肥溜め ああ 哀れ
ちょwwwwwwwwww G200のOpenGLドライバのLineサイズが0.5〜1.0ってwwwww なんか変だと思ったwwwどうしようwwwww orz
法線方向に膨らませてなんとかなったwwwwwwwwwうぇwwwww
286 :
俺 :2006/09/24(日) 08:23:25
りえ子、結婚してくれ 頼む
287 :
りえ子 :2006/09/24(日) 13:15:28
嫌
288 :
デフォルトの名無しさん :2006/09/26(火) 20:24:30
「GLUTによるOpenGL入門」を読んだくらいの初心者です。 OpenGLが主に3D描画を行うライブラリだということは分かるのですが、 僕がやりたいのは2D描画で、例えばBMP画像やPNG画像を読み込んで 回転or拡大縮小させて表示するようなことがやりたいです。 特に「PNG画像を読み込む」が激しく車輪の再発明くさいので、 コードを書きたくありません。 何かライブラリがありましたら教えてください。
BMPならPSDK入れて#include <windows.h> PNGならlibpng
最近のOSはWindowSystemの下の層にOpenGLを使ってるそうだけど、 Window上でOpenGLを使ったときにちゃんと描画されるのは何故なんだろう・・・
293 :
デフォルトの名無しさん :2006/09/27(水) 07:32:14
GLUTで、クリックした時のマウス座標は取れたのですが、クリックしていない時の マウス座標を取るにはどうしたらよいのでしょうか? (例えばマウスを追い掛けるアクセサリのようなものを作りたい)
>>294 そんな関数があったとは……。感謝です。
拡張機能のCVAは内部で何をやってるのでしょうか? VBOとかはググれば出るんですがCVAの説明って無いんですよね。
何もしなくなるのがCVAだと思うんだが
何をしなくなるんでしょうか?
299 :
デフォルトの名無しさん :2006/09/29(金) 23:23:16
りえこお〜
300 :
りえこ :2006/09/30(土) 08:50:54
あなたなんか知らないわっ
gluPickMatrixはウィンドウ座標でピッキングする時に使いますが、 ワールド座標でピッキングしたいときはどうしたらよいでしょうか?
日本語でおk
303 :
301 :2006/10/12(木) 12:05:29
書き方が悪くてすみません 自己解決したので見なかったことにしてください
304 :
デフォルトの名無しさん :2006/10/16(月) 08:39:25
質問です。 四角ポリゴンにテクスチャを貼ってスプライトの様に表示しています。 glColor4fを使うことでアルファを変更したり色彩を落としたり できますが、逆に白っぽくするにはどうしたら良いでしょうか? glColor4f(1,1,1,1)が「テクスチャをそのまま表示する」という 状態ですので、数値を減らして暗くすることは出来ても、 数値を上げて明るくすることはできないですよね? 他に方法はありますか?
テクスチャを明るくして普段はGL_MODULATEでglColor4f(0.5,0.5,0.5,1.0);
306 :
デフォルトの名無しさん :2006/10/16(月) 13:08:48
りえ子、一緒にラーメン食いに行かない?
307 :
デフォルトの名無しさん :2006/10/16(月) 19:08:11
GL_LIGHTINGをセットしポリゴン描画時に法線ベクトルを設定すると、 角度によって影っぽいのがつき色が変化すると思いますが、 そのポリゴンにテクスチャを貼ると角度によっての変化がなくなってしまいます。 どうすればいいのでしょうか?
309 :
308 :2006/10/16(月) 21:22:22
自己破産しました。 ご迷惑おかけしました。
OpenGLとは直接は関係ないのですが fltk2でfltk::GlWindowを使ってマウスイベントに反応するOpenGLプログラムを書こうとしているのですが、思うようにいきません。 toplevelにfltk::GlWindow派生クラスウィジェットを使うと、handle()メンバでfltk::MOVEイベントが拾えるのですが、 fltk::Windowなどをtoplevelにしてfltk::GlWindow派生ウィジェットを子ウィジェットとすると子ウィジェット側のhandle()メンバで fltk::MOVEイベントが拾えません。ただし、fltk::PUSHなどのイベントはちゃんと拾えてます。 子ウィジェットへのイベントの伝達がフィルタリングされてるのかな?と思うのですが、対応方法を教えて下さい
メタセコとかみたいに矩形の枠を描いて範囲指定して ピックアップするのはどうやるん?
3次元座標→2次元座標 2次元座標とマウスの範囲を比較
313 :
310 :2006/10/20(金) 02:21:11
Linuxで弄っていてうまく逝かなかったのですが、今MinGW32で試して見た所fltk::MOVEイベントを拾うことが出来ました…システム&実装依存の問題だったか… orz …問題はどっちが正しい動作なのだろう… orz
>>10 template ベースの画像処理ライブラリーをベースに改造したらいいんじゃね?
vigraとか使えそう
316 :
デフォルトの名無しさん :2006/10/25(水) 18:28:06
日本語描きたいんだけど、ビットマップデータ読み込んで、glBitmap使うしかないかしら? テクスチャ作りたいんだけど・・・。
テクスチャ作ってポリゴンに張るのをディスプレイリストに入れておけばいいじゃないか。 文字列をwchar_tの配列にしておけば多バイトの問題もないっしょ。
>>316 freetype2 を使ったライブラリがあったと思ったけど。
フォントサイズを自由に変えるとしたら2Dフォントをテクスチャマップして 拡大縮小するのと3Dフォントを使うのではどちらが良いでしょうか?
クオータニオンをX座標中心に10度回転させるとかって、 どうするか教えて下さい。 ぐぐって見たけど、ようわからんですた。 行列とか、三角関数とかは一応分かります。 よろしくお願いします。
>>323 ありがとうございます。
これ見ても、さっぱりわかりませんが「金谷先生の本」ってのを読んで見ます。
326 :
デフォルトの名無しさん :2006/11/02(木) 03:47:06
327 :
322 :2006/11/03(金) 00:55:02
>>325 ありがとうございます。
何となく分かってきた気がします。
後、2,3回質問すると思うけど、よろしく御願いします。
ALL
328 :
デフォルトの名無しさん :2006/11/03(金) 23:08:52
りえ子、 結婚してくれよ
330 :
デフォルトの名無しさん :2006/11/06(月) 16:42:36
OpenALに関する初心者的な質問をしたいのですが、どのスレでするのが効果的でしょうか? OpenALはOpenGLの親戚という話も聞くのでOpenGLのスレで聞くのもいいかなと思いましたが・・・
だれだよそんな与太話したのは。
333 :
デフォルトの名無しさん :2006/11/06(月) 17:22:21
glUniformMatrix〜の第3引数のことなんですが GL_TRUEとGL_FALSEで、 動作がどのように変わるのでしょうか どなたか教えてください おながいします
GL_TRUE,GL_FALSE嫌いだお( ^ω^) TRUE,FALSEがいいお( ^ω^)
もの凄い初歩的な質問で恥ずかしいのですが・・・ ウィンドウ内に適当なオブジェクトを表示した際に、ウインドウ外にはみ出し た部分(ウィンドウイング変換の時点で矩形領域からはみ出した部分?)を表示 させたいのですが、どうしたらいいのでしょうか?単にウィンドウサイズを変 えたり視点を変えるだけでは表示されてくれないので・・・
>336 何言ってるのかいまいちわからんけど glViewportのパラメータををウィンドウサイズに一致させるといいかも
338 :
デフォルトの名無しさん :2006/11/15(水) 22:14:31
複素数の一括大量処理で x[]とy[]に対し、 y[]=y[]+ax[] という演算を行いたい場合、glMultiTexCoord2fを使うといいようですが、 同様な方法で Y[]=X[]*Y[] つまり Yreal=Xreal*Yreal-Ximg*Yimg Yimg=Xreal*Yimg+Ximg*Yreal を行いたい場合は、何を使うのが効率的なんでしょうか
GL_TRUEよりTRUEの方が効率的だお( ^ω^)
OpenGLでグラフィックスを始めてまだ二週間ほどの者です glutIdleFuncで画面を更新させているんですがちらつきが酷いです 何か解決法があると思うのですが教えていただけないでしょうか?
後1ヶ月勉強してから来ましょう
342 :
336 :2006/11/16(木) 17:50:20
>337 早速のレスどうも。 具体的に言うと、ウィンドウ全体にポリゴンを表示してそれにテクスチャを 貼り付ける→MODELVIEW行列に1/2かけたポリゴンと1/2かけて平行移動した複数 のポリゴンを表示させるということをしているのですが、平行移動させた際に いくつかウィンドウ外にはみ出してしまったポリゴンを、どうにかして全部表示 させたいのですが・・・ウィンドウサイズを変えただけだとポリゴンもそれに 合わせて変わるし、glViewportで視点を変えてもはみ出した部分は切り取られ たままなんですよね; ちなみにリサイズ関数の中のglViewportのことですか?考える限りパラメータを いじってみたんだけど変わらないす><;
343 :
デフォルトの名無しさん :2006/11/16(木) 20:14:25
あほすぎる、ネットですら調べてないな。 ウィンドウサイズ変えてもオブジェクトサイズは変わらない 関数自分で調べて勝手に作れ。 自分でやろうとしろ低脳のくずが。
344 :
336 :2006/11/16(木) 21:52:29
>343 ネットでも調べたし赤本読んでもよくわかんないからここ来たんだけどね。 自分が低脳なのは十分わかってるよ、こーゆー言われ方するの怖かったから 書き込むの迷ったんだけど、このスレ超初心者用ってってあったからさ・・・ でもこれで闘志に火がついたよ、低脳なりに自力でなんとか頑張る。ありがと。
>344 たぶん透視変換について理解すると自然に解決すると思うよ
346 :
336 :2006/11/16(木) 22:07:43
>345 ありがとう!調べてみる、感謝です。
>>344 一応親切心で言うんだが、ネットでの調べ方は身に付けたほうがいいよ。
プログラム関連は、ほとんどがネットだけで解決できる。
質問しなくてもいいくらい、情報はあるんだよね。
それを、いかにうまく検索するか、絞り込むか。
348 :
344 :2006/11/17(金) 02:59:40
>>347 とても参考になったよ。やっぱり努力が足りなかったのかな・・・地道に頑張ってみます、親切にありがとう。
大学のサイトで講義資料を公開してるとことかたくさんあってさ openglもそこで基礎学んでわからんとこは自分でやってみるってこと してないとさ、これから何か作らないといけない時とか人に聞きまわる ダメダメ君になっちゃうわけ。基本くらいは自分で調べないと後で痛い目に あうってのはわかって欲しいもんだねぇ。
350 :
デフォルトの名無しさん :2006/11/17(金) 19:09:31
OpenGLをゲームに使っているんですが、 ちょっとトラブリまして、質問させていただきます。 OpenGL1.2 + DirectDrawで全画面表示を実現しています。 デスクトップPC(AT互換機) + Geforce6800 で開発しています。 この環境では、ウインドウモード、フルスクリーンモードともに正しく動作します。 しかし、ワイド液晶のノートPCで動かした場合に、 ウインドウモードでは上手く表示されるのですが、 フルスクリーンでは、画面が真っ暗になり、正しく描画されません。 音はなりますし、ゲーム自体は、動きますし、 ウインドウモードに戻すと、また正しく描画されます。 どういったことが考えられますでしょうか?
フルスクリーンにするところが間違ってると考えられます。 せめて、どうやってフルスクリーンにしてるのか書かないとなんとも。 そのDirectDrawってやつが気になるが
352 :
344 :2006/11/18(土) 00:01:39
>>349 身に染みるよ…アドバイスども、これから独学で頑張ってみる。
それでは消えます、みんなありがとう。
Linux環境で今までプログラムしてきましたが Windows環境でのコンパイルがうまくいきません VC6.0とBoalandで試しましたが手順などに詳しい方教えてくださいませんか
>>353 どううまくいかないの?
自分が何をやって、どこで躓いてるのかをはっきりさせたほうがいい
カメラの各軸周りの回転角度をrotX, rotY, rotZとして, そこからEye, LookAt, Upに変換するにはどうすればよいですか?
356 :
355 :2006/11/24(金) 17:37:47
補足です. 言い忘れました.カメラの座標も分かってる状態です. 何がしたいかというと,lightwave(左手系)のデータを持ってきてOpenGLで表示させたいのです. ちなみに現状は, lightwaeからコピペしてきた数値を右手座標系に変換して (といってもxトランスレーションと,yローテーションとzローテーションにマイナス掛けるだけなんですが) rotX, rotY, rotZから各軸の回転行列を作成 | 1 0 1 | Rx = | 0 cos(rotX) -sin(rotX) | | 0 sin(rotX) cos(rotX) | | cos(rotY) 0 sin(rotY) | Ry = | 0 1 | | -sin(rotY) cos(rotY) | | cos(rotZ) -sin(rotZ) 0 | Rz = | sin(rotZ) cos(rotZ) 0 | | 0 0 1 | こんな感じになったのを 掛け合わせて回転行列R = Rz * Rx * Ryを合成し, 視点ベクトル(Eye) = カメラ座標 注視点ベクトル(lookAt) = 焦点距離 * Rの3行目 + 視点 上方ベクトル(Up) = Rの2行目 みたいな感じなんですけど,どうも旨くいかないんすよ.
357 :
355 :2006/11/24(金) 17:41:18
ああ,ミス (といってもxトランスレーションと,yローテーションとzローテーションにマイナス掛けるだけなんですが) ↓ トランスレーションに関してはz軸位置にマイナスを掛ける ローテーションに関してはx軸回転とy軸回転にそれぞれマイナスを掛ける スマソ
ま、がんばれ
座標じゃなくてモデルを反転するのはダメかな? 自分の場合はDirectXのXファイルをOpenGLで表示してるけど、 モデルのZにマイナスかけて面を裏がえしてよ。
360 :
デフォルトの名無しさん :2006/11/26(日) 11:56:46
すいません!!超初心者です。 ちょっと教えて下さい。調べたのですがつまってしまって。。。 テクスチャを球にマッピングして任意の軸に対して球を回すのはどうすればいいですか?
テクスチャの貼り方がわからんのか、任意の軸に対する回転のやり方がわからんのかがわかりません。
両方じゃね?
よくわからんけど、ちゃんと調べればそのくらい分かりそうなんだが せめてどこで詰まったんだかもうちょっと具体的に言ってくれ
何か作りたいと思いプロッターを作ろうとおもってるんですが VC++自体初心者、猫でもの本を一通り読んで打ってwin32apiはさらっと 勉強した程度の者が、このOpenGLってのを使うには早すぎますかね。早すぎますよね。 mfcでダイアログボックスメインでピクチャボックスに表示させる方法をCodeguruの ソースみながら打って、表示させたは良いけど、何をどうすればいいのかわからずで・・・ いったいどこで勉強してんの、みんなって感じでね・・・ orz
ぶっちゃけ大学入ってからプログラミング始めて6ヵ月後に独学でOpenGL触っても ゴリゴリ書いて覚えれば基本的なことは2週間で出来るようになる。 ようはプログラミング全般のセンスと努力。
367 :
デフォルトの名無しさん :2006/12/04(月) 14:00:32
openGLでポリゴン同士が接するとき、その重なった面を判別し別の色で表示させる プログラムは書けるでしょうか。初心者ですがお願いします。
>>367 接する、ってのがどういう状態なのかわからないんだけど……
ポリゴンの重なりを表現したいだけなら、
アルファブレンド(例えば加算合成)とか?
>>367 接する、ってのがどういう状態なのかわからないんだけど……
ポリゴンの重なりを表現したいだけなら、
ステンシルバッファをうまく使用すれば、任意の色で描画できます。
371 :
デフォルトの名無しさん :2006/12/15(金) 04:40:15
GLUTでジョイスティックをキーボードのかわりにしたいのですが、 十字キーが押したら押しっぱなしの状態になってしまいます。。。 どなたか分かる方いますか???
372 :
デフォルトの名無しさん :2006/12/15(金) 14:15:26
日本語でおk
5キーを押せ
キーを押しっぱにしても最初一回入力した後にちょっと間が空くけど あれってどうにもならないの?
↑おまえバカすぎ、OpenGLやる能力0
>>374 プログラム辞めた方が良いよ。
センス無い
openGLあんま関係ないし。まぁくだすれだし。 glut使ってんなら、glutIgnoreKeyRepeatだかでキーリピート止めて、 glutKeyboardFuncとglutKeyboardUpFuncを使って押されてるか離されてるか自分で管理
1/8球の3次元減衰マップをGL_MIRROR_CLAMP_TO_EDGE_ATIを使って 投影マッピングしているサンプルがGAME PROGRAMMING GEMS2にありまして、 それに載っていたサンプルは指向性のない点光源への適用例で、テクスチャ行列変換は glScalef()とglTranslatef()のみでやっていたのですが、 これを指向性有りのスポットライト(ワールド座標系での光源位置と向き、カットオフ角をパラメータに使う) として実装する場合のテクスチャ行列変換がよく分かりません。 できれば小難しいことは考えずにgluLookAt()などを使って行列変換したいのですが、 いいサンプルが見つからず困っています。 こんなサンプルがあるよとか自分ならこう書くとかあったら教えてもらえないでしょうか。
指向性のある3次元減衰マップを作ってそれを使えばよいのでは。 というか、そんな古い方法つかわないで、ピクセルシェーダー使うことを考えましょうよ。
380 :
openGL初心者 :2006/12/31(日) 06:47:44
はじめまして。
OpenGLを使ってMac(UNIX)でプログラム開発をしています。
複数あるオブジェクトのうちのひとつをマウスで選択して、選択し終わる(ドラッグし終わる)位置まで平行移動するというプログラムを作りたいです。
http://www.wakayama-u.ac.jp/ 〜tokoi/opengl/libglut.html
↑こちらのサイトを参考に作成させていただいています。
今のところ
/**画像データの構造体*/
struct polygon{
GLuint* test;
double x;
double y;
double z;
};
struct polygon pol[NOBJECTS];//画像の構造体の配列
このような構造体を使ってオブジェクトごとに座標を記憶させて平行移動させていこうと思っているのですが上手くいきませんorz
ご指導のほどよろしくお願いします。
どこがうまくいかないのか説明してくれないと何も言えない。
382 :
380 :2006/12/31(日) 17:55:41
レスありがとうございます><
説明が悪くてごめんなさい。
mouse関数で
else{//マウスが離されたら
/* selection[] の内容はマウスの左ボタンをクリックした
時にしか変更されないはずだから,まだ残っているはず */
GLuint *ptr = selection;
int i;
for(i = 0; i < NOBJECTS; i++){
printf("pol[%d].x = %f\n",i, pol[i].x);
printf("pol[%d].y = %f\n",i, pol[i].y);
if(pol[i].test = selection){
pol[i].x = x;
pol[i].y = y;
}
}
for (i = 0; i < hits; i++) {
unsigned int j, n = ptr[0];
ptr += 3;
for (j = 0; j < n; j++) {
color[*(ptr++)] = gray;
glTranslated(pol[i].x, pol[i].y, 0.0);
}
}
}
GLUT_UPになったらなった際のx、yの位置までオブジェクトが移動するように設定したいのですが上記のソースでは上手くいきません(・・;)
どうやら選択したオブジェクトだけの座標を移動するつもりが全てのオブジェクトの座標が移動しているみたいです。どこをどう治せば上手くいくでしょうか?
http://www.uploader.jp/home/sample/ ↑こちらに全ソースをうpしました。拡張子がtxtになってますので注意してください。初心者で分かりにくいかもしれませんが、ご指導のほどよろしくお願いしますm(._.)m
>>382 なんかよくわからんコメントアウトがあるけれどもなんだ?
>>382 で考えていいのか?
答えは簡単。ディスプレイリスト更新せずに位置が変わるわけないでしょ。
変なところでglTranslate呼んでるから偶然全部が動いているだけ。
384 :
382 :2006/12/31(日) 19:44:10
レスありがとうございます>< 初歩的な質問でごめんなさい。ディスプレイリストの更新ってどうすればいいんでしょうか(T-T) ウルウル
ディスプレイリストの更新ってどうやんだって聞いてんだよボケェ〜〜〜ッ そもそもディスプレイリストって何だ!?
>>386 検索の一つもせずに全て人に聞こうというのは、ゆとりクオリティか?
あけましておめでとうございます。大晦日だしなぜか気が向いたから調べたら、年あけました。 ディスプレイリストってなんだ?って自分でソースにコメント書いてるじゃない。 1.位置は変更されるのだから、ディスプレイリストに埋め込まない。scene()の中のglTranslatedをやめる。 2.すると位置はdisplay()の中で移動しないといけないから、 glPushMatrix(); glTranslated(); glCallList(); glPopMatrix(); になる。 mouse()の中でやってるglCallListも同様にする。 3.コメントアウトしてるとこで値を更新してるっぽいけど、testってなんだかわからないし、比較演算子は=ではなく==。 x,yはウィンドウの座標を拾ってくるので、ディフォルトのウィンドウサイズ0->300の範囲になる。 そんなこんなでそのまま代入しちゃだめ。 複数選択やリサイズには対応してないけど、強引に幅300で動くようにするなら if (hits) { GLuint index = *(selection+3); pol[index].x = (x-150)/150.0*2.588; pol[index].y = -(y-150)/150.0*2.588; } ちなみに2.588はtan(15度)*10です。 まぁあとは頑張ってください。
本当初歩的な質問ですみません。 とあるアプリを起動した時 nVidia OenGL driver Driver compnent sizes mis-match. Rtry to keep going. Cancel to exit. というメッセージが出て起動しないのですが 原因と解決方法をご教授お願いします。
さようなら
392 :
デフォルトの名無しさん :2007/01/05(金) 18:22:26
glut使ってウィンドウ作ったときって ウィンドウを閉じたときの処理はどうやればいいんですか? glutReshapeFuncとかglutKeyboardFuncみたいなのないんですかね?
GLUTにおいてウィンドウを閉じる = アプリケーション終了だから そういうときのためのCの標準関数を使いましょう。
394 :
デフォルトの名無しさん :2007/01/05(金) 18:59:38
>>393 閉じるだとatexit関数が呼ばれないようなのですが。
395 :
394 :2007/01/05(金) 19:02:46
atexitが呼ばれないじゃなくて、atexitで登録した関数が呼ばれないです
やってみたらatexitでうまくいったけど。環境は?
397 :
デフォルトの名無しさん :2007/01/07(日) 18:38:07
LinuxへOpenGLをインストールするのはどうしたらいいのですか? OpenGLの入門書には「大体の鳥にはあらかじめ入ってます」って書いてあるけど KNOPPIX5.0.1には入ってますか? apt-get install glut やっても「パッケージglutが見つかりません」と出ます.
apt-file search glut
399 :
397 :2007/01/07(日) 22:54:29
# apt-file search glut perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = "ja", LC_ALL = (unset), LANG = "ja" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). こうなりました.どういう意味ですか?とりあえず色々なサイトに書いてある #PERL_BADLANG=0; export PERL_BADLANG をやってもう一度apt-fileすると何も起こらず,新しいプロンプトが出てきます.
400 :
384 :2007/01/08(月) 00:00:14
384です。ちなみに386はボクじゃありません>< コメントありがとうございます。上手くオブジェクトをマウスで選択して移動できるようになりました。 ところで 複数選択やリサイズには対応してないけど、強引に幅300で動くようにするなら if (hits) { GLuint index = *(selection+3); pol[index].x = (x-150)/150.0*2.588; pol[index].y = -(y-150)/150.0*2.588; } ちなみに2.588はtan(15度)*10です。 ですが、幅をもう少し大きくしたいのですがここの計算方法がよくわかりません↓どうすれば幅をもう少し大きくできるでしょうか? よろしくお願いします。
401 :
389 :2007/01/08(月) 01:25:28
ようはウィンドウサイズは0->300なわけでそれをオブジェクトがあるサイズに変更してる。 tan15度は、カメラの画角が30度(gluPerspective)で距離が10(gluLookAt)だから 0〜300を-tan(15度)*10〜tan(15度)*10に変えてる。 x が 0〜300 なら (x-150)/150 は -1 〜 +1 マウスをクリックしたときの値がどうなってるかとか、オブジェクトをどの座標に動かすとどう見えるかを調べれば おのずとわかると思うよ。
402 :
デフォルトの名無しさん :2007/01/08(月) 20:34:24
初歩的な質問で申し訳ないのですが。 openGLでキーボード操作によってポリゴンを平行移動させたいのですが その関数はどう指定すればよいか教えてほしいです。 ちなみにVisual Studio 2005を使用しています。
403 :
デフォルトの名無しさん :2007/01/08(月) 23:36:02
GetAsyncKeyState
>>399 ここじゃスレ違いだからlinux板のくだスレにでも行きなさい
405 :
デフォルトの名無しさん :2007/01/11(木) 05:24:13
クライアント-サーバ型のプログラムを作っていて、サーバがオフスクリーンレンダリングして作成した画像を クライアントに転送して表示させたいのですが、FBOを使っていても frame.setVisible(false); にしているとサーバがレンダリング処理をしてくれません。 フレーム非表示のままレンダリングを行う方法はないのでしょうか? ご教示よろしくお願いします。
406 :
デフォルトの名無しさん :2007/01/11(木) 12:33:13
Webで拾ってきたトラックボール回転(?)のサンプルを見ながらなんとか、動きだけ実装してみたところ、スケーリングするとスペキュラが利かなくなるのか急にのっぺりしたものになってしまいました(環境光は利いている?)。 平行移動や、回転では問題ないので原因が良く分からないのですが、何か考えられる点はないでしょうか? どなたかご教授お願いします。
407 :
389 :2007/01/11(木) 16:25:56
勘だけど つ glEnable(GL_NORMALIZE)
408 :
406 :2007/01/11(木) 17:31:55
>407 解決しました〜。 ありがとうございます。 スケーリングすると法線も変えなきゃいけないんですね
409 :
デフォルトの名無しさん :2007/01/12(金) 01:07:20
若いの オラが村では派遣の問題を口にしちゃなんねーだ お前さんはまだわけぇから言いたいこともあるべぇ だべな、派遣問題を口にすると怒る者がおるでよぉ 問題の指摘は駄目だっぺぇ 派遣のことは口にしちゃなんねぇ この村みたいな糞田舎で悲惨な生活するためにはよぉ 駄目のものを駄目と言ってはなんねえだめさ
410 :
デフォルトの名無しさん :2007/01/12(金) 11:47:26
OpenGLを使い、ちょっとしたビューワを作っているのですが、普通に実行している場合と、リモートデスクトップを介して実行する場合で見た目が全く違ってしまいます。 具体的にいうとリモートデスクトップの時は光沢がしっかり出ているのに対して、ローカルで実行すると全く光沢が出ずにつやのない感じです。 リモートでちゃんと光沢が出るので、ソフトウェアシミュレーションのおかげかなと思い、NVIDIA GeForce 7900GS, NVIDIA GeForce 7950GT, NVIDIA Quadro FX 3400/4400の環境で試しましたが全て同様の結果でした。 何かオプションを設定する必要、もしくはドライバのインストールなど必要なのでしょうか?
>>405 frame.setVisible(false);
が何だかわからんと何も言えん
OPEN-GLとGPUの関係ってどうなんでしょうか? OPEN-GLでソースをかけば、自動でGPUで計算してくれるってことですか?
413 :
デフォルトの名無しさん :2007/01/15(月) 01:48:06
【ネガティブ派遣根性チェック】 3つ以上、思い当たる点があればアナタの性格はひん曲がっており、ネガティブ負け組人生を歩んでいます。 □派遣先の社員の意見にはたとえ間違っていてもマンセーする □派遣先から「いつまでもここで仕事してくださいね(安い金でw)」と言われている □自社に仕事を持ち帰れるように言われるとムカつく □自社で仕事なんてできるわけがない □派遣/受託の差異や問題を指摘する人間はムカつく □派遣先には仕事だけでなく自分のプライベートについても指示して欲しい □自分の月額金額を知らない □派遣先社員より自分の生涯収入が低いのは当然だ □派遣先に尻尾を振り、いつまでも一緒に仕事をすることが大切だ □今のプロジェクトが終わっても同じ派遣先に常駐したい
>□派遣先の社員の意見にはたとえ間違っていてもマンセーする こういう奴って横で見てて人間として恥ずかしい。 最初は違法常駐を続けたいから賛成しているのだろうけど、 だんだん麻痺してきて特定の人の意見には常にマンセーになっていくんだよな ああはなりたくないな、と思う。
415 :
デフォルトの名無しさん :2007/01/15(月) 02:59:49
xz平面と平行に四角いポリゴンを作って それにアルファ値を持つテクスチャを張り その後,xy平面と平行に,さきほど作ったポリゴンを貫通するように ポリゴンを作って,同じようにアルファ値を持つテクスチャを張りました. それぞれのポリゴンの透明な部分の向こうに,もう一方の面が見えるように したかったのですが(網と網を交差させる風にしたい) 後から描いた方の面が一部表示できません. 透明な部分を描く時にも,デプスバッファの値が更新されるのが 原因だと思うのですが,これを回避する方法はないのでしょうか?
2度書き、深度マスク、Zソートその他もろもろ
417 :
415 :2007/01/15(月) 13:36:30
>416 お返事ありがとうございます. 2度書きは交差する場所が分からないと,上手くいかないですよね? Zソートでは駄目な気がします. 深度マスクを試してみますね
418 :
デフォルトの名無しさん :2007/01/15(月) 15:45:28
グラデーション使ってないなら つ アルファテスト
419 :
415 :2007/01/15(月) 17:21:01
>418 お返事ありがとうございます 希望通りの動作をしました,ありがとうございます
420 :
デフォルトの名無しさん :2007/01/16(火) 01:02:50
ポリゴンを表示して光源を当てることで、陰影をつけてみたのですが 物体を回転した際に、ある方向からは陰影というよりも真っ暗になってしまいます。 どの方向から見てもある程度は陰影がついたようにしたいのですが どなたか解決方法をご存じの方いませんでしょうか。
412にも答えてやってください(ノ_・、)
422 :
デフォルトの名無しさん :2007/01/16(火) 08:23:24
>>420 勘だけど
つ glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, hoge);
つ glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
>>412 質問の意図がよくわからない。
GPUが付いててそのopenGLのコマンドが対応してれば、普通は自動で処理してくれる。
ハードウェアアクセラレータが最大ならね。
>>422 エラーについてちゃんと書こう
変なエラーとだけ言われてもわからない
426 :
423 :2007/01/17(水) 01:13:49
>>420 質問をよく読みなおしてみた。
たぶんこっちだと思う。
つ 光源2個以上
えーと・・・ プログラミングと関係無いので激しくスレ違いなのだとは思いますが お答え頂ければ有難いです Win用の、とあるゲームをインストールしたら毎回起動する度に このゲームは OpenGL 1.2 以上対応だというメッセージが出てきます つまりは OpenGL のランタイムか何かがあって私のPCには それの1.1以下が入っているんだろうと思うのですが、最新の物は どこで配布されているんでしょうか? OpenGL Home Page を見に行っても OpenGL を使ってるアプリらしい物の 紹介しか私には見つけられませんでした
>>428 グラフィックカードが対応してない。もしくは付いてない。
新しいPC買ってください。
>429 ・・・ハードの方が問題でしたか ノートなのでPC買い替えしか手が無いですね ご回答ありがとうございました
>>430 ノートだと難しいかもしれないけど
まずグラフィックのドライバ更新も忘れずにね
432 :
デフォルトの名無しさん :2007/01/19(金) 00:37:09
OpenGL1.2非対応ってどんだけ前のマシンなんだよ・・・
ProSavageでダブルバッファリング時にクリアするのがカラーバッファだけだとごみが出て デプスバッファもクリアするとごみが取れたことがある。
435 :
433 :2007/01/24(水) 22:30:56
とんくす その発想はなかったわ 明日試してみます
>>433 この方法でダブルバッファにするとむしろゴミが残るのが正しい
この線の消し方とダブルバッファについてちゃんと理解すれば分かるはず
ATIやNVIDIAのカードでゴミが残らないのは、
Swapした時のバックバッファの内容が保証されてないから、でいいのかな?
437 :
デフォルトの名無しさん :2007/01/25(木) 00:12:50
保証されてるからだろ
438 :
434 :2007/01/25(木) 08:46:37
うわ、スマン。ソース見ずに言ってたわ。 まあ本当にあったことだからこういう糞実装もあるということで覚えておいてくれ。
439 :
433 :2007/01/25(木) 17:40:32
さらにとん。
display()の中では、glDrawBuffer(GL_FRONT);でフロントバッファに直に描くようにして
(display()を抜ける前にglDrawBuffer(GL_BACK);に戻す)
WM_TIMERのハンドラの中では、SwapBuffersしないようにしたらIntelチップのPCでも
期待通りに動いてくれました。
こういう理解でOKですか?
>>436-437 逆に言えばIntelチップではSwapBuffers後、バックバッファの内容が保証されないって
ことですよね。
ttp://www.opengl.org/resources/libraries/glut/spec3/node21.html ↑に「The contents of the back buffer then become undefined.」って書いてある。
440 :
デフォルトの名無しさん :2007/01/31(水) 03:06:03
Vine Linux カーネル 2.4.31-0vl1.8 NVIDIA GeForce 2 GTS 以上のような環境で OpenGLでVsync同期をとるためにはどうしたら良いでしょうか?
拡張関数
443 :
デフォルトの名無しさん :2007/02/01(木) 13:46:06
>>441 >>442 ありがとうございます
ドライバの設定でどうも、OpenGLはVsync同期をすることができました…
>>442 さんの言うとうり環境変数を変えればよかったみたいです。
プログラムで何とかしなきゃと思っていました
拡張関数については、環境が変わった際に、GLのVsync同期を強制させるのに使えるかも
444 :
デフォルトの名無しさん :2007/02/01(木) 14:12:46
vsyncさせたら何かメリットあんの?
描画中を見られたくないのでは
今時描画中が見れるほど遅いことは無いと思うが… VSync取ればティアリング回避できるよ
447 :
デフォルトの名無しさん :2007/02/02(金) 16:41:18
ティアリング回避です。 画面に情報を載せた場合に、 上部と下部で食い違ってしまうのを防ぎたかったのです。
448 :
デフォルトの名無しさん :2007/02/02(金) 23:36:29
ティアリングは、FPS高いと顕著だからねえ
449 :
デフォルトの名無しさん :2007/02/08(木) 02:46:47
openglでmqoファイル読み込む方法を教えてください。
linuxにてroot権限でyumを使ってopenglをインストールしました。 次に一般ユーザに戻ってソースファイルをコンパイルしました。 んでもって、実行しようとするとdisplay(0.0)への接続に失敗しました。 見たいな事を言われます。スーぱユーザにてログインしなおして、 実行するとうまく実行できます。 これは、何らかの設定がうまく一般ユーザにないためだと思われる のですが、解決方法が皆目検討がつきません。 どなたか手助けをいただけないでしょうか?
その質問はLinux板のFedoraスレ、あるいは、くだスレでやった方が適当だと思うな。
わかりました、linuxのほうへ移動します。
OpenGLにて正方形を描画したいのですが、現在ちょっと困っています。 座標系はfloat型のままで指定して、正方形の大きさはピクセル単位で指定したいのですが よい方法が分かりません。 どうしたらよいのでしょうか?それともそもそもOpenGLでは私が書いた事はできないのでしょうか?
455 :
454 :2007/02/11(日) 22:37:29
glutを使った方法を教えていただければ嬉しいです。
456 :
454 :2007/02/11(日) 22:56:01
glPointSize(); 使えばよかったんですね。自己解決しました。 失礼しました。
glPointSize(); は関数名の通り点のサイズを変更するだけだけど、それでいいのかな?
458 :
454 :2007/02/11(日) 23:57:05
それだけでいいのかな?とはどういうことでしょうか? まだなにかあったりするのですか?
いや、質問の内容が良く分からなかったからさ。 glPointSize();で点の大きさを大きくして正方形を表示させたの? それだと、点であってポリゴンではないから疑問に思った次第です。
460 :
454 :2007/02/12(月) 00:23:05
2dのみを扱ってますので平面上で正方形であればよいのです。
point size では設定可能な値が限られるので、 素直に GL_QUADS 使った方がいいと思う。
462 :
454 :2007/02/12(月) 03:15:34
そうすると、座標はfloatで、四角の大きさはpixelでってのが難しいじゃないですか
( ゚Д゚)ポカーン
どの辺がどう難しいのか具体的に書いてくれないか?
465 :
デフォルトの名無しさん :2007/02/12(月) 10:04:20
『眼下の敵』で米駆逐艦の艦長が言ったせりふ こいつはよほどのバカか、でなければ恐ろしいほど頭のいいヤツだ
俺エスパー。 454は、「画面上で」ちょうど一辺が100ピクセルになるような 正方形が描きたいのだと、電波が届いた。
467 :
454 :2007/02/12(月) 13:00:14
glVertex2d(dx, dy); って感じで座標を指定しますよね? で、dx, dyを正方形の左上の頂点として縦横10ピクセルの正方形が 書きたいんですが、glVertex2d()では、指定するのは画面上の比率じゃないですか? それだと嫌なんですよ。
glOrtho()で正射影に出来るけど如何ですか?
('(゚∀゚∩_ おいらをどこかのスレに送って! /ヽ 〈/\ お別れの時には要らない物を持たせてね! /| ̄ ̄ ̄|.\/ | .モツ煮..|/  ̄ ̄ ̄ 現在の所持品:たばこ・ライター・コーヒー・PlayStation3(60GB)・枕・PlayStation3(60GB) 聖教新聞 ・PlayStation3(20GB)・外付けRIGEL340MHDD・PlayStation3(20GB)・寄生虫キムチ ・PlayStation3(60GB)・PlayStation3(60GB) ・PlayStation3(60GB) ・PlayStation3(60GB) ・PlayStation3(60GB) ・PlayStation3(60GB) ・ワセリン湿布 ・実姉がエロゲの声優してた時の特典CD(Sofmap予約特典)・こち亀の3巻・Wii・Wii・Wii ・Wii・Wii・Wii・Wii・Wii・ファブリーズ・Wii・Wii・精神安定剤・Wii・Wii・Wii・Wii・Wii・Wii・Wii ・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii ・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii ・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii・Wii ・AIBO・百円ショップで買った毛玉取り器
ロケット墜落したカーマックでも持たせるか。いや、やまたくんでもいいかな。
openglの性能評価ソフトで、win, linux両方とも公開されている のはどんなのがありますか?
質問です。 Win32APIで生成したウィンドウの描画領域に、OpenGLで描画することは可能でしょうか? もし可能ならば、参考図書か参考HPを教えていただけると助かります。
>>472 .NET での例で良いなら、
酒井幸市, 「OpenGLで作る力学アニメーション入門」
という本に例は載っているよん。
>>473 参考図書の情報、ありがとうございました。。。
早速、図書館に行って該当する本を探してみたいと思います。
りえ子、結婚してくれ
476 :
475 :2007/02/19(月) 15:09:01
自己解決しました
まじか、、、 おめでとう だよな?
478 :
デフォルトの名無しさん :2007/02/20(火) 12:08:48
WindowsでOpenGLやってます. マルチディスプレイもしくはマルチビデオカードで描画対象のディスプレイを指定するにはどうするのが良いのでしょうか? 一応wgl+MFCでやっているのですがWindowsのglutで出来るなら乗り換えもありです.
479 :
デフォルトの名無しさん :2007/02/22(木) 03:16:58
>>478 デバイスコンテキスト関係を何とかする、と思う。けどよくわかんね。
>>479 コードがないとなんとも言えない。
ノートだとダメ、ってことはない。
テクスチャのサイズが2のn乗になってないとか、そんなのじゃないか?
481 :
デフォルトの名無しさん :2007/02/22(木) 20:49:01
青紫にぼわーっと光らせるのってどうやってんの?
482 :
デフォルトの名無しさん :2007/02/22(木) 20:55:19
マルチ氏ね
483 :
デフォルトの名無しさん :2007/02/22(木) 21:39:20
向こうで教えてくれなかった場合はマルチにならないでしょ
教えてくれなかったとか禿藁
2箇所以上に同じ内容のレスすりゃマルチだろうが
486 :
デフォルトの名無しさん :2007/02/22(木) 22:21:53
向こうで既に回答が終わってから質問してるからマルチじゃないよ。改めての再質問。
なんというゆとり世代・・・ 1レス読むだけで嫌気が差してしまった このやまたくんは間違いなくはぶられる
〜だからマルチじゃないだとか、マルチじゃなくなるとか、通用しないっつーの。
>青紫にぼわーっと光らせるのってどうやってんの? 笑
2ch初めて2ヶ月…。 はじめて“マルチ”の意味を知りました。みんなありがとうッ!
ネオン管か何かで光らせてるんだろ
492 :
479 :2007/02/23(金) 07:06:33
493 :
479 :2007/02/23(金) 08:02:53
どうもglTexParameterを設定しないとダメみたいですね。 ってわけで、事故解決しました。本当にくだすれでした。 ちゃんと書籍買ってきます。
494 :
デフォルトの名無しさん :2007/02/23(金) 10:06:34
マルチだとか難癖付けて質問に答えてくれないんなら、超初心者用なんてスレタイやめろよな
マルチは初心者とか関係ない 指摘されたら(される前が本当だが)元スレで移動したと断ってくればいいだけ
496 :
デフォルトの名無しさん :2007/02/23(金) 10:50:34
そんなやり取りを延々繰り返してスレ浪費するくらいなら、最初からサッと教えればいいのに
497 :
デフォルトの名無しさん :2007/02/23(金) 11:10:17
環境を書け。まずはそれからだ。
>>496 自分が解答者になって、詳しく説明して、
後で別のスレでとっくに別の人が解答して解決してたときの気分を味わってこい
>>498 割と田舎なので、空気はうまい。
近くに川もあるな。
駅からは結構遠い。バスも本数が少ないので、駅に出るには車が要る。
501 :
497 :2007/02/23(金) 12:07:14
>>501 背伸びする暇があったら開発環境の名前くらい調べろ。
503 :
497 :2007/02/23(金) 13:00:48
wiki見て解決しました
504 :
デフォルトの名無しさん :2007/02/23(金) 20:03:47
glewを使いたいのですが windows2k visual C++6でリンクエラーが出てしまいます include libなどにファイルを移したのですが、それだとダメなのでしょうか? visualC++6とかだと使えないとかあるのですか? どなたかお願いします
glew32.dllがプロジェクトに通っていないためでした。 しかるべき場所に移したはずなのに。。。なぜ
OpenGLでは平面グリッドを書く関数は無い? 自分で配置しなきゃだめ?
>>507 どうおかしくなるんだ?
おなじグラボ使ってるけど、問題ないぞ。
509 :
デフォルトの名無しさん :2007/03/02(金) 08:33:19
ポリゴンを描画するときに深度バッファを更新しないようにするにはどうしたらよいですか?
glDepthMask(GL_FALSE);
511 :
デフォルトの名無しさん :2007/03/03(土) 00:25:25
>>508 言葉では説明しにくいのだけれど、面がうまく描画されない。
Zバッファを用いなければ、正常に描画されるんだけど。
ほんとサイトのソースまんまで描画されないから、
いろいろいじってみたんだけど効果なし。
「うまく描画されない」状態のキャプチャ画像うp
質問させてください。 ある3Dモデルにテクスチャを貼りたいのですが、 勝手にテクスチャ座標を計算してくれる関数ってありますか? 御願いします。
517 :
デフォルトの名無しさん :2007/03/16(金) 11:24:29
破線を描くにはどうしたらいいですか?
519 :
517 :2007/03/16(金) 15:44:42
やたーできたよーアリガタマキン ( ´∀`)ノ⌒ω)Д`)ブニュ
520 :
デフォルトの名無しさん :2007/03/20(火) 17:51:19
座標の点を格納した大きな(N:100万個ぐらい)配列があります。 1個1個の点には名前がついています(1,2,...,N)。 openGLのpickingの処理を行うと hitした名前が配列で返ってきます。 例えば、buffer[] = 1,3,12,12319 というように。 これをもとに、hitした点全ての点の色を変えようと思いました。 一番簡単なのはbool selected[N]という配列に、hitしたかどうかの 情報を全部格納して、drawするときに1個1個見ていくという方法ですが、 どうもselected[N]のメモリが無駄に感じますし、もっとエレガントな 方法があるような気がします。 いったん全部もとの色で書いておいて、buffer[]に対してその名前を持つ 点の色を変更できればいいのですが・・。 なにかよい方法はないでしょうか?
521 :
520 :2007/03/20(火) 18:05:45
あ・・すみません、2行目と3行目の間に、 「それら全ての点をxy座標の2次元平面に同じ色でdrawしました。」 がウッカリぬけました。すみませんです・・。
>>520 ピッキングは使った事ないので、外してたらごめん。
> いったん全部もとの色で書いておいて、buffer[]に対してその名前を持つ
> 点の色を変更できればいいのですが・・。
そのまま実装できるような気がするんだけど、どうよ。buffer[]の中身と点の名前が一致してないってことかな?
単純な配列ならインデクスで参照できるだろうし、文字列だとしてもハッシュにすれば検索速度は速そうだけど。
まあ、それは置いておいて、
案1. 予め「座標の点を格納した大きな..配列」に色情報を持たせるってのは?
buffer[]に値が入ったとき、buffer[]に含まれてる要素の分だけ、元の配列の色情報を変える。
全部の点を描画する時はそれぞれの色情報から色を決める。
案2. 全体を同じ色に塗った直後に、buffer[]の中身にある点だけ色を変えて再描画。
恐らく容量としてはbuffer[?] <<<< selected[100万]だからメモリ効率はよさそう。
>>520 100万個のオブジェクトから一つを選択するという、
ユーザーインターフェースを見直したほうがいいと思うが。
524 :
520 :2007/03/20(火) 22:25:47
>>522 ,523
返信ありがとうございます!
>>522 案2.よさげ!!
元の点(glRect)はそのままにして、色を変えたglRectで上書きするということですか??
それとも、元の点は消せたりできるんでしょうか??
>>523 なんか、DNAの情報の散布図か何かでどうしても100万(実際には10万くらい
なんですが・・)一気に見れたほうが都合がよくて・・。苦しいところです。
投影テクスチャでマウスのまわりだけ色変えるんじゃダメだろうかw
526 :
522 :2007/03/21(水) 00:49:46
>>524 上書きだけど、glRectならそのままできそう(未検証)。
心配なのは視点からの奥行きだな。同じ奥行きの場所に上書きするって
ビデオカード、ドライバの種類で動作が変わる可能性がある。
上書きする点の手前に上書きしない点がある場合も考えられるので
そこら辺はソートするとかしないとダメかも。
アルゴリズム的なアイデアなので実装はがんばってみてww
527 :
520 :2007/03/22(木) 19:07:14
はい、頑張ってみます!ありがとうございました!
あ、似たようなピッキング俺もやってみたいから 出来たらソース見せて
視点からスクリーンに向かってレイを打ちたいんだけど GLでスクリーンの画素の位置ってどうやって見つけたらいいのでしょうか 視点はgluLookatで初期値を指定してやるのですが ググってもいまいちわからず。どなたかお教えください
gluUnProject()を使うと早いかも。 「gluUnProject」でぐぐればいい感じのサンプル出てきます。
レスありがとうございます。またお礼遅くなってしまってすみません。 gluUnProjectでググってみたところ、マウスでクリックしてその3次元空間の座標を取得というのが出てきました それもやりたいのですが、目的のとは少し違っていて 視点からスクリーンの左上→右→次の列に行って右下までレイを投下して終了 というのをやりたいのです。 スキャンラインに近いのですが、視点からレイを自分で放つ練習というイメージで。 gluUnProjectでもう少し検索してみます。 しかし、レイを投下するTIPというのがほとんど無いですね…ネット上に
>しかし、レイを投下するTIPというのがほとんど無いですね…ネット上に と言ったからには、この問題が解決した暁にはきちんとTIPとしてネット上にまとめるように。w それはともかく、gluUnProjectで3次元空間上の点を求められるということは、その点と 視点を結べば、レイのベクトルになるでしょ?(違うの?) winZには、0.0〜1.0の間の適当な値を放り込んでおけば良し。方向には影響を与えないから。 ちなみに↑の方法は早いけど速くはないから、多数のベクトルを生成するのには不向き。 普通は、フラスタムの形とビューポートの大きさとモデルビュー行列から適当に計算すると 思うけど・・・ちょっと、「gluLookatで初期値を指定してやる」だけじゃ情報が足りないな〜。
>>532 ボリューム関係のがぜんぜん無いので、理解できたら作ります。
ほんとOpenGL初めて間もなくて、床井先生の手抜きglutところをヒィヒィいいながらなので…
目→|スクリーン|
目からレイをボリューム(雲のような)に打って当たった表面のボリュームだけ表示、ということをしたくて。
他の方法もあるのでしょうが、レイを打って表示、ということをやっておきたくて。
>>普通は、フラスタムの形とビューポートの大きさとモデルビュー行列から適当に計算する
その普通のやり方がわかりませんでした。
ビューポート・モデルビュー行列が理解できていないで、コピペ→動いた→ある程度読んで満足を繰り返していたせいですね…
訂正 目→|スクリーン|→ボリューム群 (色決定) です。
>>533 そうか了解・・・。
まずはモデルビュー変換、投影変換、ビューポート変換の仕組みを知る事が必要っぽい感じだね。
とりあえず、視点とかの設定が以下のようになってる場合
---
glViewport(vx, vy, vw, vh);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(l, r, b, t, n, f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(ex,ey,ez, cx,cy,cz, ux,uy,uz);
---
の、レイのベクトルを算出する擬似コードを置いとくますよ。
多分こんな感じになると思う・・・。
---
const vec3 vf = normalize(vec3(cx-ex, cy-ey, cz-ez)); // 「視線」ベクトル
const vec3 vr = normalize(cross(vf, vec3(ux,uy,uz))); // 「右」ベクトル
const vec3 vu = cross(vr, vf); // 「上」ベクトル
for (int y = 0; y < vh; ++y) for (int x = 0; x < vw; ++x) {
const float fx = l / n + (r - l) / n / vw * (x + 0.5f); // 視点より「1.0前方にある平面」
const float fy = b / n + (t - b) / n / vh * (y + 0.5f); // における、vrとvuの係数
const vec3 ray = vf + fx * vr + fy * vu; // 「レイ」ベクトル
// rayを使う //
}
---
536 :
続き :2007/04/02(月) 12:08:24
vec3は、float三要素のベクトルを表すクラスだと思ってくらさい。 crossとnormalizeはそれぞれ外積と正規化ね。 実際にはなんか適当なベクトル演算ライブラリを使うか、要素ごとの演算に書き下すか、 あるいは上のコードが通るようなvec3クラスを自分で実装しちゃうか。w (←実は一番オススメ) ちなみにテストとか全然してないんで、間違ってたらごみんなさい。 一応分かりやすく書いたつもりだけど、意味不明なところがあったら質問ちょーだい。 あと、一言加えるなら・・・ 「初心者は、gluPerspective()とかgluLookAt()とか使うな!」 って感じかなぁ。 ま、がんばって。ノシ
537 :
504 :2007/04/02(月) 12:10:57
そんなこと聞いてないし・・・
ありがとうございます。コメントがわかりやすくて助かります。 試しにやってみます。ホントに色々ありがとうございます。 for (int y = 0; y < vh; ++y) for (int x = 0; x < vw; ++x) 以降がスクリーンの画素にレイを投下しているところですよね スクリーンの走査ってこれだけで出来るのですね。
SwapBuffersの実行速度について質問です。 現在、開発環境にMFCを使用して、SwapBuffersと視点の変更のみの実行速度を計測するプログラムを作っています。 時間の計測にはQueryPerformanceCounter関数を使用しており、ミリ秒単位で計測しています。 しかし、次の二つの方法では、SwapBuffersの実行速度に大きな違いがでてしまいます。 @視点距離一定、 視点角度を変更してSwapBuffers (実行時間) ≒ 14msec A視点距離を変更、視点角度一定でSwapBuffers (実行時間)≒ 0.5ms このような時間差はでるのはなぜなのでしょうか。また、@の状態を高速化することは可能でしょうか? どなたかよろしくお願いしますm(_ _)m
540 :
539 :2007/04/03(火) 01:58:30
>539の問題事故解決しました。すみませんでした。 視点の変更をマウス操作で行っています。@とAでは、 イベントの呼び出し頻度が@の方がはるかに多く、 @ではSqpBuffersのところで渋滞を起こしてるみたいです。
視点距離や視点角度の指定方法、何を描画しているか、 グラフィックカードの種類とかがわからないと、なんともいえない。
>541
描画はしていません。視点距離・視点角度はglLookupで指定してます。
↓の記述を参照にするのがよさげみたいです。
http://developer.apple.com/jp/technotes/tn2093.html#TNTAG7 以下抜粋
##グラフィックパイプラインをオーバードライブしない##
これは通常、短い間隔で立て続けに作動するタイマを使用し、
作動のたびに描画ループを呼び出すことで行われます。
しかし、その効果はしばしば、期待とは正反対です。CPU 時間は通常の 2 倍または 3 倍
(時にはそれ以上)消費され、アプリケーションのパフォーマンスが大幅に低下します。
このような場合は、システムに描画の制御を任せるか(たとえば、Cocoa では -setNeedsDisplay: を使用)、
タイマ間隔を大幅に延長するのが最善です。
まちがえました。 glLookup −> gluLookAt
544 :
デフォルトの名無しさん :2007/04/04(水) 17:00:03
今、2Dのゲームを作っていて、 glMatrixMode(GL_PROJECTION); glPushMatrix; glLoadIdentity; glOrtho(0, FWidth, FHeight, 0, -10000, 10000); glMatrixMode(GL_MODELVIEW); glPushMatrix; glLoadIdentity; (FWidth = 640, FHeight = 480) とやって、正射影にして、z座標=0に、図形やテクスチャー書きまくっています。 3Dっぽい表現がしたくなり、 これをそのまま、透視法射影にすることって、できますか? glFrustum(0, FWidth, FHeight, 0, -10000, 10000); にしましたけど、画面真っ白で何も描画されなくなりました。 できないならできないでいいですけど、可能かどうかを知りたいです。
545 :
デフォルトの名無しさん :2007/04/04(水) 17:00:38
日本語変ですまそ。 > 3Dっぽい表現がしたくなり、 > これをそのまま、透視法射影にすることって、できますか? 3Dっぽい表現がしたくなってのですが、 これをそのまま、透視法射影にすることって、できますか?
>>544 glFrustumは 0 < near < far じゃなきゃダメですよん。
ただ、そうすると当然z=0は視界から外れて見えなくなるので、
モデルビュー行列でzを負の方向にずらしてやる必要あり。
つまり
glFrustum(0, FWidth, FHeight, 0, -10000, 10000); → glFrustum(0, FWidth, FHeight, 0, 1000, 10000);
そしてモデルビュー行列で
glTranslatef(0, 0, -1500);
とか。
ただ、↑の状態だとフラスタムがゆがんでる(左右(上下)対称じゃない)ので、変な立体感になるかも。
フラスタムを対称にしたうえでそれをモデルビュー行列で補整すると、結局こんな感じになるかな。
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-FWidth/2, FWidth/2, FHeight/2, -FHeight/2, 1000, 10000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(-FWidth/2, -FHeight/2, -1500);
// 1000とか1500とかの値はテキトーです。
// glPushMatrix()要らなくね?
>>545 まだ日本語おかしいwww
547 :
デフォルトの名無しさん :2007/04/05(木) 12:01:39
>>546 返信サンクスです。
私は、基本的なことがわかってないみたいですね。
うはー、z=0って、入らないのか!
フラストラムゆがむのは、確かにそうかもですね・・・
試してみます。
glPushMatrixは、実は、参考にしたコードが、
普段はglFrustumしていて、その上で、2Dしたい時だけ glOrtho して、
3Dに戻りたくなったら、Popするっていうコードだったんです。
その名残です。気にしないで。
548 :
デフォルトの名無しさん :2007/04/05(木) 12:48:22
OpenGLっていうか3Dというものは、独習以外となると どこで学べるのですか。
だいがく
550 :
デフォルトの名無しさん :2007/04/05(木) 15:43:33
大学でまともに3Dを教えてくれるところがあったら知りたいものだぜ・・・
え、3Dって代数幾何だから中学〜高校数学で基本は教えてくれるでしょ それともGLやD3DみたいなAPIの使い方やテクニックの事を言ってるの?
大久保工科大学は幾何の科目も3Dグラフィックスの科目もあるよ
で、早大って兵隊以外育ててるの? 兵隊でも別にいいんだけど 東大に代数幾何の研究室に所属してる知り合いがいるが、 どうやら東大ではあんましいい研究・教育をしてる雰囲気じゃないな。 京大も似たような感じ。 まともにやれてる所って多分日本には無いでしょ。
デジタルハリウッド大学院を知らないのか・・
それは想定外だった…
そこについてはCG板で聞いて来い・・・
>>558 DEA = 麻薬取締局 (Drug Enforcement Administration)
なんだこりゃ??(´ω`)
テクスチャマッピングが全く分からん webから拾ってきたサンプルコードもバラバラだし動かないのと動くのがあるし サンプルコードどおりに書いてみても全然動かねーし これは赤本を買えということなのか
>560 どのへんがわからんの?
>560 赤本買わなくてもできるとは思うけど 買うのと買わないのとでは理解の早さが何倍も変わってくる
563 :
デフォルトの名無しさん :2007/04/11(水) 16:49:58
俺、赤本買ったけど、全然よんでねえーw
オプソのゲームのソースばかり読んでる。
>>560 どう動かないという状態をはっきりわかれば、助言できるかも。
あとは、
・テクスチャマッピング以前に、普通のポリゴンが表示されるか?
・貧弱なグラフィックカードを使っていないか?
・ポリゴンの描画順によっては、表示されないこともある(右回り、左回り)
など
563さんが560さんに赤本をプレゼントして一件落着。 テクスチャマップされてないポリゴンは、まず表示されているとして・・・ ありがちなのは、 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); してなかったためにテクスチャが映らない、とかかな〜。 なんでGL_TEXTURE_MIN_FILTERの初期値がGL_NEAREST_MIPMAP_LINEARなのか、いまだ理解できません・・・。 誰か合理的な説明を教えてぷりーず。
565 :
デフォルトの名無しさん :2007/04/12(木) 01:24:04
> なんでGL_TEXTURE_MIN_FILTERの初期値がGL_NEAREST_MIPMAP_LINEARなのか、いまだ理解できません・・・。 いつもネットのサンプルそのままで、初期値なんか気にしたことなかったけど、 初期値だと、MIPMAP生成してないと写らんってこと?
そうなのよ。 でも、MAGフィルタが適用されるような大きなポリゴンならテクスチャ貼られる。 MINフィルタが適用されるようだと貼られない。 奥行き方向に斜めなポリゴンだと部分的に貼られたり、要するに運次第ってこと。w (プログラムは同じでも、ウィンドウサイズによって貼られたり貼られなかったり・・・) これって初心者にとってはかなり大きな罠だと思う。 てか初心者じゃなくても、わざわざミップマップなんか作りたくない場合だって 多いと思うんだけどなぁ〜。
Open GL勉強するために中古のSgiマシンを買うのはアリですか? 最新のWindows用のグラフィックカードのほうが早いですか? それとソースコードはgccでコンパイルできますか?
拡張機能を使わないなら適当なWin機で十分 10年以上前の代物でなければわざわざGPUを更新する必要もないでしょ。
DirectX9の ID3DXSprite::Draw のようにテクスチャの一部をアルファブレンドを行って描画することを、OpenGLで行いたいのですがやり方がわかりません。 実現方法を教えてください。
OpenGL(OpenGL ES)で使用可能なモデルやモーションを作成可能なツールを教えてください。 Javaで携帯向けコンテンツを作成したいと考えていて、MascotCapsule、M3G(JSR-184)であればBlenderを使用すればよいことはわかったのですが、OpenGLは調べ切れませんでした。
>>596 OpenGLにはスプライトというものは無いので、アルファ付きのテクスチャを貼った
ポリゴンを描画するか、glDrawPixelsを使うかですかね。
>>570 そのようなツールは存在しません。
というか、OpenGL自体に、モデルやモーションという概念がありません。
D3Dでいうポイントスプライトってないのか
>>572 ああ、ポイントスプライトはあります。忘れてました。w
えっと・・・ポイントスプライトが標準になったのは2.0以降だったかな。
標準でないバージョンでポイントスプライトを使いたい場合は、
拡張関数を呼ぶ必要がありますね。
D3Dだと固定機能なんだがな ポイントスプライトはアルファテストと並んで最も頻繁に使う固定機能だったのに D3D10から廃止ときた
575 :
570 :2007/04/15(日) 16:06:48
>>571 ありがとうございます。
OpenGLのデモムービーで、戦闘機が飛んでいたり車が走っていたりするものを見かけるのですが、あれらはコーディングでゴリゴリモデリングとモーショニングされているのですか。
敷居が高いなぁ、と感じました。
↑そのデモを見てみないと分からないけど、複雑なモーションとかは なんらかのミドルウェアを使ってるんじゃないでしょうかね。 OpenGLてのは、良くも悪くも低レベル(ハードウェアに近い層)のライブラリなんですよ。 モデルだのモーションだのってのは、もっと上のレイヤで扱うべき仕事なのでOpenGLには含まれません。 もちろん、OpenGLを使用して、モデルやモーションを提供するようなミドルウェア(ゲームエンジンとか)は いくつか存在します。各種モデリング&モーションツールとの連携はそのミドルウェアごとに対応が違うので、 まずはミドルウェアの仕様を調べてみるのが早いんじゃないでしょうか。 標準でそういう仕組みが用意されていない、という意味では確かに敷居が高いかもですね・・・。
>>575 >コーディングでゴリゴリモデリングとモーショニングされているのですか。
んなわけないがな。好きなツールでモデルとスキンアニメーションを作って、
好きなフォーマットで保存したのを自分でロードされているのです。
最近では Collada が標準に一番近いのかな。Blender でも Collada で
エクスポート出来るでしょ。
敷居は高いと思うけどQuake3やIrrlichtとかがオープンソースなんで眺めてみるといいかも
579 :
570 :2007/04/15(日) 18:11:02
>>576 展示会で見たデモムービーはこれです(重いので注意)。
ftp://www.arm.com/mali/skyrage/skyrage17_xvid.avi これはたぶんOpenGL ES 2.0です。
>>577 情報ありがとうございます。
Blenderは1週間ぐらい調査して使ってもみているのですが、かなり難しいです。
3Dプログラミング未経験なので、APIよりもまずはツールを先に覚えたほうがよいと思っているのですが、Blenderだとツールの段階で挫折しそうです。
いろいろ調べた結果、六角大王Superがもっとも簡単そうなので、値段も手頃だしこれを使いたいと考えていますが、致命的な問題などありますか?
とりあえずは六角大王(フリー)でモデルを作ってみたりしています。
>>578 ありがとうございます。
Irrlichtは興味深いですね。
六角大王(フリー)形式を独自でバインドすることになった場合に参考になりそうです。
メタセコでいいじゃん
glPolygonOffset(GLdouble factor, GLfloat unit) の引数factorとunitってなんですか? googlで引っかかったサイトに同じ質問がのってたのですが、 英文・訳文とも、読んでもよくわからんです。
(´・ω・`)? とりあえず、デカけりゃおっけーってこと?
>m がポリゴンの画面領域に関する深度の変化の積である場合、オフセットの値は > >m * factor + r * units > >です。 >また、r は、与えられた実装の方の分析できるオフセットを作ることを保証される、最も小さな値です。 これ見ても、変な日本語だなあ、としか思えないのですよ。
mはスクリーンの平面に対するポリゴンの傾き、 rはオフセットの実装依存な最小値って意味じゃね?
m * factor ←これはなんのためにあるのでしょうか?
シャドウマップへのレンダリング時にバイアスを掛けるときにシャドウマップの解像度が大きいほど大きくしたりする らしい
シャドウマップが何かはわかりませんが、シャドウマップを使わない場合は、 factorは不要ってことですかね。 とりあえず、factor固定、units可変にして試して見ます。
まちがえた、解像度が大きいほど小さくするだた
>589 ふむふむ。 解像度が小さいほどピクセル数は少なくなる。 限られたピクセルには重要度の高いポリゴンを描画したい。 ポリゴンを射影する平面の法線に対し、てポリゴンの法線がなす角の大きいポリゴン のほうが重要度が高いので、ポリゴンの傾きを優先度の判断に加えてやるってことなのですね …たぶん。 なぜ傾きの大きいポリゴンが重要なのかは謎ですが、シャドウマッピングを 使わないので気にしないことにします。ありがとうございました。
シャドウマップ、言ってみりゃジオメトリを考慮して出力する形態をとるテクスチャ
factor固定、unit可変でglPolygonOffsetを試してみたけどうまくいかず。 >584にあるオフセット値m * factor + r * unitsは、いったいどこに加算されているのでしょうか? 射影する平面と、射影する平面との距離にオフセット値が加えられているとしたら、 r*unitsが大きければポリゴンは重ならない気がするのだけど、どうもそうではなさげ。 factor, unitをいじってみた感じでは、z軸の正方向とポリゴンの法線のなす角度が大きくなると、 factorの値が効いてくるようだけど、うーんわからんとです。
(゚д゚)ポリゴンオフセットって、マイナスが手前なのか!!!! しかも、1000とか2000とかオフセットしてもまるで平気。スケールでかすぎ。 やっとうまく行きいました。
OpenGLの空間内の'1'を画面上の1pxと同等の大きさで描画する場合はどういう風にビューポートやアスペクト、カメラ位置をずらせばよいでしょうか
>>594 glOrthoのleft, right, bottom, topに0〜ウィンドウサイズ指定すればいいよ
596 :
デフォルトの名無しさん :2007/05/03(木) 23:38:19
仕事で困らぬくらい3Dを習得するには、最低限何の学問をどこまでやれればいいの
そんな事言ってる時点でアウト
598 :
デフォルトの名無しさん :2007/05/04(金) 16:08:12
PhtoShopで言う、スクリーン合成ってOpenGLで可能でしょうか? Shaderは無しの方向性で・・・ PhotoShop上で、検証してみたところ、 dest = (src+dest) - (src*dest) のようなのですが、可能ですかね?
599 :
デフォルトの名無しさん :2007/05/04(金) 16:09:01
600 :
デフォルトの名無しさん :2007/05/04(金) 16:53:03
8bitのビットマップのデプス画像を読み込んで、サーフェスモデルを作るにはどうしたらいいんでしょうか。 すいませんが誰か教えてください。
601 :
デフォルトの名無しさん :2007/05/04(金) 16:53:56
>>599 src + dest - src * dest
src * (1 - dest) + dest
SRC * GL_ONE_MINUS_DST_COLOR + DEST
ちゃんと、
>>599 の式でできますね。
解決!ありがとうございました。
質問です。 GL_DEPTH_COMPONENTなテクスチャをシェーダを使わずに 目で確認できるようにポリゴンにテクスチャマップする方法はありますか?
603 :
デフォルトの名無しさん :2007/05/12(土) 17:54:44
OpenGLって無料でDLできるんでしょうか? どこでDLできるのか教えてください
605 :
603 :2007/05/12(土) 19:01:29
すみません。わかりませんでした どうやってDLするんでしょうか?
>>605 その質問をした時点でもうお前には無理
たとえ、DL出来たとしても使えない
諦めろ
パクリよしはるよりはマシ
>>606 ネトゲやろうとしたらopenGLがどうこうってエラーメッセージがでたんで
とりあえずopenGLがいるのかと思っただけなんで使うことは考えてなかったんですが
これをダウンロードすることによって出来るようになるゲームってあります?
>>608 わからんけど、ビデオドライバとかじゃね?
611 :
デフォルトの名無しさん :2007/05/13(日) 07:18:22
いま思ったけど、テンプレにNeHeとかが入って無いのはどうかと思うんだ・・・
>>603 OpenGLのゲームとかプログラムを動かしたいだけなら、すでにドライバなりなんなりが
マシンに入っているはずなので、OpenGLは、そのまま動きます。
OpenGLで、プログラムを組みたいならば、言語に合わせたヘッダーファイルが必要になります。
OpenGLのプログラムの組み方は、入門サイトを読んでください。
NeHe Productions: Main Page
http://nehe.gamedev.net/ >>606 スレたいミロ
>>602 テクスチャのフォーマットを GL_LUMINANCE なり GL_INTENSITY なりに
してやれば良いんでないのカナ?
>602 確かハードウェアシャドウマップに対応してないラデ9500とかを使えばグレースケールで描画できたと思うよ 今手元に無いから検証はできないけど 多分ドライバ内部でDEPTH_COMPONENTをRGB16とかで擬似的にやってるんじゃないのかな
チートオンは、シャドウマップをR32Fに入れてチートするよ
GL_INTENSITYとGL_LUMINANCEの違いが未だによくわからないのだが・・・。
617 :
デフォルトの名無しさん :2007/05/16(水) 17:30:15
>>616 つーか、どう動かないのか?わからんことには答えられないのでは?
あと、バイナリもup。
「どうも動かない」だけ言われても動かしてみる気にはならんからなあ
>>617 バイナリは609からDLできます
CとCgのが二つで
GL側にエラーは無くて、実行すると「Cg error」とだけ出て動かないのです
ランバートのシェーディング(Cg部分)をするトーラスを画面に表示するだけのプログラムです
620 :
デフォルトの名無しさん :2007/05/16(水) 17:59:14
バイナリ入ってない件
ぁ…ソースと勘違いしてました 別PCに入っていて。。。すみません
622 :
デフォルトの名無しさん :2007/05/17(木) 18:12:22
>>622 DisplayListとCVAとFBOの速度比較やってるサイトってなかったっけ?
昔どこかで見たんだが忘れてしまった。
つーか本スレもここも酷い過疎スレなんだから統合しる
627 :
デフォルトの名無しさん :2007/05/18(金) 15:32:49
628 :
デフォルトの名無しさん :2007/05/18(金) 15:36:39
DisplayListハエエエエエーー ワロタ そんなに早かったのか・・・VBOより早いじゃん
>>626 そうそう、ここだ。THX
今度こそブックマークしておこう。
マウスでウィンドウに線引いて それを回転させたら 他のオブジェクトと同じように回転する?
なにを言ってるのかよくわからないが、 普通の直線なら、回転する。
GLTTで日本語を利用するのって もしかしてかなり手間かかります?
工場だよ 材料調達から、トラックで出荷するまでが仕事 材料調達とは命令の入力 出荷はデータの出力 工場だから、当然中で働いている人がいる 調達から出荷まで一瞬で終わるなら、レイテンシ(待ち時間)なし。 で、スループットは、出荷数。100000の入力があったら100000 レイテンシがないので、次の作業に即座に移ることができる。 調達から出荷まで、半日かかるとしよう この場合、レイテンシは半日。 スループットに目を向けると、100000の入力をしようとしていたのに出荷が遅いので スループットは2とか3とかになるだろ レイテンシが大きいと出荷(計算完了)までの時間が長くなるので 次の作業にすら移れず、性能の悪い工場であると。
>>632 この手の話を見るといつも思うんだけど、FreeType を直に扱えば良いじゃん。
それで済むならならGLTTもFTGLも存在しない
アセンブラのスレと間違えたんだよ、きっと
freetype、資料が見つかんねぇ・・・
Cairo とか Gtk+ のソースコードを読むナリよ。
>639 neheの43とリファレンスを見れば足りるかと
「補助ライブラリって、 ・各人が対象の細かい仕様を知る労力 ・車輪の再発明 を回避するためのものだろ・・・」 って,FTGLのコンパイルに失敗して資料を読んだ俺がそう言ってたよ
VB6でOpenGLのプログラムを作っているのですが、100万本の直線群を回転させたい場合、毎回 バッファクリア→角度設定→100万本描画→画面表示 の作業(下記例)を繰り返さなければならないのでしょうか? もっと高速に回転描画させる方法はないでしょうか? 初心者ですが、よろしくお願いいたします。 Call glClear(clrColorBufferBit Or clrDepthBufferBit) Call glRotatef(angle, 1, 0, 0) Call glBegin(bmLineStrip) '中心線の直線群 for i=1 to 1000000 Call glVertex3f(x(i), y(i), z(i)) next i Call glEnd Call SwapBuffers(Picture1.hdc)
画面を回転させる
>>643 基本的にはその通り。毎回、一から全部描かないといけません。
そのため、要は100万本の直線をどうやって速く描くか?という問題になります。
もうちょっと具体的には、glVertexを100万回呼ぶ代わりに
glDrawArraysやglDrawElementsを1回呼んで済ましたり、
DisplayListやVertexBufferObjectといったものを利用するわけです。
丁度
>>626 で良いサイトが紹介されてるので、一度覗いてみると宜しいかと。
>>644 首を回転させた方が早いよ?
>>643 基本的には、繰り返しが必要。
実装方法で、高速化を図る。
もしくは、アルゴリズムをみなおす(100万本をきちんと描画する必要があるのか?とか)。
ただ、VBで高速化を目指そうというのが、そもそもの間違い。
>ただ、VBで高速化を目指そうというのが、そもそもの間違い。 大量の頂点群をリアルタイムでこねくりまわしたりするならともかく、 643みたいな単純な例ならVBでも問題なっしん。 OpenGLの高速化って、「いかにコマンドのsubmitを減らすか」「いかにステート変更を減らすか」 「いかにデータの転送を減らすか」が焦点だから、言語の速い/遅いに関係無く応用できるよ。 それよりVBって知らない(N88-BASICなら使ったことあるw)んだけど、 ポインタどうするのかな。頂点配列とか使えんのかいな??
648 :
デフォルトの名無しさん :2007/05/21(月) 08:15:52
VBでDirectX使えるくらいだから、できるっしょ
649 :
643 :2007/05/22(火) 00:16:45
皆様方有難う御座います! 大変参考になりました。 いろいろ高速化の方法がありそうですので、これからじっくり勉強したいと思います。
650 :
デフォルトの名無しさん :2007/05/22(火) 14:27:08
8bitのグレースケールの距離画像を表面形状が分かるようにポリゴンで表したいんです!どんなプログラムを組めばいいでしょうか。教えてください!
CGソフト買え。 それが一番早い。
652 :
デフォルトの名無しさん :2007/05/22(火) 14:33:43
フリーソフトでお願いします!
板違い
654 :
643 :2007/05/23(水) 16:43:00
あれから調べてDisplayListを使ってみたらかなり高速になりました。ただ一度登録したリストの頂点を部分的に変えることができないようでしたので、頂点配列を使いたいと思うのですが・・ Dim Vert(100) As Double For i = 0 To 100 Vert(i) = Rnd Next i Call glEnableClientState(caVertexArray) Call glVertexPointer(3, ipnDouble, 0, VarPtr(Vert(0))) Call glDrawArrays(bmLineStrip, 0, 100) Call SwapBuffers(Picture1.hdc)
655 :
643 :2007/05/23(水) 16:50:28
上記のコードでランダムに直線が100描かれるはずだと思うのですが、なぜか1本(すべて重なっている)の長〜い直線しか描かれません。 なにか間違っているのか、もしくはVB6では頂点配列はサポートされていないのでしょうか?? もしご存知のかたがおられましたらご教示ください!
>>654 取りあえず、なんで3次元直線100本引きたいのに
Vert(100)、bmLineStripなのかと質問したい。
657 :
643 :2007/05/23(水) 20:39:16
>>656 連続した100万本の直線で形状を表現をしたくてbmLineStripなのです。
とりあえずテストで100本と思ったのですが、よく考えたらvert(100)だと32本?しか引かれませんね・・
ボケてました。。
>>654 VBで見るOpenGLってすげー新鮮。w
BASICの配列のインデクスって1ベースじゃなかったっけ。Forループおかしくない?
・・・と思って調べてみたら、VBは0ベースだったのね。へー。
1.3次元の頂点を100個送るんだから、Doubleの配列は300個必要だと思うんだけど。
2.1本しか見えないのに、「すべて重なっている」と判断した理由は??
3.何故か知らないけど、glDisableClientState(GL_VERTEX_ARRAY)しないと正常に描画されない
ことがあったよ。SwapBuffersの前にCall glDisableClientState(caVertexArray)を加えてみては?
659 :
654 :2007/05/23(水) 22:38:13
>>658 有難う御座います。
1.ですよね・・300個用意してみました。
2.視点をいろいろ変えて描画させてみたのですが、どこから見てもほぼ1本しか見えませんでした。
しかし回転角度によってはちらっと2本見えたり、意味不明な状態です。
3.Call glDisableClientState(caVertexArray)加えてみましたが、ダメでした。
ネット検索してもVBで頂点配列使った例はないようで・・困りました。
660 :
デフォルトの名無しさん :2007/05/24(木) 20:12:51
あとは・・・そうだなぁ・・・。 定数が、caVertexArray/ipnDouble/bmLineStripと命名規則がバラバラなのが気になる。 CだとGL_VERTEX_ARRAY/GL_DOUBLE/GL_LINE_STRIPなんだけど、VBの定数ってどうなってるの?? ipnDoubleあたりが怪しい気がするんだけど、ちゃんと合ってる?? てか、このあたりの知識はどう調べれば良いのかな。"ipnDouble"でぐぐっても一件も出てこないし。(゚д゚)
たまにはGL_LINESのことも思い出してあげてください…
662 :
654 :2007/05/26(土) 01:27:44
>>660 試してみたところ、VBでも「GL_」で始まる定数を使えるようです。
実際にGL_DOUBLEとipnDoubleの定数の値を表示させてみたら同じ値でしたので、他に原因がありそうです。
頂点配列は諦めるしかないですかね・・皆様アドバイス有難う御座いました。
663 :
デフォルトの名無しさん :2007/05/26(土) 10:16:20
JOGL以外でJAVA+OpenGLをやることはできる?????
「Java OpenGL -JOGL」でググレカス
665 :
デフォルトの名無しさん :2007/05/28(月) 19:54:33
だれかglx使ってる人いる?
>>665 fedora coreだからAIGLX。。なんかのテストかい?
>666 Xglと勘違いしてませんか? てか、俺もglxの使い方を知りたい どこか、参考になりそうなサイトはありませんか?
赤本じゃだめ? > glx
glxなら緑本じゃなかったっけ?
671 :
デフォルトの名無しさん :2007/05/31(木) 09:43:20
mixiで、いきなり初対面なのに、マイミクについかよろ、OpenGLの大学の宿題といてくれ、 ときたから、プロフィールも見ずにことわってしまったよ。 ここみてたら、ごめんよ。
672 :
デフォルトの名無しさん :2007/05/31(木) 11:49:05
それは断って当然、何も悪くない
GLUTでフレームレートを表示する 本当に簡単なサンプルソースがあるところ教えてください
674 :
デフォルトの名無しさん :2007/06/01(金) 20:33:17
ARB_fragment_programって何も明示しないと最低でも24bit浮動小数点精度を要求される これって標準で、D3DでいうところのPixelShader2.0ができるということでわ????? D3DだとPS2.0からはFixedPoint精度シェーダを使用できないが OpenGLだと明示すればhalfもFixedも使用できる点がゴイスー
>>673 GLUTに限定しないでぐぐれば、すぐ見つかるっしょ
>>674 そのコピペはどの辺が面白いの?
質問です。 点を二つ作り、その点の大きさをgl_PointSizeを使って 大きくしたら、点が重なりました。その重なった部分の処理は どのように処理されるのですか? 1,(vertex + fragment を一単位と考えて) 二度シェーダプログラムを呼んで色の混合を作る。 2,(上と同じ考えで)一度で処理する。 3,そのほか よくわかりませーん どれですか?
677 :
デフォルトの名無しさん :2007/06/03(日) 16:14:25
透明なテクスチャにビルボードのように像を貼り付けたいのですが 貼り付けるものが、[x y 輝度値]といったファイルで格納していて たとえば x=1 y=1 (255 255 0)見たいな値が書き込まれているファイルがあります それをポリゴンに書き込んで行きたいのですが 透明なポリゴンの作り方と そのポリゴンに色を落としていく方法を教えてもらえないでしょうか x y 輝度値 を読み込んでというとこまでは出来たのですが ポリゴンに書き込んでいくのが出来なくて…
例えば x y R G B といった感じで 0 0 255 255 0 0 1 255 255 0 0 2 255 255 0 … 63 62 255 255 255 63 63 255 255 255 という風になっています
??? 読み込んだ画素値をそのままテクスチャーにすれば、いいんでないかい?
682 :
デフォルトの名無しさん :2007/06/04(月) 10:50:53
何やりたいのかな? ・テクスチャーに、データをもとに、3Dでレンダリングして点を打つ ・データをもとに、テクスチャーを生成したい 後者なら、そもそも、普通のBITMAPやらの画像をテクスチャーにするのと変わらんから、 やぱり前者だろうか
前者の方です 配列に格納したデータをもとに その大きさ分(64×64)の透明なテクスチャを作って その透明なテクスチャにRGB値の色を落としこんでいくということです 後者であれば、値を元にPPMとかで画像を生成すればいいと思うのですが それではなくて… と、書いてるうちに混乱してきました
684 :
デフォルトの名無しさん :2007/06/04(月) 14:53:31
685 :
デフォルトの名無しさん :2007/06/04(月) 15:02:34
>>684-685 ありがとうございます。探し方まで教えていただいてすみません
なかなか難しそうですね。
同じようなことをやるには画像を作って、貼り付けるのが簡単なんでしょうか。
透明なポリゴン、というところで
ある色を透明化して張らなくてはならなくて
しかもそれが沢山積み重なっているのです
透過PNGを大量に重ね合わせるイメージを
数値をもとにやっていくにはどうしたらいいのかと思って…
687 :
デフォルトの名無しさん :2007/06/04(月) 15:28:13
688 :
デフォルトの名無しさん :2007/06/04(月) 17:22:17
689 :
デフォルトの名無しさん :2007/06/04(月) 17:34:17
KYROの文字が見えた瞬間、俺の中で何かが弾けた。
動脈瘤破裂か?
64x64程度なら、CPUで普通に重ね合わせ処理するのが 手っとり早いと思うんだけど・・・。
695 :
デフォルトの名無しさん :2007/06/10(日) 07:46:48
無限平面の描画が上手くいきません 参考になるサンプルやサイトはあるでしょうか?
>>695 無限平面って光の反射がうまくいってないとか?
さあ ひょうしょうしき た゛
なにいっ!りゅうか゛いない!
無限平面ってどうやるの? でっかいポリゴン表示するの?
700
それでは有限だろう
じゃあどうすんの? 無限平面なんて無理じゃね?
消失点や画面の端があるんだから大丈夫
無限と言えば遅延評価
一枚ポリゴンをポンと置くのではなく、 このポリゴンのこの範囲を、どこに行っても表示するようにループさせればよい。 表示範囲、たとえば512x512としてだ 513まで来たらループでまた同じポリゴンを表示。 変えたいなら、この座標に来たらこれ、というように別のポリゴンを指定。
>>702 glBegin(GL_TRIANGLE);
glVertex4f(-1, 1, 0, 0);
glVertex4f(1, 0, 0, 0);
glVertex4f(0, 1, 0, 0);
glEnd();
これは一応無限平面じゃ?
708 :
デフォルトの名無しさん :2007/06/10(日) 22:01:06
テクスチャーループさせれば無限平面ぽくなる
709 :
デフォルトの名無しさん :2007/06/10(日) 22:04:10
無限平面の地平線は無限遠方に存在するわけで、 有限な大きさのポリゴンを敷き詰めるやり方で それを描くためには無限回ループさせる必要がある。 実際にはCRTの解像度が有限なので、 有限な回数で打ち切っても地平線を近似できる筈。 ただしこのやり方は非常に効率が悪いと思う。
つまりスペースハリアーをつくりたいと、そう言っているわけだね。
結局どうすればいいのよ?
でかい四角形作って、市松模様のテクスチャはっつければいいんじゃね?
それでは有限だろう
どうせfarまでしか出ないんだから、farまで描けばいいじゃない
本来なら
>>706 で正しく表示できて欲しいけど・・・
スカイボックスも無限遠に存在すると思っている厨房ハケーン
つまりOpenGLで無限平面の描画は不可能って事?
つうか PC では不可能
マウスクリックでポリゴン上の交点(ローカル座標)を取りたいんだけど・・・ 1. 自前で射影/モデリング行列を設定 2 セレクションで対象ポリゴン特定 3. 視点(0,0,0) > クリック座標(x,y,near) のレイを生成 4. 射影逆行列でレイをワールド座標に変換 5. モデリング逆行列で 4. を変換 6. 対象ポリゴン(ローカル座標)へ、レイキャストして交点を求める というのを考えてみたんだけど、他にいい方法ない?
今まで、シングルバッファではglBegin(GL_POINTS);で点がかけていたのですが、 マルチバッファにしようと思って設定を変更したらglBegin(GL_POINTS);賀向こうになってしまいました。 点の大きさとして4.0を指定しても、1pixelの点としか描画されません。 誰か解決方法をお願いします。
コード自体は正しかったです。ただ点の初期色として白から黒に変更した事を忘れていたため、 何も表示されないように思えていました。 事故解決しましたので、失礼します。
>>719 私はこんな感じでやってます。
1.視点(0,0,0) > クリック座標(x,y,near) のレイを「ワールド座標で」生成
(視点の向きやビューポートの大きさは分かってることが多いので、
わざわざ射影逆行列使わなくてもすぐ計算できます。)
2.モデリング変換の逆変換でレイを変形させながらシーンをトラバース
(セレクションとか使わないで直接、視点に一番近いオブジェクト/
トライアングルを求めます。)
2-1.もちろん、それまでに見つかった交点より明らかに遠いオブジェクトはカリング
2-2.あとは普通に三角形とレイの交差判定
んー、発想としては、結局同じかな。
最終的には、「適当なシーングラフを使う」というのが一番いい方法な気もします。w
723 :
デフォルトの名無しさん :2007/06/13(水) 03:14:37
>>719 ではないのですが
>「適当なシーングラフを使う」
kwsk
724 :
デフォルトの名無しさん :2007/06/13(水) 03:16:23
OpenGLって、DirectXにあるような、 サーフェスロスト?ってないはずですよね? 全画面にしたら、環境によっては画面うつらなくて・・・
>>723 んぇーと、何を詳しく?? もうちょっと具体的に質問plz
「シーングラフ OpenGL」でぐぐれば、いくらでも情報は出てくるです。
大抵のシーングラフAPIは、交差判定くらいサポートしてるので
719みたいな事例では楽できますよっと。
すまそ まさに今、レイキャスをやりたいと思っていて レイを飛ばすところから教えてください。 ソース見せていただけると一番ありがたいです
>>719 と
>>722 を見て思ったのですが
視点が<0 0 0>にあって、物体を回転させたいときとか
わざわざモデルに行列をかけて、平行移動(原点へ)→回転行列→平行移動
という風な処理をしているのでしょうか?
始めたばかりでこんがらがっているのですが
教えていただけませんか?
??? 回転は常に原点中心だぞ。
>>719 depthbuffer から座標を求めればいいと思うけど、そういうことではないのか?
glGetIntegerv(GL_VIEWPORT, viewport);
glGetDoublev(GL_PROJECTION_MATRIX, prMat);
glGetDoublev(GL_MODELVIEW_MATRIX, moMat);
glReadPixels(point.x, viewport[3] - point.y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &pkDepth);
gluUnProject(point.x, viewport[3] - point.y, pkDepth, moMat, prMat, viewport, &wx, &wy, &wz);
こんな感じ。
>>728 言いたかったのは、原点に無いモデルを回転すると
その場で回転しないで、軸を中心に回転しますよね
<0 0 1>にある□をその場でクルクル回したいときは
いったん<0 0 -1>をして原点に戻してからクルクルまわして、また元の場所に戻しますよね
<0 0 1>にあるときにy軸中心に30度まわしたりすると、移動しちゃいますよね
>>729 それだと、ローカル座標が求まってないとおもー。
そこからローカル座標を求めるためにはオブジェクトの座標系が必要だけど、
拾ってきたピクセルがどのオブジェクトに属していたのか分からないっしょ。
(アルファやステンシルにタグを載せておく手も無いではないケド・・・)
あと、場合によっては精度が結構落ちるのも問題かもですよ。
>>730 普通は原点中心にモデルを作って、それを回転→移動させますね。
原点から外れてるモデルは、仕方が無いので仰る通り、移動させて回転させて移動させます。
ちなみに視点が(0, 0, 0)にある云々は関係無いです。
ありがとうです。 物体が大量にあって、それに対して回転やら拡大したいと思ってて 最終的にはレイを打って、ピッキングしたいと思ってるのですが わざわざ、移動・回転・移動や レイを打つ計算量を考えたら、、、きついなぁと思って 物体を原点において、視点を下げればいいとも思ったのですが それだとレイを打つのが大変そうで…というか、レイの打ち方もよくわからなくて かなり先行き困難な状態で、今も「レイキャスティング OPENGL」でググってました 正直しんどいです
回転・拡大というのは、見るときの回転・拡大で 物体の回転・拡大ではないです 視点自体を回転・拡大(接近)しようとも思っているのですが それだと今度はレイを打つのがどうなんだろう、、、と悶々と レイキャス・ピッキングのお手本になるもの、何かあれば教えてください
>>733 レイキャスティングやピッキングってのは、「幾何計算」の問題であって、
ぶっちゃけて言えばOpenGLはほとんど関係無い領域の話なんですよねぇ・・・。
OpenGLがやってくれるのは、最終的な「表示」だけですから。
物体が大量にあっても、適切な空間分割をしてあれば計算量はそんな簡単には
爆発しないです。この辺は、「データ構造」に関わる話題ですかね。
手本になるものは残念ながら示してあげられませんが、ぐぐるなら「OpenGL」は
含めない方がよろしいかと。希望を打ち砕くかもしれませんが、ピッキングは
OpenGLを利用することを考えるより、自分で交差判定を実装するべきじゃないでしょうか。
(「交差判定」「空間分割」くらいでぐぐると、その辺の話題があるかな?)
>正直しんどいです
この辺の話は、かなり経験を積んでたとしても、大抵の人にとってはしんどいです。(笑)
>>732 しばらく考えてようやくわかった(と思う)。
オブジェクトによって、ローカル→ワールドの変換マトリックスが違うのを想定しているのね。
それなら、とりあえずオブジェクトを特定した後に、719で求めたワールド座標からそのオブジェクトに
応じた変換をすればいんじゃない?
レイキャストしたことないので、なんかよくわからん。
depthbuffer で精度が落ちるのというのには同意。
737 :
736 :2007/06/16(土) 03:05:51
ごめん。ミスった。 719で求めた→729で求めた
738 :
デフォルトの名無しさん :2007/06/16(土) 10:23:33
上で話題になっているようなので。。
ttp://tpot.jpn.ph/t-pot/program/92_RayTraceSphere/index.html 私もレイトレしてみたくて、t-potさんとこのDXソースを眺めていたのですが
// 視点を射影空間からワールド座標に変換する で既に煮詰まりました・・('A`)
OpenGLで似たような基本的なサンプルはありませんか?
海外のソースだとあるにはあるが、、シンプルでないのでサッパリ・・
それと、おそらく上に出てた座標変換関連があまり分かってないので
その辺りの、ワールド、ローカル、モデルビュー変換、射影変換、透視変換、ビューポート変換等々・・
が、丁寧に解説されているサイトはないでしょうか?
質問ばっかですみません。お願いします。
>>738 ナカーマ…だよ
同じようなことやって詰まってる人だよね
741 :
738 :2007/06/16(土) 12:33:28
>>740 ありがとうございます。
ただ、そういう日本語での解説なら所々にあるのですが
実際に、ローカル座標からワールド座標に変換するコードを書けと言われると出来ないのです。。
また、
>>740 のサイトにもあるように、
> クリップ座標系は眼点座標系に射影行列を適用して得られる座標系である
と、言われても、、、急に射影行列が出てきたり、適用=乗算なのかとかサッパリ分からんのです・・('A`)
クリップ座標からワールド座標に変換したり、
眼点座標系とローカル座標は、どういう繋がりがあるのか?等々、どうやって皆さんは理解していったのでしょうか?
>>741 おまいは俺か…やってること同じなのかも
グローバルイルミネーション入門のところでレイの飛ばし方とかの解説が書いてあったよ
glutではじめるOPENGL入門みたいに書いてくれてるページ無いのか
レイキャスに限らず色んなもので「簡単なアルゴリズムで云々」と書かれてるが
アルゴリズムが簡単でも、それを実装するにはどうしたらいいんだよ!てところが無い
ひでぇよちくしょお
自分で何が分からないのか分かってる?
>>738 >// 視点を射影空間からワールド座標に変換する で既に煮詰まりました・・('A`)
レイトレやピッキングをやるのなら、必ずしも射影空間を扱う必要は無いです。
ワールド座標系の中での、ローカル座標同士の変換ができれば十分かと。
>>741 >実際に、ローカル座標からワールド座標に変換するコードを書けと言われると出来ないのです。。
どのレベルで出来ないのれすか?
1. ローカル座標、ワールド座標の意味が分からない
2. ローカル座標⇔ワールド座標は 行列/逆行列 を通して変換できることを知らない
3. ベクトルと行列の掛け算のやり方を知らない
4. C言語での実装ができない
>と、言われても、、、急に射影行列が出てきたり、適用=乗算なのかとかサッパリ分からんのです・・('A`)
あー、そういう細かいことでつまずいちゃうのは辛いかもね〜かもね〜。
ちなみにこの文脈では 適用=乗算 ですが。
>眼点座標系とローカル座標は、どういう繋がりがあるのか?等々、どうやって皆さんは理解していったのでしょうか?
そう言われてみると、どうやって理解していったんだったっけな・・・。もう忘れちゃった。
今誰かに教えるなら、以下の順番かな。
1.基本(デフォルト)は眼点座標。頂点座標は全部、眼点座標で指定しる。とりあえず絵は出るし。
視点やオブジェクトを移動したいなら、座標データを全部書き換えればいいでしょ。
2.でもそうやっていちいちデータ書き換えるのは大変だし遅くなるから、OpenGLでは
座標変換機構を用意してくれてるんですよ。これでローカル座標が扱える。ほら便利。
3.実は3Dハードウェア内部では、クリップ座標以下こんな座標変換を通して描画されてますよ。
でもまぁこれ以降を詳しく知る必要が出てくるのはもっと先の話かな。シェーダでは必須だけど。
>>742 >アルゴリズムが簡単でも、それを実装するにはどうしたらいいんだよ!てところが無い
アルゴリズムが分かれば、実装できるのが普通だから・・・。
実装の経験が足りてないんじゃないでしょうか。
741では無いですが 「2. ローカル座標⇔ワールド座標は 行列/逆行列 を通して変換できることを知らない」 ここがよくわからないです。glOrthoやgluPerspectiveあたりでゴニョゴニョしてるのか 34についてはとりあえず出来ます。 例えば<0 0 0>にあるオブジェクトは、どういう行列を掛けると、○○座標のどこに来るか、とか言ってくれるとわかりやすいです 何か、イメージが出来ないままで、先に進められてる感じがして
746 :
738 :2007/06/16(土) 16:43:12
>>744 ありがとうございます。
> 1. ローカル座標、ワールド座標の意味が分からない
おおよそ分かっていると思いますが、充分でない理解かもしれないです。
> 2. ローカル座標⇔ワールド座標は 行列/逆行列 を通して変換できることを知らない
理解が充分でないと自分で感じている箇所です。
> 3. ベクトルと行列の掛け算のやり方を知らない
ソース公開してる所などでよくある関数群なので理解しています。
> 4. C言語での実装ができない
2が理解できていないのでレイトレが実装出来ないのだと思います。
> 座標変換機構を用意してくれてるんですよ。これでローカル座標が扱える。
この場合の座標変換機構とは、glMatrixMode(GL_MODELVIEW);の事なんでしょうか・・?
なんだかよく分からなくなってきました。。orz
環境マッピングとかのコードを見よう見真似で書いて、
それなりにOpenGLが使えるような気がしていたのですが、、どうにも根本的なとこが。。
747 :
デフォルトの名無しさん :2007/06/16(土) 22:57:37
【派遣ネガティブ根性チェック】 3つ以上、チェックがつけばアナタの性格はひん曲がっており、 ネガティブ負け組派遣人生を歩んでいます。 □派遣先正社員の作った糞開発ツールはたとえバグだらけでも苦労して使うべきだ □派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする □昼食は必ず派遣先の社員と行くべきだ □派遣先から「いつまでもここで仕事してくださいね(安い金でw)」と言われて嬉しい □自社で仕事なんてできるわけがない □派遣労働の問題点の話題が出ると感情剥き出しにして反論する □派遣労働の問題を指摘する人は嫌いだ □派遣先には仕事だけでなくプライベートについてもグイグイ引っ張って欲しい □奢ってくれる派遣先正社員を尊敬する □自分の月額金額を知らないのは当然だ、単金を聞いてはいけない □派遣先正社員より自分の生涯収入が低いのは当然だ □派遣先に尻尾を振り、かわいがってもらうことが大切だ □チビは派遣先にかわいがってもらいやすから派遣には有利だ
質問があります。 現在、glDrawPixels/GL_LUMINANCE/GL_UNSIGNED_BYTE で、モノクロ8bitグレースケールのVGAサイズのカメラ入力画像を描画しています。 カメラのシャッタを開けている時間、ゲインを制御しても カメラからの入力画像が暗い場合があり、 描画時にゲタを履かせる事を考えています。(描画を明るくしたい) glDrawPixels で転送するピクセルデータを、事前にソフトで 直接加算処理をしても良いのですが、 なるべくCPUに負荷をかけたくないので、何か良い方法があれば教えてください。 仮にOpenGLで同種の処理を行う場合、glTexImage2Dでテクスチャにビットイメージを関連づけて glBlendFuncで加算合成をすれば良いのでしょうか?
8bitグレースケールならテーブル引きでちゃちゃっとCPU処理しちゃっても いいような気もするけどね・・・
そもそもglDrawPixelsが糞重いからCPUの負荷を気にする必要はないでしょ
751 :
748 :2007/06/20(水) 23:09:59
>>749 やはりそうですかね...。
>>750 別スレッドで画像処理をしていて、表示にはできるだけ負荷を
かけたくありません。糞重い?のは、今回の用途の場合、
事前にテクスチャをGPU VRAM上へ常駐させる事も
できない(カメラからの画像を60fpsで取得しています。)ので、
glDrawPixelsを使うしかないのかな...と思っていますが、
他に何か方法があるのでしょうか?
640×480 なので、1024 × 512 のテクスチャサイズに
変更して貼り付けるのも、1秒間に60回となると馬鹿になりません。
>>751 glPixelTransfer[iv] というのがある。
GL_○○_BIAS で下駄を履かせられる。
GL_○○_SCALE や
GL_MAP_COLOR でもいいかも。
glPixelTransferを使ったことなかったので、試しに
glPixelTransferf(GL_ALPHA_BIAS, );
を使用してみたら、すげー遅かった。
何度も描画するなら、先にCPUで計算しといた方がいいと思う。
>>751 TextureRECTかNPT使えば1024x512にしなくてもいいぜ
あとはクリアカラーでバイアス分指定してBlendで加算すりゃいいんじゃね?
シェーダー使えば単純にバイアスかけるんじゃなくて
もっと凝ったことできるけどそこまで必要ないならBlendでいいな
>>738 さんいる?
視点からレイを打って云々というの出来たお
755 :
738 :2007/06/22(金) 18:58:48
>>754 最初にレイを飛ばす所のコードを貼って(or うpして)頂けると有難いです。
交差判定はある程度、分かってきたと思ってるのですが。。
なんだか同じようなことをやってそうですね。
他スレにも書き込んだのですが、こうやって何とかできました。
POINT3D ray;
POINT3D scr; // x y zをdouble型で確保している構造体
for(posX=0;posX<WIDTH;posX++)
for(posY=0;posY<HEIGHT;posY++) //nearクリップ面を端っこから走査していく
/* get near clip position 床○先生のところを参考に */
glGetDoublev(GL_MODELVIEW_MATRIX, model);
glGetDoublev(GL_PROJECTION_MATRIX, proj);
glGetIntegerv(GL_VIEWPORT, view);
glReadPixels(posX, posY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &scr.z);
gluUnProject(posX, posY, 0, model, proj, view, &scr.x, &scr.y, &scr.z); //nearクリップ面の座標をワールド座標で取得
/* end get near clip position */
// 視点とnearクリップ面上の点から Ray の算出
SubVector3D(scr,eye,&ray);
// Ray を単位ベクトルに変換
UnitVector3D(&ray);
Rayのところで使っているベクトル関数はこちらのを、ほぼそのまま入れてます。
ttp://www.cam.hi-ho.ne.jp/strong_warriors/teacher/chapter01.html nearクリップ面の座標は、賢いやり方が他にあると思うのですが…
これで画面の点と、視点とを結ぶ直線を順番に打っていけます
わかりにくいと思いますので、分からないところは言ってください。
交差判定について教えていただけると嬉しいです。
757 :
738 :2007/06/23(土) 10:12:58
>>756 おぉ、ありがとう!
gluUnProjectを使えば良かったのか・・
マウスでプリミティブを作成する時なんかに普段から使ってたよ・・orz
ただ、これでは遅い、らしいです 確かにビューポートからnear clip面の位置は算出できるはずなのですが どうにも文系の頭のため、、、私には難しいみたいです。 交差判定でどのようなところで調べました?
759 :
yd :2007/06/25(月) 19:33:06
円上に点を64個均等におきたいいですけどどうしたらよいでしょう?
>>759 int i;
float a;
const float b = 3.1415926535897932384626433832795028*2/64;
glBegin(GL_POINTS);
for(i = a = 0; i < 64; i++, a += b)
glVertex2f(cosf(a), sinf(a));
glEnd();
761 :
デフォルトの名無しさん :2007/06/25(月) 20:07:15
おしえてもらいたいんですが、 GLUTベースのUI部分をサポートしてくれるGLUIについてなんですが、 MacOSX 10.4.9上でgccを使用しコンパイルしようとすると glui.h:298: error: a class-key must be used when declaring a friend glui.h:298: error: friend declaration does not name a class or function というエラーが沢山でてコンパイルできません。 使用したOpenGLのライブラリはMacOSXに付属のXcode2というもので #include <GL/glut.h>は、#include<GLUT/glut.h>としてコンパイルしました。 マック上でGLUIをビルドするよい方法などがあれば教えて下さい。
>>761 そのエラーコードでググったら、2005 年に CVS バージョンでは直ってるという
ログがあったけど、最新のバージョン使ってる?
763 :
デフォルトの名無しさん :2007/06/25(月) 20:30:26
>>762 ありがとうございます!
ぼくもこのエラーでググって見たんですが…
どうも探し方が甘かったようです。
とりあえず今からチェックしてみます。
765 :
デフォルトの名無しさん :2007/06/25(月) 21:21:42
>>764 うわ、本当だ、すぐに出来ちゃいました。
どうも本当にありがとうございます。
皆さんどうもありがとうございました。
766 :
や :2007/06/28(木) 01:32:13
BAモデルのシュミレーションについてくわしいかたおりませんか_? 御教授お願いします。
趣味じゃないなあ
glutMainLoopはソースのどこからどこまでをループしているのですか?
>>768 「ソースコード中のここからここまで」という意味ではないよ。
なんにもしないループに突入、と思え。
なんにもしないループ? と聞いて俺までわからなくなった
>>769 その説明はイイねw >なんにもしないループ
でも分からない人にはワケワカランよw
>>768 glutMainLoop()を呼ぶと、GLUT内部の永久ループに突入して、二度と帰って来ない。
この永久ループは基本的に何もしないループ。
・・・なんだけど、ひとつ役割があって、「ウィンドウのサイズが変更された」とか
「ウィンドウを再描画することが必要になった」とか「マウスが動いた」とか・・・その他、
色々な「イベント」が発生したときに、そのイベントに応じて関数を(事前に登録して
あればだけど)呼び出してくれる。
その関数を登録するのが、 glutなんちゃらFunc() って名前の付いてる関数なのね。
これでお分かり??
>>768 ループは GLUT のライブラリの中にある。
それは回転寿しの廻るベルトみたいなモンで、基本的にずっとループし続けている。
寿司職人のあなたは、そのベルト上に自分の売りたい寿司を握って置いてあげる
必要がある。客が良く注文するような寿司ネタも廻しておかないといけない。
あなたはお店のオーナーじゃないので、ベルト自体は基本的に弄れない。
なるほど、理解できました! ということはglut〜Func()の中に重たい処理なんかを入れた場合… たとえば、左クリックしたら、10000×10000×10000のループをする、なんてもので、 それが命令ごとに呼び出されるわけですね。 ありがとうございました。頭がスッキリしました
774 :
デフォルトの名無しさん :2007/07/21(土) 04:14:35
glCopyTexImage2Dで得たテクスチャって上下逆さまで取得されたりしませんよね…? テクスチャを貼り付けて表示させてみるとどうも上下逆になってしまう… 外部から読み込んだ画像はきちんと表示できるのでテクスチャ座標の指定は間違ってないと思うのですが
775 :
デフォルトの名無しさん :2007/07/21(土) 11:11:14
>>774 コピーする基点はウインドウの左下ってことは分かってる?
>>774 OpenGLは画面座標もテクスチャ座標も左下が原点だよ
777 :
774 :2007/07/21(土) 18:31:03
めっちゃ単純な理由でした…w 解決しました。ありがとうございます
>>777 そうだろ。bmpなんか逆に格納されてたりするからな
大抵の画像関係のライブラリはそんな感じですね。 自分はOpenCVだけど他の人たちはどんなの使ってるんだろ
ATL の CImage
bmpは上からと下からの両方がアリエール
>>779 自分はFreeImageのお世話になってマス
>>781 上からってあるのですか? ヘッダ高さ情報をマイナスで書くとか言うアレですか?
AsyncKey や pragma が読みにくいのですが そういった単語の読み方の乗っているサイトってありませんか?
キーボードからの入力で物体を回転・平行移動させるプログラムを 作成しているのですが、回転させるときに 軸に対して反時計周りに回転させるときは普通に回転するのですが、 時計回りに回転させようとするとなぜか回転方向が反転してしまいます。 最初の角度を0とすると+15、+30・・・には動くのに 0から-15、-30・・・と回転させようとするとなぜか+15、+30・・・ になってしまい、キーボードからの入力への反応も逆になります。 (さきに+90まで動かせば0までは回転できる、それ以上マイナスに 回転しようとすると何故かプラス方向に回転を始めてしまう) マイナス方向には回転できないものなのでしょうか?
>>784 できるよ、としか言えない
どういう計算で回転させようとしてるのか分からんとなんとも
ちゃんと角度が負の値になってるかどうか確認してみ
解決しました。間違ってただけです。 回転角度がマイナスになるときにベクトルもマイナスになってたせいでした。 ありがとうございました。
787 :
デフォルトの名無しさん :2007/08/02(木) 06:29:33
すいません。昨日からOpenGLをいじり始めた初心者です。 glPointSizeを使って点の大きさを変更しようとしたところ、 数値を変えても全く反応がありません。 GL_POINT_SIZE_RANGEの数値を調べて、その範囲になるようにしたのですが、 点が大きくならないのはグラフィックカードが駄目なせいでしょうか?
glPointSize()が、glBegin()とglEnd()の間に入ってたりして。
glLoadIdentity() ってなんでいつもやらないといけないの?
別にやりたくなければやらなくていい
突然申し訳ありませんが、GLUTを使わずにWindowsAPIを使ってOpenGLでプログラムを組みたいのですが参考になるサイトはありませんんか? 自分でも探してみたのですがなかなかいいサイトが見つかりませんでした。
MSDN
wglで検索するべし
VC++2005EXPRESSでOPENGLを始めるには何をダウンロードしたらいいですか?
Platform SDK あと、使うなら GLUT とか GLEW とかお好みで
796 :
デフォルトの名無しさん :2007/08/04(土) 23:36:30
「プログラミング構文のお約束」 その関数を使うことによってどういう効果が得られるのかという「関数の効果」、 そうした情報がないとどうしようもないだろ
798 :
デフォルトの名無しさん :2007/08/05(日) 05:36:49
りえ子、結婚してくれ たのむ
openGL以外音楽やゲームパッドなどのは何を使えばいいですか?
なんでもどうぞ。 DirectSoundやDirectInput使ってもいいし、OpenALでもいいし。 SDLという手もあるし。
あ、りがとうございます。
802 :
デフォルトの名無しさん :2007/08/05(日) 19:30:11
ど、ういたしまして
モデリングツールは何がオススメですか?
そこらへんはCG板かゲ製板がお勧め
805 :
デフォルトの名無しさん :2007/08/08(水) 16:47:39
Visual Studio 2005のC++でOpenGLを動かすのに必要な手順を教えていただけませんか?
ttp://www.xmission.com/~nate/glut.html ここから落としたdll,lib,hファイルを各対応フォルダにコピーして
<GL/glut.h>をインクルードしているのですが
error C3861: 'glvertex2f': 識別子が見つかりませんでした
などのエラーメッセージが出てしまい困ってます。
#include <windows.h> #include <GL/gl.h>
大文字小文字を正確に × glvertex2f ○ glVertex2f
すごく初心者で申し訳ないのですが bmpからテクスチャを作るときは 目的のbmpは何処に置いておけばいいのですか?
>>807 ものすごい初歩的なミスでしたorz
ありがとうございます
>>810 何処に置いても
faild to open DIB file と言われてしまうのですが
如何すればいいのでしょうか
そのファイルをどこに置いて、どういうふうにファイル名を指定しているのか、くわしく。 ファイルが壊れてるなんてオチはないよね?
texture = CreateTexture("particle.bmp"); /*←メインの一部*/ GLuint CreateTexture(const char file_name[]) { GLuint texname; AUX_RGBImageRec* aux_image; if ((aux_image = auxDIBImageLoad( file_name )) == NULL) {return 0;} glGenTextures( 1, &texname ); glBindTexture( GL_TEXTURE_2D, texname ); glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, aux_image->sizeX, aux_image->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, aux_image->data ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); free( aux_image->data ); free( aux_image ); return texname; }
faild to open DIB fileと言われた後に テクスチャの付いていない状態で動きます bmpファイルは置ける場所全部においています 壊れてはいないようでした
・とりあえず動けばいいっていうのなら、フルパスで指定してみる。 "c:\\なんちゃら\\かんちゃら\\particle.bmp" ・Visual C++ を使っているのなら、Debug とか Release とかいうフォルダが 勝手に出来てるので、その中に bmp を置いてみる。
DebugやReleaseディレクトリじゃダメだよ その一個上のプロジェクトファイルと同じディレクトリが デフォルトの作業ディレクトリだよ
そうだっけか・・・すまそ。
すみません色々して見たのですが駄目でした お手本ファイルの方はちゃんと出来ているので 何か設定を間違えてるのかもしれません もう少し、自分でやってみます 有難う御座いました
行列スタックの内容をすべて破棄する関数なんてありませんかね?
glPopMatrix()しまくりたいと。
821 :
デフォルトの名無しさん :2007/08/12(日) 22:42:15
glLoadIdentityかな?
glPopMatrixを32回繰り返せばいいんじゃない?
823 :
819 :2007/08/13(月) 01:37:12
glPopMatrix()しまくればいいんですね。 なんか気持ち悪いけど、いっか。 どうもありがと。
32回だと全部ポップできてる保証が無いし、 ポップし過ぎるとエラーフラグがセットされちゃうよ。 GL_MODELVIEW_STACK_DEPTHをglGetIntegerv()して、 返った値-1だけポップすればよいかと〜。
825 :
デフォルトの名無しさん :2007/08/16(木) 16:34:35
//投影行列操作 glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-3.0, 3.0, -3.0, 3.0, 2.0, 10.0); //モデルビュー行列操作 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0.0, 0.0, 8.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); この設定で glBegin(GL_POLYGON); glVertex3f(-1.0, 1.0, 0); glVertex3f(-1.0,-1.0, 0); glVertex3f( 1.0,-1.0, 0); glVertex3f( 1.0, 1.0, 0); glEnd(); これがウィンドウにきちんと表示されるのは何故でしょうか? Z軸が0だと投影行列操作で指定した2〜10の範囲の外になるため表示されないと思うのですが 実行してみると表示出来ていて悩んでいますorz
>>825 >Z軸が0だと投影行列操作で指定した
のは、6〜−2では?
gluLookAtで視点(0,0,8)で原点方向を向いている訳だし。
カメラの座標を基準に2〜10なのですね! ありがとうございましたorz
828 :
デフォルトの名無しさん :2007/08/22(水) 17:24:04
GLUIを使いたいんですが、リンクのエラーがでます。 glui32.lib(glui.obj) : warning LNK4078: 複数の '.CRT' セクションが見つかりました。これらは異なる属性 (40300040) を持っています。 robot3.obj : error LNK2001: 外部シンボル ""public: class GLUI_Button * __thiscall GLUI::add_button(char const *,int,class GLUI_CB)" (?add_button@GLUI@@$$FQAEPAVGLUI_Button@@PBDHVGLUI_CB@@@Z)" は未解決です。 robot3.obj : error LNK2001: 外部シンボル ""public: class GLUI * __thiscall GLUI_Master_Object::create_glui(char const *,long,int,int)" (?create_glui@GLUI_Master_Object@@$$FQAEPAVGLUI@@PBDJHH@Z)" は未解決です。 glui32.lib(glui.obj) : error LNK2019: 未解決の外部シンボル ___CxxFrameHandler3 が関数 __ehhandler$?create_glui@GLUI_Master_Object@@QAEPAVGLUI@@PADJHH@Z で参照されました。 C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\myproject\VR\0821-2\Debug\robot3.exe : fatal error LNK1120: 外部参照 3 が未解決です。 解決策がわかる方お願いします。
.libファイルにパスを通してないだか、プロジェクトの環境に設定して無い
830 :
デフォルトの名無しさん :2007/08/22(水) 18:54:48
#pragma comment(lib, "glui32.lib") として更にプロパティページから追加依存ファイル に加えているのですが… 何か足りないですか??
CRT云々ってメッセージが出てるから、ランタイムを変更してみたらどうでしょう。 プロジェクトのプロパティを開くと、「C/C+」の中に「コード生成」って項目があって 「シングルスレッド」やら「マルチスレッドデバッグDLL」やら6種類ほど選べるように なってるんで、色々試してみるといいかも。
832 :
デフォルトの名無しさん :2007/08/23(木) 15:58:45
なるほど。ありがとうございます。 エラーは消えなかったですが、解決の糸口が見つかるかも しれません。 もうすこしがんばってみます。
GLSLのvarying変数はvertからfragに渡す変数ですが、 頂点シェーダで varying vec4 v = vec4(1.0,2.0,3.0,4.0); としたとき、 フラグメントシェーダで、 vec4 v1 = v; とすれば、v1の中身はそのまま(1.0,2.0,3.0,4.0) になっているってことでしょうか?
834 :
デフォルトの名無しさん :2007/08/26(日) 20:52:39
OPENGL勉強はじめの初心者です。
多角形の凹型ポリゴンを描写するときはどのようにすればよろしいのでしょうか?
ttp://wisdom.sakura.ne.jp/system/opengl/gl8.html で見たところ、glEdgeFlagを使えば凹型でも自動的にOPENGLが分割して描写してくれ
そうなイメージをもちました。そこで以下のような感じでコーディングしたのですが、
台形が表示されるだけで、凹型の図形を表示することができませんでした。
glEdgeFlag(GL_TRUE); glVertex2f(-0.85 , 0.9);
glEdgeFlag(GL_FALSE);glVertex2f(0 , 0.3); ←凹んでいるとこ
glEdgeFlag(GL_TRUE);glVertex2f(0.85 , 0.9);
glEdgeFlag(GL_TRUE);glVertex2f(0.9 , -0.5);
glEdgeFlag(GL_TRUE);glVertex2f(-0.9 , -0.5);
また、上記サイトのサンプルではglEdgeFlagを全部消しても、
凹型図形が正常にできてしまいました。
glEdgeFlagの役割がよく見えません。どのように使うのでしょうか。
また、上記コーディングのようなイメージで凹型ポリゴンを描画
することはできるのでしょうか。
よろしくお願いします。
glEdgeFlag は glPolygonMode で GL_LINE を指定したときに線が引かれるかどうかを指定するものであって、384 が思ってるような効果はない。 ぶっちゃけ、そのサイトの説明は間違い。 OpenGL は凹型ポリゴンを描画できないので、複数の凸型ポリゴン (というか三角形) に分解して描くのが普通。 どうしても凹型ポリゴンを描きたければ GLU にテッセレータがあるけど・・・ 重いよ
836 :
835 :2007/08/26(日) 21:13:20
384 じゃなかった、834
837 :
デフォルトの名無しさん :2007/08/26(日) 21:22:45
早速のres、ありがとうございます。 そうするとglEdgeFlag関数の役割ってどのようなものなのでしょうか。 よろしくお願いします。
志村〜!一行目!一行目!!
839 :
デフォルトの名無しさん :2007/08/26(日) 21:34:17
なる、試してみます。
すいません。 GLSLで、全てのフラグメントに対して頂点シェーダでの処理を取り入れたいのですが、 通常どおり、DisplayListsにして頂点をそれぞれ入力していくと、 とんでもない大きさになってしまい、使えませんでした。 何かよい方法はないでしょうか?
何したいのかよくわからんけど、なんでフラグメントシェーダにしないの?
フラグメントシェーダでは扱えないものがあるからです (gl_Positionやらgl_PointSizeやら・・・) そもそもフラグメントシェーダだけでは色しか扱えません。 >841
補足ですが、840で書いた意味は、全てのピクセルについて頂点シェーダで処理がしたい、ということです。
gl_Position にせよ gl_PointSize にせよ、 varying 変数で頂点シェーダからフラグメントシェーダに渡してやりゃーいいんじゃないの?
それよりも840が何をしたいのかが気になる
gl_Positionもgl_PointSizeもフラグメントシェーダ から設定できないんじゃないですか? あれは頂点シェーダ固有だったようにおもいます >844 varying変数でただ値を送りたいというわけではありません。 "出力先を設定したいのです。" そのためには頂点シェーダが必要です。 フラグメントシェーダから頂点シェーダを次の回の頂点シェーダを起動させられる仕組みとかあれば、 かなり喜ばしいことなんですが。そういうのはないんでしょうか?教えてください。 845 = 844 ?
847 :
846 :2007/08/28(火) 21:18:58
コレを消してください ↓ フラグメントシェーダから頂点シェーダを次の回の頂点シェーダを起動させられる仕組みとかあれば、 かなり喜ばしいことなんですが。そういうのはないんでしょうか?教えてください。 こっちに変えてください ↓ すべてのピクセルについて頂点シェーダで処理する機能があれば・・・・以下同文
848 :
デフォルトの名無しさん :2007/08/28(火) 22:20:03
パーティクルの座標や速度をテクスチャ(フラグメント)にレンダリングして それを頂点(頂点シェーダ)として入力したいとかそんなんだったら ピクセルバッファオブジェクト使えばいいんじゃないかな。 直接的にテクスチャ→頂点は無いようなぁ。というか知らん。
すべてのピクセルについて処理するのに、なんで出力先を設定するんだろう 出力先って、そのすべてのピクセルそれぞれじゃないの・・・? 理解が及ばん
>>840 トライアングルセットアップ前の処理であるバーテックスシェーダと
ラスタライズ後の処理であるフラグメントシェーダでは
「やるべき事/できる事」が全く違うんだけど、
グラフィクスパイプラインのことは理解してるのかな?
840と842を合わせて読むと、まるで各フラグメントごとにPointSizeを
設定したいみたいに読めるけど、それだとまったくもって意味不明だし・・・。
あと「出力先を設定したい」なんて独自用語を使われても皆困ると思います。
用語は正確に使いましょう。
ついでにOpenGLよりもっと抽象的なレベルで、「こうなって欲しい」「こういう絵を描きたい」
というのを説明した方が、返答したり代案出したりしやすいかも。
3Dでも2Dとほとんど一緒 GL_TEXTURE_2D → GL_TEXTURE_3D_EXT glTexCoord2f → glTexCoord3f glTexImage2D → glTexImage3DEXT あとピクセル配列が三次元分必要なくらい
>>852 さん ありがとうございます。
ただ、エラーが出てしまってうまく実行できません。ソースの一部を見ていただいてもよろしいでしょうか
ttp://www.uploda.org/uporg992912.txt glTexImage3DEXTのところでメモリエラーが出てしまっているようで。
それとは別になってしまうのですが
3次元テクスチャをポリゴンに貼り付ける、というイメージがいまいちできてなくて
3次元テクスチャが空間にある、というのならイメージができるのですが…
すみません、よくわからなくなってきました
質問おねがいします OpenGLをベースにしたライブラリで Fox-toolkit GLUT,GLUI のニ系統に注目しています。 これらを両立させてコーディングすることは可能でしょうか? それぞれのパッケージ毎にイベントループが用意されているので 難しいのかな?と思っていますが…
>>285 混合は難しいと思うよ。やればできるかもしれないけど。
イベントループの機構が違う仕組みを混合させて使うコードを
想像すると、、俺ならやらない。
>>855 わかりました。俺もやらないことにします。
>>853 //#include <GL/glext.h>
これが原因ではないかい?
>>857 GPUがAtiなのでglAti.hを読み込んでいます
EXTを使うのに、Atiの場合はこちらだとあったので
これをglextに変えても同じ状況になります。
3Dテクスチャは触ったこと無いけどこの辺追加したら動かんかな ::glPixelStorei(GL_UNPACK_ALIGNMENT,1);
>>859 加えてみてもダメでした
エラーは
glTexImage3DEXT(
GL_TEXTURE_3D_EXT , 0 , GL_RGB , TEXSIZE , TEXSIZE , TEXSIZE,
0 , GL_RGB , GL_UNSIGNED_BYTE , bits
);
のところを指して
0x00000000 でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。
と出ます。
床井さんのところのサンプルは動くのに…
861 :
デフォルトの名無しさん :2007/08/30(木) 22:20:14
これをコメントにしてるってことは関数のアドレス取得に失敗してるだけなんじゃ? >//if (glTexImage3DEXT != NULL) 床井先生のやつが動くならここの変更だけで動きそう >PFNGLTEXIMAGE3DPROC glTexImage3D; >glTexImage3D =(PFNGLTEXIMAGE3DPROC)wglGetProcAddress("glTexImage3D");
>>860 俺は、3Dテクスチャー扱うときは、
bits[TEXSIZE * TEXSIZE * TEXSIZE * 3];
の様にしているんだが、
GLubyte bits[TEXSIZE][TEXSIZE][TEXSIZE][3];
でも動くの?
>>861 >関数のアドレス取得に失敗
そのとおりだと思います…
書いていただいたとおり変更したら、今度はコンパイルができなかったです。
>>862 二次元テクスチャのときGLubyte bits[TEXSIZE][TEXSIZE][3]と取って、ijのループでアクセスしていました。
もしもよければ、3Dテクスチャのソース見せていただいたりとかできませんか
一日こればかりに追われてしまって…頭がもう熱もってしまって具合悪くなってきました
使ってるビデオカードが 3D テクスチャに対応してるかどうかをまず調べたほうがいい
GL_VERSION: 2.0.5696 Win2000 Release GL_RENDERER: RADEON XPRESS 200 Series SW TCL x86/MMX/3DNow!/SSE2 GL_VENDOR: ATI Technologies Inc. EXTENSION: GL_EXT_texture3D GL_MAX_3D_TEXTURE_SIZE_EXT: 2048 toglinfoでこうあったので大丈夫だと思うのですが
じゃあ wglGetProcAddress が早すぎるのかも まだ GL 初期化されてないでしょ glutCreateWindow の後にしてみ
できました…ほんと、ほんとにありがとうございます 。゜。゜(ノД`)゜。゜。。゜。゜(ノД`)゜。゜。。゜。゜(ノД`)゜。゜。。゜。゜(ノД`)゜。゜。 なんで、こんなことで 原因がなんでわかったんですか 何で俺、一日こんなに悩んでたんだよ ありがとうございます ほんとにほんとに 。゜。゜(ノД`)゜。゜。
なんでわかったっていうか・・・、最初から心当たりは色々あるっていうのもあるけど >glTexImage3DEXT( >のところを指して >0x00000000 でハンドルされていない例外 から、たぶん glTexImage3DEXT が NULL になってる可能性が高い。 wglGetProcAddress の戻り値が NULL ってことは取得に失敗してるわけだから、 ビデオカードが 3D テクスチャに対応してないか、 あるいは wglGetProcAddress のリファレンス見りゃ現在のGLコンテキスト云々って書いてあるので初期化前には使えなさそうだと思われた ってところ。 というかね、wglGetProcAddress の戻り値がちゃんと取れてるかくらい、最初から確認しなさいよ。
すみません すべてにおいて修行不足でした。。。 戻り値がNULLなのが、なんでなのか、そこばかり見て 答えをぐぐって、リファレンスを見るということしてませんでした 自分の至らなさに凹むばかりです。。。
うーん、でもま、コンテキスト作る前にwglGetProcAddressして関数ポインタが得られない、
てのは誰でも一度はやる失敗ジャマイカ? というか俺はやった。
そうやって経験を積んでいくんだよ、うん。気を落とさないでガンバレ。
ついでに
>>862 どっちも確保されるメモリの量は同じだから動くよ。
ただ、型に関しては前者のbitsはGLubyte*型、後者のbitsはGLubyte(*)[TEXSIZE][TEXSIZE][3]型
になることだけ注意。(glTexImage3Dはどっちもconst void *型で受けるから関係無いけど)
すみません、すごいくだらない質問なのですが 複数のテクスチャ、の意味が理解できなくて for(i=1;i<=SLICE_NUM;i+=4){ SetTexture((int)i); glBegin(GL_QUADS); glTexCoord2d(0.0, 1.0); glVertex3d(-1.0, -1.0, i/(SLICE_NUM*0.5)-1.0); glTexCoord2d(1.0, 1.0); glVertex3d( 1.0, -1.0, i/(SLICE_NUM*0.5)-1.0); glTexCoord2d(1.0, 0.0); glVertex3d( 1.0, 1.0, i/(SLICE_NUM*0.5)-1.0); glTexCoord2d(0.0, 0.0); glVertex3d(-1.0, 1.0, i/(SLICE_NUM*0.5)-1.0); glEnd(); } たとえばdisplayの部分でSetTexureとして、下のようにRawの画像を連続で読み込んでいるのですが static void SetTexture(int i){ FILE *fp; char texture1[256]; /* テクスチャファイル名 */ sprintf(texture1,"hoge_%03d.raw",i); if ((fp = fopen(texture1, "rb")) != NULL) { fread(texture, sizeof texture, 1, fp); fclose(fp); } else { perror(texture1); } glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TEXWIDTH, TEXHEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); } この場合テクスチャ(画像)は複数ですよね。でもglGenTexturesで扱うような「テクスチャ」ってこれとはどう違うのでしょうか 違いというのが何なのかを教えてください
その場合は、描くたびに画像データをロードしなきゃいけない。 ビデオカード上には同時に1枚しかテクスチャがなくて、毎回入れ替えることになる。 glGenTextures というか glBindTexture を使う場合、 ビデオカード上に同時に2枚以上のテクスチャを置いておける。 描くたびにいちいち画像データをロードする必要はなくて、ロード済みのテクスチャを単に切り替えるだけで済む。
なるほど ということは実体は同じ、ということですか? 上の場合は1枚読み込んで、貼り付けて 1枚読み込んで、貼り付けて …以下繰り返し それだと1番目の貼り付けた画像は、ビデオカード上に無い、ということですか? 表示は全部表示されてはいるのですが…
ということです。 画面に描いた結果は画面には残るけど、 テクスチャとしてのデータは、新しいのをロードした時点でビデオカード上から消え去る。 もう一度同じテクスチャで、今度は別の位置に描画したければ、またロードし直すしかない。
875 :
デフォルトの名無しさん :2007/09/01(土) 17:18:38
質問です。 変数を画面に表示させることってできるんですか?
できますよ
>>874 遅くなりましたが、ありがとうございます!納得ができました
>>853 ですが
生成した3次元テクスチャをglutSolidCubeなどに貼り付けようとしているのですがうまくいっていません
イメージは
ttp://www.unregardless.net/images/cocoa.png こちらの左の三角形のようなもので、これをスライスしても中身に模様が詰まっている、ということをしようとしています。
3次元テクスチャの生成で、いけると思ったのですが
Solidの物体に貼り付けるところでもつまってしまいました
参考になるところとかありましたら教えていただけないでしょうか
879 :
デフォルトの名無しさん :2007/09/03(月) 15:11:10
>>878 まず、OpenGLで扱えるのはサーフェイス(+ライン、ポイント)のみであり
ソリッドな物体を表現するには断面をサーフェイスで描くか、
サーフェイスを死ぬほど重ね描きして擬似的にソリッドぽく見せるしかないんですが、
その点はOKですか??
そしたら後は、頂点ごとに、対応するテクスチャ座標を3次元で与えてやるだけです。
>>879 printf()
881 :
デフォルトの名無しさん :2007/09/03(月) 16:04:08
>>878 OpenGLやDirectXなどのリアリタイムレンダリング向けの3Dライブラリは、
サーフェスモデルを採用していますので、普通のやり方ではできません。
CADなどでつかわれる、ソリッドモデルが使えるライブラリが使えれば可能だと思いますが・・・
882 :
デフォルトの名無しさん :2007/09/03(月) 16:04:48
x リアリタイムレンダリング o リアルタイムレンダリング
>>880 さん
>サーフェイスを死ぬほど重ね描きして擬似的にソリッドぽく見せるしかないんですが、
はい、こちらの方はできました。
ただ2Dテクスチャをポリゴンに貼り付けて重ねていたので、それを3Dテクスチャにしようと思ったのです
>>881 さん
なるほど。もともとサーフェイスがメインということですか…
すいません、上のは ポリゴンにあるようなグラデーションのテクスチャを ソリッドに直接張り合わせようとしたものです…
>>885 やりたいことが分かるような分からないようなw
ええと、glTexGenを使う方向性は間違ってないと思うんですが、
なぜGL_TEXTURE_GEN_MODEがGL_SPHERE_MAPなのん??
こういう用途ではGL_OBJECT_LINEARを使うのが普通だと思うのですが。
>>887 さん
ttp://www.uploda.org/uporg1000803.jpg とりあえずできました。glTexGenのところをいじくっていたらなんとか。
なぜか自動でテクスチャが、-1〜1の範囲でないと全部適応されないのが気になるのですが
角の部分は視野台を越えてしまっているのですが、切り取られるとSolidCubeでもサーフェイスもでるなのですね
この後は床井先生のところで勉強します
ありがとうございました。
>>888 んな?テクスチャ座標は-1〜1じゃなくて、0〜1ですよ?
あとglutSolidCubeの "Solid" てのは、 "Wireじゃない" という意味であって、
ソリッドモデルを描いてくれるワケではないのです。残念ながら。
>>889 さん
なぜか-1.0〜1.0のポリゴンを基準にテクスチャが生成されてしまいました。。。原因を調べています。
SolidCubeの件もありがとうございます。
中身がカラッポだったので、床井先生のところでされているような
切り取った面に再度テクスチャを張るといったところをよく見てみます。
OpenGL作ってるアプリで.xファイルを 読み込もうとしているのですが、全然やり方が解りません。 .xのテキスト形式に書かれている内容をどうやってパースすればいいのか どなたかヒントを下さい!
892 :
デフォルトの名無しさん :2007/09/06(木) 17:11:10
↑すみません、間違えました OpenGL作ってるのではなくて、OpenGLを使用しています
D3DX を使うか、X ファイルをやめる、というのがおすすめ 自力でパーサを書くのは相当大変だが、やりたければ lex とか yacc とか再帰下降とかでぐぐってみたら
便乗ですまんす、VRML2.0を(あるいは、VRML2.0から変換できる何かを) OpenGL上に表示できる、定番のライブラリはあるでしょうか。 フリーだと嬉しいす。
895 :
デフォルトの名無しさん :2007/09/06(木) 19:15:19
openGLをつかってshadeで作ったモデルを 動かすとかって可能ですか? 誰か知ってる人いたら教えてください!!
>> 893 情報サンクス 参考に考え直してみます! >> 895 shadeから汎用のファイル形式に書き出して、OpenGLで読み込めば出来るよ!
897 :
デフォルトの名無しさん :2007/09/06(木) 19:29:59
>>897 .obj とか mqoに変換すれば
そういうことやってる人いっぱいいるから、ソース出てくるよ
>898 いまいちどのmqoローダがいいのかよくわからない なにか、おすすめありませんか?
ごめん、俺もそれ自体はやったことないから 何がいいのかはわからない ググってくれ
w 了解 自分で探してみます
ww
www
wwww あ、>901俺だ
905 :
デフォルトの名無しさん :2007/09/10(月) 16:06:50
895です shadeでつくったモデルをOpenGLで 動かしたことがある方は どんな資料を参考にしてらっしゃいますか??
そんなことをいちいち聞くレベルで、モデルデータ扱うのはちょっと速いんじゃないか…?
907 :
デフォルトの名無しさん :2007/09/10(月) 19:02:37
難しいというか、めんどくさい? openglにはモデルを読み込んだりする機能がないから、自分でどうにかしないといけない ちなみに、俺はやったことないw
ww
なんでこんな和やかなんだこのスレはw
>>905 shadeだとwavefront obj形式かdxf形式とかmqo形式で吐き出したものを読み込む事が多いと思う。
objなら"wavefront obj フォーマット"とかでググればmtlファイル含めてフォーマット形式が結構出て来るし、
dxfもMSDNにファイルフォーマットが記載されてる。
あとは自力でこれらのASCIIデータを読み込んで、頂点情報等に分解して描画すればOKにょ。
俺はmqo使った事無いからそっちはシラネ。
シェードならメタセコで読み込めるんじゃないの? メタセコってモデリング兼、変換ツールみたいなもんだろ つーか3Dモデルっていくらでも変換できるんだから obj mqoあたりに変換すればいいだろうに
最新のは知らんが数年前だと形式によってemissionやテクスチャ座標が付いてこない奴があったからなあ 自分が必要とするモデル情報を格納してる形式について調べるのが一番良さげ
OpenGLって英語のヘルプしかないのでしょうか? 関数とかパラメータとか多すぎて覚えたそばから忘れてしまうぅ
英語だろうと日本語だろうと多すぎるパラメタは覚えられないと思うがなw
917 :
デフォルトの名無しさん :2007/09/12(水) 02:01:27
OpenGL1.2以上が必要っていわれてできないMMOあるのですが どなたかインストできるサイト教えてください。
ビデオカードがOpenGL1.2以上に対応してれば、ドライバを入れれば使えるようになる。 ビデオカードが対応してなければ無理。 あと、板違い。
919 :
デフォルトの名無しさん :2007/09/12(水) 03:25:38
OpenGL1.2非対応って、どんなビデオカードだw
432 デフォルトの名無しさん 2007/01/19(金) 00:37:09 OpenGL1.2非対応ってどんだけ前のマシンなんだよ・・・ 919 デフォルトの名無しさん 2007/09/12(水) 03:25:38 OpenGL1.2非対応って、どんなビデオカードだw 歴史は繰り返す。
921 :
デフォルトの名無しさん :2007/09/12(水) 05:36:46
917の者です。板違いすいませんでした;; 付属のドライバインストしたら無事できました。 わざわざすいません。ありがとでした。
922 :
914 :2007/09/12(水) 10:03:38
>>915 ありがとうorz
英語もGLも地道に慣れる事にするよorz
923 :
デフォルトの名無しさん :2007/09/12(水) 13:08:50
よかったな ドライバは入れような
>>905 俺ここで質問する側の人間だけど
glutありでいいなら
「GLUTによるOpenGL入門」て本に3Dグラフィックの描画の仕方があるから
後はモデルデータをワードパットなりなんなりで開いて打ち込みでいけるんじゃないんかな・・・
見当違いの事かいてたらごめん
ネットの某所からトラックボール処理の関数をDLして 初期化時に光源の配置 display関数内で glMultMatrixd(トラックボール移動関数()); みたいな事をしていて、これだと光源の位置がトラックボールと一緒に回転している状態なのですが トラックボールしつつ光源の位置を固定する事って出来ますか? 何かを間違えているのだろうか…
glLightfv とかで設定する光源の位置は、現在のモデルビュー行列の影響を受ける モデルビュー行列をリセットした状態で (あるいは glMultMatrixd の前に) 光源の位置を設定してみ
ビルドしたところ \include\stdlib.h(406) : error C2381: 'exit' : 再定義 ; __declspec(noreturn) が異なります。 \platformsdk\include\gl\glut.h(146) : 'exit' の宣言を確認してください。 とexitにエラーが起きるんですが これってglutのファイルがおかしいんですかね・・?
glut.hと標準ライブラリのヘッダーをインクルードする順番を変える
なるほどためしてみます 有難うございました
順番変えるんだっけ? 自分はコメントアウトしてた気が…
glutでプログラムを組んでいるのですが、グローバル変数の多いものとなってしまいます。keyを判断して他の関数に渡すなど。 皆さんもグローバルに変数を定義しているのでしょうか。
>>931 GLUTの性質上、大域変数が多くなっちゃうのはしょうがないかも。
僕も簡単な描画テストとかGLUTで書くときは、大域変数使いまくりですよ。
まじめにやりたいなら、
class MyApp *my_app = 0;
void keyboard_func(unsigned char *key, int x, int y) {my_app->keyboard_event(key, x, y);}
void display_func() {my_app->display_event();}
int main() {
my_app = new MyApp;
glutInit();
glutKeyboardFunc(keyboard_func);
(略)
glutMainLoop();
}
みたいな感じでイベントを全部スルーパスしてやれば、
あとはMyAppの書き方次第では綺麗になるんじゃないでしょうか。
でもまじめにやりたいなら、そもそもGLUT使わないかもw
>>931 >皆さんもグローバルに変数を定義しているのでしょうか。
グローバルな構造体のメンバ変数にすると、ちょっとは見通し良くなるかも…
>>932 >>933 なるほど、参考になります。
クラスや構造体を使って少し整理してみようと思います。
OpenGLでNurbsをつかいたいけど、 描画以外にはぜんぜん使えないんで、 よいNurbsライブラリを教えてたもれ。
>>932 glutてあんまり使わないほうなんです?
本なんかだと使ってるのしか見ないからなぁ・・
赤本青本は手が出せない・・
>>936 GLUTは、単にOpenGLで描画したいだけなら簡単で早くてとてもイイカンジですよ。
ただ実用アプリとしての体裁を整えようと思うと、急に辛くなるっていうか、色々とムリっていうか。
C++BuilderとかWIN32API直書きとかgtkとか色々やったけど、今はwxWidgets(+wxFormBuilder)がお気に入り。
GLUTと比べると色々と面倒臭いですけど、雛形を作ってしまえばかなり使えます。
あ、繰り返しますけど、簡易的な用途(テスト、デモ、小規模なゲームとか)なら
GLUTは全然悪くないです。あんまり使わないどころか、僕もよく利用してますよ〜。
>>937 なるほど納得です
説明ありがとうでした
ファイルダイアログを使いたいかどうかあたりが glutを使うか使わないかの分かれ目な気がするw
俺の場合ゲームだけど細かいところ作ってるとglutは厳しいなあと思う。 937さんの言うようにテスト・小規模アプリ用って印象があるにゃー。
glut使わないとすると、wglやglXになるのでしょうか。glewなんてのもあるみたいですが。
ゲームだと、どんなん使うの?
俺は一回もglutを使った事がナス… ずっとwindows sdkやxlib使ってたからか、最初はglutの入門書見てもイミフというか、 勝手に色々作られるのが気持ち悪くて、window制御させろやモルァとか思いながら調べてたら wglやglxに辿り着いたっけなあ
944 :
デフォルトの名無しさん :2007/09/18(火) 17:44:15
glutってどうみてもテストアプリ用だろ
どうやってあれで、ゲームとか作れというんだ・・・
>>942 Win32API、VCL、SDL、その他OpenGLを利用した3Dライブラリ(Irrlicht、OGRE3D、g3d)など
お好きなのをどうぞ
GLFWのことも忘れないであげてください。
>>942 リアルタイム入力が必要なゲームには向いてない。
クリックイベントベースのゲームとかフラグとタイマーループを組み合わせた程度のゲームならglutでもいける。
ただし音を扱うとなると厳しいかも->glut
>>943 確か過去スレにウィンドウハンドルとglut内のなんとかidを紐づける方法が質問&回答されてたような気ガス。
TuxRacerも昔のver.はGLUT使われてるんじゃなかったっけ
>>943 みたいにやるとDirectX使うのと同じくらい煩雑な手続き要ったりします?
自分もGLUT使わずにやってみたいんですけど、
そうするとDirectXと比べて手軽にできるってメリットが消えちゃったりしますかね?
>948 SDLはそれなりに手軽
Direct3Dもglut相当のものがあるからむしろglより楽だぞ
951 :
デフォルトの名無しさん :2007/09/19(水) 08:24:30
DXUTでggr
>>948 初期化に関してはD3Dより微妙に楽…かも
すいませんおかしな質問なのかもしれないのですが 常に視線方向に向いたポリゴン(ビルボード)を積み重ねて描きたいのですが 回転は視点が動くことで実装しようと思っています。 それで気になったのですが 1 視点が動くたびに、積み重なったポリゴンを再描画するのと 2 視点の回転に合わせて、積み重なったポリゴンも一緒にこっち側を向いたまま回転してついてくるの どちらの方が高速なのでしょうか 後者の方が行列を掛け合わせるだけだと思うので速いと思うのですが ビルボードなので、テクスチャもそれにあわせて動いてくれるかが少し気になります。
>1 視点が動くたびに、積み重なったポリゴンを再描画するのと いずれにしろ毎フレーム画面全体を再描画してるはずでは? >2 視点の回転に合わせて、積み重なったポリゴンも一緒にこっち側を向いたまま回転してついてくるの そもそも、常に視点方向を向くポリゴンのことをビルボードっていうはずだよね >どちらの方が高速なのでしょうか どちらっていうか、1と2はどのへんが対立するので? >ビルボードなので、テクスチャもそれにあわせて動いてくれるかが少し気になります。 それに合わせて動くってどういう動き方? 全体的に意味がわからん
956 :
925 :2007/09/19(水) 16:58:25
今更ですが法線ベクトルの設定に問題がありました
>>926 さんありがとうございました
>>955 わかりにくくてすみません
ポリゴン再描画→ vertex(dx, dy, dz)のように視点が動くたびに頂点位置を指定して
再度ポリゴンを描くということです。
2以降は仰るとおりです。わけわからなくてすみません。
2のときは頂点位置を指定してポリゴン描かないの?(゚_。)?(。_゚)?
仰る通り OpenGL は描画以外のことは関知しない。 そもそも、OpenGL そのものにはキーとかマウスとかいった概念自体がない。 フルスクリーンとかウィンドウ表示とかいったことも範囲外。 単純に描画の部分しか扱わないので、それ以外はすべて OS 依存になる。 具体的には、Windows ならウィンドウメッセージを処理して IMM を叩く、 Mac なら NSTextInput プロトコルを実装する、Linux なら XIM を触る、 ・・・といった感じになるかと。 個人的な経験で言うと、IME の制御は環境差が結構あって、 その差異を吸収しようとすると、わりと面倒かった記憶がある。 OS に依存したくなければ、Anthy みたいなフリーの IME を拾ってきて 自分のプログラム内に組み込むっていう方法もあるけど、どうだろうかね。
SDL-IMを使うとゆー手もあるけど、別スレで同じこと答えてる人がいるから そっちにまかせた
IME と関係ないことだが、マルチプラットフォームに展開するつもりなら Mac のマウスはワンボタンだという衝撃の事実を忘れずに UI 設計してもらいたい。 よろしく。
今はMacも右クリックあるんだよな オレは1ボタンのマウス使ってるけどなー
964 :
デフォルトの名無しさん :2007/09/20(木) 13:27:42
マウスはワンボタン(笑)
むしろ 「SGのワークステーションは3ボタンマウスしかありませんが何か?」 くらいの勢いで設計して欲しい
Win32アプリケーションでglutを使わずにOpenGLを動かす方法を勉強をしようと思っているのだけど 参考になるサイトとかってありますか?
>>966 OpenGL WGL で検索するといろいろ見つかると思う
>>967 WG・・・L・・?
いろいろ調べてみます
ありがとうございました!
むしろキーボードしかなかったり、マウスしかなかったり、 カーソルキーが無かったり、マウスボタンが一つだったりホイールが無かったりする環境を考慮して、 どんな環境でも操作できるようにしておくといいよね。
まあどんな場合でも切り捨てって必要よね
971 :
759 :2007/09/20(木) 21:07:18
>>960 体験談参考になります。ありがとうございます。
マウスとキーボードが無い環境となると ふむ
パンチカード?
きっとタッチパネル
コンピュータが無い場合も考慮すべし。
脳内レンダリングの出番だな
こっちは超初心者用だから、俺こっち継続して欲しい
こっちの方が質問しやすいって人もいるでしょうね
俺みたいなへたれさんとかね
981 :
デフォルトの名無しさん :2007/09/23(日) 09:59:06
死んで
お前が死んで
はい
素直すぎですwww
こsで
OpenGL APIのリファレンスって何処にあるんですか GLUTはすぐに見つかるのに
990 :
デフォルトの名無しさん :2007/09/26(水) 18:39:30
画面全体を揺らすという効果を実装したいのですが、よい方法をご享受下さい。 画面に最終的に表示するときに、座標をそれぞれ、加算するという方法が、 まずうかびますが、どうもスマートではありません。
一度普通にバックバッファにレンダリング ↓ glCopyTexSubImage2Dでバックバッファイメージをテクスチャにコピー ↓ テクスチャをスプライトとして表示して動かしまくりんぐ ↓ 完
992 :
990 :2007/09/26(水) 18:58:22
適当にやったらできてしまった。
glPushMatrix;
glTranslatef(x, y, 0);
:
//描画処理
:
glPopMatrix;
これができたのは、たぶん、2Dスプライトしかないせい・・・。
>>991 3Dの場合、そっちの方が定番なのかな?
カメラ揺らすだけでもおk
994 :
990 :2007/09/26(水) 20:17:18
>>993 後学のために、カメラ操作の方法をしりたい・・・
gluLookAt の 特定の引数の座標だけを変えるようなことってできるんだろうか
? できるだろそりゃ
単に gluLookAt の centerX〜Z を上下左右前後に揺らすってことではないかな
997 :
990 :2007/09/26(水) 20:35:15
>>996 そのとおりです
調べましたが、
結局、gluLookAt は、パラメータに応じて、計算して、行列を設定しているだけですから、
適当に、glTranslatefなりなんなりで、ずらすのと変わらないんですね。
ありがとうございました。
お
とった
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。