C++ 纹理的细节)

C++ 纹理的细节),c++,directx,direct3d,C++,Directx,Direct3d,如果要照亮立方体并需要每个面的法线,则会出现相同的问题,即不需要插值的逐顶点法线。在这种情况下,还必须引入重复的顶点,仅在其法线属性中偏离。请始终记住,一个顶点在概念上由所有顶点属性组成,如果两个顶点的位置相同但颜色不同/normal/texCoord/。。。它们在概念上(实际上)是不同的顶点。我不需要线框。这是我唯一需要改变的吗?其他的表面是不相关的,我不介意它们是单色的还是相同的texture@robev更新了我的答案。如果它们看起来真的不重要,应该这样做,但不要期望它们看起来合理(单一颜色

如果要照亮立方体并需要每个面的法线,则会出现相同的问题,即不需要插值的逐顶点法线。在这种情况下,还必须引入重复的顶点,仅在其法线属性中偏离。请始终记住,一个顶点在概念上由所有顶点属性组成,如果两个顶点的位置相同但颜色不同/normal/texCoord/。。。它们在概念上(实际上)是不同的顶点。

我不需要线框。这是我唯一需要改变的吗?其他的表面是不相关的,我不介意它们是单色的还是相同的texture@robev更新了我的答案。如果它们看起来真的不重要,应该这样做,但不要期望它们看起来合理(单一颜色或适当的纹理)。对不起,如果我希望正面和背面具有相同的纹理,但顶部底部和侧面是相同的呢irrelevant@robev这也会起作用。只需将其他4个顶点更改为合理的值(从背面看),我不需要线框。这是我唯一需要改变的吗?其他的表面是不相关的,我不介意它们是单色的还是相同的texture@robev更新了我的答案。如果它们看起来真的不重要,应该这样做,但不要期望它们看起来合理(单一颜色或适当的纹理)。对不起,如果我希望正面和背面具有相同的纹理,但顶部底部和侧面是相同的呢irrelevant@robev这也会起作用。只需将其他4个顶点更改为合理的值(如从背面看时所见)。
->SetRenderState(D3DRS\u FILLMODE,D3DFILL\u线框)这将仅渲染线框。没有实体渲染,没有正确的纹理。因此,使用实体填充或只是不更改它。
->SetRenderState(D3DRS\u填充模式,D3DFILL\u线框)这将仅渲染线框。没有实体渲染,没有正确的纹理。所以,使用实心填充或只是不改变它。
struct paperVertex {
    D3DXVECTOR3 pos;
    DWORD color;        // The vertex color
    D3DXVECTOR2 texCoor;
    paperVertex(D3DXVECTOR3 p, DWORD c, D3DXVECTOR2 t) {pos = p; color = c; texCoor = t;}
    paperVertex() {pos = D3DXVECTOR3(0,0,0); color = 0; texCoor = D3DXVECTOR2(0,0);}
};
D3DCOLOR color1 = D3DCOLOR_XRGB(255, 255, 255);
D3DCOLOR color2 = D3DCOLOR_XRGB(200, 200, 200);
vertices[0] = paperVertex(D3DXVECTOR3(-1.0f, -1.0f, -1.0f), color1, D3DXVECTOR2(1,0));  // bottom left corner of tex
vertices[1] = paperVertex(D3DXVECTOR3(-1.0f,  1.0f, -1.0f), color1, D3DXVECTOR2(0,0));  // top left corner of tex
vertices[2] = paperVertex(D3DXVECTOR3( 1.0f,  1.0f, -1.0f), color1, D3DXVECTOR2(0,1));  // top right corner of tex
vertices[3] = paperVertex(D3DXVECTOR3(1.0f, -1.0f, -1.0f), color1, D3DXVECTOR2(1,1));   // bottom right corner of tex
vertices[4] = paperVertex(D3DXVECTOR3(-1.0f, -1.0f,  1.0f), color1, D3DXVECTOR2(0,0));
vertices[5] = paperVertex(D3DXVECTOR3(-1.0f,  1.0f,  1.0f), color2, D3DXVECTOR2(0,0));
vertices[6] = paperVertex(D3DXVECTOR3(1.0f,  1.0f,  1.0f), color2, D3DXVECTOR2(0,0));
vertices[7] = paperVertex(D3DXVECTOR3(1.0f, -1.0f,  1.0f), color1, D3DXVECTOR2(0,0));
D3DXCreateTextureFromFile( md3dDev, "texture.bmp", &gTexture);
md3dDev->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
md3dDev->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
md3dDev->SetTexture(0, gTexture);
md3dDev->SetStreamSource(0, mVtxBuf, 0, sizeof(paperVertex));
md3dDev->SetVertexDeclaration(paperDecl);
md3dDev->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
md3dDev->SetIndices(mIndBuf);
md3dDev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, VTX_NUM, 0, NUM_TRIANGLES);