2

OpenGLとQtで三角形を表示しようとしていますが、黒いウィンドウしか表示されません。私は何が間違っているのですか?

glwidget.h:

#pragma once
#include <QGLWidget>

class GLWidget : public QGLWidget {
public:
    GLWidget(QWidget *parent = 0);
   ~GLWidget();
   QSize sizeHint() const {  return QSize(400, 400); }

protected:
    void initializeGL();
    void paintGL();
    void resizeGL(int width, int height);
};

glwidget.cpp:

#include "glwidget.h"

GLWidget::GLWidget(QWidget *parent) : QGLWidget(parent) {}

GLWidget::~GLWidget(){ }

void GLWidget::initializeGL() { }

void GLWidget::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslatef(-1.5f,0.0f,-6.0f);

    glBegin(GL_TRIANGLES);
     glVertex3f( 0.0f, 1.0f, 0.0f);
     glVertex3f(-1.0f,-1.0f, 0.0f);
     glVertex3f( 1.0f,-1.0f, 0.0f);
    glEnd(); 
}

void GLWidget::resizeGL(int w, int h)
{
    QGLWidget::resize(w,h);
}

main.cpp:

#include <QApplication>
#include "glwidget.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    GLWidget glWidget;
    glWidget.show();
    return app.exec();
}
4

2 に答える 2

5

paintGL メンバー関数の先頭にビューポートと投影を設定する必要があります。これを paintGL の先頭に置きます。

QSize viewport_size = size();
glViewport(0, 0, viewport_size.width(), viewport_size.height());

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1, 1, -1, 1, 5, 7); // near and far match your triangle Z distance

glMatrixMode(GL_MODELVIEW);

また、ウィンドウがダブル バッファリングされている場合は、描画後にバッファを交換する必要があります。どちらかセット

setAutoBufferSwap(true);

コンストラクターで、paintGL が戻った後に交換するか、追加します。

swapBuffers();

paintGL の最後に。

于 2012-10-28T17:44:52.497 に答える
-1

三角形はフォームを変換します

glTranslatef(-0.5f,0.0f, 0.0f);

glColor3f(1.0f, 0.0f, 0.0f);
glBegin(GL_TRIANGLES);
 glVertex3f( 0.0f, 0.2f, 0.0f);
 glVertex3f(-0.2f,-0.2f, 0.0f);
 glVertex3f( 0.2f,-0.2f, 0.0f);
glEnd();
于 2013-07-15T07:22:08.017 に答える