我正在使用3D模式渲染我的2D游戏,因为相机旋转和放大/缩小比使用2D模式更容易。
现在我遇到了一个我似乎无法解决的问题:
我的texcoords从0开始并结束为1,因此我可以在GL_NEAREST纹理过滤器模式中看到来自一个图块的所有像素。
我的窗口可调整大小,使得我的图块始终为正方形,但可见区域会根据我调整窗口大小的方式而扩展。
编辑:我的视图端口使用透视模式,而不是等轴测图。但如果在透视模式下不可能,我愿意改为等长。
答案 0 :(得分:2)
使用将眼睛空间单位映射到像素的正交投影:
glViewport(0,0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, 0, height, -1, 1);
纹素像素→视口像素匹配可以使用透视投影,但仅限于某个约束:纹理四边形必须与透视平截头体近/远平面共面。
怎么做?对于Z =近的glFrustum(left, right, bottom, top, near, far)
,XY眼睛空间范围[左,右]×[底部,顶部]映射到NDC xy [-1,1]²和NDC xy [-1,1]²映射到视口范围。所以这些都是遵循法律的仿射变换
y(x) = to_lower_bound + (x - from_lower_bound) * (to_upper_bound - to_lower_bound) / (from_upper_bound - from_lower_bound)
所有你需要做的就是将视口映射到NDC到近平面,如果你是Z = / =近接近/ Z的比例。