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

LWJGL投影矩阵异常:四边形未正确显示为正方形求助

问题排查与修复方案

你的四边形显示为矩形而非正方形,核心问题出在投影矩阵的宽高比设置错误,以下是具体问题和修复步骤:

1. 整数除法导致宽高比计算错误

你代码中:

float aspectRatio = 640 / 480;

这里是整数除法,640和480都是int类型,计算结果为1而非正确的1.333...,而且后续你根本没用到这个变量,直接给perspective方法传了1作为宽高比参数,这会导致投影矩阵无法匹配窗口的实际宽高比例,把正方形拉伸成矩形。

2. 硬编码窗口尺寸,未适配实际窗口

代码里写死了640/480,应该从传入的window对象获取实际的宽高,确保宽高比和窗口一致。

修复步骤

步骤一:正确计算宽高比

修改init方法中的宽高比计算逻辑,使用浮点除法并读取窗口实际尺寸:

// 替换原来的硬编码宽高比计算
float aspectRatio = (float) window.getWidth() / window.getHeight();

步骤二:传入正确的宽高比到投影矩阵

将perspective方法的第二个参数替换为计算好的aspectRatio:

projectionMatrix.perspective((float) Math.toRadians(FOV), aspectRatio, Z_NEAR, Z_FAR);

步骤三:确保视口与窗口尺寸匹配

在init方法或窗口 resize 回调中添加视口设置,保证OpenGL渲染区域和窗口一致:

GL11.glViewport(0, 0, window.getWidth(), window.getHeight());

步骤四:验证顶点着色器是否正确应用投影矩阵

确认你的顶点着色器(shader.vs)中正确将顶点位置与投影矩阵相乘,示例代码如下:

#version 330 core
layout (location = 0) in vec3 aPos;

uniform mat4 projectionMatrix;

void main() {
    gl_Position = projectionMatrix * vec4(aPos, 1.0);
}

完成以上修改后,四边形会根据窗口的实际宽高比正确渲染为正方形,调整FOV时的缩放行为也会符合预期。

内容的提问来源于stack exchange,提问作者Ajinkya Sanas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:07:03