《OpenGL 프로그래밍 안내서 제8판》 독서 노트

3135 단어
초고본 노트는 본인이 을 읽고 쓴 것으로 OpenGL 관련 지식을 배우고 공고히 할 수 있도록 돕는 동시에 이 책을 처음 배운 사람에게 편의를 제공하기를 바랍니다.저는 OpenGL의 소백입니다. OpenGL에 대해 연구를 한 적이 없습니다. 저는 자신의 이해를 바탕으로 가능한 한 통속적이고 알기 쉬운 말로 OpenGL을 해석할 수 밖에 없습니다.
어떻게 이 책을 읽습니까?많은 OpenGL에 관한 책을 받은 학생들은 OpenGL이 자바 언어와 같다고 생각하고 IDE를 찾아서 책에 있는 코드에 따라 한 걸음 한 걸음 두드리면 된다고 생각한다. 그러나 왕왕 많은 문제점을 발견할 수 있다. 환경을 어떻게 설정해야 하는지, 책에 왜 한 마디도 언급하지 않았는가?왜 이 책과 저 책이 쓴 내용이 다릅니까?
이 문제들을 설명하려면 먼저 OpenGL이라는 도형 라이브러리를 이해해야 한다.API는 구체적인 시스템, 구체적인 하드웨어(이 점은 JAVA와 유사하다)에 의존하지 않고 그 다음은 3차원 그래픽 라이브러리(2차원 그래픽 줄)이다. 자바 언어처럼 컨트롤러에서'Hello Word'를 출력할 수 없고 창의 줄 표시가 필요하다.그러나 OpenGL은 매우'전일적'이기 때문에 프로그래머에게 창을 만들고 사용자의 입력을 처리하는 함수를 제공하지 않는다.한편, glut,glew,glfw,mesa 이런 라이브러리는 이러한 조작을 간소화하는 것이다. 서로 다른 도구 라이브러리는 창과 처리 시간이 다르기 때문에 시중의 OpenGL 서적에는 각양각색의 코드가 존재한다. 그러나 이 라이브러리는 OpenGL을 위한 것일 뿐 OpenGL의 일부분이 아니라는 것을 기억해 주십시오.따라서 환경 설정에 대한 건의: 만약에 책에서 말한 라이브러리를 정상적으로 사용할 수 있다면 사용할 수 없고 사용할 수 없다면 원본으로 번역할 수 있는지 확인해 보세요. 정말 안 되면 다른 라이브러리로 바꾸세요. 한 그루의 나무에 매달려 죽지 마세요. 이런 라이브러리는 기본적으로 대동소이합니다. 우리의 중점은 OpenGL입니다.
본인이 산 8판(현재 최신 9판) 때문에 홈페이지에서 대응하는 원본 코드와 자원 파일을 찾을 수 없습니다.가능하면 9 판을 구입해 주십시오. 하나는 최신 버전이고 다른 하나는 OpenGL입니까?통속적으로 말하면 3차원 도형 라이브러리(어차피 의미차는 많지 않음)로 프로그래머에게 통일되고 편리한 프로그래밍 인터페이스를 제공하고 서로 다른 도형 하드웨어가 가져오는 차이를 차단한다.그것은 소프트웨어와 하드웨어를 통해 실현할 수 있다.
#include
#include

enum VAO_IDs { Triangles, NumVAOs };
enum Buffer_IDs { ArrayBuffer, NumBuffers };
enum Attrib_IDs { vPosition = 0 };

GLuint VAOs[NumVAOs];
GLuint Buffers[NumBuffers];

const GLuint NumVertices = 6;

void
init(void)
{
    glGenVertexArrays(NumVAOs, VAOs);
    glBindVertexArray(VAOs[Triangles]);

    GLfloat  vertices[NumVertices][2] = {
        { -0.90f, -0.90f },{ 0.85f, -0.90f },{ -0.90f,  0.85f },  // Triangle 1
    { 0.90f, -0.85f },{ 0.90f,  0.90f },{ -0.85f,  0.90f }   // Triangle 2
    };

    glGenBuffers(NumBuffers, Buffers);
    glBindBuffer(GL_ARRAY_BUFFER, Buffers[ArrayBuffer]);
    glBufferStorage(GL_ARRAY_BUFFER, sizeof(vertices), vertices, NULL);

    ShaderInfo shaders[] = {
        { GL_VERTEX_SHADER,"D:/OpenGL/bin/media/shaders/triangles/triangles.vert" },
        { GL_FRAGMENT_SHADER,"D:/OpenGL/bin/media/shaders/triangles/triangles.frag" },
        { GL_NONE,NULL }
    };

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

    glVertexAttribPointer(vPosition, 2, GL_FLOAT,
        GL_FALSE, 0, BUFFER_OFFSET(0));
    glEnableVertexAttribArray(vPosition);
}

void display(void)
{
    static const float black[] = { 0.0f, 0.0f, 0.0f, 0.0f };

    glClearBufferfv(GL_COLOR, 0, black);
    glBindVertexArray(VAOs[Triangles]);
    glDrawArrays(GL_TRIANGLES, 0, NumVertices);
}

int
main(int argc, char** argv)
{
    glfwInit();

    GLFWwindow* window = glfwCreateWindow(800, 600, "Triangles", NULL, NULL);

    glfwMakeContextCurrent(window);
    gl3wInit();

    init();

    while (!glfwWindowShouldClose(window))
    {
        display();
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    glfwDestroyWindow(window);

    glfwTerminate();
}

먼저, OpenGL 프로그래밍 가이드 제8판을 읽습니다.

좋은 웹페이지 즐겨찾기