2014-09-23 17 views
0

所以我一直在QML下玩OpenGL,並一直在尋找提供的同名文件。我有點理解它是如何工作的,但這是事情:我嘗試用我自己非常基本的Open GL東西替換示例的paint()函數中的OpenGL Shader程序。但是我無法在屏幕上看到任何可見的東西。我唯一能夠改變的就是背景的顏色。所以我想知道如何設置視口,相機以及屏幕上需要的東西。我在OpenGL上有一些(非常生疏)的經驗,但在過去總會有像freeglut這樣的東西讓生活變得更輕鬆。任何指針或例子(我可以在paint()方法中觀察和學習的東西)將會受到很大的讚賞...QML下的OpenGL

編輯:所以這裏是我在paint()方法中的:

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

嘗試移動一個新的矩陣內的模型也許是當前矩陣堆棧不在其默認狀態。 – mr5 2014-09-24 00:08:45

+0

謝謝mk5!也在思考類似的東西。我爲模型和投影矩陣添加了負載標識(上面編輯的代碼)。然後我試着沿z軸來回移動三角形;讓它更大;等等,但它從來沒有出現在屏幕上...... – kbrown 2014-09-24 00:43:21

+0

我試過發佈的代碼,它對我來說工作正常。所以我們在這裏沒有看到一些東西。 'm_viewportSize'包含正確的值嗎?它是否使用兼容性上下文? 'glGetErrors()'顯示任何錯誤? – 2014-09-24 04:27:56

回答

1

回答我自己的問題備案。問題在於,Qt默認預計會有新的OpenGL着色語言(GLSL)樣式指令。爲了讓老式的OpenGL指令起作用,你需要告訴Qt你將使用它們而不是由着色器定義的程序。這是通過發出以下命令來完成:

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

對於這些也工作,你需要包括以下標題:

#include <QOpenGLFunctions> 
#include <QOpenGLContext>