如何使用三维渲染缩放二维世界
How to scale 2d world with 3d rendering?
我使用3d模式渲染我的2d游戏,因为相机的旋转和放大/缩小比2d模式容易得多。
现在我遇到了一个我似乎无法思考如何解决的问题:
- 如何使我的世界的二维平面适合屏幕,使1个纹理像素与屏幕上的1个像素匹配?换句话说:我如何计算相机的z位置来实现这一点
我的纹理坐标从0开始,到1结束,所以我可以在GL_NEAREST纹理过滤器模式下看到一个瓦片中的所有像素。
我的窗口可以调整大小,因为我的瓷砖总是正方形的,但可视区域会根据我调整窗口大小的方式而扩展。
编辑:我的视图端口正在使用透视模式,而不是等轴测模式。但如果在透视模式下不可能,我愿意改为等轴测。
使用将眼睛空间单位映射到像素的正交投影:
glViewport(0,0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, 0, height, -1, 1);
因问题更新:
纹素→使用透视投影可以进行视口像素匹配,但仅在特定约束条件下:纹理四边形必须与透视平截头体近/远平面共面。
怎么做?对于Z=near的glFrustum(left, right, bottom, top, near, far)
,XY眼睛空间范围[left,right]×[bottom,top]映射到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缩放。
相关文章:
- 将二维矢量传递给类
- 将值从二维数组输出到文本文件
- 我在二维向量中是否正确分配了内存
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 计算缩放多边形的比例,得到给定的多边形面积
- 带结构的二维矢量:如何存储元素
- QwtPlot具有相等的轴和自动缩放
- 如何使用qt缩放三维网格
- 如何在Openscenegraph中从二维鼠标点击的屏幕坐标点计算三维点(世界坐标)
- 如何将字符从文件放入二维矢量中
- 我如何将许多char*数组放入二维数组中
- C / C 将字符串放入二维数组中
- 将字符串放入目标C++中的二维矩阵中
- 在GLM中旋转、缩放和平移二维点
- 如何使用三维渲染缩放二维世界
- 如何定期缩放二维对象
- 创建二维世界
- 取消将二维屏幕位置投影到三维世界空间
- 利用OpenCV从二维图像点计算三维世界点
- 如何从文本文件中获取令牌并将其放入二维矩阵中