opengl第一课

来源:互联网 发布:拜耳杀蟑胶饵 知乎 编辑:程序博客网 时间:2024/06/05 17:13

参考书是这本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 corelayout(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 corein 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 0
原创粉丝点击