《OpenGL 프로그래밍 안내서 제8판》 독서 노트
어떻게 이 책을 읽습니까?많은 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판을 읽습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.