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

OpenGL 不渲染Mesh问题:继承自定义Window2类后网格无法绘制

问题1:视图矩阵计算错误(核心故障)

你在Game::initialize中配置glm::lookAt的参数存在逻辑错误:

  • 相机位置viewPosition = glm::vec3(0, 1, 0)
  • 观察目标是原点glm::vec3(0, 0, 0)
  • 上方向向量是glm::vec3(0, 1, 0)

此时视线方向为目标 - 位置 = (0,-1,0),和上方向向量完全共线反向,glm::lookAt计算叉乘得到的右向量会是零向量,最终生成的视图矩阵完全错误,导致所有顶点坐标变换后超出可视范围。

修复方案:将相机位置往Z轴正方向移动,避免和上方向共线,例如:

viewPosition = glm::vec3(0, 1, 3);

问题2:缺失模型矩阵Uniform赋值

你在Game::render中只给Shader传递了投影矩阵P和视图矩阵V,没有传递模型矩阵M。如果你的Shader顶点着色器中使用了M*V*P的变换逻辑,缺失的M矩阵会被默认填充为垃圾值,导致模型位置不可预知。

修复方案:在渲染时补充模型矩阵赋值,默认用单位矩阵即可:

shader->setMat4("M", glm::mat4(1.0f));

问题3:清空颜色顺序错误

Window2::run中的清空逻辑顺序颠倒:先调用glClear再设置glClearColor,会导致第一帧清空的颜色为默认黑色,后续帧清空的是上一帧设置的颜色,虽然不会直接导致渲染失败,但属于逻辑错误。

修复方案:调换顺序:

glClearColor(0.8, 0.8, 0.8, 1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

问题4:点光环境光为0可能导致模型全黑

你初始化PointLight时,环境光分量设置为glm::vec3(1.0) * 0.0f,如果模型背向点光源,漫反射和高光分量都会为0,最终模型会输出纯黑色和背景融为一体无法识别。

修复方案:给环境光设置一个基础值,例如:

glm::vec3(1.0, 1.0, 1.0) * 0.1f

问题5:未显式设置视口

你在Window2::intitialize2中注释掉了setSize(m_width, m_height)调用,而setSize中才会执行glViewport设置视口范围,虽然大多数驱动默认会将视口设为窗口大小,但属于不稳定的隐式行为。

修复方案:取消setSize调用的注释。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:00:00