美文网首页
3D数学基础及图形开发(六)矩阵的线性变换-镜像和切变

3D数学基础及图形开发(六)矩阵的线性变换-镜像和切变

作者: Levi_Wan | 来源:发表于2016-12-27 23:59 被阅读723次

线性变换-镜像

2D镜像,基于x轴进行镜像变换。(以轴为镜子)(x轴不变,y取反)

Paste_Image.png

镜像矩阵,2D和3D公式(针对3D空间任意一平面进行镜像变换,n为镜像平面的法向量)(我们的镜像平面都是经过原点的)

[10 20 30] 以z轴为镜子(xy平面为镜像平面)进行镜像变换得到[10 20 -30]

Paste_Image.png
基于以上的公式进行镜像(也叫反射反射)编程:我们把它分为两种重载一种为对标准的坐标轴平面进行镜像变换,一种为对任意平面进行镜像变换。
  • 对标准的坐标轴平面进行镜像变换编程。


    Paste_Image.png
  • 当对x坐标发生镜像时,那x轴的坐标全取反,y轴z轴不变。(以此类推)
    //镜像
    void Matrix4x3::setupReflect(int axis ,float k)
    {
    switch (axis)
    {
    case 1: //k为0时,X坐标发生镜像 不为0则是,X=k的平面发生镜像
    m11 = -1.0f; m12 = 0.0f; m13 = 0.0f;
    m21 = 0.0f; m22 = 1.0f; m23 = 0.0f;
    m31 = 0.0f; m32 = 0.0f; m33 = 1.0f;

          tx = 2.0f*k;
          ty = 0.0f;
          tz = 0.0f;
          break;
      case 2:  //k为0时,Y坐标发生镜像   不为0则是,Y=k的平面发生镜像
          m11 = 1.0f;  m12 = 0.0f;   m13 = 0.0f;
          m21 = 0.0f; m22 = -1.0f;    m23 = 0.0f;
          m31 = 0.0f; m32 = 0.0f;   m33 = 1.0f;
    
          tx = 0.0f;
          ty = 2.0f*k;
          tz = 0.0f;
          break;
      case 3:  //k为0时,Z坐标发生镜像   不为0则是,Z=k的平面发生镜像
          m11 = 1.0f;  m12 = 0.0f;   m13 = 0.0f;
          m21 = 0.0f; m22 = 1.0f;    m23 = 0.0f;
          m31 = 0.0f; m32 = 0.0f;   m33 = -1.0f;
    
          tx = 0.0f;
          ty = 0.0f;
          tz = 2.0f*k;
          break;
      default:
          assert(false);
          break;
      }
    }
    
  • 对任意的坐标轴平面进行镜像变换编程。

Paste_Image.png Paste_Image.png

线性变换-切变

2D切变,相当于附加了一个x轴上基于y点的offset偏移值。(x坐标发生了变化,y没变,x被y切变)

s为根据y坐标的切变。


Paste_Image.png

3D切变:

  • x和y被z切变,s是x坐标的切变,t是y的切变,z不变。(s,t为切变的系数)


    Paste_Image.png
Paste_Image.png

切变的编程实现:

Paste_Image.png Paste_Image.png

相关文章

网友评论

      本文标题:3D数学基础及图形开发(六)矩阵的线性变换-镜像和切变

      本文链接:https://www.haomeiwen.com/subject/slgevttx.html