void Cube::Draw(int type, const Camera& camera,const Light& light){ //Get new position of the cube and update the model view matrix Eigen::Affine3f wMo;//object to world matrix Eigen::Affine3f cMw; Eigen::Affine3f proj; glUseProgram(m_shader); #ifdef __APPLE__ glBindVertexArrayAPPLE(m_vertexArrayObject); #else glBindVertexArray(m_vertexArrayObject); #endif glBindBuffer(GL_ARRAY_BUFFER, m_vertexBufferObject);//use as current buffer GLuint camera_position = glGetUniformLocation(m_shader, "cameraPosition"); GLuint light_position = glGetUniformLocation(m_shader, "lightPosition"); GLuint color = glGetUniformLocation(m_shader, "Color"); GLuint object2world = glGetUniformLocation(m_shader, "wMo"); GLuint world2camera = glGetUniformLocation(m_shader, "cMw"); GLuint projection = glGetUniformLocation(m_shader, "proj"); wMo = m_Trans; proj = Util::Perspective( camera.m_fovy, camera.m_aspect, camera.m_znear, camera.m_zfar ); cMw = camera.m_cMw;//Angel::LookAt(camera.position,camera.lookat, camera.up ); glUniformMatrix4fv( object2world , 1, GL_FALSE, wMo.data() ); glUniformMatrix4fv( world2camera, 1, GL_FALSE, cMw.data()); glUniformMatrix4fv( projection, 1, GL_FALSE, proj.data()); glUniform4fv(camera_position, 1, camera.m_position.data()); glUniform4fv(light_position, 1, light.m_position.data()); Eigen::Vector4f l_color(m_Color[0],m_Color[1],m_Color[2],1.0); glUniform4fv(color,1,l_color.data()); switch (type) { case DRAW_MESH: glDrawArrays(GL_LINES, 0, 36); break; case DRAW_PHONG: glDrawArrays(GL_TRIANGLES, 0, 36); break; } }
void KinFuPostProcess::extractCameraPose(){ Eigen::Affine3f pose = kinfu_localReference->getCameraPose(); for(int i = 0; i < 16; i++) pos.data[i] = pose.data()[i]; h.setCameraPos(&pos); }
void CData4Viewer::drawCameraView(qglviewer::Camera* pCamera_) { _pKinect->_pRGBCamera->setGLProjectionMatrix( 0.1f,100.f); glMatrixMode(GL_MODELVIEW); Eigen::Affine3f prj_w_t_c; _pTracker->getCurrentProjectionMatrix(&prj_w_t_c); Eigen::Affine3f init; init.setIdentity(); init(1, 1) = -1.f; init(2, 2) = -1.f;// rotate the default opengl camera orientation to make it facing positive z glLoadMatrixf(init.data()); glMultMatrixf(prj_w_t_c.data()); //if(_bShowCamera) { // _pTracker->displayGlobalRelocalization(); //} //if(_bShowMarkers) { // _pTracker->displayAllGlobalFeatures(_nVoxelLevel,_bRenderSphere); //} _pVirtualCameraView->assignRTfromGL(); _pCubicGrids->rayCast(&*_pVirtualCameraView,true,_bCapture); //get virtual frame bool bLightingStatus = _pGL->_bEnableLighting; _pGL->_bEnableLighting = true; _pVirtualCameraView->gpuRender3DPts(_pGL.get(),_pGL->_usLevel); _pGL->_bEnableLighting = bLightingStatus; //PRINTSTR("drawCameraView"); return; }
void setMatrix(const Eigen::Affine3f& matrix) { setMatrix((float*)matrix.data()); }
void Terrain::Draw(int type, const Camera& camera, const Light& light){ //Get new position of the cube and update the model view matrix Eigen::Affine3f wMo;//object to world matrix Eigen::Affine3f cMw; Eigen::Affine3f proj; glUseProgram(m_shader); #ifdef __APPLE__ glBindVertexArrayAPPLE(m_vertexArrayObject); #else glBindVertexArray(m_vertexArrayObject); #endif glBindBuffer(GL_ARRAY_BUFFER, m_vertexBufferObject);//use as current buffer GLint world2camera = glGetUniformLocation(m_shader, "cMw"); GLint projection = glGetUniformLocation(m_shader, "proj"); GLint kAmbient = glGetUniformLocation(m_shader,"kAmbient"); GLint kDiffuse = glGetUniformLocation(m_shader,"kDiffuse"); GLint kSpecular = glGetUniformLocation(m_shader,"kSpecular"); GLint shininess = glGetUniformLocation(m_shader,"shininess"); GLint camera_position = glGetUniformLocation(m_shader, "cameraPosition"); GLint light_position = glGetUniformLocation(m_shader, "lightPosition"); //generate the Angel::Angel::Angel::matrixes proj = Util::Perspective( camera.m_fovy, camera.m_aspect, camera.m_znear, camera.m_zfar ); cMw = camera.m_cMw;//LookAt(camera.position,camera.lookat, camera.up ); Eigen::Vector4f v4color(0.55,0.25,0.08,1.0); Eigen::Vector4f Ambient; Ambient = 0.3*v4color; Eigen::Vector4f Diffuse; Diffuse = 0.5*v4color; Eigen::Vector4f Specular(0.3,0.3,0.3,1.0); glUniformMatrix4fv( world2camera, 1, GL_FALSE, cMw.data() ); glUniformMatrix4fv( projection, 1, GL_FALSE, proj.data() ); glUniform4fv(kAmbient, 1, Ambient.data()); glUniform4fv(kDiffuse, 1, Diffuse.data()); glUniform4fv(kSpecular, 1, Specular.data()); glUniform4fv(camera_position, 1, camera.m_position.data()); glUniform4fv(light_position, 1, light.m_position.data()); glUniform1f(shininess, 10); switch (type) { case DRAW_MESH: glUniform1i(glGetUniformLocation(m_shader, "renderType"), 1); glDrawArrays(GL_LINES, 0, m_NTrianglePoints); break; case DRAW_PHONG: glUniform1i(glGetUniformLocation(m_shader, "renderType"), 2); glDrawArrays(GL_TRIANGLES, 0, m_NTrianglePoints); break; } //draw the obstacles for(int i = 0; i < m_obstacles.size(); i++) { m_obstacles[i]->Draw(type,camera, light); } for(int i = 0; i < m_foods.size(); i++) { m_foods[i]->Draw(type,camera, light); } //draw the obstacles for(int i = 0; i < m_surface_objects.size(); i++) { m_surface_objects[i]->Draw(type,camera, light); } }