2015-06-03 6 views
0

До сих пор я получил куб без каких-либо преобразований (таким образом, он был визуализирован в орфографической перспективе), и я работаю над предыдущим кодом, чтобы получить его в перспективе, со всеми матриц. Я изменил гибкий формат вершин, чтобы не иметь RHW (таким образом, только с координатами и цветом XYZ, попробовал ARGB и XRGB, но я не думаю, что это важно), и я добавил функцию, которая устанавливает все матрицы.DirectX 9 не рендеринг после добавления преобразований

Debugging
показали, что матрицы создаются правильно, функции не возвращают правильно (насколько я мог видеть), не выходит из строя (DirectX никогда не будет жаловаться, если что-то пойдет не так, он просто не делает), и в общая пошаговая отладка не показывает паранормальной активности.

Существующий проект (который я изменить и в конечном итоге предотвратить от работы):
Как я продвигаюсь я также пишу учебники сортов, так что я могу вернуться и посмотреть, что я сделал в прошлый раз, чтобы заставить его работать, и это время я держал версии, так что вы можете получить код here наряду с решением VS2010, все DirectX работа выполняется в 3Dheader.h и D3DLoader.h

Изменения:
- пользовательский формат вершин FVF_CUSTOMVERTEX имеет был изменен, чтобы не включать RHW, поскольку я понимаю, что его нужно удалить, чтобы его вычислить Gh преобразования - В Render() я добавить вызов функции setMatrices(), которая делает всю матрицу и преобразовывать работу, и выглядит следующим образом:

void setMatrices() 
{ 
    //--------------transformation code----------------// 
    D3DXMATRIX objectM, translationM, rotationM, projectionM, lookAtM, finalM; 

HRESULT hr; 

D3DXMatrixIdentity(&objectM); 
D3DXMatrixRotationY(&rotationM, D3DX_PI/4); 
//D3DXMatrixMultiply(&finalM, &objectM, &rotationM); 

D3DXMatrixPerspectiveFovLH(&projectionM,D3DX_PI/4,(float)yRes/xRes, 1, 100); 

D3DXVECTOR3 camera; 
camera.x = -10; 
camera.y = 0; 
camera.z = 0; 
D3DXVECTOR3 cameraTarget; 
cameraTarget.x = 0; 
cameraTarget.y = 0; 
cameraTarget.z = 0; 
D3DXVECTOR3 cameraUp; 
cameraUp.x = 0; 
cameraUp.y = 1; 
cameraUp.z = 0; 
D3DXMatrixLookAtLH(&lookAtM,&camera,&cameraTarget, &cameraUp); 

hr = pd3dDevice->SetTransform(D3DTS_WORLD, &objectM); 
hr = pd3dDevice->SetTransform(D3DTS_PROJECTION, &projectionM); 
hr = pd3dDevice->SetTransform(D3DTS_VIEW, &lookAtM); 

D3DVIEWPORT9 view_port; 

view_port.X=0; 
view_port.Y=0; 
view_port.Width=xRes; 
view_port.Height=yRes; 
view_port.MinZ=0.0f; 
view_port.MaxZ=1.0f; 

pd3dDevice->SetViewport(&view_port); 
} 

Примечание конечно, что не могут быть необходимы некоторые элементы, расположенные там просто в случае моих попыток это код, который у меня есть, поэтому у нас есть общая ссылка.

Заранее благодарим за любые ответы и/или попытки ответить.

+0

Получить PIX-захват. Обычно будет ясно, что пойдет не так. В частности, посмотрите на вкладку сетки. – MuertoExcobito

+0

Вы также изменили положение и размер вершин в кубе? Мировые космические координаты имеют разный масштаб, чем преобразованные координаты экранного пространства. –

+0

@MuertoExcobito Не знаю, PIX даже существовал, ничего себе! Хорошо, вкладка Mesh на панели «Сведения» кажется единственной, с которой я могу получить информацию с моим текущим чтением, когда у меня выбрано «DrawIndexedPrimitives», в представлении Pre-Vertex Shader у меня есть рендеринг каркаса в post-VS абсолютно ничего, и viewport имеет две горизонтальные линии, которые, я полагаю, являются только границами окна. – user3079666

ответ

2

В вашем коде (скачано) xRes и yRes являются ints. Из-за целочисленного деления yRes/xRes будет равен нулю, так как xRes> yRes. Вы передаете это в функцию D3DXMatrixPerspextiveFovLH как соотношение сторон, что приведет к недопустимой матрице. Вместо этого бросьте их, чтобы сначала поплавать, прежде чем делать деление, и передать результат.

+0

. Хорошее: в какой-то момент я исправил это, но, похоже, в какой-то момент я вернулся, поэтому я очень рад, что вы это указали. В PIX сетка находится внутри окна просмотра. Также все значения выглядят совершенно правильно. Плохо: я ничего не получаю от Render (я ничего не вижу в приложении, конечно). Я рассмотрю еще один очень тщательный взгляд и посмотрю, смогу ли я обнаружить что-то не так, прежде чем я буду вас больше обманывать. – user3079666

+0

Кстати, это сработало для вас? Хотя это и не вероятно, я, возможно, переделал что-то еще, если он побежал за вами, тогда он, вероятно, будет решен. – user3079666

+0

Я не пытался запустить его. Если у вас есть другая проблема, отправьте другой вопрос. SO работает лучше, когда вопросы вопросов минимальны. – MuertoExcobito

 Смежные вопросы

  • Нет связанных вопросов^_^