游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4507|回复: 9

[源代码]我边学DX边写的一个小引擎```现在遇到问题了,

[复制链接]

14

主题

156

帖子

158

积分

注册会员

Rank: 2

积分
158
QQ
发表于 2007-6-9 15:50:00 | 显示全部楼层 |阅读模式
问题比较不好描述,请真正想帮助新手的前辈耐心看下我的代码,然后指教一下我。非常感谢。


问题是这样的:

先看引擎的基本结构

[引擎结构]
Core
{
     管理程序与窗口,初始化计算机资源
}       
       
Object
{
     管理整个游戏场景:物件、地、天空及其间关系
               
               
     类关系:从上往下,下层依次为上层总类的子类
                                 Object
                Node           Terrain          Sky       Panel         Text               
     Entity    Light    Camera
               
     Node类:场景中物件的基类
     1、其方位由 坐标 X Y Z, 右方向 right, 上方向 up, 前方向 forward, 唯一确定;
     2、所有移动或旋转操作均只在以上四个基本量上进行,操作之间对先后次序无要求
     3、在操作完毕后,以此四个基本量自行构造变换矩阵
               
     世界变换矩阵 worldMatrix
      _                                      _
     |    rightX    rightY     rightZ    0    |
     |    upX       upY        upZ       0    |
     |    forwardX  forwardY   forwardZ  0    |
     |    X         Y          Z         1          |
      -                                      -
                 
     视矩阵 viewMatrix = D3DXMatrixInverse( worldMatrix );
}

Library
{
     支持库:IO、数学、物理及其他支持库
}


然后看问题:
Node 是所有物件的基类,具有可绑定的父子层次结构。

父节点的变换矩阵设置 一个平移后(即直接修改矩阵第4行的XYZ值),以父节点的平移量为参数自动调

用子节点的 平移 函数,实现子节点相对位置和父节点始终保持同步。

问题是,如果父子节点的初始坐标如果相同,那么移动父节点时,子节点能保持跟父节点同步。
但,如果父子节点初始坐标不相同,那么移动父节点时,子节点总是比父节点移动得更多一些。

这是为什么呢?


或许问题还没有被描述清楚,所以,请愿意帮我的前辈下载我的全部源代码。花时间和精力看一下我的

代码。然后找到真正背后的原因。您可以运行DEMO,然后移动DEMO里的飞机,你会看到飞机上的老虎移

动得比飞机快。

在发这个帖子之前我已经进行过很多的思考,但实在是找不到错在哪。



我知道,看别人代码是一件非常耗脑力和精力的事情,所以,感谢你

14

主题

156

帖子

158

积分

注册会员

Rank: 2

积分
158
QQ
 楼主| 发表于 2007-6-9 15:53:00 | 显示全部楼层

Re:[源代码]我边学DX边写的一个小引擎```现在遇到问题了,

代码地址(竟然无法上传附件)
http://www.liuzewei.com/upload/EngineSrc.rar

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2007-6-9 16:20:00 | 显示全部楼层

Re:[源代码]我边学DX边写的一个小引擎```现在遇到问题了,

运行出错!

缺少文件 MSVCP80.dll

14

主题

156

帖子

158

积分

注册会员

Rank: 2

积分
158
QQ
 楼主| 发表于 2007-6-9 16:32:00 | 显示全部楼层

Re:[源代码]我边学DX边写的一个小引擎```现在遇到问题了,

http://www.zhaodll.com/soft/m/200607/459.html
msvcp80.dll

个位路过的前辈帮帮忙了,我自己是解决不了了,谢谢谢谢了!

8

主题

284

帖子

296

积分

中级会员

Rank: 3Rank: 3

积分
296
QQ
发表于 2007-6-9 20:14:00 | 显示全部楼层

Re:[源代码]我边学DX边写的一个小引擎```现在遇到问题了,

你显示出不同模型的位置不就清楚问题所在了?

14

主题

156

帖子

158

积分

注册会员

Rank: 2

积分
158
QQ
 楼主| 发表于 2007-6-9 20:42:00 | 显示全部楼层

Re:[源代码]我边学DX边写的一个小引擎```现在遇到问题了,

还是没解决,继续顶。不知道问题在哪哦```继续等待答案``````

14

主题

156

帖子

158

积分

注册会员

Rank: 2

积分
158
QQ
 楼主| 发表于 2007-6-9 21:25:00 | 显示全部楼层

Re:[源代码]我边学DX边写的一个小引擎```现在遇到问题了,

好了,问题已经解决。一直在考虑变换````变换的先后顺序啊`````变换的组合啊``````试图找出一个最自然和最简洁的方法`````没想到反而使自己陷入了迷糊之中````从而忽视了问题的一些细节``````刚才突然发现原来是少旋转了一个从 父节点 指向 子节点 的向量,好了,修改的代码如下,只需改一个函数,红色部分为增加的代码:

void DiamondNode::OnParentRotation( const D3DXMATRIX* rotationMatrix )
{
    float parentX, parentY, parentZ;
    m_parent->GetPosition( &parentX, &parentY, &parentZ );
   
    D3DXVECTOR3 toParent(  m_matrix->_41 - parentX, m_matrix->_42 - parentY, m_matrix->_43 - parentZ );

    D3DXVECTOR3 right( m_matrix->_11, m_matrix->_12, m_matrix->_13 );
    D3DXVECTOR3 up( m_matrix->_21, m_matrix->_22, m_matrix->_23 );
    D3DXVECTOR3 forward( m_matrix->_31, m_matrix->_32, m_matrix->_33 );

    D3DXVec3TransformCoord( &toParent, &toParent, rotationMatrix );
    D3DXVec3TransformCoord( &right, &right, rotationMatrix );
    D3DXVec3TransformCoord( &up, &up, rotationMatrix );
    D3DXVec3TransformCoord( &forward, &forward, rotationMatrix );

    m_matrix->_11 = right.x;
    m_matrix->_12 = right.y;
    m_matrix->_13 = right.z;

    m_matrix->_21 = up.x;
    m_matrix->_22 = up.y;
    m_matrix->_23 = up.z;

    m_matrix->_31 = forward.x;
    m_matrix->_32 = forward.y;
    m_matrix->_33 = forward.z;

    m_matrix->_41 = parentX + toParent.x;
    m_matrix->_42 = parentY + toParent.y;
    m_matrix->_43 = parentZ + toParent.z;



    for ( *m_iterator = m_child->begin(); *m_iterator != m_child->end(); (*m_iterator)++ )
    {
        if ( (*(*m_iterator)) != NULL )
            (*(*m_iterator))->OnParentRotation( rotationMatrix );
    }

    ApplyMatrix();
}

18

主题

631

帖子

660

积分

高级会员

Rank: 4

积分
660
发表于 2007-6-11 10:49:00 | 显示全部楼层

Re:[源代码]我边学DX边写的一个小引擎```现在遇到问题了,

顶一下.

1

主题

14

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2007-6-11 22:22:00 | 显示全部楼层

Re:[源代码]我边学DX边写的一个小引擎```现在遇到问题了,

顶,我数学要是有这么强就好了

0

主题

0

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2011-2-8 09:30:00 | 显示全部楼层

Re:[源代码]我边学DX边写的一个小引擎```现在遇到问题了,

运行出错!

缺少文件 MSVCP80.dll
http://www.filediag.com/dll/exe/msvcp80.dll.html
下载个放到C:\Windows\system32\下,就OK了.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-16 13:48

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表