使用JOML透视矩阵时模型形状失真问题,LWJGL 3D引擎开发求助
问题诊断与修复方案
错误原因
你代码中存在明确的操作错误,问题出在perspective方法的宽高比参数计算环节:
你传入的640/360属于整数除法,Java中两个int类型数值相除时结果会自动截断小数部分,最终得到的宽高比为1,而非你预期的16:9(≈1.7778)。错误的宽高比和你实际窗口的16:9比例不匹配,导致画面被水平拉伸,原本的正方形网格就会出现失真。
补充验证:你之前正交投影的参数本身是匹配16:9比例的——左右范围总宽度为2 - (-2) = 4,上下范围总高度为1.125 - (-1.125) = 2.25,4 / 2.25 ≈1.7778正好对应16:9,所以正交投影显示正常。
修复方案
只需要把宽高比的计算改成浮点数除法即可,修改后的代码如下:
pMatrix = new Matrix4f().perspective((float) Math.toRadians(60.0f), 640f / 360, 0.1f, 1000f);
更稳妥的做法是不要硬编码窗口宽高,直接读取实际窗口的宽高参数计算比例,避免后续修改窗口分辨率时重复出现该问题:
// 假设windowWidth、windowHeight是你获取到的窗口实际宽高(int类型) float aspect = (float) windowWidth / windowHeight; pMatrix = new Matrix4f().perspective((float) Math.toRadians(60.0f), aspect, 0.1f, 1000f);
内容的提问来源于stack exchange,提问作者Extorc Productions
相关产品推荐
相关产品推荐

