opaque Posted November 1, 2003 Posted November 1, 2003 Help. I cannot get a background file to display properly in C# DirectX9 using a Vertex Buffer, Texture and TriangleList. This is supposed to be one of the simplest operations in DirectX and I have tried everything to get an image to display. It seems to be displaying only a very small portion of the image. What am I doing wrong? Here is the code: ---------------------------------------------------------------------------- using System; using System.Drawing; using System.Windows.Forms; using Microsoft.DirectX; using Microsoft.DirectX.Direct3D; /// <summary> /// Summary description for Form. /// </summary> public class Form : System.Windows.Forms.Form { /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.Container components = null; Microsoft.DirectX.Direct3D.Device device = null; PresentParameters parameters = new PresentParameters(); bool terminate; Texture texture = null; VertexBuffer vb; public Form() { // // Required for Windows Form Designer support // InitializeComponent(); // everthing happens from here try { this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.MaximizeBox = false; this.MinimizeBox = false; this.ControlBox = false; // declare useful variables Microsoft.DirectX.Direct3D.Caps caps; Microsoft.DirectX.Direct3D.CreateFlags flags; parameters = new PresentParameters(); parameters.BackBufferCount = 1; parameters.SwapEffect = SwapEffect.Copy; parameters.PresentationInterval = PresentInterval.Immediate; parameters.BackBufferWidth = 1024; parameters.BackBufferHeight = 768; parameters.BackBufferFormat = Format.X8R8G8B8; // check for, and specify, depth buffer if (Microsoft.DirectX.Direct3D.Manager.CheckDepthStencilMatch(0, Microsoft.DirectX.Direct3D.DeviceType.Hardware, parameters.BackBufferFormat, parameters.BackBufferFormat, DepthFormat.D16)) { parameters.AutoDepthStencilFormat = DepthFormat.D16; parameters.EnableAutoDepthStencil = true; } else { throw new Exception("This application requires an adapter with a 16-bit depth buffer."); } // examine the device capabilities caps = Microsoft.DirectX.Direct3D.Manager.GetDeviceCaps(0, Microsoft.DirectX.Direct3D.DeviceType.Hardware); flags = Microsoft.DirectX.Direct3D.CreateFlags.SoftwareVertexProcessing; // attempt to create the device interface device = new Microsoft.DirectX.Direct3D.Device(0, Microsoft.DirectX.Direct3D.DeviceType.Hardware, this, flags, parameters); if (device == null) throw new Exception("Device was not allocated."); vb = new VertexBuffer(typeof(CustomVertex.TransformedTextured), 4, device, Usage.WriteOnly, CustomVertex.TransformedTextured.Format, Pool.Default); texture = TextureLoader.FromFile(device, "menu.jpg"); CustomVertex.TransformedTextured[] data = new CustomVertex.TransformedTextured[4]; data[0].X = 0.0f; data[0].Y = 0.0f; data[0].Z = 0.0f; data[0].Tu = 0.0f; data[0].Tv = 0.0f; data[1].X = device.Viewport.Width; data[1].Y = 0.0f; data[1].Z = 0.0f; data[1].Tu = 1.0f; data[1].Tv = 0.0f; data[2].X = 0.0f; data[2].Y = device.Viewport.Height; data[2].Z = 0.0f; data[2].Tu = 0.0f; data[2].Tv = 1.0f; data[3].X = device.Viewport.Width; data[3].Y = device.Viewport.Height; data[3].Z = 0.0f; data[3].Tu = 1.0f; data[3].Tv = 1.0f; vb.SetData(data, 0, 0); terminate = false; while (!terminate) { device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); device.BeginScene(); device.SetTexture(0, texture); device.VertexFormat = CustomVertex.TransformedTextured.Format; device.SetStreamSource(0, vb, 0); device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2); device.EndScene(); device.Present(); Application.DoEvents(); } Application.Exit(); } catch (Exception exception) { System.Windows.Forms.MessageBox.Show( exception.ToString(), "EXCEPTION: " + Application.ProductName, System.Windows.Forms.MessageBoxButtons.OK); } } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { // // Form // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(294, 268); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.Name = "Form"; this.Text = "Form"; this.Closing += new System.ComponentModel.CancelEventHandler(this.Form_Closing); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [sTAThread] static void Main() { try { Application.Run(new Form()); } catch (Exception) {} } private void Form_Closing(object sender, System.ComponentModel.CancelEventArgs e) { terminate = true; } } Quote
Rosecroix Posted November 8, 2003 Posted November 8, 2003 I'm just beginning here with managed dx, but when when I use TransformedTextured I must give 6 values for each for some reason (i copied from a tutorial) x,y,z (never used), 1 (always 1),u,v perhaps that will help you. here's my tutorial adding a vertix verts[i++] = new CustomVertex.TransformedTextured( XPos + XSize, YPos, 0.5F, // Vertex position 1, // rhw (advanced) 1, 0); // texture coordinates gl /Rosecroix Quote
opaque Posted November 8, 2003 Author Posted November 8, 2003 Thank you Rosecroix!!!! It worked All I did was add the Rhw property as you suggested and assign 1 to it for each index ... CustomVertex.TransformedTextured[] data = new CustomVertex.TransformedTextured[4]; data[0].X = 0.0f; data[0].Y = 0.0f; data[0].Z = 0.0f; data[0].Rhw = 1; data[0].Tu = 0.0f; data[0].Tv = 0.0f; data[1].X = device.Viewport.Width; data[1].Y = 0.0f; data[1].Z = 0.0f; data[1].Rhw = 1; data[1].Tu = 1.0f; data[1].Tv = 0.0f; data[2].X = 0.0f; data[2].Y = device.Viewport.Height; data[2].Z = 0.0f; data[2].Rhw = 1; data[2].Tu = 0.0f; data[2].Tv = 1.0f; data[3].X = device.Viewport.Width; data[3].Y = device.Viewport.Height; data[3].Z = 0.0f; data[3].Rhw = 1; data[3].Tu = 1.0f; data[3].Tv = 1.0f; Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.