問題タブ [glulookat]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opengl-es - 2D ゲーム OpenGL でのカメラ位置の変更
私は OpenGL でゲームを作る初心者です。私は地図を描きました (これは世界で、プレイヤーはそこに移動できます)。そして今、やりたいことは、カメラがプレイヤーを追跡することです (プレイヤーは画面の中央にあります)。私はこのようなことをしました:
this.x と this.y はプレイヤーの座標です。残念ながら動作しません :( 何も起こりません。これは 2D ゲームなので、パースペクティブなどはありません。
opengl - OpenGL モデルビュー マトリックスとマトリックス変換の使用に関する明確化
モデルビュー マトリックスと や のような関数を使用して、オブジェクトまたはシーン全体の視点を変換することができましたがglTranslatef()、gluLookAt()両方を実行しようとすると問題が発生します。
で使用するパラメータに関係なく、gluLookAt()描画するオブジェクトは同じ角度から表示されるようです。私は、他のスレッドで読んだものに基づいて、他のさまざまな用途で関数を呼び出してみましたが、うまくいきませんでしglPushMatrix()た。glPopMatrixこれが私が今持っているものです。オブジェクトは動くはずですが、1 つの視点からしか表示できません。
たとえば、xy 平面内を移動しているはずで、反時計回りに回転しているので、 に変更z_0する-30と時計回りに移動しているように見えると思いますが、違いはないようです。その前に省略している定数の長いリストがあります。最終的な目標は、太陽系の単純なモデルを作成することです。
誰かが私が見逃しているものを見たら、問題を解決するのに役立つ説明や追加の読書への指示を本当に感謝します.
opengl - OpenGL-gluLookAtを使用して立方体の周りを回転すると、非常に速く回転します
オブジェクトに対して直接R*T変換を実行する代わりに、gluLookAtを使用して、原点を中心とする立方体を移動しようとしています。最初は、この問題をどのように行うのかわかりませんでした。次に、(ソリューションの半分を円座標で実装した後)球面座標系表現を使用してみる必要があることに気付きました。これを行うためのコードを書くことはできましたが、私(カメラの「目」)は立方体の周りを非常に速く回転します。また、一定の半径を保持するのではなく、立方体に少し近づいていることに気付きました。Rotate * Translateメソッドを使用すると、同じ距離でより適切な速度で回転します。
私の回転のアプローチは球面座標を使用することでしたが、これが正しいかどうかはわかりません。ウィキペディアのページにある図に従って、2つの角度を計算します。現在のポイントの大きさを計算します(distX、distY、distZ)。最初はXY平面にいて、負のZ平面を見ています)。また、2つの角度が与えられています。1つはx軸を中心とした回転角を指定し、もう1つはy軸を指定します。これらの5つの値は、マウスクリックの方法に基づいて計算されます。
いくつかの三角関数に基づいてシータとファイを計算し、最後に新しい位置を計算します。これらの式は、前のリンクにあります。最後のステップは、それをgluLookAtに接続することです。繰り返しになりますが、このプログラムを実行すると、立方体の周りを回転することができますが、非常に高速で、カメラも変換します。私は何が間違っているのですか?
参照したい場合に備えて、私のコードを以下に示します。「y」と「up」を参照する部分は、Z軸を中心とした回転を計算するための私の試みです。その回転を説明するのに最適な方法は、オブジェクトを見て、自分でカメラを想像し、頭を左右に傾ける場合です。それを機能させることができなかったので、gluLookAtへの呼び出しにそれを含めませんでした。
編集:正しい速度で回転するようになりましたが、完全には回転しません。つまり、回転すると、「目」はある角度で立方体に向かって移動しますが、その後、回転を元に戻します。しかし、これはループするため、目がたどる経路は曲がった無限大記号のように見えます。
java - OpenGL 3 (LWJGL) ルックアット マトリックスの混乱
LWJGL を使用して OpenGL 3 を学習しています。に相当するものを実装しようとしましたが、gluLookAt()機能しますが、その理由について少し混乱しています。
私はこのコードを Web 上のさまざまなソースからコピーしただけであることを告白しますが、多くの研究の結果、その背後にある数学を理解し、LWJGL が何をしているかを理解していると思います。
gluLookAtただし、カメラが間違った方向を向いているように見えたため、「正しい」コードがアプリケーションで正しく動作しませんでした。forward直交ベクトル、side、および(正しい用語を使用していることを願っています!)を転置することによってのみ、コードを機能させることができましたがup、これは間違っていると確信しています...
転置を行うべきではないと思いますが、それなしでは機能しません。transpose()ところで、すべてのマトリックスセルの位置を再入力するのが面倒だったので、入れました!
私の理解では、lookAt マトリックスの形式は次のようになります。
Matrix4fそして、LWJGLクラスは行列セルを として表していると思いますm<col><row>。translate(Vector3f)メソッドは次のことを行います
そのため、私はこれのどの部分を台無しにしたのか、非常に混乱しています。それは、lookAtマトリックス、列/行の主要度(それは単語ですか?!)Matrix4f、または他の何かについての私の理解ですか? 私のコードの残りの部分は壊れていますか? それは本当に正しいのでしょうか?私はただのばかですか?
ありがとう。
c++ - gluLookAt() には最小の引数サイズに制限がありますか?
これを呼び出すと機能するOpenGLプログラムがあります:
gluLookAt(0.1,0.1,0.1, 0,0,0, 0,0.1,0);
...しかし、私がこれを呼び出すときではありません:
gluLookAt(0.01,0.01,0.01, 0,0,0, 0,0.01,0);
(後者の場合、空白の画面が発生します。)
gluLookAt には、浮動小数点引数の最小/最大サイズがありますか?
描画は原点を中心に、半径 ~10-6 の範囲内で行われます。
opengl - gluLookAtおよびMODELVIEWMATRIX
モデルビューマトリックスとの使い方を理解しているような気がしgluLookAtます。つまり、を宣言するgluLookAt(ex,ey,ez,lx,ly,lz,ux,uy,uz)ことで、特定のポイントを直接見る方法を簡単に設定できます。
私の質問は-gluLookAtを呼び出す前にIDをロードしgluLookAt、現在のmatrixmodeがmodelviewであると仮定して、現在の行列をpostmultipliesするので、立方体を描画するとどうなりますか?
だからこのようなもの:
立方体はワールド座標でどこにレンダリングされますか?何らかの理由で、この場合、ワールド原点でレンダリングされ、ビューポートで表示できますが、なぜですか?gluLookAtビューの回転と平行移動を使用してmodelviewマトリックスを変更するべきではありませんか?立方体は基本的にカメラを内部に置いてレンダリングする必要がありますか?
opengl - glulookat を使用して ModelViewMatrix をロードする
GL_MODELVIEW マトリックスと同様に、カメラの位置と方向を含むマトリックスを定義しました。

(m3 = 0; m7 = 0; m11 = 0; m15 = 1)
このデータを ModelViewMatrix にロードしようとしています。私はこの2つの可能性を考えています:
- 関数 glLoadTransposeMatrixf() の使用:
このソリューションを使用すると、正しい位置と向きが得られます。問題は、ビューを変更するためにコードの Left/Up/Forward/Translation ベクトルを変更しているため、2 番目のソリューションを使用する必要があることです。
関数 gluLookAt() の使用:
私の問題は、それで取得しているGL_MODELVIEWマトリックスが他のケースとは異なることです。具体的には、Translation ベクトルは間違っていますが、Left/Up/Forward ベクトルは正しいです。
私はそれと本当に混乱しています。この2つのオプションと私が間違っていることの間に違いがあるかどうか、誰かが説明できますか?
得られた結果:
次のような行列 M を使用しています。
最初の方法では、正しい GL_MODELVIEW マトリックスを取得しています。
しかし、2番目の方法では、次のGL_MODELVIEWマトリックスを取得しています:
tx'!=tx、ty'!=ty、tz'!=tz であることに注意してください。これは非常に紛らわしいです...