OpenGL Shader 学习笔记(一)

glutInit(&argc, argv);

初始化显示模式。双缓冲,RGBA模式,深度测试,模板测试。
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL); 

glutInitWindowSize(800, 600); glutCreateWindow("3D Effects Demo"); 

初始化状态并捕捉错误。GLenum err = glewInit(); 

初始化显示模式。双缓冲,RGBA模式,深度测试,模板测试。
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL); 

glutInitWindowSize(800, 600);
glutCreateWindow("3D Effects Demo");
GLenum err = glewInit();   初始化状态并捕捉错误。        

glutReshapeFunc(ChangeSize);注册重构函数
glutKeyboardFunc(KeyPressFunc);注册键盘监听函数
glutDisplayFunc(RenderScene);注册显示函数
glutPostRedisplay();触发显示函数 的重新调用

清除指定缓存。 颜色缓冲区、 深度缓冲区、 模板缓冲区
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); 

保存模型状态属性值,其实就是复制一层 矩阵,将旧的矩阵压倒栈的倒数第二层,在栈顶新增一层。
主要是保存状态值。一般发生矩阵的状态值变化时调用。
modelViewMatrix.PushMatrix();

显示完后调用,恢复状态。 
modelViewMatrix.PopMatrix();  

交换缓冲区,在打开了双缓冲时有用
glutSwapBuffers(); 

打开视口,在窗口的 x = 0, y = 0, width = w, height = h. 位置
glViewport(0, 0, w, h);

设置贞投影矩阵
viewFrustum.SetPerspective(35.0f, float(w) / float(h), 1.0f, 500.0f); 

赋值投影矩阵给模 投影矩阵
projectionMatrix.LoadMatrix(viewFrustum.GetProjectionMatrix());

载入单位矩阵
modelViewMatrix.LoadIdentity();

设置表面法线,用于光照,光线来自 Y 轴,从上向下。
cubeBatch.Normal3f(0.0f, 1.0f, 0.0f);

添加一个纹理坐标
cubeBatch.MultiTexCoord2f(0, 1.0f, 1.0f);
实际的函数是:
void GLBatch::MultiTexCoord2f(GLuint texture, GLclampf s, GLclampf t)
第一个参数是纹理的名字,第二个是 S 即 ,第三个参数是 T 即。

添加顶点位置
cubeBatch.Vertex3f(1.0f, 1.0f, 1.0f);
void GLBatch::Vertex3f(GLfloat x, GLfloat y, GLfloat z)



     











你可能感兴趣的:(OpenGL Shader 学习笔记(一))