public override Vector3 ClosestPoint(Vector3 location) { Vector3 objectPosition = HxGameObject.Get <HxTransform>().Position; Vector3 direction = location - (Center + objectPosition); direction.Normalize(); return((Center + objectPosition) + (direction * Radius)); }
public void Render(GraphicsDevice graphicsDevice, HxCamera hxCamera) { if (Material == null) { return; } if (HxGameObject.Get <HxMeshFilter>() != null) { HxMesh mesh = HxGameObject.Get <HxMeshFilter>().HxMesh; if (Material.Effect != null) { if (mesh.HxMeshData.VertexCount < 3) { return; } Matrix translationMatrix = Matrix.CreateTranslation(HxGameObject.Get <HxTransform>().Position); Matrix rotationMatrix = Matrix.CreateRotationX(MathHelper.ToRadians(HxGameObject.Get <HxTransform>().Rotation.X)) * Matrix.CreateRotationY(MathHelper.ToRadians(HxGameObject.Get <HxTransform>().Rotation.Y)) * Matrix.CreateRotationZ(MathHelper.ToRadians(HxGameObject.Get <HxTransform>().Rotation.Z)); Matrix world = Matrix.CreateScale(HxGameObject.Get <HxTransform>().Scale) * rotationMatrix * translationMatrix; Material.Effect.Parameters["WorldViewProjection"] .SetValue(world * hxCamera.ViewMatrix * hxCamera.ProjectionMatrix); Material.Effect.Parameters["Texture"] .SetValue(Material.MainTexture); Material.Effect.Parameters["Tiling"] .SetValue(Material.Tiling); Material.Effect.Parameters["Offset"] .SetValue(Material.Offset); if (Material.MainTexture != null) { Material.Effect.Parameters["useTexture"] .SetValue(true); } else { Material.Effect.Parameters["useTexture"] .SetValue(false); } Material.Effect.Parameters["Color"] .SetValue(Material.Color.ToVector4()); foreach (EffectPass effectPass in Material.Effect.CurrentTechnique.Passes) { effectPass.Apply(); graphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleList, mesh.HxMeshData.VertexData, 0, mesh.HxMeshData.VertexCount / 3); } } } }
public override Vector3 ClosestPoint(Vector3 location) { Vector3 objectPosition = HxGameObject.Get <HxTransform>().Position; Vector3 center = objectPosition + Center; float maxX = center.X + Size.X / 2; float minX = center.X - Size.X / 2; float maxY = center.Y + Size.Y / 2; float minY = center.Y - Size.Y / 2; float maxZ = center.Z + Size.Z / 2; float minZ = center.Z - Size.Z / 2; float x = Math.Clamp(location.X, minX, maxX); float y = Math.Clamp(location.Y, minY, maxY); float z = Math.Clamp(location.Z, minZ, maxZ); return(new Vector3(x, y, z)); }
public void Render(GraphicsDevice graphicsDevice, HxCamera hxCamera) { if (Material == null) { return; } if (Texture2D != null) { Matrix translationMatrix = Matrix.CreateTranslation(HxGameObject.Get <HxTransform>().Position); Matrix rotationMatrix = Matrix.CreateRotationX(MathHelper.ToRadians(HxGameObject.Get <HxTransform>().Rotation.X)) * Matrix.CreateRotationY(MathHelper.ToRadians(HxGameObject.Get <HxTransform>().Rotation.Y)) * Matrix.CreateRotationZ(MathHelper.ToRadians(HxGameObject.Get <HxTransform>().Rotation.Z)); Matrix world = rotationMatrix * translationMatrix; Material.Effect.Parameters["WorldViewProjection"].SetValue(world * hxCamera.ViewMatrix * hxCamera.ProjectionMatrix); foreach (EffectPass effectPass in Material.Effect.CurrentTechnique.Passes) { effectPass.Apply(); graphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleList, _quad.HxMeshData.VertexData, 0, _quad.HxMeshData.VertexCount / 3); } } }