/// <summary> /// Render single object pass<para/> /// Отрисовка одного прохода объекта /// </summary> /// <param name="transparentPass">True if pass is transparent<para/>True если проход прозрачный</param> public override void Render(bool transparentPass) { // Prepare rendering matrix // Установка матрицы рендера PrepareMatrix(); // Prepare shader // Установка шейдера StaticShader.Shader.Bind(); CameraManager.Bind3DUniforms(StaticShader.ProjectionMatrix, StaticShader.ModelViewMatrix); GL.UniformMatrix4(StaticShader.ObjectMatrix, false, ref completeMatrix); GL.Uniform1(StaticShader.CameraRange, CameraManager.Range()); GL.Uniform1(StaticShader.FogRange, Renderer.SkyState.FogDistance); GL.Uniform3(StaticShader.FogColor, Renderer.SkyState.SkyBottom); // Rendering surfaces // Отрисовка поверхностей if (Fading) { if (transparentPass) { SubMesh.Render(this, Textures, transparentPass, true); } } else { SubMesh.Render(this, Textures, transparentPass); } }
/// <summary> /// Render single object pass<para/> /// Отрисовка одного прохода объекта /// </summary> /// <param name="transparentPass">True if pass is transparent<para/>True если проход прозрачный</param> public override void Render(bool transparentPass) { // Prepare rendering matrix // Установка матрицы рендера PrepareMatrix(); // Recalculating bones // Пересчитываем кости Matrix4[] bones = new Matrix4[64]; for (int i = 0; i < bones.Length; i++) { bones[i] = Matrix4.Identity; } //System.Diagnostics.Debug.WriteLine(">>>>>>>>>>>>>>> ANIM"); //System.Diagnostics.Debug.WriteLine(">>> " + f.Name + " => " + f.BoneID); BuildMatrices(SubMesh.ParentModel.Children, ref bones); // Prepare shader // Установка шейдера SkinnedShader.Shader.Bind(); CameraManager.Bind3DUniforms(SkinnedShader.ProjectionMatrix, SkinnedShader.ModelViewMatrix); GL.UniformMatrix4(SkinnedShader.ObjectMatrix, false, ref completeMatrix); //GL.Uniform1(StaticShader.CameraRange, CameraManager.Range()); //GL.Uniform1(StaticShader.FogRange, Renderer.SkyState.FogDistance); //GL.Uniform3(StaticShader.FogColor, Renderer.SkyState.SkyBottom); float[] matrixData = new float[bones.Length * 16]; for (int i = 0; i < bones.Length; i++) { matrixData[i * 16 + 00] = bones[i][0, 0]; matrixData[i * 16 + 01] = bones[i][0, 1]; matrixData[i * 16 + 02] = bones[i][0, 2]; matrixData[i * 16 + 03] = bones[i][0, 3]; matrixData[i * 16 + 04] = bones[i][1, 0]; matrixData[i * 16 + 05] = bones[i][1, 1]; matrixData[i * 16 + 06] = bones[i][1, 2]; matrixData[i * 16 + 07] = bones[i][1, 3]; matrixData[i * 16 + 08] = bones[i][2, 0]; matrixData[i * 16 + 09] = bones[i][2, 1]; matrixData[i * 16 + 10] = bones[i][2, 2]; matrixData[i * 16 + 11] = bones[i][2, 3]; matrixData[i * 16 + 12] = bones[i][3, 0]; matrixData[i * 16 + 13] = bones[i][3, 1]; matrixData[i * 16 + 14] = bones[i][3, 2]; matrixData[i * 16 + 15] = bones[i][3, 3]; } GL.UniformMatrix4(SkinnedShader.BoneMatrices, 64, false, matrixData); //System.Diagnostics.Debugger.Break(); // Rendering surfaces // Отрисовка поверхностей SubMesh.Render(this, Textures, transparentPass); }