如何在directx11中将我的窗口的1像素单位移动到世界空间中的1个单位?

时间:2015-01-15 00:35:28

标签: c++ 3d camera pixel directx-11

我试图将相机每帧偏移1个像素。所以我想知道我怎么能这样做,所以我的相机在X轴和Y轴上仅转换1个像素长度而不是在世界空间中转换X个数量?

2 个答案:

答案 0 :(得分:1)

一般情况下,您无法通过" 一个像素"来对相机进行偏移。在3D空间。

你的相机做出的任何动作 - 向上,向下,向右或向左 - 将使当前看到的相对于每个物体的距离移动一个因子,以及有多少像素组成当前视图窗口。

换句话说 - 作为度量单位的像素并不存在于3D空间中。

答案 1 :(得分:0)

执行此操作的一种方法是在顶点着色器中,在计算顶点的同质坐标(通过将顶点乘以矩阵得到的4d点)后,添加偏移量(以像素为单位)除以屏幕宽度和高度,乘以同质坐标的w。

换句话说:

Offset2d =(offsetX / screenWidth,offsetY / screenHeight,0,0)

Out = homogenous + offset2d * homogenous.w

其中offsetX和offsetY以像素为单位。

我确信有一种方法可以调整投影矩阵以获得相同的结果,因此您不必将它放在每个顶点着色器中,但还没有解决这个问题。