我正在使用3D模式渲染我的2D游戏,因为相机旋转和放大/缩小比使用2D模式更容易.
现在我遇到了一个问题,我似乎无法思考如何解决:
我的texcoords从0开始并结束为1,因此我可以在GL_NEAREST纹理过滤器模式中看到来自一个图块的所有像素.
我的窗口可调整大小,使得我的图块始终是正方形,但可见区域会根据我调整窗口的大小而扩展.
编辑:我的视图端口使用透视模式,而不是等轴测图.但如果它在透视模式下不可能,我愿意改为等长.
使用将眼睛空间单位映射到像素的正交投影:
\n\nglViewport(0,0, width, height);\nglMatrixMode(GL_PROJECTION);\nglLoadIdentity();\nglOrtho(0, width, 0, height, -1, 1);\nRun Code Online (Sandbox Code Playgroud)\n\n纹理元素 \xe2\x86\x92 视口像素匹配可以通过透视投影进行,但仅在一定的约束下:纹理四边形必须与透视平截头体近/远平面共面。
\n\n怎么做?对于glFrustum(left, right, bottom, top, near, far)Z=near,XY 眼空间范围 [left, right]\xc3\x97[bottom, top] 映射到 NDC xy[-1, 1]\xc2\xb2 和 NDC xy[-1, 1]\xc2\ xb2 映射到视口范围。所以这些都是遵循规律的仿射变换
y(x) = to_lower_bound + (x - from_lower_bound) * (to_upper_bound - to_lower_bound) / (from_upper_bound - from_lower_bound)\nRun Code Online (Sandbox Code Playgroud)\n\n您所要做的就是将视口映射到 NDC 到近平面,并且如果您是 Z ==/= 近比例 by 近/Z。
\n