Example #1
0
        public void Load(ContentManager contentManager)
        {
            _contentManager = new ThreadSafeContentManager(contentManager.ServiceProvider)
            {
                RootDirectory = "Content"
            };

            rollTexture2D = _contentManager.Load <Texture2D>("Graphical User Interface/ring");
            skyboxCube    = _contentManager.Load <TextureCube>("ShaderModules/Skybox/skyboxCubemap");
            fresnelMap    = _contentManager.Load <Texture>("ShaderModules/AnimatedModelShader/fresnel2");

            model = _contentManager.Load <Model>("ShaderModules/Skybox/isosphere" /*"ShaderModules/AnimatedModelShader/cube"*/);

            _skyboxRenderModule = new SkyboxRenderModule();
            _skyboxRenderModule.Load(_contentManager, "ShaderModules/Skybox/skybox", "ShaderModules/Skybox/isosphere");
            _skyboxRenderModule.SetSkybox(skyboxCube);

            _animatedModelShader = new AnimatedModelShader();
            _animatedModelShader.Load(_contentManager, "ShaderModules/AnimatedModelShader/AnimatedModelShader");
            _animatedModelShader.EnvironmentMap = skyboxCube;
            _animatedModelShader.FresnelMap     = fresnelMap;

            int test  = 1024;
            int level = 7;

            int outp = test >> level;


            _ambientOcclusionShader = new AmbientOcclusionShader();
            _ambientOcclusionShader.Load(_contentManager, "ShaderModules/AmbientOcclusionShader/AmbientOcclusionShader");
        }
Example #2
0
        public static void Model(AnimatedModelShader shaderProgram, LoadedModel loadedModel, Camera camera, Vector <float> lightDir)
        {
            shaderProgram.start();

            OpenTK.Matrix4 perspective = OpenTK.Matrix4.CreatePerspectiveFieldOfView(
                (float).5f,
                (float)600 / (float)800,
                (float)1,
                (float)65);

            Matrix <float> projection = new Matrix <float>(new float[, ] {
                { perspective.M11, perspective.M12, perspective.M13, perspective.M14 },
                { perspective.M21, perspective.M22, perspective.M23, perspective.M24 },
                { perspective.M31, perspective.M32, perspective.M33, perspective.M34 },
                { perspective.M41, perspective.M42, perspective.M43, perspective.M44 },
            });

            Matrix <float> projectionView = projection * camera.GetViewMatrix();

            //projectionView = new Matrix<float>(new float[,] {
            //    { 1, 0, 0, 0 },
            //    { 0, 1, 0, 0 },
            //    { 0, 0, 1, -100 },
            //    { 0, 0, 0, 1 },
            //});

            GL.BindVertexArray(loadedModel.LoadedVertexArrayObject._id);
            GL.EnableVertexAttribArray(0);
            GL.EnableVertexAttribArray(1);
            GL.EnableVertexAttribArray(2);
            GL.EnableVertexAttribArray(3);
            GL.EnableVertexAttribArray(4);

            Matrix <float> projectionViewMatrix = new Matrix <float>(new float[, ]
            {
                { 0.8033333f, 0.0f, 0.0f, 0.0f, },
                { 0.0f, 1.4064512f, -0.2479953f, -7.0322556f, },
                { 0.0f, -0.17382191f, -0.98579305f, 10.478915f, },
                { 0.0f, -0.17364818f, -0.9848077f, 10.868241f },
            }).Transpose();


            shaderProgram.projectionViewMatrix.loadMatrix(projectionViewMatrix);
            shaderProgram.lightDirection.loadVec3(lightDir);

            //OpenGlUtils.enableDepthTesting(true);

            GL.ActiveTexture(TextureUnit.Texture0);
            GL.BindTexture(TextureTarget.Texture2D, loadedModel.LoadedTextureId);

            //foreach (LoadedModel.VertexBufferObject vbo in loadedModel.LoadedVertexArrayObject._dataVbos)
            //{
            //    GL.EnableVertexAttribArray(vbo.Id);
            //}

            shaderProgram.jointTransforms.loadMatrixArray(loadedModel.CalculateAnimatedJointMatrices());
            GL.DrawElements(BeginMode.Triangles, loadedModel.LoadedVertexArrayObject.IndexCount, DrawElementsType.UnsignedInt, 0);

            //GL.BindVertexArray(loadedModel.LoadedVertexArrayObject._id);
            //GL.DisableVertexAttribArray(0);
            //GL.DisableVertexAttribArray(1);
            //GL.DisableVertexAttribArray(2);
            //GL.DisableVertexAttribArray(3);
            //GL.DisableVertexAttribArray(4);

            //foreach (LoadedModel.VertexBufferObject vbo in loadedModel.LoadedVertexArrayObject._dataVbos)
            //{
            //    GL.EnableVertexAttribArray(vbo.Id);
            //}

            GL.BindVertexArray(0);
            shaderProgram.stop();
        }
Example #3
0
        /// <summary>
        /// Draw the model
        /// </summary>
        public void Draw(Matrix world, Matrix view, Matrix viewProjection, Vector3 cameraPosition, AnimatedModelShader _skinnedShader, AnimatedModelShader.EffectPasses pass, bool computeTransform)
        {
            if (model == null)
            {
                return;
            }

            //
            // Compute all of the bone absolute transforms
            //
            if (modelExtra != null && hasSkinnedVertexType && hasNormals && hasTexCoords)
            {
                if (computeTransform)
                {
                    for (int i = 0; i < bones.Count; i++)
                    {
                        Bone bone = bones[i];
                        bone.ComputeAbsoluteTransform();

                        boneTransforms[i] = bone.AbsoluteTransform;
                    }

                    for (int s = 0; s < modelExtra.Skeleton.Count; s++)
                    {
                        Bone bone = bones[modelExtra.Skeleton[s]];
                        skeleton[s] = bone.SkinTransform * bone.AbsoluteTransform;
                    }
                }

                if (bones.Count > 1)
                {
                    switch (pass)
                    {
                    case AnimatedModelShader.EffectPasses.Unskinned:
                        pass = AnimatedModelShader.EffectPasses.Skinned;
                        break;

                    case AnimatedModelShader.EffectPasses.UnskinnedNormalMapped:
                        pass = AnimatedModelShader.EffectPasses.SkinnedNormalMapped;
                        break;

                    case AnimatedModelShader.EffectPasses.UnskinnedDepth:
                        pass = AnimatedModelShader.EffectPasses.SkinnedDepth;
                        break;
                    }
                }
                _skinnedShader.DrawMesh(model, world, view, viewProjection, cameraPosition, pass, skeleton);
            }
            else
            {
                if (!hasNormals)
                {
                    pass = AnimatedModelShader.EffectPasses.NoNormalUnskinned;
                }

                if (!hasTexCoords)
                {
                    pass = AnimatedModelShader.EffectPasses.NoNormalNoTexUnskinned;
                }

                _skinnedShader.DrawMesh(model, world, view, viewProjection, cameraPosition, pass, null);
            }

            //// Draw the model.
            //foreach (ModelMesh modelMesh in model.Meshes)
            //{
            //    foreach (Effect effect in modelMesh.Effects)
            //    {
            //        if (effect is BasicEffect)
            //        {
            //            BasicEffect beffect = effect as BasicEffect;
            //            beffect.World = boneTransforms[modelMesh.ParentBone.Index] * world;
            //            beffect.View = camera.View;
            //            beffect.Projection = camera.Projection;
            //            beffect.EnableDefaultLighting();
            //            beffect.PreferPerPixelLighting = true;
            //        }

            //        if (effect is SkinnedEffect)
            //        {
            //            SkinnedEffect seffect = effect as SkinnedEffect;
            //            seffect.World = boneTransforms[modelMesh.ParentBone.Index] * world;
            //            seffect.View = camera.View;
            //            seffect.Projection = camera.Projection;
            //            seffect.EnableDefaultLighting();
            //            seffect.PreferPerPixelLighting = true;
            //            seffect.SetBoneTransforms(skeleton);
            //        }
            //    }

            //    modelMesh.Draw();
            //}
        }