?xml version="1.0" encoding="UTF-8"?
1、搭建好环境,引入以下头文件,定义好使用变量
#include"GLTools.h"
//矩阵堆栈
#include"GLMatrixStack.h"
//矩阵
#include"GLFrame.h"
//投影矩阵
#include"GLFrustum.h"
//三角形批次类
#include"GLBatch.h"
//几何谈的的管道,用来管理矩阵堆栈
#include"GLGeometryTransform.h"
//数据库
#include
#ifdef __APPLE__
#include
#else
#define FREEGLUT_STATIC
#include
#endif
/*
GLMatrixStack 变化管线使用矩阵堆栈
GLMatrixStack 构造函数允许指定堆栈的最大深度、默认的堆栈深度为64.这个矩阵堆在初始化时已经在堆栈中包含了单位矩阵。
GLMatrixStack::GLMatrixStack(int iStackDepth = 64);
//通过调用顶部载入这个单位矩阵
void GLMatrixStack::LoadIndentiy(void);
//在堆栈顶部载入任何矩阵
void GLMatrixStack::LoadMatrix(const M3DMatrix44f m);
*/
// 各种需要的类
GLShaderManager shaderManager;
//模型视图矩阵堆栈
GLMatrixStack modelViewMatrix;
//投影视图矩阵
GLMatrixStack projectionMatrix;
//照相机Frame(观察者)
GLFrame cameraFrame;
//
GLFrame objectFrame;
//投影矩阵
GLFrustum viewFrustum;
//容器类(7种不同的图元对应7种容器对象)
GLBatch pointBatch;
GLBatch lineBatch;
GLBatch lineStripBatch;
GLBatch lineLoopBatch;
GLBatch triangleBatch;
GLBatch triangleStripBatch;
GLBatch triangleFanBatch;
//几何变换的管道 管理堆栈modelViewMatrixt和projectionMatrix
GLGeometryTransform transformPipeline;
M3DMatrix44f shadowMatrix;
GLfloatvGreen[] = {0.0f,1.0f,0.0f,1.0f};
GLfloatvBlack[] = {0.0f,0.0f,0.0f,1.0f};
// 跟踪效果步骤 空格次数
intnStep =0;
2、还是和之前工程一样,在main加入运行代码
intmain(intargc,char* argv[])
{
//初始化
gltSetWorkingDirectory(argv[0]);
glutInit(&argc, argv);
//申请一个颜色缓存区、深度缓存区、双缓存区、模板缓存区
//颜色缓存区:存储颜色值
//双缓存区
//模板缓存区
//深度缓存区:用来记录每个像素上的深度值。深度测试、背面剔除!为了确保像素的遮挡关系!
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
//设置window 的尺寸
glutInitWindowSize(800,600);
//创建window的名称
glutCreateWindow("GL_POINTS");
//注册回调函数(改变尺寸)
glutReshapeFunc(ChangeSize);
//点击空格时,调用的函数
//注册一个键盘ASC2 码的键位事件的回调函数,当有键盘按下时,则执行回调函数
glutKeyboardFunc(KeyPressFunc);
//特殊键位函数(上下左右)
glutSpecialFunc(SpecialKeys);
//注册鼠标点击事件:
glutMouseFunc(MouseKey);
//显示函数
glutDisplayFunc(RenderScene);
//判断一下是否能初始化glew库,确保项目能正常使用OpenGL 框架
GLenumerr =glewInit();
if(GLEW_OK!= err) {
fprintf(stderr,"GLEW Error: %s\n",glewGetErrorString(err));
return1;
}
//绘制
SetupRC();
//runloop运行循环
glutMainLoop();
return0;
}