QOpenglWidget 两个三维模型居中显示
时间: 2024-12-13 12:24:29 浏览: 10
QOpenGLWidget 是 Qt 库中的一个组件,它提供了一个用于渲染 OpenGL 图形的界面。如果你想要在 QOpenGLWidget 中同时显示两个三维模型并让它们居中对齐,你需要做以下几个步骤:
1. **设置视口**:首先,在 `QOpenGLFunctions` 或 `QOpenGLContext` 中,你需要设定合适的视口大小以便容纳这两个模型,视口中心点将是你希望模型对齐的位置。
```cpp
// 假设已经有一个QOpenGLFunctions对象glFuncs
glFuncs.glViewport(0, 0, width, height); // 宽度和高度是你的窗口大小
```
2. **设置投影矩阵**:接下来,调整投影矩阵以便模型能够在屏幕上占据合适的空间,并且确保中心点对齐。
```cpp
// 设置透视投影
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(fieldOfView, aspectRatio, nearClipPlane, farClipPlane);
// 确保视口中心点在投影空间的原点
glTranslatef(-width / 2, -height / 2, 0);
```
3. **绘制模型**:现在可以分别加载并绘制你的两个三维模型,确保在每个模型之前应用一个平移变换,使其相对于视口中心偏移量负向移动,达到居中效果。
```cpp
// 假设model1和model2是QOpenGLBuffer对象
model1.translate(-width / 4, -height / 4, 0); // 每个模型左上角对准视口中心
model2.translate(width / 4, -height / 4, 0); // 模型2右上角对准视口中心
// 绘制每个模型
glBindVertexArray(model1.vao());
glDrawArrays(...);
glBindVertexArray(model2.vao());
glDrawArrays(...);
```
4. **清理**:记得在完成绘制后清空变换栈和绑定对象。
```cpp
glPopMatrix(); // 清理变换
glBindVertexArray(0);
```
阅读全文