Как заставить openGL нарисовать невыпуклый заполненный многоугольник
Кажется, что стандарт состоит в том, что многоугольник нарисован в выпуклой форме. См. Stackoverflow.com/questions/15556929/open-gl-polygon Однако это не для меня, если я выберу его для заполнения. Как я могу заполнить свой многоугольник, сохраняя заданную форму?
void drawFloor(){
// White
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); // GL_LINE works the way I want it too
//glDisable(GL_POLYGON_SMOOTH); // has no effect :(
glBegin(GL_POLYGON);
glColor3f(1.0, 1.0, 1.0);
glVertex3f(0, 0, 0); //0
glVertex3f(2*boxSize, 0, 0); //1
glVertex3f(2 * boxSize, -boxSize, 0); //2
glVertex3f(5 * boxSize, -boxSize, 0); //3
glVertex3f(5 * boxSize, 4 * boxSize, 0); //4
glVertex3f(6 * boxSize, 4 * boxSize, 0); //5
glVertex3f(6 * boxSize, 6 * boxSize, 0); //6
glVertex3f(0 * boxSize, 6 * boxSize, 0); //7
glVertex3f(0 * boxSize, 2 * boxSize, 0); //8
glVertex3f(1 * boxSize, 2 * boxSize, 0); //9
glVertex3f(1 * boxSize, 4 * boxSize, 0); //10
glVertex3f(2 * boxSize, 4 * boxSize, 0); //11
glVertex3f(2 * boxSize, 3 * boxSize, 0); //12
glVertex3f(3 * boxSize, 3 * boxSize, 0); //13
glVertex3f(3 * boxSize, 2 * boxSize, 0); //14
glVertex3f(2 * boxSize, 2 * boxSize, 0); //15
glVertex3f(2 * boxSize, 1 * boxSize, 0); //16
glVertex3f(0, 1 * boxSize, 0); //17
glEnd();
}
Этот код приводит к:
http://postimg.org/image/o4wt9ij33/ с GL_LINEhttp://postimg.org/image/l31fltgkf/ с GL_FILL
Я хочу, чтобы только внутри многоугольника была заполнена, сохраняя форму версии с GL_LINE. Я не ожидал, что выход GL_FILL будет таким разным.
Что я хочу (создано с помощью MS paint): http: // postimg.org/image/d3gbf613d/
Я использую Win7 + Visula Studio Express2013 + Renderer Intel HD Graphics Версия: 3.1.0 - Bulid 8.15.10.2509+ GLSL версия 1.40