|
|
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是从哪里来的。 |
|
|
Vojtjikjhh -4K- · 绘制光标问题 2 年前 |
|
|
FoolishMortal · 无法显示从基64字符串解码的特定图像 2 年前 |
|
|
Dromlius · JPanel透支重叠的JComcoBox 2 年前 |
|
|
mathInferno · 另一个OpenGL纹理未渲染后 2 年前 |
|
|
Pierro · 当我运行一个简单的SFML代码时,为什么像素会失真? 2 年前 |
|
|
Unknown · Were我能找到游戏横幅psd文件吗[关闭] 2 年前 |
|
|
se-tima · 如何绘制微生物学结果图(生长曲线)? 3 年前 |
|
|
user1944491 · 如何在静态基线上绘制SwiftUI矩形? 3 年前 |