bool ghosts::render() { glm::vec2 window_size(getWindowSize()); glm::mat4 projection_matrix = glm::perspectiveFov(glm::pi<float>() * 0.25f, window_size.x, window_size.y, 0.1f, 100.0f); graphics::renderer::clear(window_size, glm::vec4(.95f)); // light: direction light.xyz, intensity light.w //glm::vec4 light_vec(-1.f, -2.f, 0.f, 100.f); glm::vec4 light_vec(-1.f, -1.f, 0.f, 100.f); // simulate for (auto model : m_Models) { model->simulate(0.016f); } // render for (auto model : m_Models) { model->render(projection_matrix, view(), light_vec); } return true; }
//------------------------------------- // Bullet() //------------------------------------- void Bullet::Draw() { if (!use_) { return; } DirectX9Holder::device_->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE); DirectX9Holder::device_->SetRenderState(D3DRS_ALPHAREF, 0x01); DirectX9Holder::device_->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL); DirectX9Holder::device_->SetTransform(D3DTS_WORLD, &world_); DirectX9Holder::device_->SetVertexDeclaration( DirectX9Holder::vertex_declaration_x_); D3DXMATRIX view, projection, wvp; DirectX9Holder::device_->GetTransform(D3DTS_VIEW, &view); DirectX9Holder::device_->GetTransform(D3DTS_PROJECTION, &projection); wvp = world_ * view * projection; D3DXVECTOR3 light_vec(0.5f, -0.5f, 0.5f); D3DXVec3Normalize(&light_vec, &light_vec); D3DXCOLOR light_diffuse(1.0f, 1.0f, 1.0f, 1.0f); shader_->vertex_table()->SetMatrix( DirectX9Holder::device_, "matrix_wvp", &wvp); shader_->vertex_table()->SetMatrix( DirectX9Holder::device_, "matrix_w", &world_); shader_->vertex_table()->SetFloatArray( DirectX9Holder::device_, "light_direction", reinterpret_cast<float*>(&light_vec), 3); shader_->vertex_table()->SetFloatArray( DirectX9Holder::device_, "light_diffuse", reinterpret_cast<float*>(&light_diffuse), 4); DirectX9Holder::device_->SetTexture( shader_->pixel_table()->GetSamplerIndex("texture_0"), texture_); DirectX9Holder::device_->SetVertexShader(shader_->vertex_shader()); DirectX9Holder::device_->SetPixelShader(shader_->pixel_shader()); D3DMATERIAL9 default_material; D3DXMATERIAL *material; DirectX9Holder::device_->GetMaterial(&default_material); material = (D3DXMATERIAL*)material_buffer_->GetBufferPointer(); for (DWORD i = 0; i < material_count_; i++) { mesh_->DrawSubset(i); } DirectX9Holder::device_->SetMaterial(&default_material); DirectX9Holder::device_->SetVertexShader(NULL); DirectX9Holder::device_->SetPixelShader(NULL); DirectX9Holder::device_->SetTexture(0, NULL); DirectX9Holder::device_->SetRenderState(D3DRS_ALPHATESTENABLE, FALSE); }