Я попытался провести линию между двумя вершинами с помощью D3D11. У меня есть некоторый опыт работы с D3D9 и D3D11, но кажется, что в D3D11 проблема заключается в том, чтобы нарисовать линию, которая начинается в одном заданном пикселе и заканчивается в другом.
Что я сделал:
Я добавил 0,5f к пиксельным координатам каждой вершины, чтобы они соответствовали системе координат тексель / пиксель (я читал страницы Microsoft о различиях между системами координат D3D9 и D3D11):
f32 fOff = 0,5f; ColoredVertex newVertices [2] = {{D3DXVECTOR3 (fStartX + fOff, fStartY + fOff, 0), vecColorRGB}, {D3DXVECTOR3 (fEndX + fOff, fEndY + fOff, 0), vecColorRGB}};
Сгенерирована матрица орто-проекции для соответствия цели рендеринга:
D3DXMatrixOrthoOffCenterLH (& MatrixOrthoProj, 0,0f, (f32) uRTWidth, 0,0f, (f32) uRTHeight, 0,0f, 1.0f); D3DXMatrixTranspose (& cbConstant.m_matOrthoProjection, & MatrixOrthoProj);
Установите RasterizerState, BlendState, Viewport, ...
- Нарисуйте вершины как D3D11_PRIMITIVE_TOPOLOGY_LINELIST
Проблема: кажется, что линия короче на один пиксель. Он начинается в заданной координате пикселя и идеально подходит. Направление линии выглядит правильным, но пиксель, в котором я хочу, чтобы линия заканчивалась, все еще не окрашен. Похоже, что линия короче всего на один пиксель ...
Объясняет ли какой-либо учебник эту проблему или у кого-нибудь есть такая же проблема? Насколько я помню, в D3D9 было не так сложно.
Пожалуйста, спросите, нужна ли вам дополнительная информация.
Спасибо Стефан
РЕДАКТИРОВАТЬ: обнаружены правила растеризации для d3d10 (должны быть одинаковыми для d3d11): http://msdn.microsoft.com/en-us/library/cc627092%28v=vs.85%29.aspx#Line_1
Надеюсь, это поможет мне понять ...
D3D_FEATURE_LEVEL_9_x
? - person Necrolis   schedule 05.05.2011