public void Render(Transformation3D camera) { GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); var cam = camera.CalcLocalToWorldColumnMajorMatrix(); plane.Draw(cam); visualSmoke.Render(cam); visualWaterfall.Render(cam); visualExplosion.Render(cam); }
public void Render(IEnumerable <IBody> bodies, float time, Transformation3D camera) { GL.Enable(EnableCap.DepthTest); GL.Enable(EnableCap.Blend); GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha); if (shaderProgram is null) { return; } var instancePositions = new List <Vector3>(); var instanceScale = new List <float>(); foreach (var body in bodies) { instancePositions.Add(body.Location); instanceScale.Add((float)Math.Pow(body.Mass, 0.33f)); } geometryBody.SetAttribute(shaderProgram.GetResourceLocation(ShaderResourceType.Attribute, "instancePosition"), instancePositions.ToArray(), VertexAttribPointerType.Float, 3, true); geometryBody.SetAttribute(shaderProgram.GetResourceLocation(ShaderResourceType.Attribute, "instanceScale"), instanceScale.ToArray(), VertexAttribPointerType.Float, 1, true); GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); shaderProgram.Activate(); shaderProgram.Uniform("time", time); shaderProgram.Uniform("camera", camera.CalcLocalToWorldColumnMajorMatrix()); geometryBody.Draw(instancePositions.Count); shaderProgram.Deactivate(); floorShaderProgram.Activate(); floorShaderProgram.Uniform("time", time); floorShaderProgram.Uniform("floorColor", new Vector4(0, .5f, .5f, 1f)); floorShaderProgram.Uniform("camera", camera.CalcLocalToWorldColumnMajorMatrix()); floor.Draw(); floorShaderProgram.Uniform("floorColor", new Vector4(0, 0, 1, 0.5f)); waterCube.Draw(); floorShaderProgram.Deactivate(); GL.Disable(EnableCap.Blend); GL.Disable(EnableCap.DepthTest); }
private void DrawObject(VAO geom, ITexture envMap, ITexture materialTex, Transformation3D camera, Vector3 cameraPosition) { shaderProgram.Activate(); GL.ActiveTexture(TextureUnit.Texture0 + 0); envMap.Activate(); shaderProgram.Uniform("envMap", 0); GL.ActiveTexture(TextureUnit.Texture0 + 1); materialTex.Activate(); shaderProgram.Uniform("materialTex", 1); shaderProgram.Uniform("camera", camera.CalcLocalToWorldColumnMajorMatrix()); shaderProgram.Uniform("cameraPosition", cameraPosition); geom.Draw(); GL.ActiveTexture(TextureUnit.Texture0 + 0); envMap.Deactivate(); GL.ActiveTexture(TextureUnit.Texture0 + 1); materialTex.Deactivate(); shaderProgram.Deactivate(); }