Skip to main content
gamedev.net
🔒 Locked

[DirectX] Transform does nothing?

Started by xLeo Jun 6, 2009 at 1:12 PM 8 replies 1.3k views
Original Post
xLeo
xLeo

	D3DXMATRIX mat;
	D3DXMatrixRotationX(&mat, 45.0f);
	d3ddev->SetTransform(D3DTS_WORLD, &mat);
The above code does not rotate my vertices by 45degrees, or anything for that matter.. it's placed after the CreateDevice call by the IDirect3D* interface, so no prior transformations could of been applied. Any ideas why the code does absolutely nothing? Thanks, Leo EDIT: This code has been bugging me all day, I could really appreciate some help, thanks
Tristan85
Tristan85
Hi xLeo,

Your code seems quite alright, except for one thing:
- D3DXMatrixRotationX expects its second parameter to be specified in radians, not degrees.

Whereas a full circle has 360 degrees, it has 2*Pi radians. Herefrom you can easily deduce that:

45.0 degrees * (2*Pi radians / 360 degrees) =
45.0 degrees * (Pi radians / 180 degrees) =
(1/4) * Pi radians

Kind regards,
Tristan
xLeo
xLeo
Thanks for your reply,
D3DXMatrixRotationX(&mat, 0.785398f);
still produces no noticeable effect (no rotation whatsoever)
This is really confusing me..
Tristan85
Tristan85
Hi xLeo,

Another thing I just realized; what Vertex Format are you using? íf your vertex format includes the D3DFVF_XYZRHW flag, DirectX will think your vertices have already been transformed by you...and therefore will not bother to apply its world matrix to them.

Either manually multiply them by the transformation matrix to solve this, or change your vertex format. (The 2nd option will probably be the best one, considering the fact that DirectX will probably multiply your matrices in a much more optimized manner...)

Kind regards,
Tristan
Nik02
Nik02
Also, using a vertex shader will override any fixed function T/L operations.
Niko Suni
xLeo
xLeo
Yeah, realised it was because I had D3DFVF_XYZRHW still in use.
I've heard that what im currently doing (using vertices, built-in transform functions) is called using the FFP (fixed function pipeline) which is bad practice because it's going obsolete in DX10?

If this is the case, could anyone hook me up with some shader tutorials? I have a DirectX 9.0c reference book (by Mr. Luna) but it goes in WAY too much depth for what im after.. I would just like some basic shader tutorials, or some tutorials in the HLSL language if possible, Thanks!

Leo.
Sc4Freak
Sc4Freak
That book is an excellent one to get started (if you mean "3D Game Programming With DirectX9.0c: A Shader Approach"). I've read it cover-to-cover, it includes everything from the basics of HLSL syntax to matrix transforms to more advanced stuff like normal mapping. If you don't need the advanced stuff then you can just read the first 8-10 chapters or so.

It's an excellent resource, I think you'd do fine with it.
xLeo
xLeo
Yeah, thats the one - I'll have to take a look over it again, I seem to remember something on shaders in chapter 8...
The confusing thing is, it says "A shader approach" on the title, so I assumed that what I was learning in the book would not be obsolete come DX10, however it appears chapter 1 - 8 are FFP, correct? If not, then what is classed as the Fixed function pipeline?

Thanks,
Leo.
Nik02
Nik02
Fixed-function vertex processing (superseded by vertex shaders):

-SetMaterial
-SetTransform
-MultiplyTransform
-SetLight
-LightEnable
...and corresponding Get* methods.

FF pixel processing (superseded by pixel shaders):

-SetTextureStageState
...and corresponding Get method.

In addition, there are many render states that only make sense in fixed function usage, such as fog settings.
Niko Suni
steg
steg
Mr Luna also has his new book out which covers Direct3D 10 :-)

I'm no expert, just getting into D3D10 myself after a long time away from DirectX, I've forgotten pretty much everything, lol, but it's fun to get back into and this is why I've now started to learn D3D10.


If it isn't working, take a bath, have a think and try again...

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.