eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming[asm/c] optymalizacja elementarnego raytracera › [asm/c] optymalizacja elementarnego raytracera
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
    From: " prof fir" <f...@g...pl>
    Newsgroups: pl.comp.programming
    Subject: [asm/c] optymalizacja elementarnego raytracera
    Date: Wed, 1 Aug 2012 17:07:25 +0000 (UTC)
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 90
    Message-ID: <jvbnoc$3rq$1@inews.gazeta.pl>
    NNTP-Posting-Host: localhost
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: 8bit
    X-Trace: inews.gazeta.pl 1343840845 3962 172.20.26.241 (1 Aug 2012 17:07:25 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Wed, 1 Aug 2012 17:07:25 +0000 (UTC)
    X-User: fir
    X-Forwarded-For: 31.62.189.172
    X-Remote-IP: localhost
    Xref: news-archive.icm.edu.pl pl.comp.programming:199052
    [ ukryj nagłówki ]

    jakis rok czy pol roku temu trzasnalem kawalek kodu elementarnego
    raytracera

    https://dl.dropbox.com/u/42887985/re29.zip

    bylo to pisane ledwie dwa dni (chyba nawet niecale) i bylem zadowolony ze
    dobrze poszlo, ale kod jest rozbabrany i nie optymalizowany, ew teraz bym
    chcial pokombinowac czy da sie to przyoptymalizowac - najchetniej przepisac
    kluczowe kawalki na asma (sse2 bo mam tymczasowo wiekowa maszyne z p4),

    moze nie bede wklejac calek procedury bo jest rozbabrana ale opisze
    kluczowe kawalki, i ew ktos moglby najlepiej udzielic mi jakichs
    cennych uwag (najlepiej jak by to moglo wygladac konkretnie w asmie)
    - mozna by wtedy porozmawiac o optymalizacji a sa to ciekawe topiki

    jak to leci - mam cztery kulki i jedna plaszczyzne,
    dl akazdego punktu okna wyznaczam odleglosc do kazdej z kulek i
    plaszczyzny


    float distSphere01 = intersectRaySphere(&ray0,&rayV,&sphere01,15);
    float distSphere02 = intersectRaySphere(&ray0,&rayV,&sphere02,15);
    float distSphere03 = intersectRaySphere(&ray0,&rayV,&sphere03,15);

    float distSphere1 = intersectRaySphere(&ray0,&rayV,&sphere1,100);
    float distSphere2 = -1;// intersectRaySphere
    (&ray0,&rayV,&sphere2,1500);

    float distPlane = intersectionRayPlane(&ray0, &rayV, &vPlane,
    &planeNormal);




    inline float intersectionRayPlane(float3* rayOrigin,
    float3* rayDirection,
    float3* planeOrigin,
    float3* planeNormal)
    {
    static float3 D;

    D = sub(planeOrigin, rayOrigin);

    float a = dot(&D, planeNormal);
    float b = dot(rayDirection, planeNormal);

    if(b!=0)
    {
    return a/b;
    }
    else
    {
    return -1;
    }

    }

    inline float intersectRaySphere(float3* rO, float3* rV, float3* sO, float sR)
    {
    static float3 Q;

    Q = sub(sO,rO);
    float c = length(&Q);
    float v = dot(&Q,rV);
    float d = sR*sR - (c*c - v*v);

    // If there was no intersection, return -1
    if (d < 0.0) return (-1.0f);

    // Return the distance to the [first] intersecting point
    return (v - sqrt(d));
    }

    pozniej znajduje najblizsza z tych odleglosci licze normalna i
    w zaleznosci od iloczynu sklarnego zapalam punkt - ta druga czesc mozna
    by na razie pominac - pytanie jak przyoptymalizowac to co powyzej -
    ktos ma jakies konkretne rozwiazania, ?? moge przetestowac i zobacze
    czy bedzie speed up - sam tez moze pokombinuje ale sensowne merytoryczne
    uwagi mile widziane









    --
    Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

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: