void CCollisionMgr::OnScreenTouch(glm::vec2 _vTouchPoint) { m_bIsTouch = true; m_vTouch2DPoint = _vTouchPoint; ICamera* pCamera = CSceneMgr::Instance()->Get_Camera(); if(pCamera == NULL) { return; } glm::mat4x4 mView = pCamera->Get_View(); glm::mat4x4 mProjection = pCamera->Get_Projection(); glm::ivec4 vViewport; vViewport[0] = 0; vViewport[1] = 0; vViewport[2] = CWindow::Get_ScreenHeight(); vViewport[3] = CWindow::Get_ScreenWidth(); m_vTouchRay = Unproject(m_vTouch2DPoint, mView, mProjection, vViewport); CEventMgr::Instance()->OnEvent(CEventMgr::E_EVENT_TOUCH); }
void CSprite::Render(CShader::E_RENDER_MODE _eMode) { if(CSceneMgr::Instance()->Get_Camera()->Get_Frustum()->IsPointInFrustum(m_vPosition) == CFrustum::E_FRUSTUM_RESULT_OUTSIDE) { return; } INode::Render(_eMode); ICamera* pCamera = CSceneMgr::Instance()->Get_Camera(); CShader* pShader = m_pMaterial->Get_Shader(_eMode); switch (_eMode) { case CShader::E_RENDER_MODE_SIMPLE: { if(pShader == NULL) { std::cout<<"[CCrossBoxEffect::Render] Shader MODE_SIMPLE is NULL"<<std::endl; return; } pShader->Set_Matrix(m_mWorld, CShader::E_ATTRIBUTE_MATRIX_WORLD); pShader->Set_Matrix(pCamera->Get_Projection(), CShader::E_ATTRIBUTE_MATRIX_PROJECTION); pShader->Set_Matrix(pCamera->Get_View(), CShader::E_ATTRIBUTE_MATRIX_VIEW); pShader->Set_CustomVector2(m_vTexcoordOffset, "EXT_TexcoordOffset"); pShader->Set_CustomVector2(m_vTexcoordRepeat, "EXT_TexcoordRepeat"); for(unsigned int i = 0; i < k_TEXTURES_MAX_COUNT; ++i) { CTexture* pTexture = m_pMaterial->Get_Texture(i); if(pTexture == NULL) { continue; } pShader->Set_Texture(pTexture->Get_Handle(), static_cast<CShader::E_TEXTURE_SLOT>(i)); } } break; case CShader::E_RENDER_MODE_REFLECTION: { } break; case CShader::E_RENDER_MODE_REFRACTION: { } break; case CShader::E_RENDER_MODE_SCREEN_NORMAL_MAP: { if(pShader == NULL) { std::cout<<"[CCrossBoxEffect::Render] Shader MODE_SCREEN_NORMAL_MAP is NULL"<<std::endl; return; } pShader->Enable(); pShader->Set_Matrix(m_mWorld, CShader::E_ATTRIBUTE_MATRIX_WORLD); pShader->Set_Matrix(pCamera->Get_Projection(), CShader::E_ATTRIBUTE_MATRIX_PROJECTION); pShader->Set_Matrix(pCamera->Get_View(), CShader::E_ATTRIBUTE_MATRIX_VIEW); for(unsigned int i = 0; i < k_TEXTURES_MAX_COUNT; ++i) { CTexture* pTexture = m_pMaterial->Get_Texture(i); if(pTexture == NULL) { continue; } pShader->Set_Texture(pTexture->Get_Handle(), static_cast<CShader::E_TEXTURE_SLOT>(i)); } } break; default: break; } m_pMesh->Get_VertexBufferRef()->Enable(_eMode); m_pMesh->Get_IndexBufferRef()->Enable(); unsigned int iNumIndexes = m_pMesh->Get_IndexBufferRef()->Get_NumWorkingIndexes(); glDrawElements(GL_TRIANGLES, iNumIndexes, GL_UNSIGNED_SHORT, (void*) m_pMesh->Get_IndexBufferRef()->Get_SourceDataFromVRAM()); m_pMesh->Get_IndexBufferRef()->Disable(); m_pMesh->Get_VertexBufferRef()->Disable(_eMode); pShader->Disable(); }
void CSkyBox::Render(CShader::E_RENDER_MODE _eMode) { if(!m_pMaterial->Check_RenderMode(_eMode)) { std::cout<<"[CSkyBox::Render] Render mode incorrect"<<std::endl; return; } INode::Render(_eMode); ICamera* pCamera = CSceneMgr::Instance()->Get_Camera(); CShader* pShader = m_pMaterial->Get_Shader(_eMode); m_pMaterial->Commit(_eMode); switch (_eMode) { case CShader::E_RENDER_MODE_SIMPLE: { if(pShader == NULL) { std::cout<<"[CModel::Render] Shader MODE_SIMPLE is NULL"<<std::endl; return; } pShader->Set_Matrix(m_mWorld, CShader::E_ATTRIBUTE_MATRIX_WORLD); pShader->Set_Matrix(pCamera->Get_Projection(), CShader::E_ATTRIBUTE_MATRIX_PROJECTION); pShader->Set_Matrix(pCamera->Get_View(), CShader::E_ATTRIBUTE_MATRIX_VIEW); for(unsigned int i = 0; i < k_TEXTURES_MAX_COUNT; ++i) { CTexture* pTexture = m_pMaterial->Get_Texture(i); if(pTexture == NULL) { continue; } pShader->Set_Texture(pTexture->Get_Handle(), static_cast<CShader::E_TEXTURE_SLOT>(i)); } } break; case CShader::E_RENDER_MODE_REFLECTION: { if(pShader == NULL) { std::cout<<"[CModel::Render] Shader MODE_SIMPLE is NULL"<<std::endl; return; } pShader->Set_Matrix(m_mWorld, CShader::E_ATTRIBUTE_MATRIX_WORLD); pShader->Set_Matrix(pCamera->Get_Projection(), CShader::E_ATTRIBUTE_MATRIX_PROJECTION); pShader->Set_Matrix(pCamera->Get_View(), CShader::E_ATTRIBUTE_MATRIX_VIEW); for(unsigned int i = 0; i < k_TEXTURES_MAX_COUNT; ++i) { CTexture* pTexture = m_pMaterial->Get_Texture(i); if(pTexture == NULL) { continue; } pShader->Set_Texture(pTexture->Get_Handle(), static_cast<CShader::E_TEXTURE_SLOT>(i)); } } break; case CShader::E_RENDER_MODE_REFRACTION: { } break; default: break; } m_pMesh->Get_VertexBufferRef()->Enable(_eMode); m_pMesh->Get_IndexBufferRef()->Enable(); glDrawElements(GL_TRIANGLES, m_pMesh->Get_NumIndexes(), GL_UNSIGNED_SHORT, (void*) m_pMesh->Get_IndexBufferRef()->Get_SourceDataFromVRAM()); m_pMesh->Get_IndexBufferRef()->Disable(); m_pMesh->Get_VertexBufferRef()->Disable(_eMode); }