2013-05-08 5 views
1

선을 그릴 때 Direct3D 9를 사용하고 있습니다.다른 색상의 정점 버퍼에서 정점을 그리는 방법

지금 사용하고있는 정점의 형식은 D3DFVF_XYZ|D3DFVF_DIFFUSE이며 정점 버퍼에 저장됩니다. 그들은 DrawPrimitive으로 그려지며 D3DPT_LINELIST입니다.

그려진 전체 정점 버퍼 또는 특정 정점의 그려진 색을 정점 버퍼를 잠그지 않고 그 내용을 수정하려면 어떻게해야합니까? 이것은 매 프레임마다 이루어져야합니다.

정점 버퍼를 사용할 수 있습니까? 나는 맞춤형 쉐이더가없는 솔루션을 선호한다 (기본 direct3d 9 파이프 라인 사용).

이것이 가능하지 않다면 성능면에서 다음으로 가장 좋은 것은 무엇일까요? 버텍스 버퍼를 잠그거나 DrawPrimitiveUP을 사용하는 것만 생각할 수 있습니다. 둘 다 꽤 현명한 성능입니다.


는 솔루션 코드 업데이트 : 정점이 더 이상 FVF_DIFFUSE 필요하지 않습니다

m_pDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); 
m_pDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1); 
m_pDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_CONSTANT); 
m_pDevice->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_CONSTANT); 
m_pDevice->SetTextureStageState(0, D3DTSS_CONSTANT, D3DCOLOR_ARGB(120,0,255,0)); 

.

답변

1

고정 함수 파이프 라인을 사용하면 D3DTSS_CONSTANT (doc)과 함께 사용되는 상수 색을 지정하는 데 SetTextureStageState (doc)을 사용할 수 있습니다. 이 옵션을 사용하면 전체 drawcall의 색상을 설정할 수 있습니다.