public virtual void DrawAsLight() { if (Mat != null && Mat.Shader != null) { IGLProgram shader = Mat.Shader; shader.Use(); Matrix4 proj = Projection; Matrix4 view = View; Matrix4 m = Model; Matrix4 norm = Matrix4.Invert(m); norm.Transpose(); shader.SetUniformMatrix4("projectionMatrix", ref proj); shader.SetUniformMatrix4("viewMatrix", ref view); shader.SetUniformMatrix4("modelMatrix", ref m); shader.SetUniformMatrix4("normalMatrix", ref norm); Vector2 tiling = Tiling; Vector4 lightColor = new Vector4(LightColor * LightPower, 1); shader.SetUniform2("tiling", ref tiling); shader.SetUniform4F("color", ref lightColor); ///draw vao.Bind(); IGL.Primary.DrawElements((int)BeginMode.Triangles, indicesCount, (int)DrawElementsType.UnsignedInt, 0); GLVertexArray.Unbind(); } }
public override void Draw() { if (shader != null && renderer != null) { shader.Use(); Matrix4 view = View; Matrix4 proj = Projection; Matrix4 model = Model; shader.SetUniformMatrix4("modelMatrix", ref model); shader.SetUniformMatrix4("viewMatrix", ref view); shader.SetUniformMatrix4("projectionMatrix", ref proj); IGL.Primary.PolygonMode((int)MaterialFace.FrontAndBack, (int)PolygonMode.Line); renderer.Bind(); IGL.Primary.DrawElements((int)BeginMode.Triangles, indicesCount, (int)DrawElementsType.UnsignedInt, 0); GLVertexArray.Unbind(); IGL.Primary.PolygonMode((int)MaterialFace.FrontAndBack, (int)PolygonMode.Fill); } }
public void Bind(GLTextuer2D tex) { if (shader != null) { Matrix4 model = Model; Matrix4 view = View; Matrix4 proj = Projection; shader.Use(); shader.SetUniformMatrix4("modelMatrix", ref model); shader.SetUniformMatrix4("viewMatrix", ref view); shader.SetUniformMatrix4("projectionMatrix", ref proj); shader.SetUniform("MainTex", 0); shader.SetUniform("luminosity", Luminosity); shader.SetUniform("flipY", FlipY); IGL.Primary.ActiveTexture((int)TextureUnit.Texture0); if (tex != null) { tex.Bind(); } } }
public virtual void DrawFull() { if (Mat != null && Mat.Shader != null) { IGLProgram shader = Mat.Shader; IGL.Primary.ActiveTexture((int)TextureUnit.Texture0); if (Mat.Albedo != null) { Mat.Albedo.Bind(); } IGL.Primary.ActiveTexture((int)TextureUnit.Texture1); if (Mat.Metallic != null) { Mat.Metallic.Bind(); } IGL.Primary.ActiveTexture((int)TextureUnit.Texture2); if (Mat.Roughness != null) { Mat.Roughness.Bind(); } IGL.Primary.ActiveTexture((int)TextureUnit.Texture3); if (Mat.Occlusion != null) { Mat.Occlusion.Bind(); } IGL.Primary.ActiveTexture((int)TextureUnit.Texture4); if (Mat.Normal != null) { Mat.Normal.Bind(); } IGL.Primary.ActiveTexture((int)TextureUnit.Texture5); if (Mat.Height != null) { Mat.Height.Bind(); } IGL.Primary.ActiveTexture((int)TextureUnit.Texture6); PBRMaterial.BRDFLut.Bind(); IGL.Primary.ActiveTexture((int)TextureUnit.Texture7); if (IrradianceMap != null) { IrradianceMap.Bind(); } IGL.Primary.ActiveTexture((int)TextureUnit.Texture8); if (PrefilterMap != null) { PrefilterMap.Bind(); } IGL.Primary.ActiveTexture((int)TextureUnit.Texture9); if (Mat.Thickness != null) { Mat.Thickness.Bind(); } IGL.Primary.ActiveTexture((int)TextureUnit.Texture10); if (Mat.Emission != null) { Mat.Emission.Bind(); } //use shader shader.Use(); //set texture bind points shader.SetUniform("albedo", 0); shader.SetUniform("metallicMap", 1); shader.SetUniform("roughnessMap", 2); shader.SetUniform("occlusionMap", 3); shader.SetUniform("normalMap", 4); shader.SetUniform("heightMap", 5); shader.SetUniform("brdfLUT", 6); shader.SetUniform("irradianceMap", 7); shader.SetUniform("prefilterMap", 8); shader.SetUniform("thicknessMap", 9); shader.SetUniform("emissionMap", 10); Vector3 lpos = LightPosition; Vector3 lc = LightColor; Vector3 cam = CameraPosition; //set camera and light stuff shader.SetUniform3("cameraPosition", ref cam); shader.SetUniform3("lightPosition", ref lpos); shader.SetUniform3("lightColor", ref lc); shader.SetUniform("lightPower", LightPower); //setup MVP and N matrices Matrix4 proj = Projection; Matrix4 view = View; Matrix4 m = Model; Matrix4 norm = Matrix4.Invert(m); norm.Transpose(); shader.SetUniformMatrix4("projectionMatrix", ref proj); shader.SetUniformMatrix4("viewMatrix", ref view); shader.SetUniformMatrix4("modelMatrix", ref m); shader.SetUniformMatrix4("normalMatrix", ref norm); shader.SetUniform("far", Far); shader.SetUniform("near", Near); shader.SetUniform("heightScale", Mat.HeightScale); shader.SetUniform("refraction", Mat.IOR); ///SSS Related shader.SetUniform("SSS_Distortion", Mat.SSSDistortion); shader.SetUniform("SSS_Ambient", Mat.SSSAmbient); shader.SetUniform("SSS_Power", Mat.SSSPower); if (Mat.ClipHeight) { shader.SetUniform("occlusionClipBias", Mat.ClipHeightBias); } else { shader.SetUniform("occlusionClipBias", -1.0f); } shader.SetUniform("displace", Mat.UseDisplacement); Vector2 tiling = Tiling; shader.SetUniform2("tiling", ref tiling); ///draw vao.Bind(); if (Mat.UseDisplacement) { IGL.Primary.DrawElements((int)BeginMode.Patches, indicesCount, (int)DrawElementsType.UnsignedInt, 0); } else { IGL.Primary.DrawElements((int)BeginMode.Triangles, indicesCount, (int)DrawElementsType.UnsignedInt, 0); } GLVertexArray.Unbind(); GLTextuer2D.Unbind(); } }