Jump to content
Xtreme .Net Talk

Recommended Posts

Posted

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;

}

}

Posted

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

Posted

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;

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...