using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Microsoft.DirectX.Direct3D; using Microsoft.DirectX; namespace DirectXProject { public partial class mioForm : Form { public Device device; private float angle = 0f; CustomVertex.PositionColored[] vertices; public mioForm() { InitializeComponent(); } public void InitializeDevice() { PresentParameters presentParams = new PresentParameters(); presentParams.BackBufferCount = 1; presentParams.BackBufferFormat = Manager.Adapters[0].CurrentDisplayMode.Format; presentParams.BackBufferWidth =1366; presentParams.BackBufferHeight =768; presentParams.Windowed = false; presentParams.FullScreenRefreshRateInHz = Manager.Adapters[0].CurrentDisplayMode.RefreshRate; presentParams.SwapEffect = SwapEffect.Discard; device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams); } public void CreaVertici() { vertices= new CustomVertex.PositionColored[3]; vertices[0].Position = new Vector3(0f, 0f, 0f); vertices[0].Color = Color.Red.ToArgb(); vertices[1].Position = new Vector3(0f, 10f, 0f); vertices[1].Color = Color.Red.ToArgb(); vertices[2].Position = new Vector3(10f, 0f, 0f); vertices[2].Color = Color.Red.ToArgb(); } public void Camera() { device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, this.Width / this.Height, 1f, 100f); device.Transform.View = Matrix.LookAtLH(new Vector3(0, 0, -50), new Vector3(0, 0, 0), new Vector3(0, 1, 0)); device.RenderState.Lighting = false; device.RenderState.CullMode = Cull.None; } private void render() { device.Clear(ClearFlags.Target, System.Drawing.Color.Black, 1.0f, 0); device.BeginScene(); device.VertexFormat = CustomVertex.PositionColored.Format; device.Transform.World = Matrix.RotationX(angle) * Matrix.RotationZ(angle); device.DrawUserPrimitives(PrimitiveType.TriangleList,1,vertices); device.EndScene(); device.Present(); angle += 0.1f; } public static void Main() { mioForm frm = new mioForm(); frm.WindowState = FormWindowState.Maximized; frm.InitializeDevice(); frm.CreaVertici(); frm.Camera(); frm.Show(); while (frm.Created) { frm.render(); Application.DoEvents(); } } private void mioForm_Load(object sender, EventArgs e) { } private void mioForm_Click(object sender, EventArgs e) { Application.Exit(); } } }A parte l'effetto ameno di un triangolo rosso che ruota in modo un po' pazzoide, cerchiamo di analizzare il codice...
Nel costruttore viene chiamata solo InitializeComponent, che si trova nell'altro mezzo modulo con la mezza classe form...
Poi ho marcato in colori diversi i metodi fondamentali dell'oggetto che mi servono.
Sono quattro:
- Uno che crea il Device
- Uno che crea i Vertici
- Uno che setta la Telecamera
- Uno che dà l'avvio al disegno.
I quattro vengono richiamati nel metodo Main()
Nessun commento:
Posta un commento