示例#1
0
        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);
            }
        }
示例#2
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);
            }
        }
示例#3
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();
        }