|
|
1
6
你可以做的稍微容易一些,而不是混乱的视场,因为你需要的信息直接保存在投影矩阵中。 因此,假设您的投影矩阵如下所示:
其中z-far(zf)和z-near(zn)、xscale和yscale是已知的。 要选择正确的Z深度,我们首先要确保w最终为1。这样,当我们做除以w时,它不会改变任何东西。 幸运的是,W很容易理解。它只是输入z的负值,因此输入z的-1将返回w为1。 我们假设您使用的分辨率是1024x768,并且您想要的正确比例的纹理是256x256。 我们还将进一步假设您的矩形设置为左上角的位置为-1,1,右下角的位置为1,-1。 所以让我们把这些插进去,算出z。 如果我们使用以下内容:
我们将得出如下结论。
viewport转换转换这些值,使-1、1为0、0和1,-1为1024768 所以我们可以通过做((x+1)/2)*1024和((1-y)/2)*768看到这项工作。 因此,如果我们假设XScale为3/4,YScale为1,我们可以通过插入它看到,我们将得到以下结果: 左上角:
右下角:
因此,您可以看到屏幕中央有一个768x768像素的图像。显然,为了得到256x256,我们需要将w设为3,这样在w后除以,我们得到的坐标是3/3的大小((xscale*1024)/256应该等于(yscale*768)/256才能得到一个正方形投影。 所以如果我们的最终坐标如下:
我们将得到以下结果(w-divide之后):
通过上面的屏幕方程,我们得到 左上角:
右下角:
因此,我们现在有了正确像素大小的最终矩形…… |
|
|
2
2
在不太了解您的情况下,将正交投影推到投影矩阵堆栈上,绘制纹理,然后再次弹出,几乎肯定会更容易。 |
|
3
0
虽然会很慢,但你可以用
…但是,如果它是性能关键的话,就不是了! |
|
|
4
0
你的帧缓冲区是方形的吗? 如果没有,那么你有一个水平的视野和一个垂直的视野。你用的是正确的吗?另外,你如何确定你想要它在世界坐标系下是2.0单位?如果您的最终目标是将其映射到像素,那么您需要考虑到视区,并从中恢复。 我也同意Pike65的观点,我不知道*2是从哪里来的。 |
|
Fyodor · 在C中使用sin和cos计算数学表达式不正确? 1 年前 |
|
Cjmarkham · 基于已知斜边和相邻的[闭合]获得θ 1 年前 |
|
|
Quiche31 · 符号反三角函数并不总是返回期望的分数 2 年前 |
|
|
Jack Wild · 三名JS直接在摄像机前获得地面位置 8 年前 |
|
|
urukh · Arduino波发生器 8 年前 |
|
|
Michael K. · 如何以java度求反余弦 8 年前 |