PRambler
路人甲
路人甲
  • 注册日期2004-09-06
  • 发帖数49
  • QQ
  • 铜币140枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:2239回复:3

请教VRMap水流动问题

楼主#
更多 发布于:2004-11-08 10:01
各位大侠帮忙,VRMap二次开发怎么解决水流动的问题?
喜欢0 评分0
keisw
论坛版主
论坛版主
  • 注册日期2003-08-17
  • 发帖数400
  • QQ
  • 铜币368枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2004-12-23 10:26
去问灵图去,看看你问了多少次他们才能给你解决,然后你把次数告诉我,呵呵,我想知道灵图对各家用户是不是都是一样的
如果有一天,当我真的离开你, 当你的心真的在痛,眼泪快要流下来的时候, 那就赶快抬起头,看看这片曾经属于我们的天空, 天依旧是那么的广阔,云依旧是那么的潇洒, 那就不应该哭,因为我的离去,并没有带走你的世界!
举报 回复(0) 喜欢(0)     评分
PRambler
路人甲
路人甲
  • 注册日期2004-09-06
  • 发帖数49
  • QQ
  • 铜币140枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2005-01-28 11:30
打电话N次了
举报 回复(0) 喜欢(0)     评分
skyhorses
路人甲
路人甲
  • 注册日期2005-01-19
  • 发帖数5
  • QQ
  • 铜币132枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2005-01-28 16:07
<P>我也是灵图用户,靠自学吧。</P><P>Sub riverflow()
Dim rr As VRMapPMObject
Set rr = TheDocument.Scene.GetNodeFromPath("Box01")
Dim tm As S_Matrix</P><P>Call rr.GetTextureMatrix("1.bmp", tm)</P><P>i = i - 0.01
tm.m42 = i</P><P>
Call rr.SetTextureMatrix("1.bmp", tm)</P><P>End Sub</P><P>Option Explicit
'矩阵计算,几何变化模块
Sub MatrixMult(result As S_Matrix, a As S_Matrix, b As S_Matrix)
  Dim ret As S_Matrix
  Dim tmp As Double
  Dim i As Integer
  Dim j As Integer
  Dim k As Integer
  
  Call ZeroMatrix(ret)
  ret.m11 = b.m11 * a.m11 + b.m21 * a.m12 + b.m31 * a.m13 + b.m41 * a.m14
  ret.m12 = b.m12 * a.m11 + b.m22 * a.m12 + b.m32 * a.m13 + b.m42 * a.m14
  ret.m13 = b.m13 * a.m11 + b.m23 * a.m12 + b.m33 * a.m13 + b.m43 * a.m14
  ret.m14 = b.m14 * a.m11 + b.m24 * a.m12 + b.m34 * a.m13 + b.m44 * a.m14
  ret.m21 = b.m11 * a.m21 + b.m21 * a.m22 + b.m31 * a.m23 + b.m41 * a.m24
  ret.m22 = b.m12 * a.m21 + b.m22 * a.m22 + b.m32 * a.m23 + b.m42 * a.m24
  ret.m23 = b.m13 * a.m21 + b.m23 * a.m22 + b.m33 * a.m23 + b.m43 * a.m24
  ret.m24 = b.m14 * a.m21 + b.m24 * a.m22 + b.m34 * a.m23 + b.m44 * a.m24
  ret.m31 = b.m11 * a.m31 + b.m21 * a.m32 + b.m31 * a.m33 + b.m41 * a.m34
  ret.m32 = b.m12 * a.m31 + b.m22 * a.m32 + b.m32 * a.m33 + b.m42 * a.m34
  ret.m33 = b.m13 * a.m31 + b.m23 * a.m32 + b.m33 * a.m33 + b.m43 * a.m34
  ret.m34 = b.m14 * a.m31 + b.m24 * a.m32 + b.m34 * a.m33 + b.m44 * a.m34
  ret.m41 = b.m11 * a.m41 + b.m21 * a.m42 + b.m31 * a.m43 + b.m41 * a.m44
  ret.m42 = b.m12 * a.m41 + b.m22 * a.m42 + b.m32 * a.m43 + b.m42 * a.m44
  ret.m43 = b.m13 * a.m41 + b.m23 * a.m42 + b.m33 * a.m43 + b.m43 * a.m44
  ret.m44 = b.m14 * a.m41 + b.m24 * a.m42 + b.m34 * a.m43 + b.m44 * a.m44
  result = ret
End Sub</P><P>Function RetMatrixMult(a As S_Matrix, b As S_Matrix) As S_Matrix
  Dim ret As S_Matrix
  ret.m11 = b.m11 * a.m11 + b.m21 * a.m12 + b.m31 * a.m13 + b.m41 * a.m14
  ret.m12 = b.m12 * a.m11 + b.m22 * a.m12 + b.m32 * a.m13 + b.m42 * a.m14
  ret.m13 = b.m13 * a.m11 + b.m23 * a.m12 + b.m33 * a.m13 + b.m43 * a.m14
  ret.m14 = b.m14 * a.m11 + b.m24 * a.m12 + b.m34 * a.m13 + b.m44 * a.m14
  ret.m21 = b.m11 * a.m21 + b.m21 * a.m22 + b.m31 * a.m23 + b.m41 * a.m24
  ret.m22 = b.m12 * a.m21 + b.m22 * a.m22 + b.m32 * a.m23 + b.m42 * a.m24
  ret.m23 = b.m13 * a.m21 + b.m23 * a.m22 + b.m33 * a.m23 + b.m43 * a.m24
  ret.m24 = b.m14 * a.m21 + b.m24 * a.m22 + b.m34 * a.m23 + b.m44 * a.m24
  ret.m31 = b.m11 * a.m31 + b.m21 * a.m32 + b.m31 * a.m33 + b.m41 * a.m34
  ret.m32 = b.m12 * a.m31 + b.m22 * a.m32 + b.m32 * a.m33 + b.m42 * a.m34
  ret.m33 = b.m13 * a.m31 + b.m23 * a.m32 + b.m33 * a.m33 + b.m43 * a.m34
  ret.m34 = b.m14 * a.m31 + b.m24 * a.m32 + b.m34 * a.m33 + b.m44 * a.m34
  ret.m41 = b.m11 * a.m41 + b.m21 * a.m42 + b.m31 * a.m43 + b.m41 * a.m44
  ret.m42 = b.m12 * a.m41 + b.m22 * a.m42 + b.m32 * a.m43 + b.m42 * a.m44
  ret.m43 = b.m13 * a.m41 + b.m23 * a.m42 + b.m33 * a.m43 + b.m43 * a.m44
  ret.m44 = b.m14 * a.m41 + b.m24 * a.m42 + b.m34 * a.m43 + b.m44 * a.m44
  RetMatrixMult = ret
End Function</P><P>'=================================
' TranslateMatrix
'=================================
' used to position an object</P><P>Sub TranslateMatrix(m As S_Matrix, v As S_Vec3)
  Call IdentityMatrix(m)
  m.m41 = v.x
  m.m42 = v.y
  m.m43 = v.z
End Sub</P><P>Function RetTranslateMatrix(v As S_Vec3) As S_Matrix
  Dim m As S_Matrix
  Call IdentityMatrix(m)
  m.m41 = v.x
  m.m42 = v.y
  m.m43 = v.z
  RetTranslateMatrix = m
End Function
'=================================
' TranslateMatrix
'=================================
' used to position an object</P><P>Sub ScaleMatrix(m As S_Matrix, v As S_Vec3)
  Call IdentityMatrix(m)
  m.m11 = v.x
  m.m22 = v.y
  m.m33 = v.z
End Sub</P><P>Function RetScaleMatrix(v As S_Vec3) As S_Matrix
  Dim m As S_Matrix
  Call IdentityMatrix(m)
  m.m11 = v.x
  m.m22 = v.y
  m.m33 = v.z
  RetScaleMatrix = m
End Function</P><P>
'=================================
' RotateXMatrix
'=================================
' rotate an object about x axis rad radians</P><P>Sub RotateXMatrix(ret As S_Matrix, rads As Single)
  Dim cosine As Single
  Dim sine As Single
  cosine = Cos(rads)
  sine = Sin(rads)
  Call IdentityMatrix(ret)
  ret.m22 = cosine
  ret.m33 = cosine
  ret.m23 = -sine
  ret.m32 = sine
End Sub</P><P>Function RetRotateXMatrix(rads As Single) As S_Matrix
  Dim cosine As Single
  Dim sine As Single
  Dim ret As S_Matrix
  cosine = Cos(rads)
  sine = Sin(rads)
  Call IdentityMatrix(ret)
  ret.m22 = cosine
  ret.m33 = cosine
  ret.m23 = -sine
  ret.m32 = sine
  RetRotateXMatrix = ret
End Function</P><P>'=================================
' RotateYMatrix
'=================================
' rotate an object about y axis rad radians</P><P>Sub RotateYMatrix(ret As S_Matrix, rads As Single)
  Dim cosine As Single
  Dim sine As Single
  cosine = Cos(rads)
  sine = Sin(rads)
  Call IdentityMatrix(ret)
  ret.m11 = cosine
  ret.m33 = cosine
  ret.m13 = sine
  ret.m31 = -sine
End Sub</P><P>Function RetRotateYMatrix(rads As Single) As S_Matrix
  Dim cosine As Single
  Dim sine As Single
  Dim ret As S_Matrix
  cosine = Cos(rads)
  sine = Sin(rads)
  Call IdentityMatrix(ret)
  ret.m11 = cosine
  ret.m33 = cosine
  ret.m13 = sine
  ret.m31 = -sine
  RetRotateYMatrix = ret
End Function</P><P>'=================================
' RotateZMatrix
'=================================
' rotate an object about z axis rad radians</P><P>Sub RotateZMatrix(ret As S_Matrix, rads As Single)
  Dim cosine As Single
  Dim sine As Single
  cosine = Cos(rads)
  sine = Sin(rads)
  Call IdentityMatrix(ret)
  ret.m11 = cosine
  ret.m22 = cosine
  ret.m12 = -sine
  ret.m21 = sine
End Sub</P><P>Function RetRotateZMatrix(rads As Single) As S_Matrix
  Dim ret As S_Matrix
  Dim cosine As Single
  Dim sine As Single
  cosine = Cos(rads)
  sine = Sin(rads)
  Call IdentityMatrix(ret)
  ret.m11 = cosine
  ret.m22 = cosine
  ret.m12 = -sine
  ret.m21 = sine
  RetRotateZMatrix = ret
End Function</P><P>'=================================
' CopyMatrix
'=================================
Sub CopyMatrix(dest As S_Matrix, src As S_Matrix)
  
  dest.m11 = src.m11
  dest.m12 = src.m12
  dest.m13 = src.m13
  dest.m14 = src.m14
  dest.m21 = src.m21
  dest.m22 = src.m22
  dest.m23 = src.m23
  dest.m24 = src.m24
  dest.m31 = src.m31
  dest.m32 = src.m32
  dest.m33 = src.m33
  dest.m34 = src.m34
  dest.m41 = src.m41
  dest.m42 = src.m42
  dest.m43 = src.m43
  dest.m44 = src.m44
  
End Sub</P><P>Function RetCopyMatrix(src As S_Matrix) As S_Matrix
    Dim ret As S_Matrix
    CopyMatrix ret, src
    RetCopyMatrix = ret
End Function</P><P>'=================================
' IdentityMatrix
'=================================
Sub IdentityMatrix(dest As S_Matrix)
  
  dest.m11 = 1
  dest.m12 = 0
  dest.m13 = 0
  dest.m14 = 0
  dest.m21 = 0
  dest.m22 = 1
  dest.m23 = 0
  dest.m24 = 0
  dest.m31 = 0
  dest.m32 = 0
  dest.m33 = 1
  dest.m34 = 0
  dest.m41 = 0
  dest.m42 = 0
  dest.m43 = 0
  dest.m44 = 1
  
End Sub</P><P>Function RetIdentityMatrix() As S_Matrix
    Dim ret As S_Matrix
    IdentityMatrix ret
End Function</P><P>'=================================
' ZeroMatrix
'=================================</P><P>Sub ZeroMatrix(dest As S_Matrix)
  
  dest.m11 = 0
  dest.m12 = 0
  dest.m13 = 0
  dest.m14 = 0
  dest.m21 = 0
  dest.m22 = 0
  dest.m23 = 0
  dest.m24 = 0
  dest.m31 = 0
  dest.m32 = 0
  dest.m33 = 0
  dest.m34 = 0
  dest.m41 = 0
  dest.m42 = 0
  dest.m43 = 0
  dest.m44 = 0
  
End Sub</P><P>Function RetZeroMatrix() As S_Matrix
    Dim ret As S_Matrix
    ZeroMatrix ret
    RetZeroMatrix = ret
End Function</P><P>
'=================================
' VectorNegate
'=================================
Sub VectorNegate(v As S_Vec3)
  v.x = -v.x
  v.y = -v.y
  v.z = -v.z
End Sub</P><P>Function VNegate(v As S_Vec3) As S_Vec3
    Dim ret As S_Vec3
    ret.x = -v.x
    ret.y = -v.y
    ret.z = -v.z
    VNegate = ret
End Function</P><P>'=================================
' VectorSubtract
'=================================
Sub VectorSubtract(dest As S_Vec3, a As S_Vec3, b As S_Vec3)
  dest.x = a.x - b.x
  dest.y = a.y - b.y
  dest.z = a.z - b.z
End Sub</P><P>Function VSub(a As S_Vec3, b As S_Vec3) As S_Vec3
  Dim dest As S_Vec3
  dest.x = a.x - b.x
  dest.y = a.y - b.y
  dest.z = a.z - b.z
  VSub = dest
End Function</P><P>'=================================
' VectorAdd
'=================================
Sub VectorAdd(dest As S_Vec3, a As S_Vec3, b As S_Vec3)
  dest.x = a.x + b.x
  dest.y = a.y + b.y
  dest.z = a.z + b.z
End Sub</P><P>Function VAdd(a As S_Vec3, b As S_Vec3) As S_Vec3
  Dim dest As S_Vec3
  dest.x = a.x + b.x
  dest.y = a.y + b.y
  dest.z = a.z + b.z
  VAdd = dest
End Function</P><P>'=================================
' VectorCrossProduct
'=================================
' can be used to compute normals.
'
Sub VectorCrossProduct(dest As S_Vec3, a As S_Vec3, b As S_Vec3)
   dest.x = a.y * b.z - a.z * b.y
   dest.y = a.z * b.x - a.x * b.z
   dest.z = a.x * b.y - a.y * b.x
End Sub
  
Function VCross(a As S_Vec3, b As S_Vec3) As S_Vec3
   Dim dest As S_Vec3
   dest.x = a.y * b.z - a.z * b.y
   dest.y = a.z * b.x - a.x * b.z
   dest.z = a.x * b.y - a.y * b.x
   VCross = dest
End Function
  
'=================================
' VectorNormalize
'=================================
' creates a vector of length 1 in the same direction
'
Sub VectorNormalize(dest As S_Vec3)
  On Local Error Resume Next
  Dim l As Double
  l = dest.x * dest.x + dest.y * dest.y + dest.z * dest.z
  l = Sqr(l)
  If l = 0 Then
    dest.x = 0
    dest.y = 0
    dest.z = 0
    Exit Sub
  End If
  dest.x = dest.x / l
  dest.y = dest.y / l
  dest.z = dest.z / l
End Sub
  
Function VNormalize(dest As S_Vec3) As S_Vec3</P><P>  Dim ret As S_Vec3
  
  Dim l As Double
  l = dest.x * dest.x + dest.y * dest.y + dest.z * dest.z
  l = Sqr(l)
  If l = 0 Then
    ret.x = 0
    ret.y = 0
    ret.z = 0
  Else
    ret.x = dest.x / l
    ret.y = dest.y / l
    ret.z = dest.z / l
  End If
  VNormalize = ret
End Function
  
'=================================
' VectorDotProduct
'=================================
Function VectorDotProduct(a As S_Vec3, b As S_Vec3) As Single
  VectorDotProduct = a.x * b.x + a.y * b.y + a.z * b.z
End Function</P><P>Function VDot(a As S_Vec3, b As S_Vec3) As Single
  VDot = a.x * b.x + a.y * b.y + a.z * b.z
End Function</P><P>'=================================
' VectorAddAndScale
'=================================
Sub VectorAddAndScale(dest As S_Vec3, s1 As Single, v1 As S_Vec3, s2 As Single, v2 As S_Vec3)
  dest.x = s1 * v1.x + s2 * v2.x
  dest.y = s1 * v1.y + s2 * v2.y
  dest.z = s1 * v1.z + s2 * v2.z
End Sub</P><P>'=================================
' VectorCopy
'=================================
Sub VectorCopy(dest As S_Vec3, src As S_Vec3)
  dest.x = src.x
  dest.y = src.y
  dest.z = src.z
End Sub</P><P>Function VCopy(src As S_Vec3) As S_Vec3
  Dim dest As S_Vec3
  dest.x = src.x
  dest.y = src.y
  dest.z = src.z
  VCopy = dest
End Function</P><P>'=================================
' VectorScale
'=================================
' scale a vector by a scalar
Sub VectorScale(dest As S_Vec3, src As S_Vec3, s As Single)
  dest.x = src.x * s
  dest.y = src.y * s
  dest.z = src.z * s
End Sub</P><P>Function VScale(src As S_Vec3, s As Single) As S_Vec3
  Dim dest As S_Vec3
  dest.x = src.x * s
  dest.y = src.y * s
  dest.z = src.z * s
  VScale = dest
End Function</P><P>'=================================
' MakeVector
'=================================
Sub MakeVector(v As S_Vec3, x As Single, y As Single, z As Single)
    v.x = x
    v.y = y
    v.z = z
End Sub</P><P>Function RVector(x As Single, y As Single, z As Single) As S_Vec3
    Dim v As S_Vec3
    v.x = x
    v.y = y
    v.z = z
    RVector = v
End Function</P><P>'=================================
' MakeRect
'=================================
Function MakeRect(ret As tagRECT, X1 As Integer, Y1 As Integer, X2 As Integer, Y2 As Integer)
    With ret
        .Left = X1
        .top = Y1
        .Right = X2
        .bottom = Y2
    End With
End Function</P><P>Function RRect(X1 As Integer, Y1 As Integer, X2 As Integer, Y2 As Integer) As tagRECT
    Dim RetRect As tagRECT
    With RetRect
        .Left = X1
        .top = Y1
        .Right = X2
        .bottom = Y2
    End With
    RRect = RetRect
End Function</P><P>'=================================
' ResetFloat
' easy way of reseting the floating
' point cpu flags so vb doesnt complian
' of Overflow error.
' Issues are always driver specific
'=================================
Sub ResetFloat()
  On Local Error GoTo out
  Dim s As Single
  Dim v As Single
  s = 1#
  s = s / v</P><P>out:
  s = 0</P><P>End Sub</P><P>'=================================
' PrintVector
' aids in debuging
'=================================</P><P>Sub PrintVector(v As S_Vec3)
  Debug.Print v.x, v.y, v.z
End Sub
</P><img src="images/post/smile/dvbbs/em03.gif" /><img src="images/post/smile/dvbbs/em03.gif" /><img src="images/post/smile/dvbbs/em06.gif" /><img src="images/post/smile/dvbbs/em06.gif" /><img src="images/post/smile/dvbbs/em06.gif" />
举报 回复(0) 喜欢(0)     评分
游客

返回顶部