Funkcje OPENGL - wyjaśnienie

0

Witam uczę się programowania, a już z opengl wgl nie mam styczności. Napotkałem taki kod:

pozycja obroc_pozycje(pozycja a, pozycja c, float kat) {
	pozycja poz;
	a.x -= c.x; a.y -= c.y;
	poz.x = a.x * cos(kat) - a.y * sin(kat);
	poz.y = a.x * sin(kat) + a.y * cos(kat);
	a.x += c.x; a.y += c.y;
	return poz;

Jest to funkcja obracająca punkt względem środka tylko nie rozumiem jej zapisu , na czym to polega, a nie moge nigdzie znaleźć wytłumaczenia oraz druga funkcja dotycząca rysowania pojedynczego trójkąta, tak nie zwracając na nazwy zmiennych po prostu nie rozumiem jak to działa.

void rysuj_trojkat(float r, float g, float b, float skala)
{
	glBegin(GL_TRIANGLES);
	glColor3f(r, g, b);
	pozycja poz, center;
	center.x = -PRZYPROSTOKATNA / 3.0;
	center.y = PRZYPROSTOKATNA / 3.0;

	poz.x = 0.0f; poz.y = 0.0f; poz = obroc_pozycje(poz, center, centerAngle);
	glVertex3f((poz.x + center.x) * skala, (poz.y + center.y) * skala, 0.0f);
	poz.x = -PRZYPROSTOKATNA; poz.y = 0.0f; poz = obroc_pozycje(poz, center, centerAngle);
	glVertex3f((poz.x + center.x) * skala, (poz.y + center.y) * skala, 0.0f);
	poz.x = 0.0f; poz.y = PRZYPROSTOKATNA; poz = obroc_pozycje(poz, center, centerAngle);
	glVertex3f((poz.x + center.x) * skala, (poz.y + center.y) * skala, 0.0f);

	glEnd();

Mógłby ktoś wytłumaczyć albo przekierować do jakiś stron internetowych?
Pozdrawiam

0

Jeśli chodzi o pierwszy kod to można znaleźć więcej informacji pod nazwą → macierz obrotu. Obrócony zostaje wektor ac, stąd te odejmowanie powyżej

poz.x = ...

i

poz.y = ...
0

w sumie to tutaj jest wszystko wyjaśnione https://en.wikipedia.org/wiki/Rotation_matrix
kiedy zrozumiesz co tam się odjaniepawla na poziomie matematycznym, to zrozumienie kodu będzie już tylko formalnością

P.S. co to znaczy "wgl"? To jest w ogóle polskie słowo? Litości?

0

Dzięki właśnie bardziej mi chodziło od strony matematycznej o co chodzi. Tak wiem sorry za ten skrót :D

0

To jest dziwny i mało czytelny kod. Skoro kod używa immediate mode (glBegin, glEnd) to znaczy że dostępne są transformacje w samym OpenGL (glRotate, glScale), a jeśli mimo to nie chcemy ich używać, to i tak znacznie wygodniejsze jest liczenie przekształceń macierzowo, np. używając gotowej do tego biblioteki takiej jak glm (a wynikową macierz załadować przez glLoadMatrix).

Jest to funkcja obracająca punkt względem środka tylko nie rozumiem jej zapisu

To znaczy czego w niej konkretnie nie rozumiesz? Składni, czy matematycznego wzoru? Wzór jest jaki jest bo tak :-)

oraz druga funkcja dotycząca rysowania pojedynczego trójkąta

Funkcja miesza liczenie pozycji wierzchołków z ich wysyłaniem do OpenGL-a (glVertex3f) przez co tak nieczytelnie wygląda.

0

WGL to API do obsługi OpenGL w systemach Windows,
https://en.wikipedia.org/wiki/WGL_(API)

0

@elzulninho: od strony matematycznej to poczytaj o transformacjach. Zacznij od
https://pl.wikipedia.org/wiki/Obr%C3%B3t

1 użytkowników online, w tym zalogowanych: 0, gości: 1