Jest to kod używam narysować prostokąt w moim programie:obramowania wokół tekstur OpenGL
glBegin(GL_QUADS);
glTexCoord2f(0.0f, maxTexCoordHeight); glVertex2i(pos.x, pos.y + height);
glTexCoord2f(0.0f, 0.0f); glVertex2i(pos.x, pos.y);
glTexCoord2f(maxTexCoordWidth, 0.0f); glVertex2i(pos.x + width, pos.y);
glTexCoord2f(maxTexCoordWidth, maxTexCoordHeight); glVertex2i(pos.x + width, pos.y + height);
glEnd();
czerpie tylko prosty prostokąt o określonej strukturze, np tak:
Chciałbym zapytać, czy jest to możliwe w OpenGL, aby osiągnąć efekt granicy takiego:
Jak widać wewnątrz tej dachówki jest tylko zwykły niebieskim tle, które mogą być traktowane oddzielnie - po prostu automatycznie zmieniłem teksturę. Można to łatwo osiągnąć za pomocą kodu, który podałem, ale problem dotyczy granicy.
Jeśli granica miała być jednokolorowa, mógłbym spróbować narysować pusty, niezajęty prostokąt, używając GL_LINES
wokół mojej tekstury, ale tak nie jest.
Również jeśli kafelki były zawsze o ustalonym rozmiarze, mogłem przygotować tekst, który by pasował, ale MUSI BYĆ łatwo skalowalny bez zmiany pliku mapy bitowej używam jako tekstury.
Więc jeśli nie jest to możliwe z podstawowymi funkcjami OpenGL, jakie są podejścia do osiągnięcia tego efektu, który byłby najbardziej wydajny i/lub łatwy?
EDYCJA: Musi być 2D.
Jeśli nie potrzebujesz 2d, dlaczego nie chcesz uzyskać efektu ukosowania, wykonując ten trapezoidalny kształt w 3D i wykorzystując oświetlenie do uzyskania cieniowanych efektów, których potrzebujesz? – Quetzalcoatl
@Quetzalcoatl Dziękuję za odpowiedź, ale tak, to musi być 2D. Będę edytować moje pytanie, aby dodać te informacje. –
Można napisać moduł cieniujący fragmentu, aby dodać obramowanie. Jeśli jednak nadal używasz trybu natychmiastowego (przestarzałe funkcje, takie jak "glVertex"), prawdopodobnie zajmie ci to trochę czasu, aby dogonić cudowny świat OpenGL 2.0 i nie tylko. –