Сабж. У меня появилось подозрение, что сия функсия поддерживается не на всех машинах... плиz, подкиньти ссылку на пример кода, где используется такой эффект, предварительно проверив на своей машине. И вообше, непомешалб советы более-менее опытного в opengl... например, всё делать через glCallList, и как пользоваться функцией glDrawElement... Пример бы...
есть такая фишка как glEnable(GL_POLYGON_SMOOTH); но она не прокатывает на последних карточках от нвидия, идут глюки.
Я занком с двумя спосабами апаратного антиализинга. Это Supersampling и Multisamling.
1) Supersampling - используется в игре Homeworld2. Его смысл - испольования PBuffer-а много большего размера, чем вывод на экран, ренерин в этот буфер, а потом вывод этого буфера растянув его на два полигона на весь экран. Довольно требователен к филрейту видюхи и скорость видеопамяти. Оптимизируется донельзя. Можно гладить всё офигенно. Готовые примеры оч. большие, к сожалению не могу дать.
2) Multisampling - встроен в видюхи, так называемая тройная буферизация. Никаких мега замрочоек при рисовании не надо. Требует экстеншина ARB_multisample Ниже код для Windows-base system.
hdc - HDC на конекст рисования. Данный код вставлять ПОСЛЕ wglMakeCurrent
int pixelFormat;
bool valid;
UINT numFormats;
int iAttributes[] =
{
WGL_DRAW_TO_WINDOW_ARB, GL_TRUE, WGL_SUPPORT_OPENGL_ARB, GL_TRUE, WGL_ACCELERATION_ARB, WGL_FULL_ACCELERATION_ARB, WGL_COLOR_BITS_ARB, 24, WGL_ALPHA_BITS_ARB, 8, WGL_DEPTH_BITS_ARB, 24, WGL_STENCIL_BITS_ARB, 0, WGL_DOUBLE_BUFFER_ARB,GL_TRUE, WGL_SAMPLE_BUFFERS_ARB, GL_TRUE, WGL_SAMPLES_ARB, 4, 0};
PFNWGLCHOOSEPIXELFORMATARBPROC wglChoosePixelFormatARB = ( PFNWGLCHOOSEPIXELFORMATARBPROC )wglGetProcAddress( "wglChoosePixelFormatARB" );
valid = wglChoosePixelFormatARB( hdc, iAttributes, fAttributes, 1, & pixelFormat, & numFormats );
if ( !( valid && numFormats >= 1 ) )
printf( "Cannot init ARB multisample!\n" );
код для unix based system. Данный код вставлять ДО XCreateWindow
dpy - Display указатель на открытое соединие с Икс сервером.
XVisualInfo * vInfo;
GLXFBConfig * fbConfigs;
int atributes[] =
{GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT, GLX_RENDER_TYPE, GLX_RGBA_BIT, GLX_DOUBLEBUFFER, GL_TRUE, GLX_RED_SIZE, 8, GLX_GREEN_SIZE, 8, GLX_BLUE_SIZE, 8, GLX_ALPHA_SIZE, 8, GLX_DEPTH_SIZE, 24, GLX_STENCIL_SIZE, 0, GLX_SAMPLE_BUFFERS_ARB, GL_TRUE, GLX_SAMPLES_ARB, 4, None };
fbConfigs = glXChooseFBConfig( dpy, DefaultScreen( dpy ), atributes, & numReturned );
if ( fbConfigs == NULL )
return false;
vInfo = glXGetVisualFromFBConfig( dpy, fbConfigs[0] );
после vInfo и fbConfigs использовать для создания окна и контекста рендеринга.
в случаи провала конектст не будет создан.
перед этим желательно делать проверку на GL_ARB_multisample в списке glGetString(GL_EXTENSIONS);
для этих коов нао поключать gl/wglext.h или gl/glxext.h причём в случаи юникса перед подключением инклюда очень рекомендую селать так
#define GLX_EXT_PROTOTYPES 1
#include <gl/glxext.h>
Удачи.