|
|
发表于 2005-10-26 18:40:00
|
显示全部楼层
Re: 【急】如何在DD中将一个图片旋转一定的角度?
'//* ***********************************************************************
'//* * 这一个替代人员组在顶点上面为一个子画面,考虑
'//* * 宽度,画面高度,顶涂颜色, 和转动角度
'//* * 注意: 半径, G 和 B 听写 [颜]色子画面将会是 -
'//* * 1,1,1 是正常,较低的数值将会使顶点变成彩色
'//* * v1 * v3
'//* * |\ |
'//* * | \ |
'//* * | \ |
'//* * | \ |
'//* * | \|
'//* * * v0 * v2
'//* ***********************************************************************
Sub SetUpGeom(Verts() As D3DTLVERTEX, DDSurface As My_Surface, Src As RECT, Dest As RECT, ByVal R As Single, ByVal G As Single, ByVal B As Single, ByVal A As Single, ByVal Angle As Single)
Dim SurfW As Single
Dim SurfH As Single
Dim XCenter As Single
Dim YCenter As Single
Dim Radius As Single
Dim XCor As Single
Dim YCor As Single
'Call Err_Msg_Log.AppendToLog("SetUpGeom 参数设定 ...", True, True)
'//* Width of the surface
SurfW = DDSurface.iWidth
'//* Height of the surface
SurfH = DDSurface.iHeight
'//* Center coordinates on screen of the sprite
'//* 置中在子画面的荧屏上的坐标
XCenter = Dest.Left + (Dest.Right - Dest.Left - 1) / 2
YCenter = Dest.Top + (Dest.Bottom - Dest.Top - 1) / 2
'//* Calculate screen coordinates of sprite, and only rotate if necessary
'//* 计算子画面的荧屏坐标, 和如果有需要的话只使旋转
If Angle = 0 Then
XCor = Dest.Left
YCor = Dest.Bottom
Else
XCor = XCenter + (Dest.Left - XCenter) * Sin(Angle) + (Dest.Bottom - YCenter) * Cos(Angle)
YCor = YCenter + (Dest.Bottom - YCenter) * Sin(Angle) - (Dest.Left - XCenter) * Cos(Angle)
End If
'//* 0 - Bottom left vertex
dx.CreateD3DTLVertex XCor, YCor, 0, 1, dx.CreateColorRGBA(R, G, B, A), _
0, Src.Left / SurfW, (Src.Bottom + 0.1) / SurfH, Verts(0)
'//* Calculate screen coordinates of sprite, and only rotate if necessary
If Angle = 0 Then
XCor = Dest.Left
YCor = Dest.Top
Else
XCor = XCenter + (Dest.Left - XCenter) * Sin(Angle) + (Dest.Top - YCenter) * Cos(Angle)
YCor = YCenter + (Dest.Top - YCenter) * Sin(Angle) - (Dest.Left - XCenter) * Cos(Angle)
End If
'//* 高耸左边的顶 (1-Top left vertex)
dx.CreateD3DTLVertex _
XCor, YCor, 0, 1, _
dx.CreateColorRGBA(R, G, B, A), 0, _
Src.Left / SurfW, Src.Top / SurfH, Verts(1)
'//* Calculate screen coordinates of sprite, and only rotate if necessary
'//* 计算子画面的荧屏坐标, 和如果有需要的话只使旋转
If Angle = 0 Then
XCor = Dest.Right
YCor = Dest.Bottom
Else
XCor = XCenter + (Dest.Right - XCenter) * Sin(Angle) + (Dest.Bottom - YCenter) * Cos(Angle)
YCor = YCenter + (Dest.Bottom - YCenter) * Sin(Angle) - (Dest.Right - XCenter) * Cos(Angle)
End If
'//* 2 - Bottom right vertex
dx.CreateD3DTLVertex XCor, YCor, 0, 1, _
dx.CreateColorRGBA(R, G, B, A), 0, _
(Src.Right + 0.1) / SurfW, (Src.Bottom + 0.1) / SurfH, Verts(2)
'//* Calculate screen coordinates of sprite, and only rotate if necessary
'//* 计算子画面的荧屏坐标, 和如果有需要的话只使旋转
If Angle = 0 Then
XCor = Dest.Right
YCor = Dest.Top
Else
XCor = XCenter + (Dest.Right - XCenter) * Sin(Angle) + (Dest.Top - YCenter) * Cos(Angle)
YCor = YCenter + (Dest.Top - YCenter) * Sin(Angle) - (Dest.Right - XCenter) * Cos(Angle)
End If
'//* 3 - Top right vertex
dx.CreateD3DTLVertex XCor, YCor, 0, 1, _
dx.CreateColorRGBA(R, G, B, A), 0, _
(Src.Right + 0.1) / SurfW, Src.Top / SurfH, Verts(3)
End Sub
这个是主要的思路,图片任意角度,, |
|