сглаживать в opengl не работает - PullRequest
2 голосов
/ 15 августа 2011
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);

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

1 Ответ

1 голос
/ 15 августа 2011

Похоже, у вас нет правильного понимания термина smooth в этом контексте.

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

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

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

...