zoukankan      html  css  js  c++  java
  • 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红宝书第八版环境

  • 相关阅读:
    Caffe2——C++ 预测(predict)Demo
    Effective C++ 条款06:若不想使用编译器自动生成的函数,就该明确拒绝
    Effective C++ 条款05:了解C++编写并调用哪些函数
    Effective C++ 条款04:确定对象被使用前已经先被初始化
    Effective C++ 条款03:尽可能使用const
    Effective C++ 条款02:尽量以const,enum,inline替换 #define
    使用队列(Queue)解决简单的并发问题
    关于C#中Queue的线程安全问题
    C#多线程编程
    跨线程访问控件的问题和编程方法
  • 原文地址:https://www.cnblogs.com/arxive/p/6240814.html
Copyright © 2011-2022 走看看