public static Polygone MovePoly(Polygone polygone, Vector3 amount) { for (int i = 0; i < polygone.listVerticies.Count; i++) { polygone.listVerticies[i] += amount; } polygone.center = Polygone.GetGravityCenter(polygone.listVerticies); return(polygone); }
public static Polygone RotatePoly(Polygone polygone, Vector3 amount) { List <Vector3> newVertex = new List <Vector3>(); Quaternion newRotation = GetQuaternion(amount.X, amount.Y, amount.Z); Vector3 vecRotation = GetEulerAngle(newRotation.W, newRotation.X, newRotation.Y, newRotation.Z); for (int i = 0; i < polygone.listVerticies.Count; i++) { polygone.listVerticies[i] = vecRotation * (polygone.listVerticies[i] - polygone.center) + polygone.center; } polygone.center = Polygone.GetGravityCenter(polygone.listVerticies); return(polygone); }
static void Main(string[] args) { uint width = 1000; uint height = 1000; Vector3 pointPerspective = new Vector3(width / 2, height / 2, -5000); Image image = new Image(width, height, SFML.Graphics.Color.Cyan); Scene mainScene = new Scene(); foreach (Sphere sphere in BuildSphere(width, height)) { mainScene.objectsInScene.Add(new Box(sphere)); } //Polygone poly = new Polygone(); OFFReader.ReadFile(@"D:\bunny.off", out List <Vector3> listVerticies, out List <int> listIndexes, 2500); //Sphere sphereCentre = new Sphere(new Vector3(width / 2, height / 2, 800), 200); //GetMeshFromSphere(sphereCentre, 10, 10, out List<Vector3> listVerticies, out List<int> listIndexes); Polygone poly = new Polygone(listVerticies, listIndexes); poly = MovePoly(poly, new Vector3(500, 650, 650)); poly = RotatePoly(poly, new Vector3(90, 90, 0)); mainScene.objectsInScene.Add(poly); mainScene.lamps.AddRange(BuildLamp(width, height)); for (uint y = 0; y < height; y++) { for (uint x = 0; x < width; x++) { Option option = new Option(); //option.backgroundColor = new Vector3(0, 0, 0); option.cameraType = CameraType.Perspective; option.maxDepth = 5; Direction dir = new Direction(new Vector3(0, 0, 1)); float offsetRay = 0.5f; if (option.cameraType == CameraType.Perspective) { dir = new Direction(new Vector3(x, y, 0) - new Vector3(pointPerspective.X, pointPerspective.Y, pointPerspective.Z)); } int raycount = 1000; Vector3 couleur = Vector3.Zero; for (int i = 0; i < raycount; i++) { Ray ray = new Ray(new Position(new Vector3(x + GetRandomNumber(-offsetRay, offsetRay), y + GetRandomNumber(-offsetRay, offsetRay), 0)), dir); if (CastRay(ray, mainScene, option, out Vector3 couleurPix)) { couleur += couleurPix; } else { couleur += option.backgroundColor; } } Color col = CreateColorFromVector(couleur / raycount); image.SetPixel(x, y, col); // Lumiere } } image.SaveToFile(@"D:\result.png"); }