Можно ли вызвать glNormal3f для треугольника в непосредственном режиме? - PullRequest
0 голосов
/ 02 марта 2019

Ниже приведен поверхностный нормальный вопрос для треугольной сетки:

float3 calcNormal( float3 p0 , float3 p1 , float3 p2 ){
float3 V = { p1.x - p0.x , p1.y - p0.y , p1.z - p0.z };
float3 U = { p2.x - p0.x , p2.y - p0.y , p2.z - p0.z };

float3 normal = {V.y * U.z - U.y*V.z , V.x * U.z - U.x * V.z , V.x * U.y - U.x * V.y };
return normal;
}

Нормальная функция треугольника ↑

glNormal3f(calcNormal( { i*size , heightMap[i][j]*h , j*size } , {(i+1)*size, heightMap[i+1][j]*h,j*size  } , { i*size,heightMap[i][j+1]*h,j*size  } ).x ,
                   calcNormal( { i*size , heightMap[i][j]*h , j*size } , {(i+1)*size, heightMap[i+1][j]*h,j*size  } , { i*size,heightMap[i][j+1]*h,j*size  } ).y,
                   calcNormal( { i*size , heightMap[i][j]*h , j*size } , {(i+1)*size, heightMap[i+1][j]*h,j*size  } , { i*size,heightMap[i][j+1]*h,j*size  } ).z);

С кодом выше я вычисляю нормаль 1-го треугольника из 2 треугольниковв одном квадрате и нижеприведенном я вычисляю нормаль 2-го треугольника (я полагаю).

glNormal3f(calcNormal( { (i+1)*size , heightMap[i+1][j]*h , j*size } , {(i)*size, heightMap[i][j+1]*h,(j+1)*size  } , { (i+1)*size,heightMap[i+1][j+1]*h,(j+1)*size  } ).x ,
                   calcNormal( { (i+1)*size , heightMap[i+1][j]*h , j*size } , {(i)*size, heightMap[i][j+1]*h,(j+1)*size  } , { (i+1)*size,heightMap[i+1][j+1]*h,(j+1)*size  } ).y,
                   calcNormal( { (i+1)*size , heightMap[i+1][j]*h , j*size } , {(i)*size, heightMap[i][j+1]*h,(j+1)*size  } , { (i+1)*size,heightMap[i+1][j+1]*h,(j+1)*size  } ).z);

Возможно ли использовать нормали треугольника вместо нормалей вершин в этом случае ниже, еслиИтак, как мне сделать нормальные звонки?

...
glBegin(GL_TRIANGLE_STRIP);
...       
glNormal3f(/*calculated normal*/); //I know these are supposed to be vertex normals
glColor3f(0,color_map ,color_ugate-color_map );
glVertex3f(i*size , heightMap[i][j]*h , j*size);

glNormal3f(/*calculated normal*/);
glColor3f(0,color_map ,color_ugate-color_map  );
glVertex3f((i+1)*size , heightMap[i+1][j]*h , j*size);

glNormal3f(/*calculated normal*/);
glColor3f(0,color_map ,color_ugate-color_map  );
glVertex3f(i*size , heightMap[i][j+1]*h , (j+1)*size);

glNormal3f(/*calculated normal*/);
glColor3f(0,color_map ,color_ugate-color_map  );
glVertex3f((i+1)*size , heightMap[i+1][j+1]*h , (j+1)*size);
...
glEnd();
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...