游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1665|回复: 3

关于设计灵活摄像机类的问题

[复制链接]

2

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2007-12-9 01:51:00 | 显示全部楼层 |阅读模式
大家看看,为什么我这已运行就有很大的问题,我还想知道,到底初始时,局部坐标系,世界坐标系,观察坐标系,他们的方向朝向是怎样,是不是完全相同,还有 D3DXMatrixLookAtLH的第二个参数到底是以世界坐标系为基准,还是以观察坐标系为基准?还有对一个变换实行多个变换怎样实现,比如我们把一个物体的局部坐标系变换到世界坐标系中,既要实行平移变换,又要实行旋转变换,甚至放缩变换,怎样实现,是不是相乘,如果是相乘,那么他们的乘的次序对变换结果有没有影响,如果有影响,那么分别又有什么区别,望高手们能给我详细解答,越详细越好,不胜感激!!!
#include "CARMER.h"

CARMER::CARMER(void)
{
m_xRoto=0;
m_yRoto=0;
m_zRoto=0;
m_xoffset=0;
m_yoffset=0;
m_zoffset=0;
nbase=0.1f;
posX=D3DXVECTOR3(1.0f,0.0f,0.0f);
posY=D3DXVECTOR3(0.0f,1.0f,0.0f);
posZ=D3DXVECTOR3(0.0f,0.0f,1.0f);
}

CARMER::~CARMER(void)
{
}

void CARMER::SetTransform(IDirect3DDevice9* device)
{
if(GetAsyncKeyState('W')&0x8000f)
{
m_xoffset+=posZ.x;
m_yoffset+=posZ.y;
m_zoffset+=posZ.z;
D3DXMATRIX T,R1,R2,G;
D3DXMatrixTranslation(&T,m_xoffset,m_yoffset,m_zoffset);
D3DXMatrixRotationAxis(&R1,&posY,m_yRoto);
D3DXMatrixRotationAxis(&R2,&posX,m_xRoto);
G=(T*R2)*R1;
device->SetTransform(D3DTS_VIEW,&G);
}
if(GetAsyncKeyState('D')&0x8000f)
{
m_xoffset+=posX.x;
m_yoffset+=posX.y;
m_zoffset+=posX.z;
D3DXMATRIX T,R1,R2,G;
D3DXMatrixTranslation(&T,m_xoffset,m_yoffset,m_zoffset);
D3DXMatrixRotationAxis(&R1,&posY,m_yRoto);
D3DXMatrixRotationAxis(&R2,&posX,m_xRoto);
G=(T*R2)*R1;
device->SetTransform(D3DTS_VIEW,&G);
}
if(GetAsyncKeyState(VK_UP)&0x8000f)
{
m_xRoto+=nbase;
D3DXMATRIX T,R1,R2,Q,G;
D3DXMatrixRotationAxis(&Q,&posX,nbase);
D3DXVec3TransformNormal(&posZ,&posZ,&Q);
D3DXVec3Normalize(&posZ,&posZ);
D3DXMatrixTranslation(&T,m_xoffset,m_yoffset,m_zoffset);
D3DXMatrixRotationAxis(&R1,&posY,m_yRoto);
D3DXMatrixRotationAxis(&R2,&posX,m_xRoto);
G=(T*R2)*R1;
device->SetTransform(D3DTS_VIEW,&G);
}
if(GetAsyncKeyState(VK_LEFT))
{
m_zRoto+=nbase;
D3DXMATRIX T,R1,R2,Q,G;
D3DXMatrixRotationAxis(&Q,&posY,nbase);
D3DXVec3TransformNormal(&posX,&posX,&Q);
D3DXVec3Normalize(&posX,&posX);
D3DXVec3TransformNormal(&posZ,&posZ,&Q);
D3DXVec3Normalize(&posZ,&posZ);
D3DXMatrixTranslation(&T,m_xoffset,m_yoffset,m_zoffset);
D3DXMatrixRotationAxis(&R1,&posY,m_yRoto);
D3DXMatrixRotationAxis(&R2,&posX,m_xRoto);
G=(T*R2)*R1;
device->SetTransform(D3DTS_VIEW,&G);
}
由于字数有限,所以之给出上,右,仰视,和右转,其它的是一样的,只是符号有点不同。 [em1]

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2007-12-9 22:50:00 | 显示全部楼层

Re:关于设计灵活摄像机类的问题

这个..这个...
lz很多概念还很混乱啊,找本计算机图形学好好看看吧
在我看来,最简单的摄像机只需要向外部对象提供position,viewMatrix,projectionMatrix就可以了

2

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2007-12-10 11:07:00 | 显示全部楼层

Re:关于设计灵活摄像机类的问题

不过你还是没有回答呀

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2007-12-12 20:06:00 | 显示全部楼层

Re:关于设计灵活摄像机类的问题

http://bbs.gameres.com/showthread.asp?postid=467279
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-17 17:12

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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