Пример #1
0
        private void RenderGraphicsToScreen()
        {
            OpenGLUtil.UseFrameBuffer(0);     // make sure we are rendering to the screen
            GL.Viewport(0, 0, Width, Height); // set view prot to cover full window
            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

            mainProgram.UseProgram();

            // camera properties
            Matrix4 proj = Matrix4.CreatePerspectiveFieldOfView(Camera.VertFOV, Camera.AspectRatio, Camera.MinRange, Camera.MaxRange); // camera props
            Matrix4 view = Matrix4.LookAt(Camera.Pos.ToGLVector3(), Camera.LookAtPos.ToGLVector3(), Camera.UpDir.ToGLVector3());       // camera state

            mainProgram.SetCameraPosition(Camera.Pos.ToGLVector3());

            // light/shadow properties
            mainProgram.AddLights(openGLLights.ToArray());

            // material properties
            float   shininess     = 50.0f;
            Vector3 specularColor = (Color.White.ToGLVector3());

            mainProgram.SetMaterialProperties(specularColor, shininess);

            mainProgram.EnableAttributes();
            mainProgram.LoadBuffer(vertexBufferID);

            int startIndex = 0;

            foreach (IGraphicalBody body in Bodies)
            {
                // get the model matrix and send it
                Matrix4 scale       = Matrix4.Identity;
                Matrix4 rotation    = Matrix4.CreateFromQuaternion(body.Orientation.ToGLQuaternion());
                Matrix4 translation = Matrix4.CreateTranslation(body.Translation.ToGLVector3());
                Matrix4 model       = scale * rotation * translation;
                mainProgram.SetMVP(model, view, proj);
                mainProgram.SetShadowCasterMVPs(LightSources.Select((l, i) => model * depthViews[i] * depthProjs[i]).ToArray());

                int numVerts = body.Triangles.Length * 3;
                GL.DrawArrays(PrimitiveType.Triangles, startIndex, numVerts);
                startIndex += numVerts;
            }
            mainProgram.DisableAttributes();
        }
Пример #2
0
        private void RenderVR(Matrix4 viewProjMatrix, Vector3 camPos)
        {
            mainProgram.UseProgram();

            // camera properties
            mainProgram.SetCameraPosition(camPos);

            // light/shadow properties
            mainProgram.AddLights(openGLLights.ToArray());

            // material properties
            float   shininess     = 50.0f;
            Vector3 specularColor = (Color.White.ToGLVector3());

            mainProgram.SetMaterialProperties(specularColor, shininess);

            mainProgram.EnableAttributes();
            mainProgram.LoadBuffer(vertexBufferID);

            int startIndex = 0;

            foreach (IGraphicalBody body in Bodies)
            {
                // get the model matrix and send it
                Matrix4 scale       = Matrix4.Identity;
                Matrix4 rotation    = Matrix4.CreateFromQuaternion(body.Orientation.ToGLQuaternion());
                Matrix4 translation = Matrix4.CreateTranslation(body.Translation.ToGLVector3());
                Matrix4 model       = scale * rotation * translation;
                mainProgram.SetMVP(viewProjMatrix, model);
                mainProgram.SetShadowCasterMVPs(LightSources.Select((l, i) => model * depthViews[i] * depthProjs[i]).ToArray());

                int numVerts = body.Triangles.Length * 3;
                GL.DrawArrays(PrimitiveType.Triangles, startIndex, numVerts);
                startIndex += numVerts;
            }
            mainProgram.DisableAttributes();
        }