OpenGL 學習


 

 

一、紅寶書學習資料匯集

第八版的圖書源碼 源代碼: http://opengl-redbook.com/Code/oglpg-8th-edition.zip

第九版的圖書源碼 http://www.opengl-redbook.com/

官網的參考源碼:

Code Resources

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();
}
triangle.cpp 主函數

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紅寶書第八版環境

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM