Matrix 3x3带果酱的视图矩阵

Matrix 3x3带果酱的视图矩阵,matrix,marmalade,Matrix,Marmalade,我已经被一个问题困扰了几个小时了。 我需要将我的4x4矩阵(模型、视图、投影)转换为带有平移向量的3x3矩阵。我需要这样做,因为我使用的API没有4x4矩阵类及其完全封闭的源代码 奇怪的是,它们的LookAt函数声明它根本不影响矩阵的平移部分。其中,我用来渲染的4x4矩阵有它(所有渲染都100%正确) 有人能看看我的转换函数,看看我做错了什么吗? 谢谢 您的转换看起来正常,但请检查: Marmalade使用行-列矩阵表示法和右手坐标系(在变换时请记住) 果酱“视图”矩阵实际上不是视图矩阵,它是相

我已经被一个问题困扰了几个小时了。 我需要将我的4x4矩阵(模型、视图、投影)转换为带有平移向量的3x3矩阵。我需要这样做,因为我使用的API没有4x4矩阵类及其完全封闭的源代码

奇怪的是,它们的LookAt函数声明它根本不影响矩阵的平移部分。其中,我用来渲染的4x4矩阵有它(所有渲染都100%正确)

有人能看看我的转换函数,看看我做错了什么吗? 谢谢


您的转换看起来正常,但请检查:

  • Marmalade使用行-列矩阵表示法和右手坐标系(在变换时请记住)

  • 果酱“视图”矩阵实际上不是视图矩阵,它是相机位置和方向矩阵。要获得实际视图矩阵,应执行如下smth:

    CIwFMat MarmaladeView = IwGxGetViewMatrix();
    CIwFMat view = (CIwFMat(CIwFMat::g_Identity, -MarmaladeView.GetTrans()) * MarmaladeView.GetTranspose()); // actually it's simple matrix inversion, but CIwFMat doesn't have Inverse() method
    // in some cases your should add axis-flip transform
    
  • marmalade IwGxGetPerspectiveMatrix()在Ortographic投影的情况下返回无效的投影矩阵(文档中没有提到这个有趣的事实)

  • 函数的作用是:简单地设置矩阵的旋转部分,使其与两点之间的方向相匹配,从而手动进行平移

  • 检查你的远/近飞机

  • 所有MVP矩阵都应该由

    IwGxSetViewMatrix(); // sets view matrix view - camera position
    IwGxSetModelMatrix(); // sets model matrix
    IwGxSetPerspMul(); // sets perspective projection in terms of distance to view plane
    IwGxSetFarZNearZ(); // sets clipping planes
    

  • 您的转换看起来正常,但请检查:

  • Marmalade使用行-列矩阵表示法和右手坐标系(在变换时请记住)

  • 果酱“视图”矩阵实际上不是视图矩阵,它是相机位置和方向矩阵。要获得实际视图矩阵,应执行如下smth:

    CIwFMat MarmaladeView = IwGxGetViewMatrix();
    CIwFMat view = (CIwFMat(CIwFMat::g_Identity, -MarmaladeView.GetTrans()) * MarmaladeView.GetTranspose()); // actually it's simple matrix inversion, but CIwFMat doesn't have Inverse() method
    // in some cases your should add axis-flip transform
    
  • marmalade IwGxGetPerspectiveMatrix()在Ortographic投影的情况下返回无效的投影矩阵(文档中没有提到这个有趣的事实)

  • 函数的作用是:简单地设置矩阵的旋转部分,使其与两点之间的方向相匹配,从而手动进行平移

  • 检查你的远/近飞机

  • 所有MVP矩阵都应该由

    IwGxSetViewMatrix(); // sets view matrix view - camera position
    IwGxSetModelMatrix(); // sets model matrix
    IwGxSetPerspMul(); // sets perspective projection in terms of distance to view plane
    IwGxSetFarZNearZ(); // sets clipping planes
    

  • 假设两个矩阵都存储为[列][行]。真的是这样吗?如果其中任何一个为[行][列],则转换将失败。但是如果两者都是[col][row],那么代码看起来就正常了。两个转换都失败了还是只有一个?到底出了什么问题?您的代码看起来很好…只是没有正确渲染。我感到惊讶的是,果酱使用3x3矩阵,而不支持4x4矩阵。我读到投影矩阵也不能小于4x4:(@user1040769:如果没有更多信息,我想我们无法帮助你。例如,你确定你的视图矩阵一开始是正确的吗?值得记住的是,例如,视图矩阵不是一个观察矩阵,它实际上是一个观察矩阵的倒数。我猜你不是在反转它,或者果酱是在反转您可以这样做……您假设两个矩阵都存储为[column][row]。是否确实如此?如果其中任何一个为[row][column],则转换将失败。但如果两者都为[col][row]然后代码看起来正常。是两个转换都失败了,还是只有一个?到底出了什么问题?您的代码看起来很好…好吧,只是渲染不正确。我很惊讶果酱使用的是3x3矩阵,而不支持4x4矩阵。我读到投影矩阵也不能小于4x4:(@user1040769:如果没有更多信息,我想我们无法帮助你。例如,你确定你的视图矩阵一开始是正确的吗?值得记住的是,例如,视图矩阵不是一个观察矩阵,它实际上是一个观察矩阵的倒数。我猜你不是在反转它,或者果酱是在反转为你准备好了。。。