Jump to content
Xtreme .Net Talk

Recommended Posts

Posted

Hi,

 

My project uses directX to render several MDI child forms. In the activate event of each child form is:

 

parameters = new PresentParameters();
parameters.SwapEffect = SwapEffect.Discard;
parameters.AutoDepthStencilFormat = DepthFormat.D16;
parameters.EnableAutoDepthStencil = true;
parameters.Windowed = true;
video = new Device(0,DeviceType.Hardware, this,CreateFlags.SoftwareVertexProcessing,parameters);

 

In the OnPaint Event of each form is the render loop. A few questions -

 

1. Is there a better way to switch between rendering forms other than creating a new device each time.

 

2. With this setup, sometimes when I press the close box on one of the child forms the program takes extremely long o shut down the form. Is there something I should be doing in the Closing code to exit properly?

 

3. My render loop looks like this:

 


node = Mesh.Sphere(this.video,0.1f,15,15);

video.BeginScene();

node.DrawSubset(0);
video.Transform.World = Matrix.Translation(0.5f,0.5f,0.0f);
node.DrawSubset(0);
	
video.EndScene();
video.Present();
this.Invalidate();

 

For some reason, the first node is drawing, the world is moving , but the second node does not appear. Is there something I need to do to the mesh to make it draw a second time?

 

Thanks -

  • *Experts*
Posted

1: A device is tied to a window, so not really. What you can do is keep resetting the device into a new window everytime you switch to it.

2: You should be disposing of the device and any meshes, resources, etc.

3: The object that is actually appearing is the second sphere. It happens because everytime you finish drawing your scene matrices get reset, so you are not setting any world matrix for your first object so it follows the next matrix you set.

 

Ask if you need help with any of this :D.

Posted
1: A device is tied to a window, so not really. What you can do is keep resetting the device into a new window everytime you switch to it.

2: You should be disposing of the device and any meshes, resources, etc.

3: The object that is actually appearing is the second sphere. It happens because everytime you finish drawing your scene matrices get reset, so you are not setting any world matrix for your first object so it follows the next matrix you set.

 

Ask if you need help with any of this :D.

 

OK, im a little confused on number 3 - If the second sphere is the one drawing, then how come when I just draw 1 sphere with no translation, the sphere ends up in the middle of the screen? I read TPG's tutorial on transforms and things, but i guess Im missing it. Also, how can the first object follow the next matrix, if it should already be drawn into the buffer? Please shed some more light on this 1, I guess I missed the boat -

 

Thanks

  • 2 weeks later...
Posted

1)When you set the World transform it is just like setting any other variable. You set it to that particular translation and it stays that way unless you set it to something else. So after the very first frame processes the World transform is set to (.5,.5,.5), so in the second frame it is STILL set to that so the first node is being drawn exactly where the second one is.

 

2) Don't allocate stuff in your render loop.

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...