こんにちは、マインクラフトに似た地形エンジンを作ろうとしています。
チャンクをロードすることができました。非常にラグが多く、一度に複数のチャンクが読み込まれると再生できなくなります。
これは私のレンダリングコードです:
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 年生なので、立方体を手動で描画するための数学についてあまり理解していないため、モデルを使用しました。
では、表示されている顔だけをレンダリングするにはどうすればよいでしょうか?