//Куб в параллельной проекции public Bitmap drawCubeParal(Point drawOrigin) { //точки куба, которые конвертируем в 2д PointF[] point2Dconvert = new PointF[8]; Point3D[] cubePoints = fillCubeVertices(Width, Height, Depth); //изменение положения точек при повороте cubePoints = TransformCube.RotateX(cubePoints, RotateX); cubePoints = TransformCube.RotateY(cubePoints, RotateY); cubePoints = TransformCube.RotateZ(cubePoints, RotateZ); Point3D vec; for (int i = 0; i < point2Dconvert.Length; i++) { vec = cubePoints[i]; point2Dconvert[i].X = (int)(vec.X + drawOrigin.X); point2Dconvert[i].Y = (int)(vec.Y + drawOrigin.Y); } var tmpBmp = draw2DCube(point2Dconvert, drawOrigin, cubePoints); return(tmpBmp); }
//Куб в перспективной проекции public Bitmap drawCubePersp(Point drawOrigin) { PointF[] point2Dconvert = new PointF[8]; Point3D[] cubePoints = fillCubeVertices(Width, Height, Depth); //изменение положения точек при повороте cubePoints = TransformCube.RotateX(cubePoints, RotateX); cubePoints = TransformCube.RotateY(cubePoints, RotateY); cubePoints = TransformCube.RotateZ(cubePoints, RotateZ); //Перевод 3д точек в 2д Point3D vec; for (int i = 0; i < point2Dconvert.Length; i++) { vec = cubePoints[i]; point2Dconvert[i].X = (int)((vec.X * camera1.Position.Z - vec.Z * camera1.Position.X) / (camera1.Position.Z - vec.Z) + drawOrigin.X); point2Dconvert[i].Y = (int)((vec.Y * camera1.Position.Z - vec.Z * camera1.Position.Y) / (camera1.Position.Z - vec.Z) + drawOrigin.Y); } var tmpBmp = draw2DCube(point2Dconvert, drawOrigin, cubePoints); return(tmpBmp); }