/*************************************************************//** * * @brief 描画処理を行う * @param なし * @return なし * ****************************************************************/ void C_SpriteCreater::Draw() { // 頂点の書き換え pPointDatas_->RewriteVertices(vertices_.data(), drawSpriteCount_); // シェーダーの使用開始 pGlslObject_->Begin(); // サブルーチンを設定 pGlslObject_->BindActiveSubroutine(subroutineIndices_[cameraType_], Shader::GLSL::Type::s_GEOMETRY); // ユニフォーム変数を設定 SetUniformVariable(); // テクスチャマネージャーとOpenGLマネージャーを取得 auto pTextureManager = Texture::C_TextureManager::s_GetInstance(); auto pOpenGlManager = OpenGL::C_OpenGlManager::s_GetInstance(); // ブレンドを有効化し、ブレンドに使用する関数を設定 pOpenGlManager->EnableBlend(true); pOpenGlManager->SetBlendFunction(sourceFactor_, destinationFactor_); // カリングを無効化 pOpenGlManager->EnableCulling(false); // 深度のマスクを有効化 pOpenGlManager->EnableDepthMask(true); // アクティブなテクスチャユニットを設定し、テクスチャをバインド pTextureManager->SetActiveUnit(Fixed::Texture::s_UNIT_NUMBER); pTextureManager->Bind(Texture::Type::s_2D, pTextureData_->handle_); // スプライトを描画 pOpenGlManager->DrawPrimitive(OpenGL::Primitive::s_POINT, pPointDatas_->GetVertexArrayObjectHandle(), drawSpriteCount_); // 深度のマスクを無効化 pOpenGlManager->EnableDepthMask(false); // カリングを有効化 pOpenGlManager->EnableCulling(true); // ブレンドを無効化 pOpenGlManager->EnableBlend(false); // テクスチャをアンバインド pTextureManager->Unbind(Texture::Type::s_2D); // シェーダーの使用終了 pGlslObject_->End(); drawSpriteCount_ = 0; }
void TerrainRenderer::Draw(const std::vector<Terrain*>& terrains, Vector4 clipPlane) { EnableCulling(true); shader->Bind(); shader->SetUniformMatrix4fv("gCamera", camera->GetTransform()->GetMatrix()); shader->SetUniform3f("eyeWorldPosition", camera->GetTransform()->GetPosition()); shader->SetUniform4f("clipPlane", clipPlane); for (unsigned int i = 0; i < terrains.size(); ++i) { shader->SetUniformMatrix4fv("gWorld", terrains[i]->GetWorldMatrix()); RawModel* model = terrains[i]->GetTexturedModel()->GetRawModel(); Texture* texture = terrains[i]->GetTexturedModel()->GetTexture(); texture->Bind(); model->GetVertexArray()->Bind(); model->GetIndexBuffer()->Bind(); glDrawElements(GL_TRIANGLES, model->GetIndexBuffer()->GetCount(), GL_UNSIGNED_INT, 0); model->GetIndexBuffer()->Unbind(); model->GetVertexArray()->Unbind(); texture->Unbind(); } shader->Unbind(); }
void WaterRenderer::Draw(const std::vector<Water*>& waters) { EnableCulling(true); moveFactor += moveSpeed * TimeFrame::deltaTime; moveFactor = fmod(moveFactor, 1.0f); shader->Bind(); shader->SetUniformMatrix4fv("gCamera", camera->GetTransform()->GetMatrix()); shader->SetUniform3f("cameraPosition", camera->GetTransform()->GetPosition()); shader->SetUniform1f("moveFactor", moveFactor); waterFrameBuffer->GetReflectionTexture()->Bind(0); waterFrameBuffer->GetRefractionTexture()->Bind(1); dudvTexture->Bind(2); for (unsigned int i = 0; i < waters.size(); ++i) { shader->SetUniformMatrix4fv("gWorld", waters[i]->GetWorldMatrix()); RawModel* model = waters[i]->GetModel(); model->GetVertexArray()->Bind(); model->GetIndexBuffer()->Bind(); glDrawElements(GL_TRIANGLES, model->GetIndexBuffer()->GetCount(), GL_UNSIGNED_INT, 0); model->GetIndexBuffer()->Unbind(); model->GetVertexArray()->Unbind(); } waterFrameBuffer->GetReflectionTexture()->Unbind(); waterFrameBuffer->GetRefractionTexture()->Unbind(); dudvTexture->Unbind(); shader->Unbind(); }
void RenderSystem::v_Render() { BeginScene(); m_Matrix.view = m_Camera.GetViewMatrix(); DisableZbuffer(); DisableCulling(); m_Matrix.view._14 = 0.0f; m_Matrix.view._24 = 0.0f; m_Matrix.view._34 = 0.0f; m_Matrix.view._41 = 0.0f; m_Matrix.view._42 = 0.0f; m_Matrix.view._43 = 0.0f; XMMATRIX sphereWorld = XMMatrixIdentity(); XMStoreFloat4x4(&m_Matrix.model, XMMatrixTranspose(sphereWorld)); m_Skymap.Render(m_pD3D11DeviceContext, m_Matrix); EnableCulling(); EnableZbuffer(); m_Matrix.view = m_Camera.GetViewMatrix(); XMMATRIX gridModel = XMMatrixIdentity(); XMStoreFloat4x4(&m_Matrix.model, XMMatrixTranspose(gridModel)); m_Terrain.Render(m_pD3D11DeviceContext, m_Matrix); DrawInfo(); EndScene(); }