我正在尝试将纹理应用到DirectX 9中的立方体,到目前为止,我已经使用顶点颜色和光以及材质和光线绘制它,但现在使用纹理我得到一个空白立方体,在我的应用程序中它呈现白色,在PIX中它呈现黑色。我知道纹理正确加载,因为我可以从PIX看到它,因为我已经确定我可以检测到加载函数可能返回的任何错误(通过HResult
)编辑:它是相同的图像一个表面,但是有一个断点我看到纹理有一个地址,因此存在,无论是否正确我都说不清楚,我能不能在PIX中看到它?我也知道我已经得到了正确的UV,因为它们在我选择顶点时出现在PIX中,并且它们确实是顺时针顺序(至少有一个面,但这应该足以绘制东西)。
我删除了灯光代码,因此代码为:
pd3dDevice->BeginScene();
setMatrices();
pd3dDevice->SetTexture(0, tex);
//pd3dDevice->SetRenderState(D3DRS_WRAP0, D3DWRAPCOORD_0);
pd3dDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
pd3dDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
pd3dDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
//pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
// select which vertex format we are using
pd3dDevice->SetFVF(CUSTOMFVF);
// select the vertex buffer to display
pd3dDevice->SetStreamSource(0, v_buffer, 0, sizeof(CUSTOMVERTEX));
pd3dDevice->SetIndices(i_buffer);
// copy the vertex buffer to the back buffer
pd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,
0,
0,
8,
0,
12);
pd3dDevice->EndScene();
setMatrices()
进行转换,在我添加灯光之前它运作良好所以应该没问题。我注释掉了对光处理功能的调用,所以它不应该干扰当前的代码。
我注意到,如果我删除pd3dDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
,我会得到一个黑色无阴影但变形的立方体,这对我来说似乎是合理的。
注释掉的代码行,我试过有没有它们,就我所见,它们似乎并没有影响到这种情况。我已经尝试了几个渲染状态设置,但没有运气 - 毕竟他们大多是受过教育的猜测,而不是应该工作的东西。
FVF具有XYZ,法向量和UV。
同样,PIX将立方体显示为黑色,我在应用程序中将其显示为白色。也许那里有暗示?
感谢您提供帮助的任何尝试,非常感谢。