You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:36:04