OPENGL超级宝典-6.6
2013-01-24 21:51
260 查看
开始学习着色器了,果然跟固定流水线不同.好在前一段数学知识学得好,运用到这里学得不吃力.下面这段代码,我解释不出太多,学到差不多的时候再总结一下吧.渐渐开窍的感觉,先广度优先吧.
#include "stdafx.h" #include <GLTools.h> #include <GLMatrixStack.h> #include <GLFrame.h> #include <GLFrustum.h> #include <GLGeometryTransform.h> #include <StopWatch.h> #include <math.h> #ifdef __APPLE__ #include <glut/glut.h> #else #define FREEGLUT_STATIC #include <GL/glut.h> #endif GLFrame viewFrame; GLFrustum viewFrustum; GLTriangleBatch torusBatch; GLMatrixStack modelViewMatrix; GLMatrixStack projectionMatrix; GLGeometryTransform transformPipeline; GLuint flatShader; GLint locMVP; GLint locColor; void SetupRC(void) { glClearColor(0.0f, 0.0f, 0.0f, 1.0f ); glEnable(GL_DEPTH_TEST); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); viewFrame.MoveForward(4.0f); gltMakeTorus(torusBatch, .80f, 0.25f, 52, 26); flatShader = gltLoadShaderPairWithAttributes("FlatShader.vp", "FlatShader.fp", 1, GLT_ATTRIBUTE_VERTEX, "vVertex"); locMVP = glGetUniformLocation(flatShader, "mvpMatrix"); locColor = glGetUniformLocation(flatShader, "vColorValue"); } void ShutdownRC(void) { } void RenderScene(void) { static CStopWatch rotTimer; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); modelViewMatrix.PushMatrix(viewFrame); modelViewMatrix.Rotate(rotTimer.GetElapsedSeconds() * 10.0f, 0.0f, 1.0f, 0.0f); GLfloat vColor[] = { 0.1f, 0.1f, 1.f, 1.0f }; glUseProgram(flatShader); glUniform4fv(locColor, 1, vColor); glUniformMatrix4fv(locMVP, 1, GL_FALSE, transformPipeline.GetModelViewProjectionMatrix()); torusBatch.Draw(); modelViewMatrix.PopMatrix(); glutSwapBuffers(); glutPostRedisplay(); } void ChangeSize(int w, int h) { if(h == 0) h = 1; glViewport(0, 0, w, h); viewFrustum.SetPerspective(35.0f, float(w)/float(h), 1.0f, 100.0f); projectionMatrix.LoadMatrix(viewFrustum.GetProjectionMatrix()); transformPipeline.SetMatrixStacks(modelViewMatrix, projectionMatrix); } int main(int argc, char* argv[]) { gltSetWorkingDirectory(argv[0]); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL); glutInitWindowSize(800, 600); glutCreateWindow("Simple Transformed Geometry"); glutReshapeFunc(ChangeSize); glutDisplayFunc(RenderScene); GLenum err = glewInit(); if (GLEW_OK != err) { fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err)); return 1; } SetupRC(); glutMainLoop(); ShutdownRC(); return 0; }
相关文章推荐
- [OpenGL 超级宝典][笔记] 8.2 帧缓冲区(FBO)
- OpenGL超级宝典笔记三 - 基础纹理1
- 【转载】OpenGL超级宝典笔记——GLSL语言基础
- [转载]OpenGL超级宝典笔记——GLSL语言基础
- 《OpenGL 超级宝典(Super Bible)第七版》 有关 PBO 的 Example
- 【OpenGL超级宝典第五版】【第一章】3D图形和OpenGL简介 读书笔记
- 关于OpenGL超级宝典 无法打开文件“libc.lib”
- 在linux下将OpenGL超级宝典里的例子用eclipse打开
- OpenGL超级宝典笔记----渲染管线
- OpenGL超级宝典笔记5
- 解决如何使用opengl超级宝典中实例代码及shared文件夹里的库
- OpenGL 超级宝典(第五版) 源代码的问题(一)
- 问题解决——OpenGL超级宝典 关于gltDrawTorus的错误解决
- 抗锯齿 多重采样 opengl超级宝典 P177
- 读书笔记——OpenGL超级宝典
- 问题解决——OpenGL超级宝典 关于gltDrawTorus的错误解决
- VS2013配置OPenGL的 方法以及超级宝典五中所使用的方案
- win7 上配置openGL开发环境(配套openGL 超级宝典Super Bible 6th)
- 读书笔记——OpenGL超级宝典
- 抗锯齿 多重采样 opengl超级宝典