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
相关产品推荐
相关产品推荐

