当光照启用时,DirectX 9顶点颜色会消失
DirectX 9 vertex colors ingored when lighting is enabled?
问题已经说明了。当我禁用光(pd3dDevice->SetRenderState(D3DRS_LIGHTING, TRUE);
)时,我得到预期的颜色,当我将其设置为true时,我得到纯黑色,即使我设置环境光,但这在设置材料时也是固定的。但是顶点的颜色被完全忽略了,我只得到环境光的颜色。
目前为止的搜索:我发现的唯一有用的文章是这个顶点照明教程,但是它从顶点上删除了漫反射颜色,取而代之的是添加了一个法向量。同样在MSDN上,关于漫射照明,它没有参考顶点的颜色。我开始怀疑顶点的颜色,就像RHW值一样,通常是在运行时计算的,在声明期间设置它只是在不需要照明的情况下给出颜色。就是这样吗?
lighting-related代码:
pd3dDevice->SetRenderState(D3DRS_LIGHTING, TRUE);
pd3dDevice->SetRenderState(D3DRS_COLORVERTEX, TRUE); // not sure if needed
pd3dDevice->SetRenderState(D3DRS_AMBIENT, D3DCOLOR_ARGB(22, 255, 255, 255)); // no visible difference on A
pd3dDevice->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD); // probably not needed yet, can't harm
D3DMATERIAL9 material;
D3DCOLORVALUE zeroColor;
D3DCOLORVALUE oneColor;
zeroColor.a = 0;
zeroColor.r = 0;
zeroColor.g = 0;
zeroColor.b = 0;
oneColor.a = 0; // no perceivable difference between 0 and 1
oneColor.r = 1;
oneColor.g = 1;
oneColor.b = 1;
material.Ambient = oneColor;
material.Diffuse = zeroColor; //setting it to oneColor has no effect
material.Emissive = zeroColor;
material.Power = 0; //no difference if 0 or 1
material.Specular = zeroColor;
pd3dDevice->SetMaterial(&material);
如果你想使用顶点颜色作为光照计算的输入,你需要将渲染状态D3DRS_AMBIENTMATERIALSOURCE
设置为D3DMCS_COLOR1
(用于漫射顶点颜色)。这同样适用于其他颜色组件。
相关文章:
- 使用 OpenGL 4.5 更改所选顶点的颜色
- 如何在顶点着色器中使用VBO数据作为位置数据,在片段着色器中使用统一数据作为颜色数据
- GLSL 将颜色数据从片段着色器发送到顶点着色器似乎总是等于 0
- CGAL:加载.off文件后,如何访问顶点颜色
- 如何将每个顶点的颜色转换为时间或某些功能
- 每帧更改顶点的颜色 (OpenGL)
- 提升图initialize_vertex更改顶点颜色(访客)
- 未绘制每个顶点处的C++OpenGL颜色
- 在 HLSL 中获取顶点的颜色
- 如何在 Ogre3D 中检索模型顶点的运行时颜色
- 绘制具有不同颜色顶点的OpenGL颜色矩形
- 在breadth_first_search期间设置顶点的颜色
- 顶点颜色不能正常工作
- 顶点缓冲对象的颜色- DirectX vs OpenGL
- 如何在顶点缓冲区中以另一种颜色绘制顶点
- glVertexAttribPointer语言 - 顶点法线或颜色
- Assimp无法加载PLY模型的顶点颜色
- 当光照启用时,DirectX 9顶点颜色会消失
- Boost图形库-顶点颜色和graphviz输出的最小示例
- Opengl顶点颜色插值