//Set up openGL bool GLInit() { //set viewport int height; if (window.height==0) height=1; else height=window.height; glViewport(0, 0, window.width, height); //reset viewport //set up projection matrix glMatrixMode(GL_PROJECTION); //select projection matrix glLoadIdentity(); //reset gluPerspective(45.0f, (GLfloat)window.width/(GLfloat)height, 1.0f, 100.0f); //load identity modelview glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //other states //shading glShadeModel(GL_SMOOTH); glClearColor( backgroundColor.r, backgroundColor.g, backgroundColor.b, backgroundColor.a); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); //depth glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); //hints glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); glEnable(GL_CULL_FACE); //set up sphere sphere=gluNewQuadric(); //Set up vertex arrays for quad glVertexPointer(3, GL_FLOAT, 0, vertexPositions); glTexCoordPointer(2, GL_FLOAT, 0, texCoords); glEnable(GL_VERTEX_ARRAY); glEnable(GL_TEXTURE_COORD_ARRAY); //load vertex program glGenProgramsNV(1, &vertexProgram); glBindProgramNV(GL_VERTEX_PROGRAM_NV, vertexProgram); LoadNV_vertex_program("vertex program.txt", vertexProgram); //Set track matrices glTrackMatrixNV(GL_VERTEX_PROGRAM_NV, 0, GL_MODELVIEW_PROJECTION_NV, GL_IDENTITY_NV); glTrackMatrixNV(GL_VERTEX_PROGRAM_NV, 4, GL_TEXTURE0_ARB, GL_IDENTITY_NV); //Set texture atten states SetTextureAttenStates(); return true; }
//Set up openGL bool GLInit() { //set viewport int height; if (window.height==0) height=1; else height=window.height; glViewport(0, 0, window.width, height); //reset viewport //set up projection matrix glMatrixMode(GL_PROJECTION); //select projection matrix glLoadIdentity(); //reset gluPerspective(45.0f, (GLfloat)window.width/(GLfloat)height, 0.1f, 100.0f); //load identity modelview glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //other states //shading glShadeModel(GL_SMOOTH); glClearColor( backgroundColor.r, backgroundColor.g, backgroundColor.b, backgroundColor.a); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); //depth glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); //hints glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); //load vertex programs glGenProgramsNV(1, &chromaticSingleVP); glBindProgramNV(GL_VERTEX_PROGRAM_NV, chromaticSingleVP); LoadNV_vertex_program("chromatic single vp.txt", chromaticSingleVP); glGenProgramsNV(1, &simpleSingleVP); glBindProgramNV(GL_VERTEX_PROGRAM_NV, simpleSingleVP); LoadNV_vertex_program("simple single vp.txt", simpleSingleVP); glGenProgramsNV(1, &chromaticTwin1VP); glBindProgramNV(GL_VERTEX_PROGRAM_NV, chromaticTwin1VP); LoadNV_vertex_program("chromatic twin 1 vp.txt", chromaticTwin1VP); glGenProgramsNV(1, &chromaticTwin2VP); glBindProgramNV(GL_VERTEX_PROGRAM_NV, chromaticTwin2VP); LoadNV_vertex_program("chromatic twin 2 vp.txt", chromaticTwin2VP); //Set track matrices glTrackMatrixNV(GL_VERTEX_PROGRAM_NV, 0, GL_MODELVIEW_PROJECTION_NV, GL_IDENTITY_NV); glTrackMatrixNV(GL_VERTEX_PROGRAM_NV, 4, GL_MODELVIEW, GL_IDENTITY_NV); glTrackMatrixNV(GL_VERTEX_PROGRAM_NV, 8, GL_MODELVIEW, GL_INVERSE_TRANSPOSE_NV); glTrackMatrixNV(GL_VERTEX_PROGRAM_NV, 12, GL_TEXTURE, GL_IDENTITY_NV); //Send fresnel multipication factor to c[28] glProgramParameter4fNV( GL_VERTEX_PROGRAM_NV, 28, fresnel, fresnel, fresnel, 1.0f); //Send refractive indices to c[32], c[33], c[34] glProgramParameter4fNV( GL_VERTEX_PROGRAM_NV, 32, index, index*index, 0.0f, 1.0f); glProgramParameter4fNV( GL_VERTEX_PROGRAM_NV, 33, index+indexDelta, (index+indexDelta)*(index+indexDelta), 0.0f, 1.0f); glProgramParameter4fNV( GL_VERTEX_PROGRAM_NV, 34, index+2*indexDelta, (index+2*indexDelta)*(index+2*indexDelta), 0.0f, 1.0f); //Send useful constants to c[64] glProgramParameter4fNV( GL_VERTEX_PROGRAM_NV, 64, 0.0f, 1.0f, 2.0f, 0.5f); //Init states to begin if(renderPath==CHROMATIC_SINGLE) InitChromaticSingleStates(); if(renderPath==SIMPLE_SINGLE) InitSimpleSingleStates(); return true; }
//Set up openGL bool GLInit() { //set viewport int height = 480; int width = 640; glViewport(0, 0, width, height); //reset viewport //set up projection matrix glMatrixMode(GL_PROJECTION); //select projection matrix glLoadIdentity(); //reset gluPerspective(45.0f, (GLfloat)width/(GLfloat)height, 1.0f, 100.0f); //load identity modelview glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //other states //shading glShadeModel(GL_SMOOTH); glClearColor( backgroundColor.r, backgroundColor.g, backgroundColor.b, backgroundColor.a); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); //depth glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); //hints glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); //Set up vertex arrays for torus //Fixed 17th November 2002 //Instead of passing tangents as texture coords 1 and 2, use aliased attributes 9 and 10. //This way, these texture coordinates will reach the vertex program on a geforce 2 //which only has 2 texture units. glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, sizeof(TORUS_VERTEX), &torus.vertices[0].position); glEnableClientState(GL_NORMAL_ARRAY); glNormalPointer(GL_FLOAT, sizeof(TORUS_VERTEX), &torus.vertices[0].normal); //Pass texture coords to unit 0 glEnableClientState(GL_TEXTURE_COORD_ARRAY); glTexCoordPointer(2, GL_FLOAT, sizeof(TORUS_VERTEX), &torus.vertices[0].s); //Pass tangent,binormal to attributes 9, 10 glEnableClientState(GL_VERTEX_ATTRIB_ARRAY9_NV); glVertexAttribPointerNV(9, 3, GL_FLOAT, sizeof(TORUS_VERTEX), &torus.vertices[0].sTangent); glEnableClientState(GL_VERTEX_ATTRIB_ARRAY10_NV); glVertexAttribPointerNV(10, 3, GL_FLOAT, sizeof(TORUS_VERTEX), &torus.vertices[0].tTangent); //Use compiled vertex arrays glLockArraysEXT(0, torus.numVertices); //Load vertex programs glGenProgramsNV(1, &singlePassVertexProgram); glBindProgramNV(GL_VERTEX_PROGRAM_NV, singlePassVertexProgram); LoadNV_vertex_program("single pass vertex program.txt", singlePassVertexProgram); glGenProgramsNV(1, &diffuseDecalVertexProgram); glBindProgramNV(GL_VERTEX_PROGRAM_NV, diffuseDecalVertexProgram); LoadNV_vertex_program("diffuse decal vertex program.txt", diffuseDecalVertexProgram); glGenProgramsNV(1, &lookUpSpecularVertexProgram); glBindProgramNV(GL_VERTEX_PROGRAM_NV, lookUpSpecularVertexProgram); LoadNV_vertex_program("look up specular vertex program.txt", lookUpSpecularVertexProgram); glGenProgramsNV(1, &diffuseVertexProgram); glBindProgramNV(GL_VERTEX_PROGRAM_NV, diffuseVertexProgram); LoadNV_vertex_program("diffuse vertex program.txt", diffuseVertexProgram); glGenProgramsNV(1, &decalVertexProgram); glBindProgramNV(GL_VERTEX_PROGRAM_NV, decalVertexProgram); LoadNV_vertex_program("decal vertex program.txt", decalVertexProgram); glGenProgramsNV(1, &simpleSpecularVertexProgram); glBindProgramNV(GL_VERTEX_PROGRAM_NV, simpleSpecularVertexProgram); LoadNV_vertex_program("simple specular vertex program.txt", simpleSpecularVertexProgram); //Set Tracking Matrix //Modelview Projection in registers c[0]-c[3] glTrackMatrixNV(GL_VERTEX_PROGRAM_NV, 0, GL_MODELVIEW_PROJECTION_NV, GL_IDENTITY_NV); return true; }