eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingsimple ray tracingRe: simple ray tracing
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
    From: " " <f...@g...pl>
    Newsgroups: pl.comp.programming
    Subject: Re: simple ray tracing
    Date: Fri, 28 Oct 2011 18:56:14 +0000 (UTC)
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 144
    Message-ID: <j8etse$d1q$1@inews.gazeta.pl>
    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> <o...@a...home>
    NNTP-Posting-Host: localhost
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: 8bit
    X-Trace: inews.gazeta.pl 1319828174 13370 172.20.26.242 (28 Oct 2011 18:56:14 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Fri, 28 Oct 2011 18:56:14 +0000 (UTC)
    X-User: fir
    X-Forwarded-For: 46.134.143.84
    X-Remote-IP: localhost
    Xref: news-archive.icm.edu.pl pl.comp.programming:193253
    [ ukryj nagłówki ]

    Jordan Szubert <u...@j...us.to> napisał(a):

    > Dnia 28-10-2011 o 17:58:46 <f...@g...pl> napisa=B3(a):
    >
    > > Dnia 28-10-2011 o 14:26:07 <f...@g...pl> napisa=B3(a):
    > >
    > >> kwestia tylko jak dodawac do siebie kolory swiatel?
    > >
    > >> ja robie to +- tak:
    > >
    > >> light_intensity_from_both_lights=3Dlight_intensity_f
    rom_light1+light_=
    > intensity_
    > >> from_light2;
    > >
    > >> value_to_display=3DI2D(light_intensity_from_both_lig
    hts)
    > >
    > >> 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=BF=EA; i swiatlo kr=B1=BFace dooko=B3a niej to m=F3g=B3by sie mo=BF=
    > e
    > > rzuca=E6 fajny cie=F1 i moze fajnie by wyglada=B3o
    >
    > 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=3D...;//
    > return new Pair(t,()=3D>{
    > rd=3Dreflect(r.dir,N());
    > X=3Dr.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...
    >

    co do c# to ja nieinteresuje sie c#pem (jak patrze na kody to
    nie rozumiem wielu wyrazeni c#owych); grupowicz K Y wmieszal w
    to c#pa ja pisze w c ;
    Co do balaganu to ja tez czesto tworze duzy balagan.
    Co do szybkosci to ja tez nie pisze szybko ale c nie daje
    istatnych opoznien sam z siebie, a czasem tez mierze sobie
    czasy roznych kawalkow; ostatnio nawet lekko poduczylem sie
    na sucho troche sse (nie jest to wcale tak zagmatwane jak mi
    sie wydawalo na pierwszy tzut oka po prostu te mnemoniki
    glupio grupami zaciemnione) ale pod moim kompilatorem (stary
    borland 5.5.1 comandline chyba nie darady uzywac sse jako
    asma inline) :-( (Chyba ze ktos wie ze da rade i jak wtedy
    dzieki za info;)

    Co do sceny to bardziej chodzilo mi o to jak trzymasz
    figury/powierzchnie na scenie a nie o uklad kodu,
    nie wiem jak to sie robi w raytracerach czy jako tablica
    trojkatow czy inaczej, np jako funkcje - chodzilo mi tez
    czy masz gotowy wzorek do przeciec miedzy rayem a np
    trojkatam czy 'quadem', albo innymi figurami (bo ja mam
    tylko fajny do sfery), poszukam w necie ale pogadac na temat
    nie zawadzi,







    --
    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: