Skybox边线消除的解决办法
Skybox搞好后,发现在边线有很明显的裂缝,一开始时不知道如何解决,后来问了人,有人说把纹理采样改成Point,有人说纹理坐标改成0.001到0.999,这两样我都试过,发现改成Point裂缝是消除了,但看起来很不好看,改成0.001到0.999也有裂缝。
后来再问了一位高手,他就说了句,把Texture Addressing改了就行了。然后叫我直接查看DX SDK,我看了几种texture的address模式,终于领悟了,要采用纹理寻址的Clamp Texture Address Mode,可查看SDK。再把纹理坐标改成是0.001到0.999。问题就完美解决了。
渲染代码如下:
后来再问了一位高手,他就说了句,把Texture Addressing改了就行了。然后叫我直接查看DX SDK,我看了几种texture的address模式,终于领悟了,要采用纹理寻址的Clamp Texture Address Mode,可查看SDK。再把纹理坐标改成是0.001到0.999。问题就完美解决了。
渲染代码如下:
p3DDevice9->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);
p3DDevice9->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP);
创建VB代码如下:p3DDevice9->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP);
CUSTOMVERTEX_TXT cvVertices[] =
{
//上面的点
{vTBottomLeft, D3DCOLOR_XRGB(255, 0, 0), 0.001f, 0.001f,}, //Vertex 2 - Red
{vTBottomRight, D3DCOLOR_XRGB(255, 255, 0), 0.999f, 0.001f,}, //Vertex 3 - Green
{vTTopLeft, D3DCOLOR_XRGB(255, 255, 255), 0.001f, 0.999f,}, //Vertex 1 - Red
{vTTopRight, D3DCOLOR_XRGB(255, 255, 255), 0.999f, 0.999f,}, //Vertex 0 - Blue
//前面
{vTTopLeft, D3DCOLOR_XRGB(255, 255, 255), 0.001f, 0.001f,}, //Vertex 0 - Blue
{vTTopRight, D3DCOLOR_XRGB(255, 255, 255), 0.999f, 0.001f,}, //Vertex 1 - Red
{vBTopLeft, D3DCOLOR_XRGB(255, 255, 255), 0.001f, 0.999f,}, //Vertex 2 - Red
{vBTopRight, D3DCOLOR_XRGB(255, 255, 255), 0.999f, 0.999f,}, //Vertex 3 - Green
//右面
{vTTopRight, D3DCOLOR_XRGB(255, 255, 255), 0.001f, 0.001f,}, //Vertex 0 - Blue
{vTBottomRight, D3DCOLOR_XRGB(0, 255, 0), 0.999f, 0.001f,}, //Vertex 3 - Green
{vBTopRight, D3DCOLOR_XRGB(255, 0, 0), 0.001f, 0.999f,}, //Vertex 2 - Red
{vBBottomRight, D3DCOLOR_XRGB(255, 255, 255), 0.999f, 0.999f,}, //Vertex 1 - Red
//后面
{vTBottomRight, D3DCOLOR_XRGB(255, 255, 255), 0.001f, 0.001f,}, //Vertex 0 - Blue
{vTBottomLeft, D3DCOLOR_XRGB(255, 255, 255), 0.999f, 0.001f,}, //Vertex 0 - Blue
{vBBottomRight, D3DCOLOR_XRGB(255, 255, 255), 0.001f, 0.999f,}, //Vertex 1 - Red
{vBBottomLeft, D3DCOLOR_XRGB(255, 255, 255), 0.999f, 0.999f,}, //Vertex 1 - Red
//左面
{vTBottomLeft, D3DCOLOR_XRGB(255, 255, 255), 0.001f, 0.001f,}, //Vertex 0 - Blue
{vTTopLeft, D3DCOLOR_XRGB(255, 255, 255), 0.999f, 0.001f,}, //Vertex 0 - Blue
{vBBottomLeft, D3DCOLOR_XRGB(255, 255, 255), 0.001f, 0.999f,}, //Vertex 1 - Red
{vBTopLeft, D3DCOLOR_XRGB(255, 255, 255), 0.999f, 0.999f,}, //Vertex 1 - Red
//下面
{vBTopLeft, D3DCOLOR_XRGB(255, 0, 0), 0.001f, 0.001f,}, //Vertex 4 - Red
{vBTopRight, D3DCOLOR_XRGB(0, 0, 255), 0.999f, 0.001f,}, //Vertex 5 - Blue
{vBBottomLeft, D3DCOLOR_XRGB(0, 255, 0), 0.001f, 0.999f,}, //Vertex 6 - Green
{vBBottomRight, D3DCOLOR_XRGB(255, 0, 0), 0.999f, 0.999f,}, //Vertex 7 - Red
};
if(FAILED(p3DDevice9->CreateVertexBuffer(24 * sizeof(CUSTOMVERTEX_TXT),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &m_pVertexBuffer, NULL)))
{
return FALSE;
}
VOID* pVertices = NULL;
if(FAILED(m_pVertexBuffer->Lock(0, sizeof(cvVertices), (void**)&pVertices, 0)))
{
return FALSE;
}
//Copy our stored vertices values into the vertex buffer
memcpy(pVertices, cvVertices, sizeof(cvVertices));
//Unlock the vertex buffer
m_pVertexBuffer->Unlock();
{
//上面的点
{vTBottomLeft, D3DCOLOR_XRGB(255, 0, 0), 0.001f, 0.001f,}, //Vertex 2 - Red
{vTBottomRight, D3DCOLOR_XRGB(255, 255, 0), 0.999f, 0.001f,}, //Vertex 3 - Green
{vTTopLeft, D3DCOLOR_XRGB(255, 255, 255), 0.001f, 0.999f,}, //Vertex 1 - Red
{vTTopRight, D3DCOLOR_XRGB(255, 255, 255), 0.999f, 0.999f,}, //Vertex 0 - Blue
//前面
{vTTopLeft, D3DCOLOR_XRGB(255, 255, 255), 0.001f, 0.001f,}, //Vertex 0 - Blue
{vTTopRight, D3DCOLOR_XRGB(255, 255, 255), 0.999f, 0.001f,}, //Vertex 1 - Red
{vBTopLeft, D3DCOLOR_XRGB(255, 255, 255), 0.001f, 0.999f,}, //Vertex 2 - Red
{vBTopRight, D3DCOLOR_XRGB(255, 255, 255), 0.999f, 0.999f,}, //Vertex 3 - Green
//右面
{vTTopRight, D3DCOLOR_XRGB(255, 255, 255), 0.001f, 0.001f,}, //Vertex 0 - Blue
{vTBottomRight, D3DCOLOR_XRGB(0, 255, 0), 0.999f, 0.001f,}, //Vertex 3 - Green
{vBTopRight, D3DCOLOR_XRGB(255, 0, 0), 0.001f, 0.999f,}, //Vertex 2 - Red
{vBBottomRight, D3DCOLOR_XRGB(255, 255, 255), 0.999f, 0.999f,}, //Vertex 1 - Red
//后面
{vTBottomRight, D3DCOLOR_XRGB(255, 255, 255), 0.001f, 0.001f,}, //Vertex 0 - Blue
{vTBottomLeft, D3DCOLOR_XRGB(255, 255, 255), 0.999f, 0.001f,}, //Vertex 0 - Blue
{vBBottomRight, D3DCOLOR_XRGB(255, 255, 255), 0.001f, 0.999f,}, //Vertex 1 - Red
{vBBottomLeft, D3DCOLOR_XRGB(255, 255, 255), 0.999f, 0.999f,}, //Vertex 1 - Red
//左面
{vTBottomLeft, D3DCOLOR_XRGB(255, 255, 255), 0.001f, 0.001f,}, //Vertex 0 - Blue
{vTTopLeft, D3DCOLOR_XRGB(255, 255, 255), 0.999f, 0.001f,}, //Vertex 0 - Blue
{vBBottomLeft, D3DCOLOR_XRGB(255, 255, 255), 0.001f, 0.999f,}, //Vertex 1 - Red
{vBTopLeft, D3DCOLOR_XRGB(255, 255, 255), 0.999f, 0.999f,}, //Vertex 1 - Red
//下面
{vBTopLeft, D3DCOLOR_XRGB(255, 0, 0), 0.001f, 0.001f,}, //Vertex 4 - Red
{vBTopRight, D3DCOLOR_XRGB(0, 0, 255), 0.999f, 0.001f,}, //Vertex 5 - Blue
{vBBottomLeft, D3DCOLOR_XRGB(0, 255, 0), 0.001f, 0.999f,}, //Vertex 6 - Green
{vBBottomRight, D3DCOLOR_XRGB(255, 0, 0), 0.999f, 0.999f,}, //Vertex 7 - Red
};
if(FAILED(p3DDevice9->CreateVertexBuffer(24 * sizeof(CUSTOMVERTEX_TXT),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &m_pVertexBuffer, NULL)))
{
return FALSE;
}
VOID* pVertices = NULL;
if(FAILED(m_pVertexBuffer->Lock(0, sizeof(cvVertices), (void**)&pVertices, 0)))
{
return FALSE;
}
//Copy our stored vertices values into the vertex buffer
memcpy(pVertices, cvVertices, sizeof(cvVertices));
//Unlock the vertex buffer
m_pVertexBuffer->Unlock();