Algorytm: obiekt graficzny => chmura punktów

0

Witam,

chciałbym zrobić coś takiego ażeby dowolny Polygon z przestrzeni 3D zamienić na chmurę punktów.
Parametrem ma być rozmiar siatki.
Jeśli ktoś wie coś na temat takich algorytmów, najchętniej w C, C++ to bardzo proszę o informację.
Zaczynam temat z chmurami punktów i za każdą pomoc w tym temacie dziękuję.

Pozdrawiam.

0

Masz ci napisałem kod.

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    
    vec2 middle = iResolution.xy / 2.0;
    vec2 base = iResolution.xy / 4.0;
    
    
	if( (fragCoord.x < middle.x+base.x && fragCoord.x > middle.x-base.x) && (fragCoord.y < middle.y+base.y && fragCoord.y > middle.y-base.y)  ){
        if(sin(fragCoord.x) > 0.8 && sin(fragCoord.y) > 0.8)
        	fragColor = vec4(1.0, 0.0, 0.0, 1.0);
        else
            fragColor = vec4(1.0, 1.0, 1.0, 1.0);
    }
    else
        fragColor = vec4(1.0, 1.0, 1.0, 1.0);
}

Wklej to tu shadertoy.com/new żeby podglądnąć

0

Wielkie dzięki:) ale mam pytania bo nie znam platformy testowej na którą to zrobiłeś.

  1. w jaki sposób mogę wprowdzić własne punkty wielokąta?
  2. czy można ten algorytm w miarę prosto przerobić aby działał w 3D?
  3. czy są gdzieś przykłady, tutorial jak typy danych vec2, vec4 itp. przenieść do klasycznego C, C++ ?
  4. nie widzę żadnej pętli, jak to właściwie działa?

Pozdrawiam.

0

Mam bana na forum do 2019 więc nie mogę za dużo tu pisać jeszcze mnie wyczają, że korzystam z forum.

Ogólnie to jest to shader glsl, opengl je udostępnia, tylko musisz to załadować na jakiś fragment.

Vec2 to vektor, czyli dwa floaty, vec3, trzy floaty.
Skalar to jeden float.
Matrix to kilka vektorów.

tablica 3x float to to samo co vec3.

Np. narysujesz kwadrat, i dasz na niego shader, to GPU karta graficzna dla każdego punktu z tego kwadratu równolegle będzie liczyć, dlatego nie ma pętli.
GPU robi wszystko równolegle, pętla robi to iteracyjnie.

GPU jest zajebiste o tak.

To co tam napisałem to prosta matematyka, sinus się powtarza co 2PI radianów przez co można odległości robić, jak zrobisz względem czasu to będzą się poruszać kropki, duży epsilon dasz to będą większe.

Nie wiem jak sobie wyświetlasz tą bryłę 3d, ale jak masz opengl lub directx w C++ to shader jest łatwy do napisania.

GPU przekazuje do tej funkcji informacje jakich żąda funkcja, tzn te które są zadeklarowane jako parametry funkcji.
A resztę można przekazać ręcznie do shadera z C++.

0

Poczytałem tutaj: piękna sprawa.
Nie mogę tego jednak użyć w moim projekcie, muszę to zrobić 'klasycznie'.

Dzięki i pozdrawiam.

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