簡體   English   中英

OpenGL繪制不符合預期

[英]OpenGL does not draw as expected

我目前正在通過當前的OpenGL編程指南4.3版進行工作。 我實現了第一個示例的代碼,該代碼應顯示兩個三角形。 基本上很簡單。

但是,當我運行該代碼時,什么也沒有顯示(只是黑色的窗口)。

這是創建三角形的init函數:

GLuint vertexArrayObjects[1];
GLuint buffers[1];
const GLuint vertexCount = 6;

void init() {
//  glClearColor(0,0,0,0);

    glGenVertexArrays(1, vertexArrayObjects);
    glBindVertexArray(vertexArrayObjects[0]);

    GLfloat vertices[vertexCount][1] {
        {-90.0, -90.0},
        { 85.0, -90.0},
        {-90.0,  85.0},
        { 90.0, -85.0},
        { 90.0,  90.0},
        {-85.0,  90.0}
    };

    glGenBuffers(1, buffers);
    glBindBuffer(GL_ARRAY_BUFFER, buffers[0]);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

    ShaderInfo shaders[] {
        {GL_VERTEX_SHADER, "one.vsh"},
        {GL_FRAGMENT_SHADER, "one.fsh"},
        {GL_NONE, nullptr}
    };

    GLuint program = LoadShaders(shaders);
    glUseProgram(program);

    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, ((char *)NULL + (0)));
    glEnableVertexAttribArray(0);
}

和非常簡單的繪制:

void display() {
    glClear(GL_COLOR_BUFFER_BIT);

    glBindVertexArray(vertexArrayObjects[0]);
    glDrawArrays(GL_TRIANGLES, 0, vertexCount);

    glFlush();
}

但是如前所述,什么也沒畫。 我的實現中有錯誤嗎?

完整的代碼在這里,而LoadShaders(直接來自書籍網站,因此應該沒有興趣)在此處 着色器在這里

對於本書中的第一個示例,沒有應用任何轉換(即,在頂點着色器中,頂點的位置vPosition直接映射到輸出位置gl_Position )。 這樣,窗口的坐標系是標准化的設備坐標 只有在xy中坐標在[-1,1]之間的對象才會被傳遞到光柵化器(並且不會被裁剪)。 給定您在程序中指定的幾何形狀,渲染的三角形將完全覆蓋視口,因此您應該在片段着色器(藍色)中看到指定的顏色。

否則,您的代碼看起來正確。 (盡管您不需要將nullptr傳遞到LoadShaders的着色器列表中。僅查找GL_NONE )。

好吧,我知道了問題所在。 構建應用程序后,該應用程序將在與源完全不同的位置運行,並且着色器文件不會復制到目標目錄中。 因此,該程序顯然無法讀取它們,並且什么也不顯示。 用絕對路徑替換相對着色器路徑one.vshone.fsh解決了此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM