Zdecydowanie nie polecam renderowania okręgu przez geometrię. Ma dwie główne wady:
- Jest powolny. Jeśli chcesz uzyskać akceptowalną dokładność, potrzebujesz wielu wierzchołków i każdy z tych wierzchołków musi zostać przetworzony w module cieniującym. Dla prawdziwego koła potrzebujesz tyle wierzchołków, ile twój okrąg ma piksele.
- To naprawdę nie jest elastyczne. Różne kręgi, stylizacja i kolokacja są trudne do opanowania.
Istnieje inna metoda, którą osobiście używam w każdym interfejsie graficznym API. Renderowanie co najmniej trójkąta lub kwadratu/kwadratu i użycie modułu cieniującego powoduje, że widoczny staje się tylko pik zaciemniający (oparty na równaniu). Jest bardzo łatwy do zrozumienia. Jest elastyczny i szybki.To wymaga mieszania, ale nie jest tak trudno dostać się do pracy.
Kroki:
Inicjalizuj swoje bufory za pomocą danych. Dla wierzchołków potrzebujesz bufora wierzchołków, bufora indeksu dla indeksów, jeśli używasz kwadratowej geometrii i bufora textCoord dla twoich współrzędnych tekstury. Dla kwadratu zalecam użycie -1.0 jako najniższego i 1,0 jako najwyższego współrzędnego tekstury, ponieważ wtedy możesz użyć równania koła jednostkowego.
W swojej fragment-shader, użyć czegoś takiego:
if ((textureCoord.x * textureCoord.x) + (textureCoord.y * textureCoord.y) <= 1.0)
{
// Render colored and desired transparency
}
else
{
// Render with 0.0 in alpha channel
}
Chociaż (textureCoord.x * textureCoord.x) + (textureCoord.y * textureCoord.y) < = 1,0 jest nierówność, ponieważ potrzebujesz okręgu, musisz renderować każdy piksel w tym zakresie, a nie tylko obramowanie. Możesz to zmienić, aby uzyskać pożądane wyniki.
I to jest to. Niezbyt skomplikowane do wdrożenia, więc nie oferuję tutaj żadnego podstawowego kodu renderującego. Wszystko, czego potrzebujesz, dzieje się w module cieniowania fragmentów.
podziękować za kodzie ale używam OpenGL ES 2, i nie mogę realizować swoje kod. Jak to działa w OPENGL ES 2? –
Oczywiście działa to z OpenGL es 2. Jeśli znasz kod i nie wiesz, jak zastosować go do OpenGL es 2.0, powinieneś poszukać podstawowych samouczków OpenGL es 2.0, jak renderować prosty vbo. – Dirk
To jest mój kod, aby uzyskać znaki koła: –