贴图臭虫
-译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
文件下载
|