一、紅寶書學習資料匯集
第八版的圖書源碼 源代碼: http://opengl-redbook.com/Code/oglpg-8th-edition.zip
第九版的圖書源碼 http://www.opengl-redbook.com/
官網的參考源碼:
Code samples for the OpenGL v1.1 Programming Guide (Redbook)
二、opengl紅寶書第八版第一個例子的配置
1. 下載紅寶書第八版的資源。連接在第一部分。
2. 打開vs2012,新建一個空的win32控制台項目。然后配置包含目錄、庫目錄;
3. 在源文件中添加主函數CPP文件,並在文件中加入下面的源碼。

//triangles.cpp #include <stdio.h> #include <iostream> using namespace std; #include "vgl.h" #include "LoadShaders.h" //0 -> Triangles //1 -> NumVAOs enum VAO_IDs { Triangles, NumVAOs }; enum Buffer_IDs { ArrayBuffer, NumBuffers }; enum Attrib_IDs { vPosition = 0 }; //VAOs: vertex array object GLuint VAOs[NumVAOs]; GLuint Buffers[NumBuffers]; const GLuint NumVertices = 6; //--------------------------------------------------------------------- // // init // void init(void){ glGenVertexArrays(NumVAOs, VAOs);//VAOs: input & output var glBindVertexArray(VAOs[Triangles]); GLfloat vertices[NumVertices][2] = { { -0.90, -0.90 }, // Triangle 1 { 0.85, -0.90 }, { -0.90, 0.85 }, { 0.90, -0.85 }, // Triangle 2 { 0.90, 0.90 }, { -0.85, 0.90 } }; glGenBuffers(NumBuffers, Buffers); glBindBuffer(GL_ARRAY_BUFFER, Buffers[ArrayBuffer]); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); ShaderInfo shaders[] = { { GL_VERTEX_SHADER, "triangles.vert" }, { GL_FRAGMENT_SHADER, "triangles.frag" }, { GL_NONE, NULL } }; GLuint program = LoadShaders(shaders); glUseProgram(program); glVertexAttribPointer(vPosition, 2, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0)); glEnableVertexAttribArray(vPosition); } //--------------------------------------------------------------------- // // display // void display(void) { glClear(GL_COLOR_BUFFER_BIT); glBindVertexArray(VAOs[Triangles]); glDrawArrays(GL_TRIANGLES, 0, NumVertices); glFlush(); } //--------------------------------------------------------------------- // // main // int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutInitWindowSize(512, 512); // const char * v = (const char *)glGetString(GL_VERSION); glutInitContextVersion(2, 1); // glutInitContextProfile(GLUT_CORE_PROFILE); glutCreateWindow(argv[0]); if (glewInit()) { cerr << "Unable to initialize GLEW ...exiting" << endl; exit(EXIT_FAILURE); } init(); glutDisplayFunc(display); glutMainLoop(); }
4. 從源代碼的lib文件夾中將LoadShaders.cpp拷貝過來,添加到項目的源文件夾下。
5. 此時如果直接運行將會出現白色的三角形,並未着色,同時在命令行窗口中提示為找到“triganles.vert”。
需要在triangles項目文件夾下,需要添加這個文件,以及用到的.frag文件。
方法是在項目文件夾下,新建2個txt文檔,並分別添加下面的代碼,然后更改文件名分別為triganles.vert、triangles.frag
triangles.vert
#version 430 core layout(location = 0) in vec4 vPosition; void main() { gl_Position = vPosition; }
triangles.frag
#version 430 core out vec4 fColor; void main() { fColor = vec4(0.0, 0.0, 1.0, 1.0); }
6. 重新編譯,報錯說有個libcmtd.lib庫跟其他庫有沖突,我們可以去忽略它
點擊項目右鍵--屬性--鏈接器--輸入,在忽略特定默認庫中添加它 libcmtd.lib 。
7. 最后編譯運行,出現藍色三角形。
參考文章
fanzhang1990, 關於在vs2013中配置opengl紅寶書第八版環境