如何在XNA中隐藏多维数据集模型的某些面以供Voxel引擎优化?

时间:2012-01-28 01:13:07

标签: c# xna rendering voxel

您好我正在尝试制作类似于Minecraft的地形引擎。

我能够加载一个块。它非常滞后,当一次加载多个块时,它变得无法播放。

这是我的渲染代码:

public static void renderNormalBlock(GraphicsDevice g, Chunk chunk,Texture2D texture, int x, int y, int z)
    {
        float tileSize = 0.5F;
        Vector3 blockPosition = new Vector3(x / tileSize, y / tileSize, z / tileSize);
        Model blockModel = Main.defaultBlockModel;
        ModelMesh mesh = blockModel.Meshes[0];
        g.SamplerStates[0] = SamplerState.PointWrap;
        BasicEffect effect = (BasicEffect)mesh.Effects[0];
        effect.TextureEnabled = true;
        effect.Texture = texture;
        effect.View = Main.camera;
        effect.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45), g.DisplayMode.AspectRatio, 1, 128);
        effect.World = Matrix.CreateWorld(blockPosition, Vector3.Forward, Vector3.Up);
        mesh.Draw();
    }

你可以看到我没有使用for-each或for循环,因为它只是一个立方体;这不是必需的。

我做了一些研究,我发现最好的答案是我需要隐藏不可见的立方体面。所以说如果彼此相邻的是2个立方体,我不想在面之间渲染。

这是我陷入困境的地方,大多数人都在使用在XNA中绘制的立方体,而我正在使用模型。

我是XNA的新手,我不太了解手动绘制立方体所涉及的数学太多,因为我目前在9年级,所以我使用了模型。

那么我该如何仅渲染可见的面孔?

1 个答案:

答案 0 :(得分:-1)

在开始学习基础知识之前开始开发游戏。你不会这样走得太远。首先阅读一本关于XNA开发的书并完成它。这是一个基本主题,将在那里介绍。此外,访问techCraft http://techcraft.codeplex.com/并下载所有代码附带的实现。你将从中学到很多东西。