本文爲轉載 原文地址 http://blog.csdn.net/qq821869798/article/details/45247241ios
本人剛開始學習opengl,買了一本opengl紅寶書第八版,c++
第一個例子研究了一段時間終於能夠運行了,不知道有沒有童鞋跟我遇到同樣的問題。oop
下面說說我怎麼配置的:學習
首先去 http://www.opengl-redbook.com/ 下載紅寶書的源代碼,解壓獲得這個ui
而後打開vs2013新建一個空的win32控制檯項目,spa
而後點項目右鍵屬性,點擊vc++目錄.net
包含目錄--編輯,添加紅寶書源碼目錄中的include文件夾code
庫目錄--編輯,添加紅寶書源碼目錄中的lib文件夾blog
在工程中添加和源文件,粘貼紅寶書第一個例子的代碼源碼
/////////////////////////////////////////////////////////////////////// // // triangles.cpp // /////////////////////////////////////////////////////////////////////// #include <iostream> using namespace std; #include "vgl.h" #include "LoadShaders.h" 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; //--------------------------------------------------------------------- // // init // void init(void) { glGenVertexArrays(NumVAOs, VAOs); 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); glutInitContextVersion(4, 3); glutInitContextProfile(GLUT_CORE_PROFILE); glutCreateWindow(argv[0]); if (glewInit()) { cerr << "Unable to initialize GLEW ... exiting" << endl; exit(EXIT_FAILURE); } init(); glutDisplayFunc(display); glutMainLoop(); }
編譯一下發現不經過,會報沒法解析外部命令的錯誤,
這是由於找不到LoadShaders.cpp
在紅寶書源代碼目錄中有個lib文件夾,裏面有LoadShaders.cpp
在工程的源文件右鍵添加現有項,把它添加進來
如今再編譯一次,發現仍是報錯,說有個libcmtd.lib庫跟其餘庫有衝突,咱們能夠去忽略它
點擊項目右鍵--屬性--連接器--輸入,在忽略特定默認庫中添加它
如今在編譯一次發現能夠經過了出來
可是它是白色的三角形不是藍色的,須要在工程目錄中新建兩個文本
改名爲triangles.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); }
而後再編譯運行,出現藍色三角形