private void renderSceneObject(SceneObject so) { for (int i = 0; i < so.Model.Length; i++) { sp.use(); GL.Uniform3(sp.Uniforms["lightdir"], sunLightDir); GL.Uniform1(sp.Uniforms["lightstr"], 1f); GL.Uniform3(sp.Uniforms["slices"], slices); GL.Uniform4(sp.Uniforms["ambient"], new Vector4(0.1f, 0.1f, 0.1f, 1f)); Matrix4 m = so.ObjectMatrix; Matrix4 mvp = so.ObjectMatrix * view * projection; GL.UniformMatrix4(sp.Uniforms["modelViewProjection"], false, ref mvp); GL.UniformMatrix4(sp.Uniforms["model"], false, ref m); //GL.UniformMatrix4(sp.Uniforms["view"], false, ref view); //GL.UniformMatrix4(sp.Uniforms["projection"], false, ref projection); Matrix4 shadowMat0 = (m * depthView * depthProjection) * bias; GL.UniformMatrix4(sp.Uniforms["shadowMat0"], false, ref shadowMat0); //GL.UniformMatrix4(sp.Uniforms["dprojection"], false, ref depthProjection); GL.ActiveTexture(TextureUnit.Texture0); textures.get(so.Texture[i]).bind(); GL.Uniform1(sp.Uniforms["modelTexture"], 0); GL.ActiveTexture(TextureUnit.Texture1); GL.BindTexture(TextureTarget.Texture2DArray, depthTextureArray); GL.Uniform1(sp.Uniforms["shadowmap"], 1); models.get(so.Model[i]).draw(); GL.UseProgram(0); } }
private void renderSceneObjectDepth(SceneObject so, int slice) { for (int i = 0; i < so.Model.Length; i++) { depthShader.use(); GL.FramebufferTextureLayer(FramebufferTarget.Framebuffer, FramebufferAttachment.DepthAttachment, depthTextureArray, 0, slice); //Matrix4 mvp = (projection * view * so.ObjectMatrix); //GL.UniformMatrix4(depthShader.Uniforms["modelViewProjection"], false, ref mvp); Matrix4 m = so.ObjectMatrix; GL.UniformMatrix4(depthShader.Uniforms["model"], false, ref m); GL.UniformMatrix4(depthShader.Uniforms["view"], false, ref depthView); GL.UniformMatrix4(depthShader.Uniforms["projection"], false, ref depthProjection); GL.ActiveTexture(TextureUnit.Texture0); textures.get(so.Texture[i]).bind(); models.get(so.Model[i]).draw(); GL.UseProgram(0); } }
private void initObjects() { skyDome = new SceneObject(Vector3.Zero, Vector3.Zero, new Vector3(100, 100, 100), "sky", "sky"); motorcycle = new SceneObject(new Vector3(0, 0, 0.5f), new Vector3(0, MathHelper.Pi / 2, 0), new Vector3(0.25f, 0.25f, 0.25f), "motorcycle", "motorcycle"); wheel = new SceneObject(new Vector3(0, 0.5f, 0.5f), new Vector3(0, MathHelper.Pi / 2, 0), new Vector3(0.25f, 0.25f, 0.25f), "wheel", "motorcycle"); newObjects = new List<string[]>(); newObjects.Add(new string[] { "tree", "leaf", "tree1", "branchstar" }); streetSegments = new List<string[]>(); streetSegments.Add(new string[] { "street", "street" }); objects = new List<SceneObject>(); for (int i = 0; i < 100; i++) { addNewObject(i * 5); } for (int i = 0; i < 6; i++) { objects.Add(new SceneObject(new Vector3(2.15f, 0, -50 * i), new Vector3(0, -MathHelper.Pi / 2, 0), new Vector3(0.15f, 0.15f, 0.15f), "barke", "barke")); } street = new SceneObject(new Vector3(-1.5f, 0, 0), Vector3.Zero, new Vector3(3, 1, 1f), "street", "street"); landscape = new SceneObject(new Vector3(-1.5f, 0, 0), Vector3.Zero, new Vector3(3, 1, 1f), "landscape", "landscape"); grassData = new Vector3[5000]; for (int i = 0; i < grassData.Length; i++) { grassData[i] = new Vector3((float)r.NextDouble() * 50 + 2.5f, 0, (float)r.NextDouble() * -100); if (r.Next(2) == 1) grassData[i].X = -grassData[i].X - 3.1f; } sunLightDir.Normalize(); }