2013-06-05 6 views
0

Я использую OpenGL с C++ (но без шейдеров и GLSL) и рисования сфер (шара пула) и цилиндров (ручку), используя функции библиотеки glu нарисуйте их. Я использую glBindTexture() для связывания текстуры и загрузки текстуры с помощью SOIL library.Рендеринг гладких шаров и цилиндра с gluSphere() и gluCylinder()

Как видно из скриншотов, на цилиндр и сферу есть зубчатые края. Вызов следующих glHint() Как избавиться от зубчатых краев. У gluSphere() есть 25 стопок и кусочков, а у gluCylinder() - 100 стопок и ломтиков. Увеличение стеков и фрагментов не улучшает качество изображения.

Использование freeglut для остальной части рисунка

glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST); //Smooth polygons 
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); //Best perspective corrections 
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); //Smooth points 
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); //Smooth lines 

Screenshot

+4

Что вам нужно сделать, это сглаживание. –

ответ

2

Прежде всего, ваш вопрос связан с aliasing срока, это то, что случается, когда tringles и некоторые другие примитивы (это очень базовые объекты, которые создают целую сцену) растрируются (на основе геометрического описания некоторые пиксели на экране окрашены или нет). Попробуйте найти «Как включить сглаживание» - вот много полезной информации об этом и некоторых смежных темах: http://www.glprogramming.com/red/chapter06.html. В вашем случае это, вероятно, будет glEnable для GL_POLYGON_SMOOTH и GL_BLEND. например.

glEnable (GL_POLYGON_SMOOTH); 
glEnable (GL_BLEND); 
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
glHint (GL_POLYGON_SMOOTH_HINT, GL_DONT_CARE); 

Если вы планируете использовать линии будет GL_LINE_SMOOTH и GL_LINE_SMOOTH_HINT.

Для будущих проектов старайтесь не использовать такие сложные модели, если они далеки от зрителя (делая так много ломтиков для сферы), это приведет к потере производительности.

+0

Есть ли другой способ рисовать сферы и цилиндры без функций glu()? Или вы говорите об уменьшении количества стеков и кусочков? – viraj

+0

EDIT: Мне также нужно было включить GL_MULTISAMPLE. И передайте GL_MUTLISAMPLE в качестве параметра 'glutInit()', чтобы получить Anti-Aliasing – viraj

+1

Да, я говорил о сокращении количества стеков и фрагментов - 25 довольно жарко, если у вас есть пара сфер, построенных с таким количеством треугольников, то вы можете получить небольшую потерю производительности - это не критично в такой сцене, а просто держите ее в своем уме на будущее. Эти функции в порядке, чтобы сделать несколько образцов (эти модели имеют хорошие текстурные коорды и обычные векторы), но для более продвинутых проектов попытайтесь найти какую-нибудь библиотеку для чтения моделей из файлов, хорошую и удобную в использовании, с большим количеством возможностей, [assimp] (http://assimp.sourceforge.net/). –