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(); }
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(); }