游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1970|回复: 2

请教camera类void Camera::getViewMatrix(D3DXMATRIX* V)的一个不懂的

[复制链接]

13

主题

66

帖子

85

积分

注册会员

Rank: 2

积分
85
发表于 2007-10-9 16:27: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;
}
为什么需要这样求到x,y,z
float x = -D3DXVec3Dot(&_right, &_pos);
float y = -D3DXVec3Dot(&_up, &_pos);
float z = -D3DXVec3Dot(&_look, &_pos);
而不是直接
float x = _pos.x;
float y = _pos.y;
float z = _pos.z;
看不懂, 有何意义??????
[em17] [em17] [em17] [em17] [em17] [em4] [em4] [em4] [em7] [em7] [em7]

0

主题

228

帖子

285

积分

中级会员

Rank: 3Rank: 3

积分
285
发表于 2007-10-9 16:57:00 | 显示全部楼层

Re:请教camera类void Camera::getViewMatrix(D3DXMATRIX* V)的一个不懂

因为pos是旋转过后的,求他的逆不能直接取负

13

主题

66

帖子

85

积分

注册会员

Rank: 2

积分
85
 楼主| 发表于 2007-10-9 17:12:00 | 显示全部楼层

Re:请教camera类void Camera::getViewMatrix(D3DXMATRIX* V)的一个不懂

恩,谢谢楼上的兄弟, 明白了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-20 19:04

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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