[DirectX] Transform does nothing?

Started by
8 comments, last by steg 14 years, 10 months ago

	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
Advertisement
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
Thanks for your reply,
D3DXMatrixRotationX(&mat, 0.785398f);
still produces no noticeable effect (no rotation whatsoever)
This is really confusing me..
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
Also, using a vertex shader will override any fixed function T/L operations.

Niko Suni

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.
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.
NextWar: The Quest for Earth available now for Windows Phone 7.
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.
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

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

This topic is closed to new replies.

Advertisement