問題タブ [glrotate]
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.
iphone - OpenGLで回転中心を変更する方法
やや複雑な3Dモデル(OpenGL ES 1.1 iPhone SDK v3.0) (つまり、数千の頂点と面)があり、このモデルをモデルの中心またはその近くでY軸を中心に回転させたいと考えています。問題は、glRotateが、モデルの中心付近ではなく、下端の1つの中心付近の点を中心にモデルを回転させることです。街灯柱の周りを非常にタイトな円を描く車を想像してみてください。それが基本的に私が持っているものです。車をライトポストに突き刺して、その周りを回転させてほしい。(以下のいくつかの情報源)
質問:
OpenGLで回転の中心を変更する簡単な方法はありますか?
c++ - rotatef c++ の呼び出し後にオブジェクトの値を取得する
(glRotate3f を使用して) 回転させた後、頂点オブジェクトの X、Y 値にアクセスする必要があります。それはどのように可能ですか?オブジェクトの回転角度に基づいて、衝突が角度に関連する方向にオブジェクトを送信するオブジェクトの衝突問題を解決する必要があります。
編集::
わかりました、私は道を見つけるために近づいてきました。X と Y を 0、90、180、270 度と仮定します。オブジェクトの中心として点を設定し、X=30、Y=70、X_size を 60、Y_size を 140 と仮定します。
new_X = X cos(angle) - Y sen(angle) および new_Y = X sen(angle) + Y cos(angle) を作成した場合、オブジェクトの中心 X および Y を new_X および new_Y に加算または減算すると、実際には-new_X + X で移動する必要がある角度が 180 の場合を除いて、新しいポイント。
これはそれを解決する方法ですか?
opengl - ポイント - glutLookAt* 関数を使用しない平面衝突
私が理解しているように、gluTranslate / glRotate を使用して glutLootAt を使用することをお勧めします。明らかな HW 対 SW 計算モード以外の理由を探すつもりはありませんが、単に波に沿って進みます。ただし、カメラが壁を突き破るのを効率的に止める方法が正確にわからないため、これは頭痛の種です。AABB などではなく、点と面の交点のみに関心があります。
そのため、glTranslates と glRotates を使用すると、世界がその周りを回転している間、視点は (簡単にするために (0,0,0) で) 静止したままになります。これは、交点をチェックするために、カメラの動きごとに世界の頂点座標を再計算する必要があることを意味します (これは glutLookAt アプローチでは必要ありませんでした)。GPU ランドから必要な新しい座標を取得する方法がないため、CPU ランドで手動で計算する必要があります。カメラの動きごとに... :(
現在の回転を 3 つの軸のそれぞれと平行移動についても同じように保持する必要があるようです。私のプログラムではスケーリングは使用されていません。私の質問:
1 - 上記の推論には欠陥がありますか? どのように ?2 - そうでない場合は、そのような再計算を回避する方法が必要です。私がそれを見る方法(そしてhttp://www.glprogramming.com/red/appendixf.htmlを見ることによって)) 平行移動用に 1 つの行列乗算が必要であり、回転用に別の行列乗算が必要です (必要な y 軸を除いて)。ただし、非常に多くの加算/乗算、特にサイン/コサインを計算しなければならないことは、確かに FPS を殺します。計算対象の頂点は数千、場合によっては数万になります。すべてのフレーム...すべての計算...世界の新しい座標を計算した後は、物事は非常に簡単に思えます-「d」記号を変更した平面があるかどうかを確認するだけです(平面の方程式から ax + by + cz + d = 0)。その場合は、軽量の外積アプローチを使用して、その点がその平面の各「移動」三角形内の空間内にあるかどうかをテストします。
ありがとう
編集: glGet について見つけましたが、それが正しい方法だと思いますが、適切に使用する方法がわかりません:
m_vt16CurrentMatrixVerts は float[16] で、0.f または 8.67453e-13 などで埋められます。私はどこを台無しにしていますか?
android - drawtexture を使用してスプライトを回転させる際の問題 (OpenGl ES Android)
drawtexture を使用してスプライトを回転させようとしていますが、何も起こりません。私は次のコードを使用しています:
gl.glRotatef(90, 0, 0, 1.0f); gl.glBindTexture(GL10.GL_TEXTURE_2D, TextureID); (GL11Ext) gl).glDrawTexfOES(x, y, z, 幅, 高さ);
テクスチャは画面に描画されますが、回転していません... 誰かいますか? :)
iphone - glRotatef()とglTranslatef()を使用して3Dワールドで段階的に移動する方法
OpenGLで3D空間にレンダリングする3Dモデルがいくつかありますが、この世界で「キャラクター」(つまりカメラ)を回転および平行移動して移動する際にいくつかの問題が発生しています。
外部イベント(ユーザー入力またはGPS +コンパスデバイスからのデータの画像)から入力(つまり、移動する場所/回転する角度)を受け取り、イベントの種類は回転または平行移動です。
これらのイベントを管理するために、このメソッドを作成しました。
次に、redrawView
実際にシーンとモデルを描画しています。それは次のようなものです:
問題は、変換時に回転イベントが次々に呼び出されることです。たとえば、いくつかの反復で増分回転している場合(まだ原点を中心に)、変換して最後に再度回転しますが、最後の回転は発生しないようです。現在の(変換された)位置の周りですが、古い位置(古い原点)の周りです。これは、変換の順序が逆になったときに発生することをよく知っていますが、描画後、翻訳されたシステムによって世界の新しい中心が与えられたと思いました。
私は何が欠けていますか?どうすればこれを修正できますか?(OpenGLへの参照も高く評価されます)
c++ - OpenGL glTranslate と glRotate
ポイントのような翻訳を適用する関数が必要glTranslate()
です。乗算する行列を変更および取得するglTranslate()
ような関数を知っている人はいますか?glRotate()
iphone - 2次元glRotatef()
(iPhone)ユーザーが画面上で指をドラッグしてオブジェクトを回転できるようにしようとしています。左または右にドラッグするとY軸を中心に回転し、上または下にドラッグするとX軸を中心に回転します。これが私の元のコードです:
回転はすべてクレイジーで、ランダムな方向に進んでいるようです。私はそれが最初のステートメントに依存している2番目のステートメントと関係があるとかなり確信しています、しかし私はいくつかの派手な数学でそれを否定しようとしました、そしてそれでもそれを正しくすることができませんでした。
部分的には理解できましたが、新しい問題が発生しました(2回転を合計する方法は?)。
私の解決策:
立方体を左に90度、次に下に90度回転させたいとしましょう。これを試してみてください。
動作しません。最初の関数がX軸とZ軸を入れ替えたため、2番目の関数は奇妙な動作をします。だからあなたはこれを試してみてください:
これで目的の結果が得られましたが、最初の関数のY回転の量を180または45などに変更すると、再び失敗します。必要な回転ベクトルは、最初の関数からのY回転の量に依存します。これにより、望ましい結果が得られます。
では、最初に上下に回転させてから、左から右に回転させたい場合はどうでしょうか。この最後の解決策は失敗します。これは、まず、関数の順序が間違っているためです。次に、Y軸もX回転に依存しているためです。これを考慮する必要があり、2つの機能を組み合わせる必要があります。その結果、次のようになります。
xFactorとyFactorを合計すると、目的の回転ベクトルになります(上下に1,0、左右に0,1、対角回転にsqrt(.5)、sqrt(.5))。
私の問題:
問題は、ユーザーが1回転を終了し、新しい回転を開始したときに発生します。前の回転を覚えて「再実行」する必要があります。そうしないと、望ましくない「ジャンプ」が0回転に戻ります。1つの新しい回転で問題ありません。touchesEndedを実装してglRotatefのパラメーターを記憶し、次のように新しい回転に接続できます。
しかし、2回目の新しいローテーションでは、「再活性化」するための2つのローテーションがあります。amt_old、x_old、y_old、z_oldに割り当てる値がわかりません。つまり、2つのglRotatef回転をどのように合計しますか?
opengl - OpenGL2D回転の問題
次のプログラムでは、簡単な家を描いています。座標は家の配列で定義されます。家を回転させて、元の家と同じように回転させて表示する必要があります。しかし、なぜ回転した家が表示されないのですか?
opengl - OpenGLのプッシュ/ポップマトリックスとそれ自体の軸を中心とした個々のオブジェクトの回転
これは以前にも何度も聞かれ、インターネット上のたくさんの投稿やフォーラムを読んだことがありますが、1つのオブジェクトをそれ自体の軸を中心に回転させることはできません。私はこのように描かれたいくつかのオブジェクトを持っています:
そして、これは正しく描画され、すべてのテクスチャと法線が適用されます。
OpenGLがコマンドを逆に実行することを知っているので、glRotatefが最初になります。また、すべての回転が原点の周りにあることを知っているので、オブジェクトをその原点に変換する必要があります(すべてのオブジェクトを描画する前にマトリックスを保存するため、「ペン」はすでに原点にあるため、変換する必要があるとは思いません。後でポップします)。それはglDrawElementsで何かですか?何かが正しくないようです。
どんな助けでも大歓迎です。:)
編集:オブジェクトがメインのx軸を中心にどのように回転するかを確認できますが、ローカルのx軸を中心に回転させたいと思います。
opengl - glutを使用したOpenGL三角形の回転 - 簡単な修正が必要
これが私のコードです:
長方形と三角形を描きます。
両方とも現在回転していますが、長方形を静止させて三角形のみを回転させたいです。ここで何が間違っていますか?プッシュ ポップ ラインなどを変更する必要がありますか。色々組み合わせてみたけど無理。