游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2253|回复: 5

求助!!切换.x文件大小后,无法让其旋转!

[复制链接]

6

主题

18

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2008-11-13 09:38:00 | 显示全部楼层 |阅读模式

建立了一个水杯模型,.x文件载入后将其缩小。缩小后无法旋转,之前可以旋转,但是太大了。请帮帮忙,谢谢!!
注:是不是缩放的倍数太大了?该如何修改!!

bool Display(float timeDelta)
{
        if( Device )
        {

                D3DXMATRIX V;
                TheCamera.getViewMatrix(D3DXMatrixScaling(&V,0.01,0.01,0.01));
                Device->SetTransform(D3DTS_WORLD, D3DXMatrixScaling(&V,0.01,0.01,0.01));

                ID3DXMesh* LD = 0;
                D3DXVECTOR3 LDPosition(0.0f, 0.0f, -70000.5f);
                D3DMATERIAL9 LDMtrl = d3d::YELLOW_MTRL;
       
                static float radius = 20.0f;

                if( ::GetAsyncKeyState(VK_LEFT) & 0x8000f )
                        LDPosition.x -= 3.0f * timeDelta;

                if( ::GetAsyncKeyState(VK_RIGHT) & 0x8000f )
                        LDPosition.x += 3.0f * timeDelta;

                if( ::GetAsyncKeyState(VK_UP) & 0x8000f )
                        radius -= 2.0f * timeDelta;

                if( ::GetAsyncKeyState(VK_DOWN) & 0x8000f )
                        radius += 2.0f * timeDelta;

                static float angle = (3.0f * D3DX_PI) / 2.0f;
       
                if( ::GetAsyncKeyState('A') & 0x8000f )
                        angle -= 0.5f * timeDelta;

                if( ::GetAsyncKeyState('S') & 0x8000f )
                        angle += 0.5f * timeDelta;
                D3DXVECTOR3 position( cosf(angle) * radius, 3.0f, sinf(angle) * radius );         
                D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);
                D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);       
                D3DXMatrixLookAtLH(&V, &position, &target, &up);

                static float y = 0.0f;
                D3DXMATRIX yRot;
                D3DXMatrixRotationY(&yRot, y);
                y += 100*timeDelta;


                Device->SetTransform(D3DTS_VIEW, &V);


                //
                // Render
                //
                Device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0x00000000, 1.0f, 0);
                Device->BeginScene();
                for(int i = 0; i < Mtrls.size(); i++)
                {
                        Device->SetMaterial( &Mtrls );
                        Device->SetTexture(0, Textures);
                        Mesh->DrawSubset(i);
                }       
                d3d:rawBasicScene(Device, 1.0f);

                Device->EndScene();
                Device-&gtresent(0, 0, 0, 0);
        }
        return true;
}

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-11-13 12:51:00 | 显示全部楼层

Re:求助!!切换.x文件大小后,无法让其旋转!

放缩矩阵和旋转矩阵做乘法,用其积做世界变换

复习一下线性代数吧

6

主题

18

帖子

18

积分

新手上路

Rank: 1

积分
18
 楼主| 发表于 2008-11-13 13:24:00 | 显示全部楼层

Re:求助!!切换.x文件大小后,无法让其旋转!

谢谢,请在详细说明一下!!

6

主题

18

帖子

18

积分

新手上路

Rank: 1

积分
18
 楼主| 发表于 2008-11-14 09:50:00 | 显示全部楼层

Re:求助!!切换.x文件大小后,无法让其旋转!

                 。。。。。。

                static float x = -0.5f;
                D3DXMATRIX Rot;
                D3DXMatrixRotationX(&Rot, x);
                D3DXMatrixScaling(&V,0.02,0.02,0.02);
                D3DXMatrixMultiply(&Rot,&Rot,&V);
       
                x += timeDelta;
                if( x >= 6.28f )
                        x = 0.0f;
                D3DXMATRIX World = Rot;

                Device->SetTransform(D3DTS_WORLD, &World);


             。。。。。。。。。。。。。。。

修改之后,用键盘无法改变视角,请问这是怎么回事??

40

主题

48

帖子

48

积分

注册会员

Rank: 2

积分
48
发表于 2008-11-16 08:51:00 | 显示全部楼层

Re:求助!!切换.x文件大小后,无法让其旋转!

要改变视角,再Render()中也要有相应的摄像机代码

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-11-18 14:23:00 | 显示全部楼层

Re: 求助!!切换.x文件大小后,无法让其旋转!

D3DXMATRIX yRot;
D3DXMatrixRotationY(&yRot, y);
y += 100*timeDelta;

你这个 yRot是用来干什么的,要让物体旋转,可以旋转摄象机矩阵或者是物体的世界矩阵,看了一会没看明白你到底是想旋转哪个,如果你是想用yRot来旋转的话,你起码要先得到一下原先的摄象机矩阵view,然后乘上yRot,然后在setTransform(D3DTS_VIEW,&view)吧.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-20 21:57

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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