OpenGL과 Qt로 삼각형을 표시하려고하는데 검정색 창만 나타납니다. 내가 뭘 잘못하고 있니?Qt와 OpenGL로 삼각형을 표시합니다.
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 : 당신은 paintGL의 시작 부분에 뷰포트 및 프로젝션을 설정해야합니다
#include <QApplication>
#include "glwidget.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
GLWidget glWidget;
glWidget.show();
return app.exec();
}
감사 datenwolf을 변환합니다! 내가 이해하지 못하는 한 가지. glFrustum은 카메라 (z = 0)에서 5 (가까운)에서 7 (먼)까지의 거리를가집니다. 그러나 내 삼각형은 z = -6에 있습니다!? 내 삼각형은 z = 6에 있어야한다고 생각하거나 화면에 OpenGL의 음수 z 의미의 규칙이 있습니까? – Andy
@Andy : OpenGL의 기본 규칙은 깊이 범위가 [0 ... 1]이고 GL_GREATER 심도 정렬입니다. glFrustum은 음의 Z 방향으로 음의 깊이 값으로 좌표를 매핑합니다. 사실 이것은 기본 OpenGL 설정이 음수 Z 값을 화면에 매핑한다는 것을 의미합니다. 그러므로 glFrustum의 near와 far 값은 음의 Z 방향으로의 거리를 의미합니다. – datenwolf
@datenwolf : 아니요, 기본 깊이 테스트는 'GL_LESS'를 사용합니다. Z가 음수 인 이유는 그것이 OpenGL의 원근감 행렬이 작동하는 방식이기 때문입니다. -Z가 카메라 앞에 있고, + Z가 뒤에 있습니다. zNear 및 zFar는 카메라 공간 값이 아닌 거리 (따라서 항상 양수)입니다. –