2012-10-23 32 views
6

Programuję własną bibliotekę 2D GUI z OpenGL i jestem na etapie, w którym mam kontrolkę kontenera, która może zawierać elementy graficzne (jak zaokrąglony prostokąt lub gwiazda) i inne dziecko kontroluje ... etc ... Próbuję przyciąć rendering elementów sterujących i elementów graficznych podrzędnych do formantu nadrzędnego. Jeśli więc kontrola nad dzieckiem przepełnia granice kontenerów, nie jest renderowana.Obcinanie regionu OpenGL 2D nie prostokątne

Moim pierwszym pomysłem było użycie "testu nożycowego" po jego odkryciu podczas przeszukiwania sieci. Ale problem polega na tym, że jestem ograniczony do prostokątnego obcinania i chcę móc przycinać zawartość w dowolnym regionie, takim jak kształt wielokąta gwiazdy.

Mam pomysł ...

Kiedy nadszedł moment, aby narysować kontroli i jej elementów graficznych, patrzę jeśli kontrola musi clip jego treść, czy nie. Jeśli tak, rysuję go jednolitym białym kolorem na czarnym tle w teksturce poza ekranem. Następnie wysyłam go do programu cieniującego. W związku z tym renderuję każde dziecko (elementy sterujące i elementy graficzne) z aktywowanym moim modułem cieniującym. W tym shaderem fragmentów, dla każdego fragmentu, myślę, że patrząc na tę samą współrzędną w specjalnej teksturze przekazanej wcześniej. Jeśli fragment w specjalnej teksturze jest biały, mogę oddać ten fragment, ponieważ znajduje się w widocznym regionie.

Czy uważasz, że to może działać? Czy to dobry pomysł, czy jest lepszy?

Odpowiedz

2

Można to zrobić na kilka sposobów w zależności od potrzeb. Renderowanie na teksturę lub bufor wzorcowy byłby prawdopodobnie najlepszym wyborem. Ten link ma więcej informacji na początek:

OpenGL clipping

+1

Cześć i dzięki za odpowiedź. Kontynuowałem czytanie i widziałem to rozwiązanie szablonowe. Nigdy nie pracowałem z tym, ale myślę, że będzie łatwiejsze do wdrożenia niż rozwiązanie modułu cieniującego. – user1768815