2012-04-28 25 views
6

W moim projekcie OpenGL, Chcę dynamicznie tworzyć wygładzone wielokątów, podobny jak ten:OpenGL: tworzenie złożonych i wygładzonych wielokątów

enter image description here

Problem polega głównie w procesie wygładzania. Moja procedura do tego momentu polega przede wszystkim na utworzeniu VBO z losowo umieszczonymi wierzchołkami.

Następnie, w moim module cieniującym (używam programowalnego potoku funkcji), powinien nastąpić proces wygładzania, lub innymi słowy, utworzenie krzywych z wcześniej zdefiniowanych "linii" między wierzchołkami.

I tutaj jest problem: nie znam się dobrze na skomplikowanych algorytmach matematycznych, które sprawdzałyby, czy punkt znajduje się w "wygładzonym wielokącie", czy nie.

Odpowiedz

3

Po pierwsze, naprawdę nie można tego zrobić w module cieniującym fragmentu. Moduł cieniujący ogranicza się do ustawienia ostatecznego (ish) koloru "piksela" (który jest zasadniczo, ale nie dokładnie, rzeczywistym pikselem), zanim zostanie zapisany na ekranie. Nie może tworzyć nowych punktów na krzywej.

This page zawiera ładny przegląd różnych algorytmów tworzenia gładkich krzywych.

Ogólne podejście polega na podzieleniu kilku punktów na wiele punktów za pomocą modułu cieniującego geometrii, a następnie renderowania ich jak normalnego wielokąta. Ale nie znam szczegółów. Spróbuj na przykład wyszukiwania google pod numerem bezier geometry shader.

Czekaj, kłamie. Znalazłem program here, który robi to w module cieniującym fragment.

+0

Dziękujemy! Myślę, że znalazłem to, czego szukałem: http://code.google.com/p/victamin/downloads/detail?name=GPUBezier.zip – cafaxo