二、opengl红宝书第八版第一个例子的配置

1. 下载红宝书第八版的资源。连接在第一部分。

OpenGL 学习_#include

2. 打开vs2012,新建一个空的win32控制台项目。然后配置包含目录、库目录;

OpenGL 学习_主函数_02

 

3. 在源文件中添加主函数CPP文件,并在文件中加入下面的源码。


OpenGL 学习_主函数_03OpenGL 学习_主函数_04


//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拷贝过来,添加到项目的源文件夹下。

OpenGL 学习_图形图像_05

 

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 。

OpenGL 学习_图形图像_06

OpenGL 学习_#include_07

 

7. 最后编译运行,出现蓝色三角形。

OpenGL 学习_图形图像_08