Jump to content

  • Log In with Google      Sign In   
  • Create Account


Howto: 2D in DirectX Questions


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
4 replies to this topic

#1 ~Helgon   Members   -  Reputation: 357

Like
1Likes
Like

Posted 16 January 2013 - 09:37 AM

Hi, I have some questions. I'm not sure if I understood it right so I tell you how I understood it and if its wrong you maybe can correct me.

 

If I want to write a 2D game in DirectX:

- I fix the camera on the Z-Axis and move just on the X,Y

- I draw primitives (a quad for example) and then just map the 2D texture on it 

 - that's basically how the whole scene is created. Just quads mapped with a texture(?!)

 

Is this the common way?

I know that there is Spritebatch for DirectX, but because it's just for me and on the purpose to learn something I want to do it all by my own.

 

Regards


from time to time i find time


Sponsor:

#2 Auskennfuchs   Members   -  Reputation: 560

Like
2Likes
Like

Posted 16 January 2013 - 11:30 AM

For a 2D game with Direct3D you need an orthogonal projection matrix, so z-axis is disabled in projection.

To draw a sprite you can either draw a quad with a texture or create the quad within a geometryshader.

For rotation, scaling,... you can modify your modelmatrices.

 

An alternative is Direct2D, where you can "draw like in MSPaint". You can also draw rectangles with bitmaps to use it as sprites. The API also provides opacity and mask so you can stencil out e.g. the character-sprites. And you can rotate, zoom etc with easier matrix-manipulations.

 

Maybe Direct2D is a better start to get into the world of 2D and advance to D3D afterwards.



#3 ~Helgon   Members   -  Reputation: 357

Like
1Likes
Like

Posted 16 January 2013 - 12:28 PM

But do I have the same "power" as in Direct3D? All the shader stages (maybe to tessellate the 2D texture and give it a 2.5D look)?


from time to time i find time


#4 NightCreature83   Crossbones+   -  Reputation: 2746

Like
3Likes
Like

Posted 16 January 2013 - 12:35 PM

For a 2D game with Direct3D you need an orthogonal projection matrix, so z-axis is disabled in projection.
To draw a sprite you can either draw a quad with a texture or create the quad within a geometryshader.
For rotation, scaling,... you can modify your modelmatrices.

An alternative is Direct2D, where you can "draw like in MSPaint". You can also draw rectangles with bitmaps to use it as sprites. The API also provides opacity and mask so you can stencil out e.g. the character-sprites. And you can rotate, zoom etc with easier matrix-manipulations.

Maybe Direct2D is a better start to get into the world of 2D and advance to D3D afterwards.
The Z axis isn't disabled by the projection the just map to the same location on the screen is all. and Z values still affect if an object is in front of another one. And you can still render full 3D models with an orthographic projection the projected image however doesn't have any depth queues embedded in the image.

Effectively all a projection does is take how something looks in a certain space(1D, 2D, 3D, 4D, ...) and transform this into an other space(1D, 2D, 3D, 4D, ...) and show what it looks like in that. During the projection you can lose some information but this doesn't mean that the information in the original space doesn't affect the result of the projection.

For a long time using 3D to do 2D stuff was the only way to go with DirectX as the hardware was faster doing the 3D transformations than doing the 2D ones.

Edited by NightCreature83, 16 January 2013 - 12:39 PM.

Worked on titles: CMR:DiRT2, DiRT 3, DiRT: Showdown, GRID 2, Mad Max

#5 Ravyne   Crossbones+   -  Reputation: 7120

Like
2Likes
Like

Posted 16 January 2013 - 01:33 PM

Direct2D isn't really meant for this kind of 2D graphics, and it is, in fact, just a layer on top of Direct3D. Direct2D was created more of vector-style drawing and glyphs (text and such), than bitmap graphics. Its primary purpose was to serve as the basis of DirectWrite.

 

Direct3D with orthographic projection is the way to go. The projection will eliminate perspective, but you can still use the z-axis as a way to order draw calls, and eliminate redundant pixel shader calculations by drawing front-to-back. This also gives you unfettered access to the full capability of Direct3D.






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS