qt 和 OpenGL的基础问题



  • glm::mat4 model = glm::mat4(1.0);
    model = glm::rotate(model, (float)0.5, glm::vec3(1.0, 1.0, 1.0));
    

    这段代码中 是OpenGL教程中的基础模型矩阵那块的,在glfw中让模型自旋转 在 (float)0.5哪里 改成
    (float)glfwGetTime() 就可以了 但是在qt中并没有glfw库,所以如果是qt中该怎么写才行呢



  • @Zeroqt 和 OpenGL的基础问题 中说:

    导入头文件:

    #include <QDateTime>
    

    初始化代码:

    /* 将startTime设置为全局变量或放在类中作为属性 */
    /* 确保渲染代码能够访问到 */
    /* startTime记录程序启动的时刻 */
    qint64 startTime;    
    startTime = QDateTime::currentDateTime().toMSecsSinceEpoch();
    

    渲染代码

    // 计算出程序已经运行的时间(秒)
    qint64 timestamp = QDateTime::currentDateTime().toMSecsSinceEpoch();
    float t = (timestamp - startTime) / 1000.0;
    qDebug() << t;
    
    // 旋转 
    glm::mat4 model = glm::mat4(1.0f);
    model = glm::rotate(model, glm::radians(cos(t)*60.0f), glm::vec3(1.0f, 1.0f, 1.0f));
    

    这个代码如果没设置帧率会导致 运行卡顿 很长时间才更新下角度 所以 需要用QTimer *updateTimer; 来更新帧率
    添加代码如下:
    //全局对象
    QTimer *updateTimer;
    //构造函数中
    connect(updateTimer, SIGNAL(timeout()), this, SLOT(repaint()));
    updateTimer->start(1000 / 60);

    这样来设置帧率 可以使运行流畅



  • 可以使用 update()把数据更新到 paintGL里

    QObject::connect(&time, SIGNAL(timeout()), this, SLOT(timeTT()));
    time.start();

    void mywidget::timeTT()
    {
    std::cout << ang << std::endl;
    ang += 0.1;
    update();
    }



  • @Zeroqt 和 OpenGL的基础问题 中说:

    导入头文件:

    #include <QDateTime>
    

    初始化代码:

    /* 将startTime设置为全局变量或放在类中作为属性 */
    /* 确保渲染代码能够访问到 */
    /* startTime记录程序启动的时刻 */
    qint64 startTime;    
    startTime = QDateTime::currentDateTime().toMSecsSinceEpoch();
    

    渲染代码

    // 计算出程序已经运行的时间(秒)
    qint64 timestamp = QDateTime::currentDateTime().toMSecsSinceEpoch();
    float t = (timestamp - startTime) / 1000.0;
    qDebug() << t;
    
    // 旋转 
    glm::mat4 model = glm::mat4(1.0f);
    model = glm::rotate(model, glm::radians(cos(t)*60.0f), glm::vec3(1.0f, 1.0f, 1.0f));
    

    这个代码如果没设置帧率会导致 运行卡顿 很长时间才更新下角度 所以 需要用QTimer *updateTimer; 来更新帧率
    添加代码如下:
    //全局对象
    QTimer *updateTimer;
    //构造函数中
    connect(updateTimer, SIGNAL(timeout()), this, SLOT(repaint()));
    updateTimer->start(1000 / 60);

    这样来设置帧率 可以使运行流畅



  • 导入头文件:

    #include <QDateTime>
    

    初始化代码:

    /* 将startTime设置为全局变量或放在类中作为属性 */
    /* 确保渲染代码能够访问到 */
    /* startTime记录程序启动的时刻 */
    qint64 startTime;    
    startTime = QDateTime::currentDateTime().toMSecsSinceEpoch();
    

    渲染代码

    // 计算出程序已经运行的时间(秒)
    qint64 timestamp = QDateTime::currentDateTime().toMSecsSinceEpoch();
    float t = (timestamp - startTime) / 1000.0;
    qDebug() << t;
    
    // 旋转 
    glm::mat4 model = glm::mat4(1.0f);
    model = glm::rotate(model, glm::radians(cos(t)*60.0f), glm::vec3(1.0f, 1.0f, 1.0f));
    

Log in to reply