只是一个关于 DirectX11 Tessellation 的问题。
在 Hull Shader 中,可以设置的最大细分因子为 64(不知道为什么)。现在虽然这对于小型飞机来说已经足够了,但对于大型飞机来说,这还不够,所以我想知道如何渲染大型飞机?
以下代码生成我的四边形,R
半径在哪里:
vertices[0] = D3DXVECTOR3(-R, 0.0f, R); //Top left
vertices[1] = D3DXVECTOR3( R, 0.0f, R); //Top right
vertices[2] = D3DXVECTOR3( R, 0.0f, -R); //Bottom right
vertices[3] = D3DXVECTOR3(-R, 0.0f, -R); //Bottom left
vertices[4] = D3DXVECTOR3(-R, 0.0f, R); //Top left
vertices[5] = D3DXVECTOR3( R, 0.0f, -R); //Bottom right
indices[0] = 0;
indices[1] = 1;
indices[2] = 2;
indices[3] = 3;
indices[4] = 4;
indices[5] = 5;
我确实修改了它,将它放在一个循环中以生成多个四边形,比如在 3x3 网格中。但是,当我将它传递给曲面细分着色器时,它对第一个四边形效果很好,但其他四边形却搞砸了。
vector<D3DXVECTOR3> verts;
vector<D3DXVECTOR2> tex;
float R = 1000;
for(int z = 0; z < 4; z++)
{
for(int x = 0; x < 4; x++)
{
float xOffset = x * (2*R);
float zOffset = z * (2*R);
// Load the vertex array with data.
verts.push_back( D3DXVECTOR3(-R+ xOffset, 0.0f, R+ zOffset) ); //Top left
verts.push_back( D3DXVECTOR3( R+ xOffset, 0.0f, R+ zOffset) ); //Top right
verts.push_back( D3DXVECTOR3( R+ xOffset, 0.0f, -R+ zOffset) ); //Bottom right
verts.push_back( D3DXVECTOR3(-R+ xOffset, 0.0f, -R+ zOffset) ); //Bottom left
verts.push_back( D3DXVECTOR3(-R+ xOffset, 0.0f, R+ zOffset) ); //Top left
verts.push_back( D3DXVECTOR3( R+ xOffset, 0.0f, -R+ zOffset) ); //Bottom right
tex.push_back( D3DXVECTOR2(0.0f, 0.0f) );
tex.push_back( D3DXVECTOR2(1.0f, 0.0f) );
tex.push_back( D3DXVECTOR2(0.0f, 1.0f) );
tex.push_back( D3DXVECTOR2(0.0f, 1.0f) );
tex.push_back( D3DXVECTOR2(1.0f, 0.0f) );
tex.push_back( D3DXVECTOR2(1.0f, 1.0f) );
}
}
// Set the number of vertices in the vertex array.
m_vertexCount = verts.size();
// Set the number of indices in the index array.
m_indexCount = verts.size();
// Create the vertex array.
vertices = new VertexType[m_vertexCount];
if(!vertices)
{
return false;
}
// Create the index array.
indices = new unsigned long[m_indexCount];
if(!indices)
{
return false;
}
for(int i = 0; i < m_vertexCount; i++)
{
vertices[i].position = verts[i];
vertices[i].texture = tex[i];
indices[i] = i;
}
这是我渲染环形平面时的样子:
为什么在使用多个四边形时不能正确镶嵌?我是否应该通过在我的图形类中创建一个循环来解决这个问题,然后我会一遍又一遍地翻译和渲染同一个四边形以创建一个网格?
希望这是有道理的。