平行投影比较简单 Option Explicit Private Const PI As Double = 3.14159265358979 Private Const X_RADIUS As Double = 225 / 180 * PIPrivate Sub Form_Load() Const X = 5 Const Y = 3 Const Z = 9 Dim W As Double Dim H As Double
Me.AutoRedraw = True Me.BackColor = vbWhite If Me.ScaleWidth > Me.ScaleHeight Then H = 10 W = 10 * Me.ScaleWidth / Me.ScaleHeight Else H = 10 * Me.ScaleHeight / Me.ScaleWidth W = 10 End If Me.Scale (-W, H)-(W, -H)
y=x*a2+y*b2+z*c2+d2
z=x*a3+y*b3+z*c3+d3有矩阵:
a1,b1,c1,d1
a2,b2,c2,d2
a3,b3,c3,d3
a4,b4,c4,d4然后你就查各种变换矩阵吧,你可以去维基百科查“球坐标系”。接着你就想像:3D像素在一个“镜头”的平面上投影,只要你把3D像素在这个平面的投影坐标变换出来,就行了。一些图形学的书上就有矩阵和投影计算方法。你看看下面这个帖子,我那几个霓虹灯都是VBS写的3D效果。
http://topic.csdn.net/u/20091224/10/077adae0-1e48-43d5-91b8-b995d872a082.html
http://download.csdn.net/source/1817028
Option Explicit
Private Const PI As Double = 3.14159265358979
Private Const X_RADIUS As Double = 225 / 180 * PIPrivate Sub Form_Load()
Const X = 5
Const Y = 3
Const Z = 9
Dim W As Double
Dim H As Double
Me.AutoRedraw = True
Me.BackColor = vbWhite
If Me.ScaleWidth > Me.ScaleHeight Then
H = 10
W = 10 * Me.ScaleWidth / Me.ScaleHeight
Else
H = 10 * Me.ScaleHeight / Me.ScaleWidth
W = 10
End If
Me.Scale (-W, H)-(W, -H)
Me.Cls
Me.ForeColor = &H808080
Me.DrawStyle = vbDot
Me.Line (0, 0)-(-10, -10) 'X轴'
Me.Line (0, 0)-(W, 0) 'Y轴'
Me.Line (0, 0)-(0, H) 'Z轴'
Me.ForeColor = vbRed
Me.DrawStyle = vbSolid
Me.CurrentX = 0
Me.CurrentY = 0
Me.Line Step(0, 0)-Step(X * Sin(X_RADIUS), X * Cos(X_RADIUS))
Me.Line Step(0, 0)-Step(Y, 0)
Me.Line Step(0, 0)-Step(0, Z)
End Sub