void draw(){ glClearColor(0.0, 0.0, 1.0, 1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glEnable( GL_DEPTH_TEST ); glDepthFunc( GL_LESS ); float camMat[16]; getPerspectiveMatrix( -WIDTH, WIDTH, -HEIGHT, HEIGHT, 1.0, 10.0, camMat ); //Quat4f qCamera_; convert(qCamera,qCamera_); Mat3f mouseMat; qCamera.toMatrix(mouseMat); //printf( " (%3.3f,%3.3f,%3.3f,%3.3f) \n", qCamera.x,qCamera.y,qCamera.z,qCamera.w ); //printf( " (%3.3f,%3.3f,%3.3f,%3.3f) \n", qCamera.x,qCamera.y,qCamera.z,qCamera.w ); //printf( "mouseMat (%3.3f,%3.3f,%3.3f) (%3.3f,%3.3f,%3.3f) (%3.3f,%3.3f,%3.3f) \n", mouseMat.ax, mouseMat.ay, mouseMat.az, mouseMat.bx, mouseMat.by, mouseMat.bz, mouseMat.cx, mouseMat.cy, mouseMat.cz ); GLuint uloc; uloc = glGetUniformLocation( shader1->shaderprogram, "modelPos" ); glUniform3fv (uloc, 1, modelPos ); //uloc = glGetUniformLocation( shader1->shaderprogram, "modelMat" ); glUniformMatrix3fv(uloc, 1, GL_FALSE, modelMat ); uloc = glGetUniformLocation( shader1->shaderprogram, "modelMat" ); glUniformMatrix3fv(uloc, 1, GL_FALSE, (float*)&mouseMat ); uloc = glGetUniformLocation( shader1->shaderprogram, "camMat" ); glUniformMatrix4fv(uloc, 1, GL_FALSE, camMat ); // shading if ( render_type == 1 ){ uloc = glGetUniformLocation( shader1->shaderprogram, "cam_pos" ); glUniform3fv (uloc, 1, cam_pos ); uloc = glGetUniformLocation( shader1->shaderprogram, "light_pos" ); glUniform3fv (uloc, 1, light_pos ); uloc = glGetUniformLocation( shader1->shaderprogram, "lightColor" ); glUniform3fv (uloc, 1, lightColor ); uloc = glGetUniformLocation( shader1->shaderprogram, "diffuseColor" ); glUniform3fv (uloc, 1, diffuseColor ); uloc = glGetUniformLocation( shader1->shaderprogram, "ambientColor" ); glUniform3fv (uloc, 1, ambientColor ); uloc = glGetUniformLocation( shader1->shaderprogram, "specularColor" ); glUniform3fv (uloc, 1, specularColor ); }; //uloc = glGetUniformLocation( shader1->shaderprogram, "light_dir"); glUniform3fv(uloc, 1, light_dir ); object1->draw(); SDL_GL_SwapWindow(window); }
mat4 Camera::getMatrix() const { return getPerspectiveMatrix() * getViewMatrix(); }
void draw(){ long time_start = getCPUticks(); glClearColor(0.0, 0.0, 1.0, 1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glEnable( GL_DEPTH_TEST ); glDepthFunc( GL_LESS ); long time_0 = getCPUticks(); //getPerspectiveMatrix( -WIDTH, WIDTH, -HEIGHT, HEIGHT, 1.0, 10.0, camMat ); getPerspectiveMatrix( -WIDTH, WIDTH, -HEIGHT, HEIGHT, 1.0, 20.0, camMat ); //Quat4f qCamera_; convert(qCamera,qCamera_); qCamera.toMatrix(mouseMat); //printf( " (%3.3f,%3.3f,%3.3f,%3.3f) \n", qCamera.x,qCamera.y,qCamera.z,qCamera.w ); //printf( " (%3.3f,%3.3f,%3.3f,%3.3f) \n", qCamera.x,qCamera.y,qCamera.z,qCamera.w ); //printf( "mouseMat (%3.3f,%3.3f,%3.3f) (%3.3f,%3.3f,%3.3f) (%3.3f,%3.3f,%3.3f) \n", mouseMat.ax, mouseMat.ay, mouseMat.az, mouseMat.bx, mouseMat.by, mouseMat.bz, mouseMat.cx, mouseMat.cy, mouseMat.cz ); // ============= Terrain if(RayTerrain){ draw_TerrainRayMarch(); }else{ draw_TerrainMeshHeightMap(); } long time_1 = getCPUticks(); // ============= Objects glUseProgram(shader1->shaderprogram); uloc = glGetUniformLocation( shader1->shaderprogram, "camMat" ); glUniformMatrix4fv(uloc, 1, GL_FALSE, camMat ); uloc = glGetUniformLocation( shader1->shaderprogram, "modelMat" ); glUniformMatrix3fv(uloc, 1, GL_FALSE, (float*)&mouseMat ); uloc = glGetUniformLocation( shader1->shaderprogram, "modelPos" ); // glUniform3fv (uloc, 1, modelPos ); //object1->draw(); object1->preDraw(); for(int i=0; i<ninstancs; i++){ glUniform3fv( uloc, 1, instance_points+i*3 ); //glDrawArrays( object1->draw_mode, 0, object1->nVert); object1->draw_instance(); } object1->afterDraw(); long time_2 = getCPUticks(); SDL_GL_SwapWindow(window); long time_3 = getCPUticks(); double Ttot = (time_3-time_start)*1e-6; double Tterrain = (time_1-time_0)*1e-6; double Tobject = (time_2-time_1)*1e-6; double Tswap = (time_3-time_2)*1e-6; printf( "Ttot %3.2f terrain %3.2f objects %3.2f swap %3.2f \n", Ttot, Tterrain, Tobject, Tswap ); }