public BezierCube(ControlCube controlCube, Device device) { var minPoint = controlCube.Vertices[0].Position; var maxPoint = controlCube.Vertices[7].Position; var diff = maxPoint - minPoint; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { for (int k = 0; k < 4; k++) { bezierPoints[i, j, k] = new BezierCubeVertex(minPoint.X + i / 3.0f * diff.X, minPoint.Y + j / 3.0f * diff.Y, minPoint.Z + k / 3.0f * diff.Z); } } } CreateInnerSprings(diff); CreateControlSprings(controlCube); vertexBuffer = Buffer.Create(device, BindFlags.VertexBuffer, GetAllTriangleVertices()); vertexBinding = new VertexBufferBinding(vertexBuffer, Utilities.SizeOf <Vertex>(), 0); springBuffer = Buffer.Create(device, BindFlags.VertexBuffer, GetBezierVertices()); springBinding = new VertexBufferBinding(springBuffer, Utilities.SizeOf <Vertex>(), 0); triangleIndicesArray = GetIndices(); triangleIndices = Buffer.Create(device, BindFlags.IndexBuffer, triangleIndicesArray); springIndicesArray = GetSpringIndices(); springIndices = Buffer.Create(device, BindFlags.IndexBuffer, springIndicesArray); }
public DxPipeline(Control control, Form1 form) { Camera = new Camera(form, control); InitializeSwapChain(control); viewport = new Viewport(0, 0, control.Width, control.Height, 0, 1); context.Rasterizer.SetViewport(viewport); InitializeDepthStencil(control); InitializeDepthStencilState(); InitializeShaders(); vsBuffer = new Buffer(device, Utilities.SizeOf <VSBuffer>(), ResourceUsage.Default, BindFlags.ConstantBuffer, CpuAccessFlags.None, ResourceOptionFlags.None, 0); psBuffer = new Buffer(device, Utilities.SizeOf <PSBuffer>(), ResourceUsage.Default, BindFlags.ConstantBuffer, CpuAccessFlags.None, ResourceOptionFlags.None, 0); context.VertexShader.SetConstantBuffer(0, vsBuffer); context.PixelShader.SetConstantBuffer(0, psBuffer); cube = new ControlCube(device, form, control); bezierCube = new BezierCube(cube, device); boundingBox = new BoundingBox(device); sphere = new Sphere(device, bezierCube.bezierPoints); mesh = new Mesh(device, context, bezierCube.bezierPoints); lastComputeTime = DateTime.Now; }
private void CreateControlSprings(ControlCube controlCube) { var controlPoints = controlCube.Vertices; springs.Add(new Spring(bezierPoints[0, 0, 0], controlPoints[0], 0)); springs.Add(new Spring(bezierPoints[0, 0, 3], controlPoints[1], 0)); springs.Add(new Spring(bezierPoints[0, 3, 0], controlPoints[2], 0)); springs.Add(new Spring(bezierPoints[0, 3, 3], controlPoints[3], 0)); springs.Add(new Spring(bezierPoints[3, 0, 0], controlPoints[4], 0)); springs.Add(new Spring(bezierPoints[3, 0, 3], controlPoints[5], 0)); springs.Add(new Spring(bezierPoints[3, 3, 0], controlPoints[6], 0)); springs.Add(new Spring(bezierPoints[3, 3, 3], controlPoints[7], 0)); }