Я сейчас пытаюсь применить освещение к сложной фигуре, нарисованной с флагом GL_TRIANGLE_STRIP. поскольку каждая плоскость в XYZ может быть определена тремя точками, вычисление нормали может быть довольно простым, но что произойдет, когда я использую gl_triangle_strip?
Чтобы сделать следующий код более читабельным, процесс рисования выглядит следующим образом:
(x, y) -> (x + 1, y) -> (x, y + 1) -> (x + 1, y + 1)
for(int i = 0; i < m_GraphConfig.MAXY ; i +=2)
{
glBegin(GL_TRIANGLE_STRIP);
for (int j = 0; j < m_GraphConfig.MAXX ;j+=2)
{
if ( (i * m_GraphConfig.MAXX + j + 2) % (m_GraphConfig.MAXX) != 0 && (i+2) % (m_GraphConfig.MAXY) != 0 && (j + 2) % (m_GraphConfig.MAXX) != 0 )
{
index = i * (m_GraphConfig.MAXX) + j;
heightVal = host[index];
glColor3b(((heightVal % 32) * 7 %255), ((heightVal % 16) * 14) %255, ((heightVal % 128) * 2)%255);
glTexCoord2f(0.0f, 0.0f);
glVertex3d(xFactor * j , host[index] /m_GraphConfig.devider , zFactor * i);
index = i * (m_GraphConfig.MAXX) + j + 2;
heightVal = host[index];
glColor3b(((heightVal % 32) * 7)%255, ((heightVal % 16) * 14)%255, ((heightVal % 128) * 2)%255);
glTexCoord2f(1.0f, 0.0f);
glVertex3d(xFactor * (j + 2) , host[index] / m_GraphConfig.devider, zFactor * i);
index = i * (m_GraphConfig.MAXX) + j + (2 * m_GraphConfig.MAXX);
heightVal = host[index];
glColor3b(((heightVal % 32) * 7)%255, ((heightVal % 16) * 14)%255, ((heightVal % 128) * 2)%255);
glTexCoord2f(0.0f, 1.0f);
glVertex3d(xFactor * j , host[index] / m_GraphConfig.devider , zFactor * (i + 2));
index = i * (m_GraphConfig.MAXX) + j + (2 * m_GraphConfig.MAXX) + 2;
heightVal = host[index];
glColor3b(((heightVal % 32) * 7)%255, ((heightVal % 16) * 14)%255, ((heightVal % 128) * 2)%255);
glTexCoord2f(1.0f, 1.0f);
glVertex3d(xFactor * ( j + 2) , host[index] / m_GraphConfig.devider , zFactor * (i + 2));
}
}
glEnd();
glBindTexture( GL_TEXTURE_2D, 0 ); //clear the texture buffer
}