Я получаю данные вершин треугольника и векторные данные нормалей из файла stl, но когда я рендую их с помощью кода, подобного этому
for(uint32_t i = 0 ;i < mVertexCnt - 9;){
int z = i/9;
glBegin(GL_TRIANGLES);
glNormal3f(mNorm[3*z], mNorm[3*z+1], mNorm[3*z+2]);
glVertex3f(mVertix[i]/100,mVertix[i+1]/100,mVertix[i+2]/100); //1
glVertex3f(mVertix[i+3]/100,mVertix[i+4]/100,mVertix[i+5]/100); //1
glVertex3f(mVertix[i+6]/100,mVertix[i+7]/100,mVertix[i+8]/100); //1
i += 9;
glEnd();
}
результат будет похож на
Я думаю, это потому, что направление вектора нормали противоположно направлению света.
Мой вопрос в том, может ли OpenGL справиться сам. Проигнорируйте эту проблему направления и покажите правильный свет в каждом направлении. Кто-нибудь знает об этом?
Настройка освещения выглядит так:
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
glMaterialfv(GL_BACK, GL_SPECULAR, mat_specular);
glMaterialfv(GL_BACK, GL_SHININESS, mat_shininess);
//灯光设置
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightfv(GL_LIGHT0, GL_DIFFUSE, white_light); //散射光属性
glLightfv(GL_LIGHT0, GL_SPECULAR, white_light); //镜面反射光
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, Light_Model_Ambient); //环境光参数
glEnable(GL_LIGHTING); //开关:使用光
glEnable(GL_LIGHT0); //打开0#灯