opengl第一课

参考书是这本opengl编程指南第8版

源码链接,用的百度盘,opengl第八版的官方源代码也包含在triangles.rar里面了。
https://pan.baidu.com/s/1gfLpUPt

然后是官方源码链接:
http://www.opengl-redbook.com/
不过书好像已经出到第九版了,所以源码官方链接里的源码也是第九版了。

先来试着编译并运行书上第一个示例吧,triangles.cpp.

///////////////////////////////////////////////////////////////////////
//
// triangles.cpp
//
///////////////////////////////////////////////////////////////////////

#include <iostream>
using namespace std;
#include "vgl.h"
#include "LoadShaders.h" //加载着色器
enum VAO_IDs { Triangles, NumVAOs };  //顶点数组对象相关数据, VAO(Vertex-Array Object)
enum Buffer_IDs { ArrayBuffer, NumBuffers }; //顶点缓存相关数据
enum Attrib_IDs { vPosition = 0 , vColor = 1}; //
GLuint VAOs[NumVAOs];  //顶点数组
GLuint Buffers[NumBuffers]; //顶点缓存
const GLuint NumVertices = 6; //顶点数
//---------------------------------------------------------------------
//
// init
//
void init(void)
{
    glGenVertexArrays(NumVAOs, VAOs); //生成顶点缓存数组名称
    glBindVertexArray(VAOs[Triangles]); //绑定顶点数组

    struct VertexData {
        GLubyte color[4];
        GLfloat position[4];
    };

    VertexData vertices[NumVertices] = {
        {{255, 0, 0, 255}, {-0.90, -0.90}},
        {{0, 255, 0, 255}, {0.85, -0.90}},
        {{0, 0, 255, 255}, {-0.90, 0.85}},
        {{10, 10, 10, 255}, {0.90, -0.85}},
        {{100, 100, 100, 255}, {0.90, 0.90}},
        {{255, 255, 255, 255}, {-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(vColor, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(VertexData), BUFFER_OFFSET(0));

    glVertexAttribPointer(vPosition, 2, GL_FLOAT,
        GL_FALSE, sizeof(VertexData), BUFFER_OFFSET(sizeof(vertices[0].color)));
    glEnableVertexAttribArray(vColor);
    glEnableVertexAttribArray(vPosition); //启用顶点属性数组

    glClearColor(0, 0, 1, 1);  //设置清除屏幕颜色
}

//---------------------------------------------------------------------
//
// display
//
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT); //清除帧缓存
    glBindVertexArray(VAOs[Triangles]);
    glDrawArrays(GL_TRIANGLES, 0, NumVertices); //顶点数据向OpenGL管线传输
    glFlush(); //强制所有进行中的opengl命令立即完成并传输到opengl服务端处理
}

//---------------------------------------------------------------------
//
// 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]);

    glewExperimental = GL_TRUE;//这句话必须要加上
    if (glewInit()) {
        cerr << "Unable to initialize GLEW ... exiting" << endl;
        exit(EXIT_FAILURE);
    }
    init();
    glutDisplayFunc(display);
    glutMainLoop();
}

//接下来是顶点着色器和片元着色器,都是新建的txt文件改名字而成的

//顶点着色器
triangles.vert

#version 430 core

layout(location = 0) in vec4 vPosition;
layout(location = 1) in vec4 vColor;

out vec4 color;

void main()
{
  color = vColor;
  gl_Position = vPosition;
}

//片元着色器
triangles.frag

#version 430 core

in vec4 color;

out vec4 fColor;

void main()
{
   fColor = color;
}

接下来是项目配置,我用的vs2015:
1添加include目录:
1

2添加lib目录:
2

3在“General”选项卡中,将“Platform Toolset”设置为VS2013:
当然你电脑必须安装vs2013才行。
3

4在项目管理器中右击Source Files的Filter,添加现有项,然后找到红宝书源码目录中的lib目录,添加LoadShaders.cpp文件
4

5打开项目属性,在“Linker/Input”选项卡中,在“Ignore Specific Default Libraries”中添加libcmtd.lib
5

最后就可以按f5了,然后运行情况如图:
运行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值