齐次坐标变换矩阵是这样的:2维角度逆时针旋转:
Cosθ Sinθ 0
-Sinθ Cosθ 0
0 0 1x=x*Cosθ-y*Sinθ+0
y=x*Sinθ+y*Cosθ+02维角度顺时针旋转:
Cosθ -Sinθ 0
Sinθ Cosθ 0
0 0 1x=x*Cosθ+y*Sinθ+0
y=-x*Sinθ+y*Cosθ+03维的情况比较复杂了,稍后给你。

解决方案 »

  1.   

    现给你导出一个变换矩阵,不过不知道是不是正确:-sinθ -cosθcosφ -cosθsinφ 0
    cosθ -sinθcosφ -sinθsinφ 0
    0 sinφ -cosφ 0
    0 0 ρ 1根据这个可以转成公式:
    x=-x*sinθ+y*cosθ
    y=-x*cosθcosφ-y*sinθ*cosφ+z*sinφ
    z=-x*cosθsinφ-y*sinθ*sinφ-z*cosφ+ρ最后取2维投影是这样的:
    LookX=D*x/z
    LookY=D*y/zD>ρ
      

  2.   

    KiteGirl(小仙妹) 给我小例 好吗?
      

  3.   

    首先确定是2D游戏还是3D游戏,如果是2D游戏,可以考虑地图或人物建模的时候就做成45度,3D游戏就不用说啦!一般以前的游戏都是用了45度的图象资源,然后把人物等的移动由东南西北,改为东北,东南,西南,西北,这样感觉就像了,现在一般采用全角度移动的方法地图资源做45度其实已经不是很重要了,因为现在制作地图一般都不是像以前一样,需要用不同的地图元素来拼出地图,现在的游戏地图一般都是一张成品,所以不用考虑游戏地图的拼和技术如果你对游戏地图45度的拼和感兴趣也可以用菱形来代替矩形来做地图元素
      

  4.   

    Module1.BAS内容:Attribute VB_Name = "Module1"
    Type tpCoordDbl
      dblX As Double
      dblY As Double
    End TypeType tpTranMatrixDbl
      dblCells(0 To 2, 0 To 2) As Double
    End TypeFunction TranMatrixTierSet(pTranMatrix As tpTranMatrixDbl, pA As Double, pB As Double, pC As Double, pTier As Integer) As tpTranMatrixDbl
      Dim tOutData As tpTranMatrixDbl
      
      tOutData = pTranMatrix
      
      tOutData.dblCells(0, pTier) = pA
      tOutData.dblCells(1, pTier) = pB
      tOutData.dblCells(2, pTier) = pC
      
      TranMatrixTierSet = tOutData
    End FunctionFunction CoordTranByMatrix(pCoord As tpCoordDbl, pTranMatrix As tpTranMatrixDbl) As tpCoordDbl
      Dim tOutData As tpCoordDbl
      
      tOutData.dblX = pCoord.dblX * pTranMatrix.dblCells(0, 0) + pCoord.dblY * pTranMatrix.dblCells(0, 1) + pTranMatrix.dblCells(0, 2)
      tOutData.dblY = pCoord.dblX * pTranMatrix.dblCells(1, 0) + pCoord.dblY * pTranMatrix.dblCells(1, 1) + pTranMatrix.dblCells(1, 2)
      
      CoordTranByMatrix = tOutData
    End FunctionFunction CoordSet(pCoord As tpCoordDbl, pX As Double, pY As Double) As tpCoordDbl
      Dim tOutData As tpCoordDbl
      
      With tOutData
        .dblX = pX
        .dblY = pY
      End With
      
      CoordSet = tOutData
    End Function
      

  5.   

    Form1.frm内容:
    VERSION 5.00
    Begin VB.Form Form1 
       Caption         =   "Form1"
       ClientHeight    =   4125
       ClientLeft      =   60
       ClientTop       =   345
       ClientWidth     =   4680
       LinkTopic       =   "Form1"
       ScaleHeight     =   275
       ScaleMode       =   3  'Pixel
       ScaleWidth      =   312
       StartUpPosition =   3  '窗口缺省
       Begin VB.TextBox Text1 
          Height          =   270
          Left            =   600
          TabIndex        =   1
          Text            =   "Text1"
          Top             =   3360
          Width           =   3975
       End
       Begin VB.Timer Timer1 
          Left            =   120
          Top             =   3360
       End
       Begin VB.PictureBox Picture1 
          Appearance      =   0  'Flat
          AutoRedraw      =   -1  'True
          BackColor       =   &H00000000&
          BorderStyle     =   0  'None
          ForeColor       =   &H80000008&
          Height          =   3135
          Left            =   120
          ScaleHeight     =   209
          ScaleMode       =   3  'Pixel
          ScaleWidth      =   297
          TabIndex        =   0
          Top             =   120
          Width           =   4455
       End
    End
    Attribute VB_Name = "Form1"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
      Dim sysTranMatrixA As tpTranMatrixDbl
      Dim sysTranMatrixB As tpTranMatrixDbl
      Dim sysX As Double
      Dim sysY As Double
      Dim sysCoord As tpCoordDbl
      Dim sysRadian As Double
      Dim sysA As DoublePrivate Sub Form_Load()
      Show
      
      sysRadian = (45 * 355) / (113 * 180)
      
      sysTranMatrixA = TranMatrixTierSet(sysTranMatrixA, 10, 0, 0, 0)
      sysTranMatrixA = TranMatrixTierSet(sysTranMatrixA, 10, 0, 0, 1)
      sysTranMatrixA = TranMatrixTierSet(sysTranMatrixA, 0, 0, 0, 2)
      
      sysTranMatrixB = TranMatrixTierSet(sysTranMatrixB, Cos(sysRadian) * 5, -Sin(sysRadian) * 5, 0, 0)
      sysTranMatrixB = TranMatrixTierSet(sysTranMatrixB, Sin(sysRadian) * 5, Cos(sysRadian) * 5, 0, 1)
      sysTranMatrixB = TranMatrixTierSet(sysTranMatrixB, 0, 0, 0, 2)
      
      sysCoord = CoordSet(sysCoord, 10, 0)
      sysCoord = CoordTranByMatrix(sysCoord, sysTranMatrixB)
      
      sysTranMatrixB = TranMatrixTierSet(sysTranMatrixB, Cos(sysRadian) * 5, -Sin(sysRadian) * 5, sysCoord.dblX, 0)
      sysTranMatrixB = TranMatrixTierSet(sysTranMatrixB, Sin(sysRadian) * 5, Cos(sysRadian) * 5, sysCoord.dblY, 1)
      sysTranMatrixB = TranMatrixTierSet(sysTranMatrixB, 0, 0, 0, 2)
      Timer1.Interval = 1
    End SubPrivate Sub Timer1_Timer()
      For sysX = 0 To 19
        For sysY = 0 To 19
          sysCoord = CoordSet(sysCoord, sysX, sysY)
          sysCoord = CoordTranByMatrix(sysCoord, sysTranMatrixB)
          With sysCoord
            Picture1.PSet (.dblX, .dblY), RGB(0, 0, 0)
          End With
        Next
      Next
      
      sysA = (sysA + 1) Mod 360
      sysRadian = sysA * 3.1415926 / 180
      
      Text1.Text = sysA
      
      sysTranMatrixB = TranMatrixTierSet(sysTranMatrixB, -Cos(sysRadian) * 10, Sin(sysRadian) * 10 / 2, 0, 0)
      sysTranMatrixB = TranMatrixTierSet(sysTranMatrixB, -Sin(sysRadian) * 10, -Cos(sysRadian) * 10 / 2, 0, 1)
      sysTranMatrixB = TranMatrixTierSet(sysTranMatrixB, 100, 100, 0, 2)
      
      sysCoord = CoordSet(sysCoord, 5, 5)
      sysCoord = CoordTranByMatrix(sysCoord, sysTranMatrixB)
      
      sysTranMatrixB = TranMatrixTierSet(sysTranMatrixB, Cos(sysRadian) * 10, -Sin(sysRadian) * 10 / 2, 0, 0)
      sysTranMatrixB = TranMatrixTierSet(sysTranMatrixB, Sin(sysRadian) * 10, Cos(sysRadian) * 10 / 2, 0, 1)
      sysTranMatrixB = TranMatrixTierSet(sysTranMatrixB, sysCoord.dblX, sysCoord.dblY, 0, 2)
      
      'sysCoord = CoordSet(sysCoord, 10, 0)
      'sysCoord = CoordTranByMatrix(sysCoord, sysTranMatrixB)
      
      'sysTranMatrixB = TranMatrixTierSet(sysTranMatrixB, Cos(sysRadian) * 5, -Sin(sysRadian) * 5, 0, 0)
      'sysTranMatrixB = TranMatrixTierSet(sysTranMatrixB, Sin(sysRadian) * 5, Cos(sysRadian) * 5, 0, 1)
      'sysTranMatrixB = TranMatrixTierSet(sysTranMatrixB, sysCoord.dblX, sysCoord.dblY, 0, 2)
        
      For sysX = 0 To 10
        For sysY = 0 To 10
          sysCoord = CoordSet(sysCoord, sysX, sysY)
          sysCoord = CoordTranByMatrix(sysCoord, sysTranMatrixB)
          With sysCoord
            Picture1.PSet (.dblX, .dblY), RGB(255, 255, 255)
          End With
        Next
      Next
    End Sub