【Qt OpenGL教程】10:加载3D世界,并在其中漫游

这篇博客介绍了如何使用Qt和OpenGL加载3D世界并在其中自由漫游。作者通过创建顶点、三角形和区段的结构体来组织3D数据,并在代码中解析文本文件加载环境。通过键盘控制,实现了视角的旋转和平移,提供了一个简单的3D游戏者移动体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第10课:加载3D世界,并在其中漫游 (参照NeHe)
这次教程中,我将教大家如何加载一个3D世界,并在3D世界中漫游。这相较于我们只能创造一个旋转的立方体或一群星星时有很大的进步了,当然这节课代码难度不低,但也不会很难,只要你跟着我慢慢一步一步来。
一个3D世界当然不像我们之前那样,只要几个对象就搞定了,因此,我们会选择将3D环境用数据来表达,并存放在一个文本中。随着环境复杂度的上升,这个工作得难度也会随之上升。出于这个原因,我们必须将数据归类,使其具有更多的可操作性风格。后面程序中,我们会把3D世界看作是区段(sector)的集合。一个区段可以是一个房间、一个立方体或者任意一个闭合的空间。

程序运行时效果如下:



下面进入教程:

我们这次将在第01课的基础上修改代码,其中一些与前几课重复的地方我不作过多解释。首先打开myglwidget.h文件,将类声明更改如下:
#ifndef MYGLWIDGET_H
#define MYGLWIDGET_H

#include <QWidget>
#include <QGLWidget>

typedef struct tagVERTEX                            //创建Vertex顶点结构体
{
    float x, y, z;                                  //3D坐标
    float u, v;                                     //纹理坐标
} VERTEX;

typedef struct tagTRIANGLE                          //创建Triangle三角形结构体
{
    VERTEX vertexs[3];                              //3个顶点构成一个Triangle
} TRIANGLE;

typedef struct tagSECTOR                            //创建Sector区段结构体
{
    int numtriangles;                               //Sector中的三角形个数
    QVector<TRIANGLE> vTriangle;                            //储存三角形的向量
} SECTOR;

class MyGLWidget : public QGLWidget
{
    Q_OBJECT
public:
    explicit MyGLWidget(QWidget *parent = 0);
    ~MyGLWidget();

protected:
    //对3个纯虚函数的重定义
    void initializeGL();
    void resizeGL(int w, int h);
    void paintG
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值