2012-01-31 6 views
0

Я писал программу с использованием directx11, и я написал базовый класс камеры, который манипулирует матрицей вида. Когда я тестирую программу, результат заключается в том, что сцена не перемещается, но когда я перемещаю камеру, она имеет эффект отсечения того, что видно в произвольном месте. Я приложил несколько фотографий, чтобы показать, что я имею в виду. Необычное поведение камеры, DX11

Я оставил свой пиксельный шейдер только выводящий красные пиксели на данный момент.

Моя вершинный шейдер на примере SDK:

cbuffer cbChangeOnResize : register(b1) { matrix Projection; };

cbuffer cbChangesEveryFrame : register(b2) 
{ 
    matrix View; 
    matrix World; 
}; 


struct VS_INPUT 
{ 
    float4 Pos : POSITION; 
    float2 Tex : TEXCOORD0; 
}; 

struct PS_INPUT 
{ 
    float4 Pos : SV_POSITION; 
    float2 Tex : TEXCOORD0; 
}; 

PS_INPUT TEX_VS(VS_INPUT input) 
{ 
    PS_INPUT output = (PS_INPUT)0; 
    output.Pos = mul(input.Pos, World); 
    output.Pos = mul(output.Pos, View); 
    output.Pos = mul(output.Pos, Projection); 
    output.Tex = input.Tex; 

    return output; 
} 

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

спасибо.

+0

Я заметил при перемещении камеры, что часть сцены, которая оказанной кажется правильным, то есть, можно определить, что смотрящий усеченный угол, кажется, движется. Вот почему часть сцены отключена на моей второй картинке. Однако сцена отображается неправильно. Это похоже на то, что смотровая усечка отделена от положения камеры, хотя я думал, что оба они были заперты в начале координат. – fabspro

+0

Математическая ошибка, я отправил матрицу представлений вместо ее транспонирования в шейдер. – fabspro

ответ

1

Вы можете использовать row_major модификатор вместо транспонирования матриц перед передачей их в шейдер

+0

Спасибо, я посмотрел, что это лучший способ сделать это – fabspro

+0

И подтвердил, он работает красиво. Благодаря! – fabspro

0

Математическая ошибка, я отправил матрицу представлений вместо ее транспонирования в шейдер.