1
我試圖繪製立方體原始和軸穿過它。軸不能與立方體一起旋轉。我不知道爲什麼它不能像那樣工作。如果我刪除axises.ApplyPasses();
並呼叫cube.ApplyPasses();
軸線穿過立方體,但它們會隨着它一起旋轉。爲什麼我的原始圖像是在彼此的頂部而不是在彼此之間繪製的?
原始類包含PrimitiveType,VertexData,BasicEffect對象等字段。沒有數學或任何在這裏完成。
*.ApplyPasses();
等於Effect.CurrentTechnique.Passes[0].Apply();
創建多維數據集:
Primitive<VertexPositionColor> cube = new Primitive<VertexPositionColor>(_graphics.GraphicsDevice);
cube.VertexOffset = 0;
cube.Type = PrimitiveType.TriangleList;
cube.VertexData = new VertexPositionColor[]
{
new VertexPositionColor(new Vector3(-0.5f, -0.5f, 0.5f), Color.Red),
new VertexPositionColor(new Vector3(-0.5f, 0.5f, 0.5f), Color.Red),
new VertexPositionColor(new Vector3(0.5f, 0.5f, 0.5f), Color.Red),
new VertexPositionColor(new Vector3(0.5f, 0.5f, 0.5f), Color.Red),
new VertexPositionColor(new Vector3(0.5f, -0.5f, 0.5f), Color.Red),
new VertexPositionColor(new Vector3(-0.5f, -0.5f, 0.5f), Color.Red),
new VertexPositionColor(new Vector3(-0.5f, -0.5f, 0.5f), Color.Green),
new VertexPositionColor(new Vector3(-0.5f, -0.5f, -0.5f), Color.Green),
new VertexPositionColor(new Vector3(-0.5f, 0.5f, -0.5f), Color.Green),
new VertexPositionColor(new Vector3(-0.5f, 0.5f, -0.5f), Color.Green),
new VertexPositionColor(new Vector3(-0.5f, 0.5f, 0.5f), Color.Green),
new VertexPositionColor(new Vector3(-0.5f, -0.5f, 0.5f), Color.Green),
new VertexPositionColor(new Vector3(-0.5f, -0.5f, 0.5f), Color.White),
new VertexPositionColor(new Vector3(0.5f, -0.5f, 0.5f), Color.White),
new VertexPositionColor(new Vector3(0.5f, -0.5f, -0.5f), Color.White),
new VertexPositionColor(new Vector3(0.5f, -0.5f, -0.5f), Color.White),
new VertexPositionColor(new Vector3(-0.5f, -0.5f, -0.5f), Color.White),
new VertexPositionColor(new Vector3(-0.5f, -0.5f, 0.5f), Color.White),
new VertexPositionColor(new Vector3(-0.5f, -0.5f, 0.5f), Color.White),
new VertexPositionColor(new Vector3(0.5f, -0.5f, 0.5f), Color.White),
new VertexPositionColor(new Vector3(0.5f, -0.5f, -0.5f), Color.White),
new VertexPositionColor(new Vector3(0.5f, -0.5f, -0.5f), Color.Blue),
new VertexPositionColor(new Vector3(0.5f, 0.5f, -0.5f), Color.Blue),
new VertexPositionColor(new Vector3(-0.5f, 0.5f, -0.5f), Color.Blue),
new VertexPositionColor(new Vector3(-0.5f, 0.5f, -0.5f), Color.Blue),
new VertexPositionColor(new Vector3(-0.5f, -0.5f, -0.5f), Color.Blue),
new VertexPositionColor(new Vector3(0.5f, -0.5f, -0.5f), Color.Blue),
new VertexPositionColor(new Vector3(0.5f, -0.5f, -0.5f), Color.Black),
new VertexPositionColor(new Vector3(0.5f, -0.5f, 0.5f), Color.Black),
new VertexPositionColor(new Vector3(0.5f, 0.5f, 0.5f), Color.Black),
new VertexPositionColor(new Vector3(0.5f, 0.5f, 0.5f), Color.Black),
new VertexPositionColor(new Vector3(0.5f, 0.5f, -0.5f), Color.Black),
new VertexPositionColor(new Vector3(0.5f, -0.5f, -0.5f), Color.Black),
new VertexPositionColor(new Vector3(0.5f, -0.5f, -0.5f), Color.Black),
new VertexPositionColor(new Vector3(0.5f, -0.5f, 0.5f), Color.Black),
new VertexPositionColor(new Vector3(0.5f, 0.5f, 0.5f), Color.Black),
new VertexPositionColor(new Vector3(0.5f, 0.5f, 0.5f), Color.Yellow),
new VertexPositionColor(new Vector3(-0.5f, 0.5f, 0.5f), Color.Yellow),
new VertexPositionColor(new Vector3(-0.5f, 0.5f, -0.5f), Color.Yellow),
new VertexPositionColor(new Vector3(-0.5f, 0.5f, -0.5f), Color.Yellow),
new VertexPositionColor(new Vector3(0.5f, 0.5f, -0.5f), Color.Yellow),
new VertexPositionColor(new Vector3(0.5f, 0.5f, 0.5f), Color.Yellow)
};
cubeMatrixes = new Matrixes();
cubeMatrixes.World = Matrix.Identity;
cubeMatrixes.View = Matrix.CreateLookAt(new Vector3(0.0f, 1.0f, 2.0f), Vector3.Zero, Vector3.Up);
cubeMatrixes.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(110.0f), 4.0f/3.0f, 0.001f, 10000.0f);
軸系創作:
Primitive<VertexPositionColor> axises = new Primitive<VertexPositionColor>(_graphics.GraphicsDevice);
axises.Type = PrimitiveType.LineList;
axises.VertexOffset = 0;
axises.VertexData = new VertexPositionColor[]
{
new VertexPositionColor(new Vector3(-5, 0, 0), Color.Red),
new VertexPositionColor(new Vector3(5, 0, 0), Color.Red),
new VertexPositionColor(new Vector3(0, -5, 0), Color.Green),
new VertexPositionColor(new Vector3(0, 5, 0), Color.Green),
new VertexPositionColor(new Vector3(0, 0, -5), Color.Blue),
new VertexPositionColor(new Vector3(0, 0, 5), Color.Blue),
};
axisesMatrixes = new Matrixes();
axisesMatrixes.World = Matrix.Identity;
axisesMatrixes.View = Matrix.CreateLookAt(new Vector3(0.0f, 1.0f, 5.0f), Vector3.Zero, Vector3.Up);
axisesMatrixes.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f), 4.0f/3.0f, 0.001f, 10000.0f);
翻譯:
cube.Effect.World
= Matrix.CreateRotationX(MathHelper.ToRadians(cubeAngle.X))
* Matrix.CreateRotationY(MathHelper.ToRadians(cubeAngle.Y))
* Matrix.CreateRotationZ(MathHelper.ToRadians(cubeAngle.Z))
* cubeMatrixes.World;
cube.Effect.View = cubeMatrixes.View;
cube.Effect.Projection = cubeMatrixes.Projection;
axises.Effect.World
= Matrix.CreateRotationX(MathHelper.ToRadians(0.0f))
* Matrix.CreateRotationY(MathHelper.ToRadians(-60.0f))
* Matrix.CreateRotationZ(MathHelper.ToRadians(0.0f))
* axisesMatrixes.World;
axises.Effect.View
= axisesMatrixes.View;
axises.Effect.Projection
= axisesMatrixes.Projection;
繪圖:
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
axises.ApplyPasses();
_graphics.GraphicsDevice.DrawUserPrimitives(axises.Type, axises.VertexData, axises.VertexOffset, axises.Count);
cube.ApplyPasses();
_graphics.GraphicsDevice.DrawUserPrimitives(cube.Type, cube.VertexData, cube.VertexOffset, cube.Count);
base.Draw(gameTime);
}