OpenGLの翻訳マトリックスを理解する

1234

p(1, 2, 3, w=1)ベクトルv(a, b, c, w=0)を持つ点を新しい点に変換したいとしますp'

注:OpenGLでw=0ベクトルをw=1表し、点表します。間違っている場合は修正してください。

アフィン変換の定義には、次のものがあります。

p + v = p'

=> p(1, 2, 3, 1) + v(a, b, c, 0) = p(1 + a, 2 + b, 3 + c, 1)

=> point + vector = point (everything works as expected)

OpenGLでは、変換行列は次のとおりです。

1 0 0 a
0 1 0 b
0 0 1 c
0 0 0 1

私は仮定し(a, b, c, 1)、我々が持っている理由アフィン変換定義からベクトルでw=1はなく、w=0このような

1 0 0 a
0 1 0 b
0 0 1 c
0 0 0 0
憎しみ

注:OpenGLでw=0ベクトルをw=1表し、点表します。間違っている場合は修正してください。

あなたは間違っている。まず第一に、これは実際にはOpenGLとは何の関係もありません。これは、純粋に数学的な概念である同次座標に関するものです。これは、n次元のベクトル空間をn +1次元のベクトル空間に埋め込むことによって機能します。3Dの場合、同次ベクトルがデカルト座標の(x, y, z, w)3D点(x/w, y/w, z/w)表すという定義で、4D同次座標を使用します

その結果、の場合w != 0、特定の有限点を取得しw = 0、の場合、特定の方向に無限に遠い点記述しますこれは、同次座標が実際に有限座標で無限遠点を記述できるという点でより強力であることを意味します(これは、無限遠点が有限点にマッピングされる、またはその逆のパースペクティブ変換に非常に便利です。 )。

ショートカット(x,y,z,0)として、方向ベクトルとして想像することができます。ただし、ある点については、それだけw=1でなく w 0に等しくないもあります。概念的には、これは、デカルト3D点が等質空間の表されることを意味します(1次元上に行ったので、これは実際には理にかなっています)。

(a、b、c、1)がアフィン変換定義からのベクトルであると仮定します。なぜw = 1であるのに、w = 0ではないのですか?

あなたの仮定は間違っています。同次座標についての1つのことは、4D空間で平行移動を適用しないことです。実際に4D空間でせん断操作を行うことにより、3D空間での平行移動効果得られます。

ですから、私たちが本当に等質空間でやりたいのは

(x + w *a, y + w*b, z+ w*c, w)

結果のベクトルの3D解釈は、

(x + w*a) / w  == x/w + a
(y + w*b) / w  == y/w + b
(z + w*c) / w  == z/w + c

これは私たちが求めていた翻訳を表しています。

したがって、これをさらに明確にするために:

あなたがあなたの質問に書いたこと:

p(1, 2, 3, 1) + v(a, b, c, 0) = p(1 + a, 2 + b, 3 + c, 1)

明示的ではない、我々が何をしたいのか。あなたが説明するのは、4Dベクトル空間に関するアフィン変換です。

しかし、実際に必要なのは3Dデカルト座標での平行移動です。

 (1, 2, 3) + (a, b, c) = (1 + a, 2 + b, 3 + c)

数式を適用するということは、実際には等質空間で平行移動を行うことを意味します。これは、w座標によってスケーリングされる平行移動を行う効果がありますが、私が与えた数式は、ポイントに(a,b,c)wを選択した関係なく、常にポイントを平行移動します。 。

もちろん、を選択しw=0場合、これは当てはまりませんその後、変更はまったく行われません。これは、平行移動によって方向が変更されることはないため、正しいことです。数式によって方向が変更されます。あなたの公式はw=1、特別な場合にのみ正しいです。しかし、ここで重要なのは、結局のところ、ベクトルの加算ではなく、行列*ベクトルの乗算を行うということです。そして、同次座標は、(とりわけ、より強力なものの中で)行列乗算を介して平行移動を表すことを可能にします。しかし、これは、ベクトルの加算を行ったかのように、最後の列を平行移動ベクトルとして解釈できることを意味するものではありません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

別のマトリックスに関連する翻訳を取得する

分類Dev

OpenGLの翻訳モデルマトリックスmalforms結果に

分類Dev

Python:頻度マップのリストを翻訳する高速な方法

分類Dev

OpenGLドキュメントのマトリックスを理解する方法は?

分類Dev

SimpleITKトランスフォームからマトリックスと翻訳を取得する

分類Dev

キャンバスの翻訳マトリックスを制限するにはどうすればよいですか?

分類Dev

このクエリセットを翻訳しますか?

分類Dev

コードのブロックを翻訳して、リスト内包表記構文をリストします

分類Dev

タスクのリストを繰り返して、Pythonで翻訳を実行できる翻訳者を取得します

分類Dev

polyglot.jsを使用してマークアップでテキストを翻訳する

分類Dev

SVGのマトリックスを理解する

分類Dev

Vue-i18nを使用してスクリプトからのテキストを翻訳する

分類Dev

PowerShellスクリプトの翻訳を実装するための最良の方法は何ですか?

分類Dev

PowerShellスクリプトの翻訳を実装するための最良の方法は何ですか?

分類Dev

Javascript翻訳スクリプトの改善

分類Dev

prestashopのスマートな翻訳でhtmlタグを使用する方法は?

分類Dev

翻訳へのリンクをHMENUサイトマップに含めるにはどうすればよいですか?

分類Dev

Google翻訳APIIDが多すぎるリクエストのIPアドレスをブロックしている

分類Dev

MS Accessクエリでこのステートメントを翻訳する方法は?

分類Dev

Jisonを使用して簡単なスクリプトを作成/別の言語に翻訳する

分類Dev

PythonリストスライスをPHPに翻訳する

分類Dev

WindowsのbatファイルをLinuxシェルスクリプトに翻訳する

分類Dev

CSS変換でのスケール後の翻訳を理解する

分類Dev

各言語の翻訳を取得するためのクエリ

分類Dev

VBAでGoogle翻訳結果ボックスを参照する方法

分類Dev

リスト内包表記をPrologに翻訳する

分類Dev

HTMLリンクの適切な名前を翻訳する

分類Dev

Androidの翻訳リントチェック-3つの翻訳のうち2つだけが必要な場合に無効にする方法は?

分類Dev

1GBのテキストを英語に翻訳する

Related 関連記事

  1. 1

    別のマトリックスに関連する翻訳を取得する

  2. 2

    OpenGLの翻訳モデルマトリックスmalforms結果に

  3. 3

    Python:頻度マップのリストを翻訳する高速な方法

  4. 4

    OpenGLドキュメントのマトリックスを理解する方法は?

  5. 5

    SimpleITKトランスフォームからマトリックスと翻訳を取得する

  6. 6

    キャンバスの翻訳マトリックスを制限するにはどうすればよいですか?

  7. 7

    このクエリセットを翻訳しますか?

  8. 8

    コードのブロックを翻訳して、リスト内包表記構文をリストします

  9. 9

    タスクのリストを繰り返して、Pythonで翻訳を実行できる翻訳者を取得します

  10. 10

    polyglot.jsを使用してマークアップでテキストを翻訳する

  11. 11

    SVGのマトリックスを理解する

  12. 12

    Vue-i18nを使用してスクリプトからのテキストを翻訳する

  13. 13

    PowerShellスクリプトの翻訳を実装するための最良の方法は何ですか?

  14. 14

    PowerShellスクリプトの翻訳を実装するための最良の方法は何ですか?

  15. 15

    Javascript翻訳スクリプトの改善

  16. 16

    prestashopのスマートな翻訳でhtmlタグを使用する方法は?

  17. 17

    翻訳へのリンクをHMENUサイトマップに含めるにはどうすればよいですか?

  18. 18

    Google翻訳APIIDが多すぎるリクエストのIPアドレスをブロックしている

  19. 19

    MS Accessクエリでこのステートメントを翻訳する方法は?

  20. 20

    Jisonを使用して簡単なスクリプトを作成/別の言語に翻訳する

  21. 21

    PythonリストスライスをPHPに翻訳する

  22. 22

    WindowsのbatファイルをLinuxシェルスクリプトに翻訳する

  23. 23

    CSS変換でのスケール後の翻訳を理解する

  24. 24

    各言語の翻訳を取得するためのクエリ

  25. 25

    VBAでGoogle翻訳結果ボックスを参照する方法

  26. 26

    リスト内包表記をPrologに翻訳する

  27. 27

    HTMLリンクの適切な名前を翻訳する

  28. 28

    Androidの翻訳リントチェック-3つの翻訳のうち2つだけが必要な場合に無効にする方法は?

  29. 29

    1GBのテキストを英語に翻訳する

ホットタグ

アーカイブ