贴图臭虫  

-译ZH1110

原文:http://www.ur.co.nz/urcorp/default.asp?data_article=247


  好的物理学引擎(简单的)能生成好的效果,我认为这个臭虫需要。这讲开始引入mesh,通过边界固定盒得到臭虫的框架.
我读了一些有关书籍及代码后才变的明朗。
主要问题是为mesh创建的矩阵须通过6个单位向量的盒子来得到。单位向量意味着它的比例为1,并对齐于圆点,这样矩阵平移和缩放才不会搅乱.
在看了一些有关矩阵的介绍后事情变的清楚,有点惊讶,这些数据刚好建立起一个矩阵。这是经过矩阵的旋转变换验证的。
如果我们仅考虑坐标3个值,它就可以建立一根轴,你可以看到它们是如何与矩阵配合的.

现在计算出的的结果是一旋转矩阵,我们后面加入平移和缩放mesh就对应到了物理学引擎相应的点上.

For i = 0 To num_body - 1
If body(i).Part_Max - body(i).Part_Min = 7 Then
p1 = m_curp(body(i).Part_Min)
p2 = m_curp(body(i).Part_Min + 1)
p4 = m_curp(body(i).Part_Min + 3)
p5 = m_curp(body(i).Part_Min + 4)
D3DXVec3Subtract vx, p4, p1
D3DXVec3Subtract vy, p2, p1
D3DXVec3Subtract vz, p5, p1
D3DXVec3Normalize vx, vx
D3DXVec3Normalize vy, vy
D3DXVec3Normalize vz, vz
m3.m11 = vx.x
m3.m12 = vx.y
m3.m13 = vx.z
m3.m21 = vy.x
m3.m22 = vy.y
m3.m23 = vy.z
m3.m31 = vz.x
m3.m32 = vz.y
m3.m33 = vz.z
m3.m44 = 1
D3DXMatrixTranslation m2, m_curp(body(i).Part_Min).x, m_curp(body(i).Part_Min).y, m_curp(body(i).Part_Min).z
D3DXMatrixScaling m, (join_rl(body(i).Join_Min + 1)) * 0.013, (join_rl(body(i).Join_Min)) * 0.04, (join_rl(body(i).Join_Min + 9)) * 0.015
D3DXMatrixMultiply m, m, m3
D3DXMatrixMultiply m, m, m2
m_frame.SetMatrix m
m_frame.Render g_dev
End If
Next

下面的东西实际上是创建mesh.倘若使用Microsoft的mesh class处理,将变的很简单.

'加载我们的mesh...
    Set m_frame = New CD3DFrame
    m_frame.InitFromFile g_dev, App.path + "\bug.x", Nothing, Nothing
'加载Tmesh到一个frame,然后用m_frame.SetMatrix m 和 m_frame.Render g_dev设置矩阵和渲染.
camera的控制用camera manipulation也会快一些;

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    dwn% = True
    mx = x
    my = y
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
    If dwn% Then
         ox = ox - (mx - x)
         oy = oy - (my - y)
         mx = x
         my = y
         D3DUtil_SetupCamera vec3(0, 200, (oy)), vec3((ox), 0, 0), vec3(0, 1, 0)
    End If
End Sub
Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
    dwn% = False
End Sub


文件下载