eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingcpu shading by sse intrinsicscpu shading by sse intrinsics
  • Data: 2014-06-28 12:48:05
    Temat: cpu shading by sse intrinsics
    Od: firr <p...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    w moim rasteryzerze mam blog do flat shadingu
    trojkatów od 4rech swiateł - wyglada on wyjatkowo niechlujnie moim zdaniem ale do
    końca nie wiem co
    z nim zrobic



    // input: float x1, y1, z1, x2, y2, z2, x3, y3, z3;


    static float3 lightDir1= {0.2, -1.6, -1.7 };
    static float3 lightDir2 = {0.5, -0.7, 20.3 };
    static float3 lightDir3 = {-0.5,-0.3, -0.6 };
    static float3 lightDir4 = {-0.5, 1.3, 0.6 };

    static float3 lightColor1= {.4, .414, .515 };
    static float3 lightColor2 = {.4145, .451, .543 };
    static float3 lightColor3 = {.584, .51414, .43 };
    static float3 lightColor4 = {.41, .44, .3414 };


    float3 u = {x2-x1, y2-y1, z2-z1 };
    float3 v = {x3-x2, y3-y2, z3-z2 };

    float3 normal = cross_(u,v);

    // normal.x = (y2-y1)*(z3-z2) - (z2-z1)*(y3-y2);
    // normal.y = (z2-z1)*(x3-x2) - (x2-x1)*(z3-z2);
    // normal.z = (x2-x1)*(y3-y2) - (y2-y1)*(x3-x2);

    normalize(&normal);

    float s1 = dot(normal, lightDir1);
    float s2 = dot(normal, lightDir2);
    float s3 = dot(normal, lightDir3);
    float s4 = dot(normal, lightDir4);


    if(s1<0) s1=0;
    if(s2<0) s2=0;
    if(s3<0) s3=0;
    if(s4<0) s4=0;


    int b = (color&0x000000ff);
    int g = (color&0x0000ff00)>>8;
    int r = (color&0x00ff0000)>>16;

    float lr= .1 + (s1*lightColor1.x + s2*lightColor2.x + s3*lightColor3.x+
    s4*lightColor4.x);
    float lg= .1 +(s1*lightColor1.y + s2*lightColor2.y + s3*lightColor3.y+
    s4*lightColor4.y);
    float lb= .1 + (s1*lightColor1.z + s2*lightColor2.z + s3*lightColor3.z+
    s4*lightColor4.z);


    r*=lr;
    g*=lg;
    b*=lb;

    if(r>255) r=255;
    if(g>255) g=255;
    if(b>255) b=255;

    return rgb(b,g,r);

    chodzi o dwie rzeczy
    1) jak ew przyspieszyc czy ladniej to zapisac z poziomu c
    2) jak przepisac to i przyspieszyc przy pomocy sse intrinsics (uzywam mingw gcc 4.7
    wiec tak zeby poszlo pod tym kompilatorem)

    glownie chodzi o ta drugą rzecz, nie mam moze nawet w sumie az tak duzo czasu na to
    ;/ ale z drugiej strony troche podlubac by sie przydalo ;\

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: