LOpenGL 是学习OpenGL非常好的资料,网址是:LearnOpenGL CN (learnopengl-cn.github.io)
最近复习OpenGL,基于QT,拷贝实现了LearnGL的一些例子。下载地址:
QT+OpenGL+学习基于QT开发OpenGL应用
例子效果如下,一些代码如有问题,请参考LearnOpenGL网站。
![](https://img-blog.csdnimg.cn/4f0961e0700c4f0c805be91a13ed161c.png)
![](https://img-blog.csdnimg.cn/9f56b34d329c4579931b0c2330e4f6c8.png)
![](https://img-blog.csdnimg.cn/a9f6b10912654106bf99b6d205c7dbc7.png)
例子中的主要类说明如下:
1. OpenGL视图类OpenGlView(openglview.h),继承了QOpenGLWidget,QOpenGLExtraFunctions
class OpenGlView : public QOpenGLWidget,public QOpenGLExtraFunctions
{
public:
OpenGlView();
protected:
virtual void initializeGL() override;
virtual void paintGL() override;
virtual void resizeGL(int w, int h) override;
void keyPressEvent(QKeyEvent *event) override;
void mousePressEvent(QMouseEvent *event)override;
void mouseReleaseEvent(QMouseEvent *event)override;
void mouseDoubleClickEvent(QMouseEvent *event)override;
void mouseMoveEvent(QMouseEvent *event)override;
void wheelEvent(QWheelEvent *event)override;
private slots:
void OnTimerUpdate();
private:
AbstractOpenGLRender* myPreRender; //LearnOpenGL例子的抽象类
QTimer* myTimer;
};
视图类的主要逻辑是在paintGL方法中,调用例子的渲染含方法:
void OpenGlView::paintGL()
{
AbstractOpenGLRender* render = OpenGLRenders::CurrRender();
if(myPreRender != render)
{
if(myPreRender != nullptr)
myPreRender->releaseGLRS(this);
myPreRender = render;
}
if(render != nullptr)
{
render->ResetSize(this->width(),this->height());
render->renderGL(this);
}
}
2. 例子的具体实现在OpenGLLearn目录
3. 2D游戏的代码在2DGame目录