Как исправить текстуру в DirectX9 - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь нарисовать ландшафт, используя Directx9.Я устанавливаю вершины и индексы, но это плохо работает.некоторые полигоны не видны, как эта картинка.почему некоторые полигоны не нарисованы?Как мне решить эту проблему.помогите мне пожалуйста.

приведенный ниже код является частью вершины и индексного буфера после разблокировки.

Структура MYINDEX содержит три индекса каждого типа слова.

Структура TERRAINVERTEX содержит DXVECTOR3 дляположение и DXVECTOR2 для ультрафиолетовой координаты.

enter image description here

TERRAINVERTEX v;
pv = (TERRAINVERTEX *)pVertices;

MYINDEX i;
pi = (MYINDEX*)pIndices;

int offSet = 0;

for (int z = 0; z < m_iCz-1; ++z)
{
    for (int x = 0; x < m_iCx-1; ++x)
    {
        // left top
        v.point.x = (float)((x - m_iCx / 2) * m_vfScale.x);
        v.point.z = -(float)((z - m_iCz / 2) * m_vfScale.z);
        v.point.y = 0.0f;

        v.texture.x = 0;
        v.texture.y = 0;
        pi->i_0 = offSet++;
        *pv++ = v;

        //right top
        v.point.x = (float)(((x+1 - m_iCx / 2) * m_vfScale.x));
        v.point.z = -(float)((z - m_iCz / 2) * m_vfScale.z);
        v.point.y = 0.0f;

        v.texture.x = 1;
        v.texture.y = 0;
        pi->i_1 = offSet++;
        *pv++ = v;

        //left down
        v.point.x = (float)(((x  - m_iCx / 2) * m_vfScale.x));
        v.point.z = -(float)((z + 1 - m_iCz / 2) * m_vfScale.z);
        v.point.y = 0.0f;

        v.texture.x = 0;
        v.texture.y = 1;
        pi->i_2 = offSet++;
        *pv++ = v;

        ++pi;

        //right down
        v.point.x = (float)(((x + 1 - m_iCx / 2) * m_vfScale.x));
        v.point.z = -(float)((z + 1 - m_iCz / 2) * m_vfScale.z);
        v.point.y = 0.0f;

        v.texture.x = 1;
        v.texture.y = 1;
        pi->i_0 = offSet++;

        *pv++ = v;

        //left down
        v.point.x = (float)(((x + 1 - m_iCx / 2) * m_vfScale.x));
        v.point.z = -(float)((z + 1 - m_iCz / 2) * m_vfScale.z);
        v.point.y = 0.0f;

        v.texture.x = 0;
        v.texture.y = 1;
        pi->i_1 = offSet++;
        *pv++ = v;

        //right top
        v.point.x = (float)(((x + 1 - m_iCx / 2) * m_vfScale.x));
        v.point.z = -(float)((z - m_iCz / 2) * m_vfScale.z);
        v.point.y = 0.0f;

        v.texture.x = 1;
        v.texture.y = 0;
        pi->i_2 = offSet++;
        *pv++ = v;

        ++pi;
    }
}
...