Smooth в opengl не работает

glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_SRC_COLOR);
glShadeModel(GL_SMOOTH);    // Разрешить плавное сглаживание
glClearColor(0.0f, 0.0f, 0.0f, 0.5f);   // Черный фон
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); // Сглаживание линий
glEnable(GL_BLEND);         // Разрешить смешивание
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);

//set the format and location for verticies
glVertexPointer(3, GL_FLOAT, 0, vertices);

glNormalPointer(GL_FLOAT, 0, normals);

glCullFace(GL_FRONT);
glDepthFunc(GL_LEQUAL);

//draw the triangles
glDrawArrays(GL_TRIANGLES, 0, numberOfVertices);

Вот мой код, и теперь я понятия не имею, почему код не работает. Буду очень благодарен за совет.


person Oleg    schedule 15.08.2011    source источник
comment
Можете ли вы добавить какое-то объяснение того, что вы пытаетесь сделать?   -  person Srikar Appalaraju    schedule 15.08.2011
comment
Ну конечно; естественно. Я читаю вершины и нормали из файла. И этот код загружает и рисует модель. Я рисую треугольниками, и модель идеальна, но сглаживание не работает, и я не знаю, почему.   -  person Oleg    schedule 15.08.2011
comment
@ Олег Я говорю, что код работает идеально, теперь докажите обратное, указав, что вы ожидаете от него и что он делает!   -  person Christian Rau    schedule 15.08.2011


Ответы (1)


Похоже, вы неправильно понимаете термин гладкий в данном контексте.

Во-первых, GL_LINE_SMOOTH_HINT влияет только на строки. Кроме того, я ссылаюсь на документацию.

Во-вторых, glShadeModel() устанавливает тип затенения вашего следующего примитива. GL_SMOOTH заставит цвета вершин интерполироваться в каждом результирующем фрагменте пикселя. GL_FLAT, однако, берет только один вычисленный цвет вершины и автоматически назначает его каждому фрагменту пикселя, который представляет ваш примитив. Кроме того, я ссылаюсь на документацию.

Ваше понимание гладкости неприменимо, как вы думаете, к треугольникам. Если вам действительно нужна гладкая модель, вам следует увеличить количество полигонов в модели.

person Wroclai    schedule 15.08.2011