我最近在directX10中進入了原始渲染階段。我需要這樣做,因爲我想將我的遊戲聊天從directx9轉換爲10,因爲我的巨大性能滯後於遊戲的弱dx9支持。這些線條在我想要的位置上表現得很好。我的實際問題是,它們不像直接X9(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);
}
我的效果叛逆連隊2的輸出
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()));"
" }"
"}";
例在最高設置下運行在窗口模式下(也嘗試使用AA關閉時最低)
你想要固定屏幕寬度的3D線嗎? (比如用glLineWidth命令) – Stringer 2010-08-26 15:18:00
我想畫2D。 DX9工作正常,1px的細線: http://img828.imageshack.us/img828/8417/lolwf.png DX10是我的問題,而不是一個PX細線: HTTP://img828.imageshack。 us/img828/346/screenshotvg.png – Frank 2010-08-26 15:27:03
我測試了我的DX10測試環境中的代碼。這些線條在那裏顯得很好。所以我很確定它的一些renderState或其他東西在遊戲環境中運行時強制該bug。 我試圖重置設備狀態 - > ClearnState()但沒有解決。 – Frank 2010-08-27 07:50:53