問題タブ [projection-matrix]
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 - OpenGL 3D 変換: z アスペクト比
私は OpenGL (webgl) で 3D 透視投影を行っており、均一なマトリックスを使用して自分で行っています。すべてが正常に機能していますが、アスペクト比が 3:2 (600px x 400px) であり、レンダリングされたすべてのジオメトリが歪んでいます。
2D では、x と y をそれぞれ 1/幅と 1/高さで割ることにより、モデル マトリックスでこれを修正していました。
今、私も心配する必要があります.Zをどのように/どこで変換して、3:2のアスペクト比で歪まないようにするかはまったくわかりません.
モデルマトリックスはこれを行う機会を提供していないようで、射影マトリックスでどこで何をすべきかわかりません。
編集:射影行列:
列の主な順序
編集 2: n < 1 の奇妙な歪み
directx - 透視図法が間違っているように見える、モデルの近い部分が小さく見える、またはその逆
D3D11 を試していますが、モデルを正しくレンダリングするのに苦労しています。
これが私の問題です。私の世界とビューの変換は正しいように見えますが
、視点の変換は間違っているようです。
最初にモデルをレンダリングしたとき、何か違和感を感じたので、モデルを回転させてみました。
すると、モデルのカメラに近い部分が小さく見え、遠くの部分が大きく見えることに気付きました。
関連する場合は、 assimp を使用してモデルをロードしています。その方法は次のとおりです。
そして、これが私の射影行列を構築する方法です。
XMMatrixPerspectiveFovLH の nearZ および farZ 引数をいじりました。
フレームごとに farZ を徐々に増やしてみたところ、値が大きくなるにつれてファー クリッピング プレーンがカメラにどんどん近づいていくことがわかりました。
頂点シェーダーでは、頂点位置を使って次のことを行っています。それはかなり基本的です。
モデルは、位置、スケーリング、回転、およびビュー位置に関して正しくレンダリングされます。
したがって、ワールドとビューの変換は問題なく、問題は射影行列に関するものであると想定しています。
要約すると、投影された頂点の Z 値は、どういうわけか「反転」していると考えています。
グーグルで何度も検索しましたが、役に立ちませんでした。
誰かが私が間違っている可能性があることを指摘できれば、それは非常にありがたいです.
私のコードの一部を参照する必要がある場合は、教えてください。
math - 3D : カメラのズームに関係なく、画面に描かれた水平線を同じ高さに保つ
私はこの奇妙なユースケースを持っています。
これらの変数は既知です。
カメラのズーム (または fov)
Y 軸と Z 軸を中心としたカメラの回転 (向き)
= 0
ここで、地平線(水平位置) を特定の2D 高さ "YY"= (0,0,Infinite)
で画面に描画したいと考えています。水平線が "YY" に描画されるようにするには、カメラの X 軸の回転はどのようにする必要がありますか?
なぜこれが必要なのかと尋ねるかもしれません: カメラのズームを変更すると、画面上の水平線の位置が変わります (X 軸の回転を除くすべての場合= 0
)。カメラのズームを変更し、水平線を (2D 位置に対して) 変更しないようにする必要があります。私の知る限り、これは X 軸の回転を適宜変更することによってのみ達成できます。
c++ - ホモグラフィからの射影行列
私はOpenCV 3.0stereoRectifyUncalibrated()
の下の方法でステレオビジョンに取り組んでいます。
次の手順でシステムを調整します。
- 2 台のカメラからの画像間で SURF 特徴点を検出して一致させる
findFundamentalMat()
お揃いのペアで申し込む- で修正同形異義語を取得し
stereoRectifyUncalibrated()
ます。
各カメラについて、次のように回転行列を計算します。
3D ポイントを計算するには、射影行列を取得する必要がありますが、平行移動ベクトルを推定する方法がわかりません。
私は試してみましたがdecomposeHomographyMat()
、このソリューションhttps://stackoverflow.com/a/10781165/3653104が、回転行列はR1で得られるものと同じではありません。
R1/R2 を使用して修正された画像を確認すると (initUndistortRectifyMap()
続いてを使用remap()
)、結果は正しいようです (エピポーラ線で確認しました)。
視覚に関する知識が乏しく、少し迷っています。したがって、誰かが私に説明できれば。ありがとうございました :)
opengl-es - webgl の行列と射影
上記の行で、射影行列とモデルビュー行列がアップロードされていることがわかりました。この背後にある数学を知りたいです。
後でこの方法で渡される 3D 頂点 (overlayvertices) がいくつかあります。
ここで、overlayvertices[i] は x、y、z、1 の 4*1 配列です
最終的な描画は、モデルビューと投影行列が決定される特定のカメラのフレームで行われます。カメラフレームで変換された頂点を手動で取得したいと思います。すなわち、(x,y,1)。後で各フレーム内のデータをダウンロードするため、x、y はピクセル座標である必要があります。これは webgl の内部で発生するため、この情報を取得できません。
matlab - MATLABのestimateUn calibrationdRectificationは数学的に何を表現していますか? それは正確に何を計算しますか?
MATLAB の推定未較正整流化は、数学/幾何学用語で何をしますか?
それは正確に何を計算しますか?
私が理解している限り、カメラのパラメーターが不明な場合、2 つの画像から計算できるのは基本行列のみであり、基本行列は計算できません。
したがって、私が理解している限り、カメラの固有パラメータが不明な場合に 2 つの画像から計算できる基本行列は、任意の射影変換まであいまいであるため、estimateUncalibratedRectification
の結果は何らかの変換まであいまいである必要があります。 T
.
これは正しいです ?
私の推測では、対応する画像でこれら 2 つの変換 ( および ) を使用すると、結果の画像 (および) が対応するestimateUncalibratedRectification
エピポーラ線が下の画像に示すように、同じ行にある必要があります。P1
image1
P2
image2
P1
P2
R1
R2
私の質問は次のとおりです。この結果はどれほどあいまいですか? 私の感じでは、結果として得られる変換P1
とP2
は、何らかの変換まであいまいT
ですが、これが何であるかはよくわかりませんT
。
誰かがestimateUncalibratedRectification
概念的/数学的/幾何学的にどのように機能するかを説明し、何T
ができるか教えてもらえますか?
言い換えると、とに適用されたときにイメージ ペアが生成され、とと同じ整流特性を持つ変換、つまり、との場合と同様に、対応するエピポーラ線がとの一致する行に表示される変換は何 ですか?T
R1
R2
TR1
TR2
R1
R2
TR1
TR2
R1
R2
これは何T
ですか?そのようなものはありT
ますか?
PS .:estimateUncalibratedRectification.m
この質問を投稿する前に のコードを読んだことがありますが、それは私を賢くしませんでした。
image-processing - ホモグラフィと射影変換
射影変換を行うコードを書こうとしていますが、4 つ以上の重要なポイントがあります。この役立つガイドを見つけましたが、4 つの参照点を使用しています https://math.stackexchange.com/questions/296794/finding-the-transform-matrix-from-4-projected-points-with-javascript
私は、matlab がそれを処理する関数 tcp2form を使用していることを知っていますが、これまでのところ方法を見つけていません。
その方法について、誰かが私にいくつかのガイダンスを与えることができますか? (最小二乗) を使用して方程式を解くことはできますが、3*3 より大きい行列があり、同次座標を乗算できないため、行き詰まっています。
ありがとう
opencv - 1 つのカメラ ビューの 2D ポイントを、同じシーンの別のカメラ ビューの対応する 2D ポイントに投影します。
2 台のカメラを使用したマルチビュー シーンで C++ の open cv を使用しています。両方のカメラの内部パラメーターと外部パラメーターがあります。
ビュー 1 の (X,Y) ポイントを 2 番目のビューの同じポイントにマップしたいと思います。ポイントを 3D 世界に変換し、最終的にビュー 2 の新しい 2D ポイントになるために、固有マトリックスと外部マトリックスを使用する方法が少しわかりません。