Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt/OpenGL-渲染的基本体被扭曲_C++_Qt_Opengl_User Interface_Opengl Es - Fatal编程技术网

C++ Qt/OpenGL-渲染的基本体被扭曲

C++ Qt/OpenGL-渲染的基本体被扭曲,c++,qt,opengl,user-interface,opengl-es,C++,Qt,Opengl,User Interface,Opengl Es,我在youtube上学习如何在Qt中使用OpenGL的教程。我有两门课: glWidget->从QGLWidget继承; GLWindow->从QMainWindow继承并具有一个表单 在GLWindow的表单中,我放置了一个小部件,并将其升级为glWidget,以便通过GLWindow上的小部件显示在glWidget上呈现的内容 我在glWidget中实现了以下继承函数: void glWidget::initializeGL() { glClearColor(0.1, 0.1, 0.

我在youtube上学习如何在Qt中使用OpenGL的教程。我有两门课:

glWidget->从QGLWidget继承; GLWindow->从QMainWindow继承并具有一个表单

在GLWindow的表单中,我放置了一个小部件,并将其升级为glWidget,以便通过GLWindow上的小部件显示在glWidget上呈现的内容

我在glWidget中实现了以下继承函数:

void glWidget::initializeGL()
{
    glClearColor(0.1, 0.1, 0.1, 1.0);
}

void glWidget::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_TRIANGLES);
            glColor3f(0.2, 0.8, 0.1);
        glVertex3f(-0.5, -0.5, 0.0);
            glColor3f(0.8, 0.3, 0.9);
        glVertex3f(0.5, -0.5, 0.0);
            glColor3f(0.1, 0.1, 0.5);
        glVertex3f(0.0, 0.5, 0.0);
    glEnd();
}
我计划稍后使用着色器和缓冲区,但我不明白为什么渲染的基本体显示为这样:

看起来三角形是在世界空间而不是局部空间中变换的。如果它在局部空间,那么三角形将出现在屏幕的中心。我所指的教程可以在这里找到:


我不知道我做错了什么。起初我认为这与我的顶点有关,我知道这是即时模式,应该尝试使用缓冲区/着色器;但我还是想知道我做错了什么。为什么三角形没有按照教程中的显示进行渲染?我应该在glWidget的构造函数中传递什么还是什么?

扩展QGLWidget时,请记住resizeGL()将自动调用:

resizeGL()-设置OpenGL视口、投影等。每当小部件调整大小时(以及首次显示时,因为所有新创建的小部件都会自动获得调整大小事件),都会调用该小部件

在您的情况下,小部件似乎会自动调整大小,因此解决方案是覆盖它并让它为空


扩展QGLWidget时,通常也是覆盖resizeGL函数的好方法。

您是否实现了resizeGL并将其保留为空?谢谢,它现在呈现良好!好的,我会给未来的读者一个答案。