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"); }
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(); }
/// <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(); //} }