簡體   English   中英

OpenGL-三角形沒有顯示?

[英]OpenGL- triangle is not being displayed?

我正在從非常好的第6版學習opengl,我似乎無法從書中給出的下面的代碼中畫出三角形。

#include <iostream>
#include "externalErrorFix.h"
#include "sb6.h"


GLuint compile_shaders(void)
{
    GLuint vertex_shader;
    GLuint fragment_shader;
    GLuint program;

    //GLSL shader sources 
    static const GLchar *vertex_shader_source[] =
    {
        "#version 430 core                                                  \n"
        "                                                                   \n"
        "void main(void)                                                    \n"
        "{                                                                  \n"
        "   const vec4 vertices[3] = vec4[3](vec4( 0.25, -0.25, 0.5, 1.0),  \n"
        "                                   vec4(-0.25, -0.25, 0.5, 1.0),   \n"
        "                                   vec4(0.25, 0.25, 0.5, 1.0));    \n"
        "                                                                   \n"
        "   gl_postion = vertices[gl_VertexID];                             \n"
        "}                                                                  \n"
    };
    static const GLchar *fragment_shader_source[] =
    {
        "#version 430 core                              \n"
        "                                               \n"
        "out vec4 color;                                \n"
        "void main(void)                                \n"
        "{                                              \n"
        "   color = vec4(0.0, 1.0, 0.0, 1.0);           \n"
        "}                                              \n"
    };

    //create and compile vertex shaders
    vertex_shader = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(vertex_shader, 1, vertex_shader_source, NULL);
    glCompileShader(vertex_shader);

    //create and compile fragment shader
    fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(fragment_shader, 1, fragment_shader_source, NULL);
    glCompileShader(fragment_shader);

    //create a program attach shaders and link it 
    program = glCreateProgram();
    glAttachShader(program, vertex_shader);
    glAttachShader(program, fragment_shader);
    glLinkProgram(program);

    glDeleteShader(vertex_shader);
    glDeleteShader(fragment_shader);

    return program;
}


class my_application : public sb6::application
{

private:
    GLuint render_program;
    GLuint vertex_array_object;

public:

    void startup()
    {
        render_program = compile_shaders();
        glGenVertexArrays(1, &vertex_array_object);
        glBindVertexArray(vertex_array_object);
    }
    void shutdown()
    {
        glDeleteVertexArrays(1, &vertex_array_object);
        glDeleteProgram(render_program);
        glDeleteVertexArrays(1, &vertex_array_object);
    }
    void render(double currentTime)
    {
        const GLfloat color[] = { 0.0f,0.2f,0.0f,1.0f };
        glClearBufferfv(GL_COLOR, 0, color);

        glUseProgram(render_program);
        glDrawArrays(GL_TRIANGLES, 0, 3);
        //glPointSize(10.0f);
    }

    /*
    // First program 
    void render(double currentTime)
    {
        const GLfloat color[] = { 
                                    (float)sin(currentTime) * 0.5f + 0.5f,
                                    (float)cos(currentTime) * 0.5f + 0.5f,
                                    0.0f,1.0f 
                                };

        glClearBufferfv(GL_COLOR, 0, color);
    }*/
};
DECLARE_MAIN(my_application);

似乎有一些拼寫錯誤:

  • gl_postion而不是gl_Position
  • out vec4 color缺少分號out vec4 color;
  • glDeleteVertexArrays(1, &vertex_array_object); 在關機功能中出現兩次

此外,類my_application中缺少init()函數。 它應該特別調用sb6::application::init()

如果仍然沒有幫助,看來,這本書保持與它的所有樣本庫在這里 也許他們會糾正那里的一切。

暫無
暫無

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

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