OpenGL программирование на C ++: сглаживание

Я довольно новичок в 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). Я не прикреплял шейдеры — они настолько просты, насколько это возможно (с подсветкой и добавленными границами куба).

Есть идеи, как реализовать сглаживание здесь?

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]