private void Render() { // Clear m_Rasterizer.Clear(ClearMask.COLOR | ClearMask.DEPTH); // View m_Rasterizer.SetView(m_Camera.transform.worldToLocalMatrix); // Projection if (m_Camera.orthographic) { Matrix4x4 orthographicProjection = m_Rasterizer.Orthographic(m_Camera.nearClipPlane, m_Camera.farClipPlane, m_Camera.orthographicSize * 2, m_Camera.aspect); m_Rasterizer.SetProjection(orthographicProjection); } else { Matrix4x4 perspectiveProjection = m_Rasterizer.Perspective(m_Camera.nearClipPlane, m_Camera.farClipPlane, m_Camera.fieldOfView, m_Camera.aspect); m_Rasterizer.SetProjection(perspectiveProjection); } Global.ambientColor = new Color(0.212f, 0.227f, 0.259f); // 使用Blinn Phong Shader m_Rasterizer.SetShader(m_BlinnPhongShader); m_BlinnPhongShader.viewPos = m_Camera.transform.position; foreach (var model in m_Models) { // Blinn Phong光照模型需要的参数 m_BlinnPhongShader.albedoMap = model.modelProperty.albedo; m_BlinnPhongShader.normalMap = model.modelProperty.normal; m_BlinnPhongShader.ka = model.modelProperty.ka; m_BlinnPhongShader.kd = model.modelProperty.kd; m_BlinnPhongShader.ks = model.modelProperty.ks; m_Rasterizer.BindVertexBuffer(model.vertexBufferHandle); m_Rasterizer.BindIndexBuffer(model.indexBufferHandle); m_Rasterizer.SetModel(model.mesh.transform.localToWorldMatrix); m_Rasterizer.DrawElements(PrimitiveType.TRIANGLES); } }