游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2521|回复: 1

directx虚拟摄像机问题

[复制链接]

1

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2012-4-16 17:24:00 | 显示全部楼层 |阅读模式
虚拟摄像机看见的物体在近裁剪面与远裁剪面之间。书上说directx将投影平面定义为z=1.但是我看到一个例子程序把摄像机设在点(0,0,-5)
方向(0,0,0),可视区域为1.0到1000.0。可为什么能看见可视区域之外的物体。我的意思是可视区域就是近裁剪面与远裁剪面之间的空间,但超出了这个空间为什么还能被看到。
物体的空间坐标:
vertices[0] = Vertex(-1.0f, -1.0f, -1.0f);
        vertices[1] = Vertex(-1.0f,  1.0f, -1.0f);
        vertices[2] = Vertex( 1.0f,  1.0f, -1.0f);
        vertices[3] = Vertex( 1.0f, -1.0f, -1.0f);
        vertices[4] = Vertex(-1.0f, -1.0f,  1.0f);
        vertices[5] = Vertex(-1.0f,  1.0f,  1.0f);
        vertices[6] = Vertex( 1.0f,  1.0f,  1.0f);
        vertices[7] = Vertex( 1.0f, -1.0f,  1.0f);
观察坐标变换:
D3DXVECTOR3 position(0.0f, 0.0f, -5.0f);  摄像机位置
        D3DXVECTOR3 target(0.0f, 0.0f, 0.0f); 被观察点
        D3DXVECTOR3 up(0.0f, 1.0f, 0.0f); 表示向上方向的向量
    D3DXMATRIX V;
        D3DXMatrixLookAtLH(&V, &position, &target, &up);
投影变换:
D3DXMATRIX proj;
        D3DXMatrixPerspectiveFovLH(
                        &proj,
                        D3DX_PI * 0.5f, // 90 - degree 用弧度表示的视野角度
                        (float)Width / (float)Height, 宽高比
                        1.0f, 前裁剪面距离
                        1000.0f); 后裁剪面距离
        Device->SetTransform(D3DTS_PROJECTION, &proj);
根据代码理解,只有坐标在z=1至z=1000之间的物体才能被看见
可例子中的点都在z=-1至z=1之间。头晕中,,,望高手赐教

33

主题

159

帖子

272

积分

中级会员

Rank: 3Rank: 3

积分
272
QQ
发表于 2012-4-17 20:40:00 | 显示全部楼层

Re:directx虚拟摄像机问题

喵喵,zn=1 zf = 1000的情况是指,按摄像机位置及方向,离摄像机1m至1000m里面的东东(用m这个单位不是很正确,喵)
你的摄像机位置在 (0,0,-5)目标点定在源点,所以摄像机方向是 (0,0,1);
所以不算角度上的裁切的话,摄像机能看到 (x1,y1,-4)至 (x2,y2,995)之间的东东
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-9 18:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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