纹理立方体在DirectX中呈现空白

时间:2015-06-12 21:23:37

标签: c++ 3d directx textures directx-9

我正在尝试将纹理应用到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将立方体显示为黑色,我在应用程序中将其显示为白色。也许那里有暗示?

感谢您提供帮助的任何尝试,非常感谢。

0 个答案:

没有答案