我正在使用freeglut。我试图让FSAA工作,但似乎没有任何效果。样本缓冲区为1,样本为4.但我没有看到任何抗锯齿。我错过了什么吗?目前,我正在运行Ubuntu 12.04;不确定是否会改变任何内容。
#include <GL/glut.h>
#include <GL/glext.h>
#include <stdio.h>
void render(void);
int main(int argc, char **argv){
glutInit(&argc,argv);
//Initialize the window
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_MULTISAMPLE);
glutInitWindowPosition(100,100);
glutInitWindowSize(200,200);
glutCreateWindow("Testing");
glutDisplayFunc(render);
//Enable FSAA
glEnable(GL_MULTISAMPLE);
//2D graphics
glDisable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT), 0, 0, 1);
glMatrixMode(GL_MODELVIEW);
GLint buf, sbuf;
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);
glutMainLoop();
return 0;
}
//Draw some stuff
void render(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glColor3f(0.0f,1.0f,0.0f);
glBegin(GL_LINE_LOOP);
glVertex2f(10.0,10.0);
glVertex2f(170.0,60.0);
glVertex2f(50.0,130.0);
glVertex2f(50.0,60.0);
glEnd();
glutSwapBuffers();
}
我很清楚SDL和GLFW。我想让它在freeglut中工作。
更多信息:
显卡:ATI Radeon HD 4250
OpenGL版本:3.3.11627兼容性配置文件上下文
答案 0 :(得分:0)
要在2D中对点和线进行抗锯齿处理,您也可以这样做:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_LINE_SMOOTH);
glHint(GL_LINE_SMOOTH, GL_NICEST);
glEnable(GL_POINT_SMOOTH);
glHint(GL_POINT_SMOOTH, GL_NICEST);
答案 1 :(得分:0)
您的代码在我的计算机上运行正常(运行Windows)。只要确保你使用freeglut而不仅仅是常规GLUT。因此,您应该链接到正确的库文件(如Windows上的freeglut.lib / freeglut.dll)。另外,包含freeglut.h而不是glut.h并不是一个坏主意,以确保你实际上包含了你想要的头文件。
此外,无需每帧调用glClearColor
。您只需要在想要更改清晰颜色时调用它。请记住,就像glColor
一样,glClearColor
仅适用于之后发生的函数调用。
答案 2 :(得分:0)
我的Windows 7上的GLUT NVIDIA在某种程度上也无法正常工作。我为样本buffers
和Samples
得到0。
然而,freeglut解决了它,并为您提供了设置Samples
。
glutSetOption(GLUT_MULTISAMPLE, 4);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_MULTISAMPLE);
将其打开
void glexMultisample(int msaa)
{
if (msaa)
{
glEnable(GL_MULTISAMPLE);
// detect current settings
GLint iMultiSample = 0;
GLint iNumSamples = 0;
glGetIntegerv(GL_SAMPLE_BUFFERS, &iMultiSample);
glGetIntegerv(GL_SAMPLES, &iNumSamples);
printf("MSAA on, GL_SAMPLE_BUFFERS = %d, GL_SAMPLES = %d\n", iMultiSample, iNumSamples);
}
else
{
glDisable(GL_MULTISAMPLE);
printf("MSAA off\n");
}
}