【问题标题】:Transform scaling doesn't seem to work变换缩放似乎不起作用
【发布时间】:2011-02-04 22:25:45
【问题描述】:

我正在实现一个看起来像这样的列主要转换矩阵:

|----------|        |------------|      |------------|
| 0 3 6 9  |        | RS R  R  X |      | RS R  R  X |
| 1 4 7 10 |        | R  RS R  Y |      | R  RS R  Y |
| 2 5 8 11 |        | R  R  RS Z |      | R  R  RS Z |
|----------|        |------------|      | 0  0  0  1 |
                                       |------------|

我知道缩放应该应用于位置 0、4 和 8,但它似乎不起作用。我从一个四元数设置方向,设置适当的位置,然后尝试在我的缩放中乘以位置 0、4 和 8。当这个变换被输入 OpenGL 时,我的形状会拉伸和挤压并且不能适当地缩放。我在这里遗漏了什么吗,我认为缩放是沿对角线的简单乘法?我的定向应用程序相对简单,但是向其添加缩放操作会导致奇怪的剪切和挤压效果。我做错了什么?

【问题讨论】:

  • 您使用 4x3 矩阵而不是 4x4 矩阵是否有原因?
  • 是的,减少了所需的存储空间,因为由于齐次坐标,底行被自动假定为 0, 0, 0, 1。底行隐含在计算中。
  • 我想我的下一个问题是:你到底是如何将你的矩阵输入到 OpenGL 中的?你在使用着色器吗?
  • 暂时没有。我在 GL_MODELVIEW 中使用 glMultMatrixf(float[16])。
  • 粘贴您的代码。另外,请参阅有关 OpenGL 矩阵顺序的信息:j3d.org/matrix_faq/matrfaq_latest.html#I1

标签: opengl matrix 3d transformation linear-algebra


【解决方案1】:

您心目中的缩放矩阵仅对缩放或将其乘以现有的变换有用。只要基础变换不是恒等式,销售因子就会应用于整个左上角 3x3。只计算乘法

/ Rxx Rxy Rxz \   / Sx  0  0  \
| Ryx Ryy Ryz | * |  0 Sy  0  |
\ Rzy Rzy Rzz /   \  0  0  Sz /

=

/ Rxx·Sx Rxy·Sy Rxz·Sz \
| Ryx·Sx Ryy·Sy Ryz·Sz |
\ Rzx·Sx Rzy·Sy Rzz·Sz /

【讨论】:

  • 好吧,便便。我很确定我已经尝试过了,但是,嘿,我以前错了。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-10
  • 2019-02-11
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多