Привет!
Я так понял, что матрицы проекции и вида - это "штука конисская" :-)
Расскажу, что мне непонятно. В своем проекте я оперирую данными, которые представляют собой лучи длиной ровно 512 точек. Я их закладываю в текстуру, которая отображается на прямоугольнике. Высота прямоугольника ровно 512 пикселей, а ширина может варьироваться. Рендеринг осуществляется в квадратное окно размером 512 на 512 пикселей. Половину угла перспективы, в отличие от повсеместно приводимого бессмертного D3DX_PI / 4, я устанавливаю порядка 11 с лишним градусов, иначе проекция безобразно искажается (естественно). Матрицу перспективы я вычисляю вот так:
angle = D3DX_PI / 16; // Half of 22.5 deg
// Use D3DX to create a left handed cartesian Field Of View transform
D3DXMatrixPerspectiveFovLH( &mProj, angle, 1.0f, 1.0f, 1000.0f );
А затем рассчитываю матрицу вида исходя из того факта, что у меня размер окна вывода 512 пикселей:
dist = FLOAT((512.0/2.0) / tan(angle/2.0));
// Use D3DX to create a Look At matrix from eye, lookat and up vectors
D3DXMatrixLookAtLH(
&mView, // D3DXMATRIX * pOut
&D3DXVECTOR3(0.0f, 0.0f, -dist), // CONST D3DXVECTOR3 * pEye
&D3DXVECTOR3(0.0f, 0.0f, 0.0f), // CONST D3DXVECTOR3 * pAt
&D3DXVECTOR3(0.0f, 1.0f, 0.0f)); // CONST D3DXVECTOR3 * pUp
Однако, в этом случае возникают искажения рендеринга: неправильно показываются следующие друг за другом прямоугольники (пример искажения можно посмотреть
здесь). Если же уменьшить значение Y в пикселях (как в примере: с 445.0f до 44.50f, т.е. просто в 10 раз), то искажения пропадают.
Что бы это значило и почему такое происходит?
Как правильно выбирать размерность координат своих объектов? Сейчас я задаю вершинные координаты по Y в диапазоне от -255.5f до 255.5f (т.е. из расчета, что окно по вертикали 512 пикселов). По-видимому следует оперировать числами от -1.0f до 1.0f? А почему?