读书人

[]OPENGL多重采样的有关问题

发布时间: 2012-03-02 14:40:29 作者: rapoo

[求助]OPENGL多重采样的问题
我把红宝书上多重采样的例子运行了,结果不能实现多重采样。OPENGL版本是2.1,显卡是ATI HD3650,应该支持多重采样的,为什么不行呢?还是说GLUT不行?麻烦大家帮我看看吧。。。
代码:
#include <windows.h>
#include <iostream.h>
#include <GL\glut.h>
#include <GL\glext.h>

static int bgtoggle = 1;

void init(void)
{
GLint buf,sbuf;
int i,j;
const char* version = (const char*)glGetString(GL_VERSION);
printf("OpenGL 版本:%s\n", version);
glGetIntegerv(GL_SAMPLE_BUFFERS,&buf);
printf("number of sample buffers is %d\n",buf);
glGetIntegerv(GL_SAMPLES,&sbuf);
printf("number of samples is %d\n",sbuf);


glClearColor(0.0,0.0,0.0,0.0);

glNewList(1,GL_COMPILE);
for(i=0;i<19;i++)
{
glPushMatrix();
glRotatef(360.0*(float)i/19.0,0.0,0.0,1.0);
glColor3f(1.0,1.0,1.0);
glLineWidth((i%3)+1.0);
glBegin(GL_LINES);
glVertex2f(0.25,0.05);
glVertex2f(0.9,0.2);
glEnd();
glColor3f(0.0,1.0,1.0);
glBegin(GL_TRIANGLES);
glVertex2f(0.25,0.0);
glVertex2f(0.9,0.0);
glVertex2f(0.875,0.10);
glEnd();
glPopMatrix();
}
glEndList();

glNewList(2,GL_COMPILE);
glColor3f(1.0,0.5,0.0);
glBegin(GL_QUADS);
for(i=0;i<16;i++)
{
for(j=0;j<16;j++)
{
if(((i+j)%2)==0)
{
glVertex2f(-2.0+(i*0.25),-2.0+(j*0.25));
glVertex2f(-2.0+(i*0.25),-1.75+(j*0.25));
glVertex2f(-1.75+(i*0.25),-1.75+(j*0.25));
glVertex2f(-1.75+(i*0.25),-2.0+(j*0.25));
}
}
}
glEnd();
glEndList();
}

void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
if(bgtoggle)
glCallList(2);
glEnable(GL_MULTISAMPLE);
glPushMatrix();
glTranslatef(-1.0,0.0,0.0);
glCallList(1);
glPopMatrix();

glDisable(GL_MULTISAMPLE);
glPushMatrix();
glTranslatef(1.0,0.0,0.0);
glCallList(1);
glPopMatrix();
glutSwapBuffers();
}

void reshape(int w,int h)
{
glViewport(0,0,(GLsizei) w,(GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<=h)
gluOrtho2D(-2.0,2.0,-2.0*(GLfloat)h/(GLfloat)w,2.0*(GLfloat)h/(GLfloat)w);
else
gluOrtho2D(-2.0*(GLfloat)w/(GLfloat)h,2.0*(GLfloat)w/(GLfloat)h,-2.0,2.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

void keyboard(unsigned char key,int x,int y)
{
switch(key)
{
case 'b':case 'B':
bgtoggle=!bgtoggle;
glutPostRedisplay();
break;
case 27:
exit(0);
break;
default:
break;
}
}

int main(int argc,char **argv)
{

glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_MULTISAMPLE);
glutInitWindowSize(500,500);
glutInitWindowPosition(100,100);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}

运行结果:
OpenGL 版本:2.1.7417 Release
number of sample buffers is 0
number of samples is 0

版本支持的,为什么还是0呢?

[解决办法]
把你的glutInitDisplayMode 改成
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH|GLUT_MULTISAMPLE);

注意后面需要加上GLUT_MULTISAMPLE,否则你创建出来的context会不支持multi sample!!

读书人网 >图形图像

热点推荐