我是OpenGL的新手,我所有的知识都来自互联网上的教程。现在我可以编写由点光源点亮的旋转立方体。我的新目标是实现抗锯齿 - 可能没有任何神奇的技术,如假设的glEnable(Smooth_Lines)
功能。我目前使用的方法不起作用。
我的第一次尝试是尝试glAccum
功能并实现抖动消除锯齿 - 我不知道这是不可能在我的Radeon显卡上,或者我写错了。
我的第二次尝试是使用glGenFrameBuffers
(和其他家人)。但是现在(经过大约10个小时的研究)我只是没有力气继续下去。你能告诉我应该在哪里实施抗锯齿处理吗?或者我应该使用哪些功能?这是我整个代码的剪切版本:
class Window;
static Window* ptr;
class Window{
GLuint vbo[4],program;
GLint att[5],mvp,mvp2;
void init_res(){
a0=glutGet(GLUT_ELAPSED_TIME);
GLfloat cube[]= ... something
GLfloat colors[]= ... still something
GLushort elements[]= ... oh you can just guess how it should look :)
//now I am binding buffers and send cube data to shaders
program=glCreateProgram();
//little more code here
}
void Draw(){
// here is subfunction for drawing all cube.
}
void onDisplay(){
//here is main function which is send to glutDisplayFunc
Draw();
//should I add something here?
glutSwapBuffers();
}
Window(int s_w,int s_h){
glutInit(&ac, av);
glutInitDisplayMode(GLUT_RGBA|GLUT_ALPHA|GLUT_DOUBLE|GLUT_DEPTH);
glutInitWindowSize(s_w, s_h);
glutCreateWindow("My Rotating Cube");
glewInit();
init_res();
ptr=this;
glutDisplayFunc(Display);
glutReshapeFunc(Reshape);
glutIdleFunc(Idle);
glutKeyboardFunc(Key);
glEnable(GL_LINE_SMOOTH_HINT);
glEnable(GL_POINT_SMOOTH);
glEnable(GL_POLYGON_SMOOTH);
glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
glEnable(GL_BLEND);
glHint(GL_POLYGON_SMOOTH_HINT,GL_NICEST);
glEnable(GL_DEPTH_TEST);
glEnable(GL_MULTISAMPLE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//here is a lot of garbage - you can call it 'voodoo programming'
glutMainLoop();
free_resources();
}
};
int main(int argc, char** argv){
ac=argc;
av=argv;
Window *okno;
okno = new Window(800,600);
}
目前,该计划中的所有内容都有效(当然,在削减之前:P)。我没有附加着色器 - 它们尽可能简单(带有光照和添加的立方体边框)。
如何在这里实现抗锯齿的想法?