游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2038|回复: 7

封装摄像机时观察矩阵的问题

[复制链接]

15

主题

49

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 2007-3-11 22:47:00 | 显示全部楼层 |阅读模式
设置观察矩阵
void Camera::getViewMatrix(D3DXMATRIX* V)
{
        // Keep camera's axes orthogonal to eachother
        D3DXVec3Normalize(&_look, &_look);

        D3DXVec3Cross(&_up, &_look, &_right);
        D3DXVec3Normalize(&_up, &_up);

        D3DXVec3Cross(&_right, &_up, &_look);
        D3DXVec3Normalize(&_right, &_right);

        // Build the view matrix:
        float x = -D3DXVec3Dot(&_right, &_pos);
        float y = -D3DXVec3Dot(&_up, &_pos);
        float z = -D3DXVec3Dot(&_look, &_pos);

        (*V)(0,0) = _right.x; (*V)(0, 1) = _up.x; (*V)(0, 2) = _look.x; (*V)(0, 3) = 0.0f;
        (*V)(1,0) = _right.y; (*V)(1, 1) = _up.y; (*V)(1, 2) = _look.y; (*V)(1, 3) = 0.0f;
        (*V)(2,0) = _right.z; (*V)(2, 1) = _up.z; (*V)(2, 2) = _look.z; (*V)(2, 3) = 0.0f;
        (*V)(3,0) = x;        (*V)(3, 1) = y;     (*V)(3, 2) = z;       (*V)(3, 3) = 1.0f;

}

请问可不可以用D3DXMatrixLookAtLH来设?不能的话请简单说下原因..谢谢

6

主题

307

帖子

309

积分

中级会员

Rank: 3Rank: 3

积分
309
发表于 2007-3-12 13:09:00 | 显示全部楼层

Re:封装摄像机时观察矩阵的问题

视矩阵就是摄像机位置矩阵的逆矩阵

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2007-3-12 22:56:00 | 显示全部楼层

Re: 封装摄像机时观察矩阵的问题

xfxsworld: 封装摄像机时观察矩阵的问题

设置观察矩阵
void Camera::getViewMatrix(D3DXMATRIX* V)
{
        // Keep camera's axes orthogonal to eac...

可以。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

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

Re:封装摄像机时观察矩阵的问题

不可。D3DXMatrixLookAtLH中的look向量,和你上面的代码的look向量不同。
D3DXMatrixLookAtLH中的look向量不是摄象机的Z轴,而是注视的点的位置。
如果摄象机不在原点,封装你上面那个摄象机类就不能用D3DXMatrixLookAtLH。

7

主题

74

帖子

74

积分

注册会员

Rank: 2

积分
74
发表于 2007-3-13 17:22:00 | 显示全部楼层

Re:封装摄像机时观察矩阵的问题

这个函数应该是3D游戏程序设计入门当中的摄像机的函数。
这个函数的作用是用于调整摄像机的方向向量的,也就是说这个函数要根据LOOK向量来更改UP和RIGHT向量,而D3DXMatrixLookAtLH这个仅仅是设定LOOK向量的。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2007-3-13 18:19:00 | 显示全部楼层

Re: 封装摄像机时观察矩阵的问题


(*V)(0,0) = _right.x; (*V)(0, 1) = _up.x; (*V)(0, 2) = _look.x; (*V)(0, 3) = 0.0f;
(*V)(1,0) = _right.y; (*V)(1, 1) = _up.y; (*V)(1, 2) = _look.y; (*V)(1, 3) = 0.0f;
(*V)(2,0) = _right.z; (*V)(2, 1) = _up.z; (*V)(2, 2) = _look.z; (*V)(2, 3) = 0.0f;
(*V)(3,0) = x;        (*V)(3, 1) = y;     (*V)(3, 2) = z;       (*V)(3, 3) = 1.0f;

以上的right,up,look的定义是根据下图:

sf_2007313181922.jpg

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2007-3-13 18:21:00 | 显示全部楼层

Re: 封装摄像机时观察矩阵的问题

但是,D3DXMatrixLookAtLH中,需要下图中的"lookat"而不是look!(lookat=look+pos)
sf_2007313182044.jpg

15

主题

49

帖子

55

积分

注册会员

Rank: 2

积分
55
 楼主| 发表于 2007-3-15 09:58:00 | 显示全部楼层

Re:封装摄像机时观察矩阵的问题

OK
instemast的真详细.谢了~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 16:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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