Beispiel #1
0
        /// <summary>
        /// IRenderer interface method
        /// Renders a model in a viewport
        /// </summary>
        public bool RenderModel(RMModel model, Rhino.DocObjects.ViewportInfo viewport)
        {
            if (null == model || null == viewport || !model.IsReadyForRendering)
                return false;

            Model = model;

              CheckGLError ("intro call"); //HACK: necessary on some Android GPUs (don't delete this check)

            viewport.SetFrustumNearFar (model.BBox);

            // Disable Blending and set the depth function
            GL.DepthFunc (DepthFunction.Gequal);
            GL.Disable (EnableCap.Blend);

            // Get the shader...
            ActiveShader = FastDrawing ? GetShader ("PerVertexLighting") : GetShader ("PerPixelLighting");

            // Render calls...
            if (model != null) {

                // First, render all opaque objects that are not instances
                foreach (var obj in model.DisplayMeshes) {
                    if (obj != null)
                        RenderObject (obj, viewport, false);
                }

                // Second, render all opaque objects that are instances
                foreach (var obj in model.DisplayInstanceMeshes) {
                    if (obj != null)
                        RenderObject (obj, viewport, true);
                }

                // Third, we're done drawing our instances, so set the ModelViewMatrix's XForm back to the identity matrix.
                ActiveShader.SetModelViewMatrix (Rhino.Geometry.Transform.Identity);

                // Fourth, render all transparent meshes...
                RenderTransparentObjects (model);
            }

            // Disable the shader
            ActiveShader.Disable ();

            return true;
        }