eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingsimple ray tracingRe: simple ray tracing
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-01.news.n
    eostrada.pl!news.neostrada.pl.POSTED!not-for-mail
    Content-Type: text/plain; charset=iso-8859-2; format=flowed; delsp=yes
    Newsgroups: pl.comp.programming
    Subject: Re: simple ray tracing
    References: <6...@s...googlegroups.com>
    <j8btf4$hv5$1@node2.news.atman.pl>
    <f...@n...googlegroups.com>
    <j8dgas$474$1@node2.news.atman.pl>
    <c...@a...googlegroups.com>
    <4...@p...googlegroups.com>
    <j8e70u$5vh$1@inews.gazeta.pl> <o...@a...home>
    <j8ejfl$c33$1@inews.gazeta.pl>
    Date: Fri, 28 Oct 2011 18:30:53 +0200
    MIME-Version: 1.0
    Content-Transfer-Encoding: Quoted-Printable
    From: "Jordan Szubert" <u...@j...us.to>
    Organization: HELL inc.
    Message-ID: <o...@a...home>
    User-Agent: Opera Mail/11.52 (Win32)
    Lines: 111
    NNTP-Posting-Host: 83.26.226.70
    X-Trace: 1319819457 unt-rea-a-01.news.neostrada.pl 2187 83.26.226.70:11453
    X-Complaints-To: a...@n...neostrada.pl
    Xref: news-archive.icm.edu.pl pl.comp.programming:193252
    [ ukryj nagłówki ]

    Dnia 28-10-2011 o 17:58:46 <f...@g...pl> napisał(a):

    > Dnia 28-10-2011 o 14:26:07 <f...@g...pl> napisał(a):
    >
    >> kwestia tylko jak dodawac do siebie kolory swiatel?
    >
    >> ja robie to +- tak:
    >
    >> light_intensity_from_both_lights=light_intensity_fro
    m_light1+light_intensity_
    >> from_light2;
    >
    >> value_to_display=I2D(light_intensity_from_both_light
    s)
    >
    >> float I2D(float i){
    >> return pow(i/(i+1.0),1/2.2);//moze i nierealistyczne, ale
    >> intensywnosc
    >> swiatla jest w zakresie 0-+inf, a wyjscie 0-1
    >> }
    >
    > ok pomysle ew o czyms podobnym, trzababy poczytac troche
    > jakiejs dobrej teorii; a jak opisujesz scene? - pewnie
    > masz tam jakas funkcyjke do sprawdzania przeciec raya
    > z trojkatem albo czyms podobnym, nie masz gdzies pod reka
    > aby podrzucic? mysle ze jakbym zrobil jakas prostopadloscienna
    > ;wieżę; i swiatlo krążace dookoła niej to mógłby sie może
    > rzucać fajny cień i moze fajnie by wygladało

    w tym potworku co se klecilem, i ktory paro-obiektowa scene renderuje do
    320x240 w 15s na 3 watkach obliczeniowych na i5 2410M, mam w tym stylu:


    //pseudokod podobny do C#
    struct V3{ float x,y,z; }
    struct I3{ float r,g,b; }//intensywnosc swiatla, licznosc fotonow
    struct Ray{ V3 start,dir; }
    struct Pair<T1,T2>{
    T1 f;
    T2 s;
    }
    delegate Pair<I3,Pair<Ray,I3>[]> Continuation();
    interface Element{
    Pair<float,Continuation>? Intersect(Ray r);
    }
    struct PointLight{
    V3 location;
    I3 intensity;
    }
    class Scene{
    Element[] elemets;
    PointLight[] lights;
    Camera cam;
    }

    IMO najciekawszym kawalkiem jest interfejs Element:Intersect zwraca null,
    jesli polprosta Ray nie przecina obiektu, w przeciwnym wypadku pierszym
    element pary, okresla ze przeciecie
    wystepuje w ,,momencie'' t, czyli punkt preciecia jest w start+t*dir,
    drugi element pary to to funkcja zwracajaca pare: ile swiatla leci do
    kamery z zrodel swiatla po odbiciu/rozproszeniu, zas drugi element to
    tablica par: promienie potomne i przez co zalezy przemnozyc ich
    intensywnosc (dzieki temu mozliwe bedzie zaimplementowanie lusta
    polprzepuszcalnego jako klasy implementujacj interfejs Element, jakos +-
    tak:

    class PolLustro{
    V3 N();//normalna
    Pair<float,Continuation>? Intersect(Ray r){
    if(nie ma przeciecia)
    return null;
    t=...;//
    return new Pair(t,()=>{
    rd=reflect(r.dir,N());
    X=r.start+r.dir*t;
    return new Pair(new I3(0,0,0),new Pair<Ray,I3>[]{
    new Pair<Ray,I3>(new Ray(X,r.dir),new I3(0.5,0.5,0.5)),//promien
    przepuszczony
    new Pair<Ray,I3>(new Ray(X,rd),new I3(0.5,0.5,0.5)),//promien odbity
    });
    });
    }
    }
    trojkatow akurat nie mam, Elementy tu nieskonczona szachownica,
    prostopadloscian rownolegly do osi X,Y,Z, sfera, elipsa i portal: para
    rownoleglobokow, jak promien trafia w jeden z nich, to promien potomny
    wylatuje z drugiego...

    konkretna implementaja nie bede na razie straszyl...

    --
    Jordan Szubert

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: