Esempio n. 1
0
    public void Draw(RenderLoop loop, Camera camera)
    {
        if (camera.clearFlags != CameraClearFlags.Skybox)
        {
            return;
        }

        var mat = RenderSettings.skybox;

        if (mat == null)
        {
            return;
        }

        var cmd = new CommandBuffer {
            name = "Skybox"
        };

        var looksLikeSixSidedShader = true;

        looksLikeSixSidedShader &= (mat.passCount == 6); // should have six passes
        //looksLikeSixSidedShader &= !mat.GetShader()->GetShaderLabShader()->HasLightingPasses();

        if (looksLikeSixSidedShader)
        {
            Debug.LogWarning("Six sided skybox not yet supported.");
        }
        else
        {
            if (mesh == null)
            {
                CreateMesh();
            }

            var dist = camera.farClipPlane * 10.0f;

            var world = Matrix4x4.TRS(camera.transform.position, Quaternion.identity, new Vector3(dist, dist, dist));

            var skyboxProj = SkyboxHelper.GetProjectionMatrix(camera);
            cmd.SetProjectionAndViewMatrices(skyboxProj, camera.worldToCameraMatrix);
            cmd.DrawMesh(mesh, world, mat);

            cmd.SetProjectionAndViewMatrices(camera.projectionMatrix, camera.worldToCameraMatrix);
        }

        loop.ExecuteCommandBuffer(cmd);
        cmd.Dispose();
    }