I am starting to wonder if I will complete my list of tasks before Xmas ...
The best method seems to be to work with a Todo list, basically a notepad document that contains lists of bugs found during test sessions. If I spend too much time on the Todo list I sometimes find myself writing down things that can be fixed in a matter of minutes, so the list isn't my main focus of attention.
Wednesday, 21 December 2011
Tuesday, 20 December 2011
Back to the Old Skool with D3D9
I remember an early problem with D3D9 rendering windows was that the viewport projection matrix would resize everything in the viewport if and only if the window was resized vertically and not horizontally. This is the fault of the limited functions Direct3D supplies for manipulating projection matrices. I recently decided to delve into the mathematics for 5 minutes and found this quick fix for my display system ... the fault occurs when the screen resizes ... here is some code ...
[code]
/*
D3DXMatrixPerspectiveFovLH( &matProj, D3DXToRadian( 45.0f ),
(float)w / float(h), 0.1f, 100.0f );
produces this matrix:-
xScale 0 0 0
0 yScale 0 0
0 0 zf/(zf-zn) 1
0 0 -zn*zf/(zf-zn) 0
where:
yScale = cot(fovY/2)
xScale = yScale / aspect ratio
*/
/*
D3DXMatrixPerspectiveLH(&matProj,
(float)w, float(h), 1.0f, 100.0f );
produces this matrix:-
2*zn/w 0 0 0
0 2*zn/h 0 0
0 0 zf/(zf-zn) 1
0 0 zn*zf/(zn-zf) 0
*/
// the solution - to have a Field of View parameter using the top matrix this will fix the problem.
D3DXMATRIX matProj;
if( w > h )
{
D3DXMatrixPerspectiveFovLH( &matProj, D3DXToRadian( 45.0f ),
(float)w / float(h), 0.1f, 100.0f );
}
else
{
D3DXMatrixPerspectiveFovLH( &matProj, D3DXToRadian( 45.0f ),
(float)h / float(w), 0.1f, 100.0f );
float temp = matProj._22;// =
matProj._22 = matProj._11;
matProj._11 = temp;
}
[/code]
as shown the xscale and yscale parameters do not depend upon the values of x and y, and so they can be swapped. Additionally the aspect ratio must be h/w if the height is greater than the width.
(I don't know if anyone actually reads this).
[code]
/*
D3DXMatrixPerspectiveFovLH( &matProj, D3DXToRadian( 45.0f ),
(float)w / float(h), 0.1f, 100.0f );
produces this matrix:-
xScale 0 0 0
0 yScale 0 0
0 0 zf/(zf-zn) 1
0 0 -zn*zf/(zf-zn) 0
where:
yScale = cot(fovY/2)
xScale = yScale / aspect ratio
*/
/*
D3DXMatrixPerspectiveLH(&matProj,
(float)w, float(h), 1.0f, 100.0f );
produces this matrix:-
2*zn/w 0 0 0
0 2*zn/h 0 0
0 0 zf/(zf-zn) 1
0 0 zn*zf/(zn-zf) 0
*/
// the solution - to have a Field of View parameter using the top matrix this will fix the problem.
D3DXMATRIX matProj;
if( w > h )
{
D3DXMatrixPerspectiveFovLH( &matProj, D3DXToRadian( 45.0f ),
(float)w / float(h), 0.1f, 100.0f );
}
else
{
D3DXMatrixPerspectiveFovLH( &matProj, D3DXToRadian( 45.0f ),
(float)h / float(w), 0.1f, 100.0f );
float temp = matProj._22;// =
matProj._22 = matProj._11;
matProj._11 = temp;
}
[/code]
as shown the xscale and yscale parameters do not depend upon the values of x and y, and so they can be swapped. Additionally the aspect ratio must be h/w if the height is greater than the width.
(I don't know if anyone actually reads this).
Thursday, 15 December 2011
Better debugging
Amazing how a completely fresh copy of windows xp will complain about the slightest code problems ...
My app on windows 7 has a constructor for a graphical pane and the graphical pane has member variables
int w; // screen width
int h; // screen height
now the constructor has an error,
int w = this->GetWidth();
int h = this->GetHeight();
and this is incorrect because they are already declared in the class definition. But the constructor already works in Windows 7!!??!!
My app on windows 7 has a constructor for a graphical pane and the graphical pane has member variables
int w; // screen width
int h; // screen height
now the constructor has an error,
int w = this->GetWidth();
int h = this->GetHeight();
and this is incorrect because they are already declared in the class definition. But the constructor already works in Windows 7!!??!!
Friday, 9 December 2011
UI tutorial
http://wiki.eclipse.org/User_Interface_Guidelines
The part about icon lighting is very interesting ... also I can just imagine a tooltip that says something like
"DO NOT PRESS THIS BUTTON" causing a crash in a demo .... LoL
The part about icon lighting is very interesting ... also I can just imagine a tooltip that says something like
"DO NOT PRESS THIS BUTTON" causing a crash in a demo .... LoL
Subscribe to:
Posts (Atom)