Exemplo n.º 1
0
    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);
        }
    }