如何以另一种颜色在顶点缓冲区中绘制顶点

如何以另一种颜色在顶点缓冲区中绘制顶点

问题描述:

我正在使用Direct3D 9绘制线条。如何以另一种颜色在顶点缓冲区中绘制顶点

我现在使用的顶点格式为D3DFVF_XYZ|D3DFVF_DIFFUSE,存储在顶点缓冲区中。它们用DrawPrimitive作为D3DPT_LINELIST来绘制。

如何更改整个绘制的顶点缓冲区或甚至特定顶点的绘制颜色,而不锁定顶点缓冲区以修改其内容?这必须每帧完成。

这是可能的顶点缓冲区?我更喜欢没有自定义着色器的解决方案(使用默认的direct3d 9管道)。

如果这是不可能的,那么做什么是明智的下一个最好的事情?我只能想到锁定顶点缓冲区或使用DrawPrimitiveUP。这两个表现都非常糟糕。


已更新,解决方案代码:

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)); 

顶点不需要FVF_DIFFUSE了。

使用固定功能流水线,您可以使用SetTextureStageStatedoc)指定恒定颜色,该颜色应与D3DTSS_CONSTANTdoc)一起使用。有了这个选项,你可以为整个drawcall设置一个颜色。