2014-09-23 2 views
0

그래서 저는 QML에서 OpenGL을 다뤄 왔고 같은 이름의 예제 파일을보고있었습니다. 나는 그것이 어떻게 작동하는지 이해하지만, 여기에있는 것이있다 : 예제의 paint() 함수에 있던 OpenGL Shader 프로그램을 아주 기본적인 Open GL 자료로 대체하려고했다. 그러나 화면에 아무 것도 표시 할 수 없었습니다. 내가 바꿀 수 있었던 유일한 것은 배경색이었다. 그래서 뷰포트, 카메라 등을 화면에 설정하는 데 필요한 것이 무엇인지 궁금합니다. 나는 OpenGL에 대해 (녹슬었던) 경험이 있지만, 과거에는 항상 프리 글루트 (freeglut) 같은 것들이 있었기 때문에 삶이 좀 쉬워졌습니다. 모든 포인터 또는 예제 (내가 볼 수있는 페인트() 메서드에서 올바른 방향으로 배울 수있는 뭔가) 많이 인정 될 것입니다 ...QML에서 OpenGL

편집 : 그래서 여기에 페인트() 메서드가 있습니다.

void QtOpenGLViewRenderer::paint() 
{ 
    // The following two lines fixed the problem 
    QOpenGLFunctions glFuncs(QOpenGLContext::currentContext()); 
    glFuncs.glUseProgram(0); 

    glViewport(0, 0, m_viewportSize.width(), m_viewportSize.height()); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

    glClearColor(0.2, 0, 0, 1); 
    glClear(GL_COLOR_BUFFER_BIT); 

    GLfloat triangle[] = { 
     0.25f, 0.25f, 0.0f, 
     0.75f, 0.25f, 0.0f, 
     0.25f, 0.75f, 0.0f 
    }; 

    GLfloat colors[] = { 
     1.0f, 0.0f, 0.0f, 1.0f, 
     0.0f, 1.0f, 0.0f, 1.0f, 
     0.0f, 0.0f, 1.0f, 1.0f 
    }; 

    glVertexPointer(3, GL_FLOAT, 0, triangle); 
    glColorPointer(4, GL_FLOAT, 0, colors); 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glEnableClientState(GL_COLOR_ARRAY); 

    glShadeModel(GL_SMOOTH); 

    glDrawArrays(GL_TRIANGLES, 0, 3); 

    glFlush(); 
} 

검은 색 바탕에 삼각형의 표시가 보이지 않습니다. 왜 이런거야?

+0

시도 : 또한 당신을 일이 들어

QOpenGLFunctions glFuncs(QOpenGLContext::currentContext()); glFuncs.glUseProgram(0); 

다음 헤더를 포함해야합니다 :이 작업은 다음 명령을 실행하여 수행됩니다 기본 상태가 아닙니다. – mr5

+0

감사합니다 mk5! 비슷한 점도 생각하고있었습니다. 모델과 투영 행렬에 대한로드 ID를 추가했습니다 (위의 코드 편집). 그런 다음 삼각형을 z 축을 따라 앞뒤로 움직이려고했습니다. 그것을 더 크게 만든다. 등 등,하지만 결코 화면에 나타나지 ... – kbrown

+0

게시 된 코드를 시도하고 그것은 나를 위해 잘 작동합니다. 여기에 우리가 보지 못하는 것이 있습니다. 'm_viewportSize'는 올바른 값을 포함합니까? 호환성 문맥을 사용하고 있습니까? 'glGetErrors()'는 에러를 보여줍니까? –

답변

1

기록에 대한 내 자신의 질문에 대답. 문제는 기본적으로 Qt가 새로운 OpenGL 쉐이딩 언어 (GLSL) 스타일 명령어를 기대한다는 것입니다. 구식의 OpenGL 명령어를 사용하려면 Qt에게 쉐이더로 정의 된 프로그램 대신에 사용할 것을 알릴 필요가 있습니다. 어쩌면 현재 행렬 스택은 새로운 매트릭스 내부 모델을 이동

#include <QOpenGLFunctions> 
#include <QOpenGLContext>