Я недавно вступил в примитивный рендеринг в directX10. Мне нужно это, потому что я хочу конвертировать мой игровой чат с directx9 на 10 из-за того, что мое огромное отставание в производительности было вызвано поддержкой слабых dx9 игр. Строки отображаются на позициях, которые я хочу. Моя фактическая проблема заключается в том, что они не кажутся такими же тонкими, как в directX9 (ширина 1 пиксель). Они кажутся более толстыми, чем пиксель. Я кое-что прочитал и нашел информацию о том, что ее можно исправить с помощью какого-то геометризованного шейдера. Кто-нибудь знает, как это будет работать и как это будет выглядеть разумно? Я не настолько глубоко погружен в это.Примитивная толщина - DX10
Прикрепленный метод DrawLine (инициализация разве нужен я верю, если так я выложу его immediliantly)
void drawLine(int x1, int y1, int x2, int y2, D3DCOLOR lineColor) {
VERTEX Vertices[] = {
/*p1*/{getScreenPercentage(x1, y1), lineColor}, //getScreenPercentage puts the given screencoords into the rasterized state
/*p2*/{getScreenPercentage(x2, y2), lineColor}
};
pDevice->IASetInputLayout(pVertexLayout);
UINT stride = sizeof(VERTEX);
UINT offset = 0;
pDevice->IASetVertexBuffers(0, 1, &p2pBuffer, &stride, &offset);
VERTEX* pVoid;
p2pBuffer->Map(D3D10_MAP_WRITE_DISCARD, 0, (void**)&pVoid);
pVoid[0] = Vertices[0];
pVoid[1] = Vertices[1];
p2pBuffer->Unmap();
pDevice->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_LINELIST);
pPass->Apply(0);
pDevice->Draw(2, 0);
}
И мой эффект
char szEffect[] =
"struct DATA"
"{"
" float4 Pos : SV_POSITION;"
" float4 Color : COLOR;"
"};"
"DATA VS(float4 Pos : POSITION, float4 Col : COLOR)"
"{"
" DATA Data;"
" Data.Pos = Pos;"
" Data.Color = Col;"
" return Data;"
"}"
"float4 PS(DATA Data) : SV_TARGET"
"{"
" return Data.Color;"
"}"
"technique10 T0"
"{"
" pass P0"
" {"
" SetVertexShader(CompileShader(vs_4_0, VS()));"
" SetGeometryShader(NULL);"
" SetPixelShader(CompileShader(ps_4_0, PS()));"
" }"
"}";
Пример выхода в Bad Company 2 работающий в оконном режиме на самых высоких настройках (также пробовал самый низкий уже с выключенным AA)
Вам нужны 3D-линии с фиксированной шириной экрана? (например, с командой glLineWidth) – Stringer
Я хочу нарисовать 2D. DX9 работает отлично, 1px тонкие линии: http://img828.imageshack.us/img828/8417/lolwf.png DX10 моя проблема, а не один РХ тонкие линии: Http: //img828.imageshack. us/img828/346/screenshotvg.png – Frank
Я протестировал код в тестовой среде DX10. Линии там выглядят хорошо. Поэтому я совершенно уверен, что его некоторые renderState или что-то еще заставляют эту ошибку работать в игровом контексте. Я попытался сбросить состояние устройств с помощью -> ClearnState(), но это не сработало. – Frank