2DRendererRaytraced

Fragen zu Gimp, Terragen und sonstigen Programmen.

Re: 2DRendererRaytraced

Beitragvon Wuschli » 07.04.2012, 19:26

Yeah, top :)
Benutzeravatar
Wuschli
 
Registriert:
30.11.2008, 13:50

Re: 2DRendererRaytraced

Beitragvon Schwenk » 14.04.2012, 17:25

Hier mal die neusten Updates, jetzt mit GUI.
Dateianhänge
2DLightfieldGUI1.png
2DLightfieldGUI2.png
Mein Blogck xD http://www.sschwank.de.pn
Schwenk übnernimt kaine Haftung für Körperliche und Seelische schäden die durch Rechtschreipfeler entstehenBild
Benutzeravatar
Schwenk
1 Animation in Team
1 Animation in Team
 
Registriert:
05.05.2005, 16:08

Re: 2DRendererRaytraced

Beitragvon Schwenk » 18.04.2012, 14:32

QTree Implemented.
Dateianhänge
QTree.png
Mein Blogck xD http://www.sschwank.de.pn
Schwenk übnernimt kaine Haftung für Körperliche und Seelische schäden die durch Rechtschreipfeler entstehenBild
Benutzeravatar
Schwenk
1 Animation in Team
1 Animation in Team
 
Registriert:
05.05.2005, 16:08

Re: 2DRendererRaytraced

Beitragvon B.Y.O.B. » 18.04.2012, 14:40

Sieht gut aus!
Falls du den Code öffentlich machen willst - ich kann github empfehlen (verwende das selbst für Java Plugins).
Jünger des Lux
Portfolio
Benutzeravatar
B.Y.O.B.
 
Registriert:
04.07.2010, 09:23

Re: 2DRendererRaytraced

Beitragvon Schwenk » 18.04.2012, 14:43

Was ist das :oops: :?:
Mein Blogck xD http://www.sschwank.de.pn
Schwenk übnernimt kaine Haftung für Körperliche und Seelische schäden die durch Rechtschreipfeler entstehenBild
Benutzeravatar
Schwenk
1 Animation in Team
1 Animation in Team
 
Registriert:
05.05.2005, 16:08

Re: 2DRendererRaytraced

Beitragvon B.Y.O.B. » 18.04.2012, 14:49

Jünger des Lux
Portfolio
Benutzeravatar
B.Y.O.B.
 
Registriert:
04.07.2010, 09:23

Re: 2DRendererRaytraced

Beitragvon Welti » 18.04.2012, 19:44

Was ist ein QTree?
Core2QuadQ6600, 7GB DDR2-667, Gigabyte GTX470SOC, 580W SuperFlower
Benutzeravatar
Welti
 
Registriert:
30.01.2011, 10:35

Re: 2DRendererRaytraced

Beitragvon B.Y.O.B. » 18.04.2012, 20:17

Welti hat geschrieben:Was ist ein QTree?

Eine Beschleunigungsstruktur (Englisch Acceleration Structure oder auch Accelerator, bei Lux gibt es z.B. QBVH, SQBVH oder den KDTree).
Dadurch müssen nicht mehr alle Primitives (also Faces, Kugeln etc.) bei der Prüfung, ob ein Strahl auf Geometrie trifft, miteinbezogen werden. Es werden nur noch die Primitives in die Prüfung miteinbezogen, die in den Würfeln liegen, die der Lichtstrahl durchquert.

(sorry falls ich hier irgendwas falsch erklärt habe)
Jünger des Lux
Portfolio
Benutzeravatar
B.Y.O.B.
 
Registriert:
04.07.2010, 09:23

Re: 2DRendererRaytraced

Beitragvon necro » 19.04.2012, 07:12

Naja, QTree dürfte für QuadTree stehen. Damit sortiert man Flächen auf eine Art und Weise, die es ermöglicht sehr schnell eine Position auf dieser Fläche zu finden. Jede Fläche kann dabei in 4 Teilflächen zerlegt werden und ist selbst eine dieser 4 Teilflächen vom nächst größeren Quadrat. Das kann man auch gut im Bild sehen. Da wo sich Objekte befinden, sieht man viele kleine Quadrate. Das heißt, dort wurden die Flächen am meisten unterteilt. Aber ich denke, dass Wikipedia das besser erklären kann als ich.
Benutzeravatar
necro
 
Registriert:
23.01.2010, 17:13

Re: 2DRendererRaytraced

Beitragvon Schwenk » 30.04.2012, 14:14

Hab jetzt einen Algorythmus gefunden mit dem sich das Bild praktisch mit einem Durchlauf also 1nem Sampel pro pixel berechnen lässt, hier mal n prieview:

Edit: Das Bild des Emitters ist mit EINEM Sample pro Pixel berechnet.
Dateianhänge
CoverAlgorythm.png
Mein Blogck xD http://www.sschwank.de.pn
Schwenk übnernimt kaine Haftung für Körperliche und Seelische schäden die durch Rechtschreipfeler entstehenBild
Benutzeravatar
Schwenk
1 Animation in Team
1 Animation in Team
 
Registriert:
05.05.2005, 16:08

Re: 2DRendererRaytraced

Beitragvon B.Y.O.B. » 30.04.2012, 16:05

Boah, ich wäre sowas von interessiert an dem Code... :)
Jünger des Lux
Portfolio
Benutzeravatar
B.Y.O.B.
 
Registriert:
04.07.2010, 09:23

Re: 2DRendererRaytraced

Beitragvon Schwenk » 30.04.2012, 20:01

Code: Alles auswählen
renderPixel raytracer::trace(double x,double y)
{
    Coord Pos;

    Pos.x = x;
    Pos.y = y;

    covering.clear();
    for(int i = 0; i < _Daten->getSize(); i++)
    {
        getCovering(Pos,i);
    }

    zCovering.clear();
    zSort();

    renderPixel value;
    value.r=0.0;
    value.g=0.0;
    value.b=0.0;
    for(int i = 0; i < zCovering.size(); i++)
    {
        edge currEdge = _Daten->getEdge(zCovering[i].ObjIndex);
        value.r += (value.r * i + (abs(zCovering[i].dalpha)/(2.0*pi))*currEdge.r*currEdge.e)/(i+1);
        value.g += (value.g * i + (abs(zCovering[i].dalpha)/(2.0*pi))*currEdge.g*currEdge.e)/(i+1);
        value.b += (value.b * i + (abs(zCovering[i].dalpha)/(2.0*pi))*currEdge.b*currEdge.e)/(i+1);
    }

    return value;
}

int raytracer::zSort()
{
    for(int i = 0; i < covering.size(); i++)
    {
        int overlap = 1;
        for(int j = 0; j < covering.size() ; j++)
        {
            if(j != i)
            {
                if (coverOverlap(covering[i],covering[j]) == 0)
                {
                    overlap = 0;
                }
            }
        }

        if (overlap == 0)  //If "Cover" does not Overlap with any other Cover push it into the zCover
        {
            zCovering.push_back(covering[i]);
        }
    }
}

int raytracer::coverOverlap(Cover C1,Cover C2) //If C2.alpha is inside C1 return 1. If C2.alpha + C2.dalpha is inside C1 return 2. Else return 0
{

    if(inside(C1.alpha1,C2.alpha1,C2.alpha2)||inside(C1.alpha2,C2.alpha1,C2.alpha2))
    {
        return 1;
    }
    if(inside(C2.alpha1,C1.alpha1,C1.alpha2)||inside(C2.alpha2,C1.alpha1,C1.alpha2))
    {
        return 1;
    }
    return 0;
}


int  raytracer::getCovering(Coord Pos,int i)
{
    edge currEdge = _Daten->getEdge(i);

        Cover currCover;
        currCover.alpha1 = atan2((Pos.y-currEdge.y1),(Pos.x-currEdge.x1));
        currCover.alpha2 = atan2((Pos.y-currEdge.y2),(Pos.x-currEdge.x2));



        currCover.dalpha = currCover.alpha1 - currCover.alpha2;
        if(currCover.dalpha > pi)
        {
            currCover.alpha1 = normalize(currCover.alpha1);
            currCover.alpha2 = normalize(currCover.alpha2);
            currCover.dalpha = currCover.alpha1 - currCover.alpha2;
        }
        if(currCover.dalpha < -pi)
        {
            currCover.alpha1 = normalize(currCover.alpha1);
            currCover.alpha2 = normalize(currCover.alpha2);
            currCover.dalpha = currCover.alpha1 - currCover.alpha2;
        }


        currCover.ObjIndex = i;

        currCover.z1 = sqrt((Pos.x - currEdge.x1)*(Pos.x - currEdge.x1)+(Pos.y - currEdge.y1)*(Pos.y - currEdge.y1));
        currCover.z2 = sqrt((Pos.x - currEdge.x2)*(Pos.x - currEdge.x2)+(Pos.y - currEdge.y2)*(Pos.y - currEdge.y1));

        covering.push_back(currCover);
        return 0;

    return 1;
}


Hier mal der Kern aber is nboch nicht ganz Fehlerfrei.
Mein Blogck xD http://www.sschwank.de.pn
Schwenk übnernimt kaine Haftung für Körperliche und Seelische schäden die durch Rechtschreipfeler entstehenBild
Benutzeravatar
Schwenk
1 Animation in Team
1 Animation in Team
 
Registriert:
05.05.2005, 16:08

Re: 2DRendererRaytraced

Beitragvon B.Y.O.B. » 30.04.2012, 20:10

Wie bringst du eigentlich das errechnete Bild in das Qt-Fenster rein?
Wie speicherst du es vorher ab (als QImage oder so, oder als 2D-Array, ...)?
Jünger des Lux
Portfolio
Benutzeravatar
B.Y.O.B.
 
Registriert:
04.07.2010, 09:23

Re: 2DRendererRaytraced

Beitragvon Schwenk » 30.04.2012, 20:15

Erst als Float image (eigener Struct) dann rechne ichs als QImage um.
Hab jetzt grad ein Problemchen vlt. weiß jemand von euch die Lösung.
Was mich an dem folgenden Bild stört ist der waagrechte Streifen. Jemand ne ahnung wie der Zustande kommen kann ?
Dateianhänge
Streifen.jpg
Mein Blogck xD http://www.sschwank.de.pn
Schwenk übnernimt kaine Haftung für Körperliche und Seelische schäden die durch Rechtschreipfeler entstehenBild
Benutzeravatar
Schwenk
1 Animation in Team
1 Animation in Team
 
Registriert:
05.05.2005, 16:08

Re: 2DRendererRaytraced

Beitragvon B.Y.O.B. » 30.04.2012, 20:21

Schwenk hat geschrieben:Was mich an dem folgenden Bild stört ist der waagrechte Streifen. Jemand ne ahnung wie der Zustande kommen kann ?

Zeig evtl. mal die Szene in Blender oder mach eine kleine Skizze, damit man die Objekte, die zu sehen sein sollten, erkennt. Ist das links von der Lichtquelle ein "lichtblockendes" Element?

Schwenk hat geschrieben:Erst als Float image (eigener Struct) dann rechne ichs als QImage um.

Kannst du mir da einen Link zu einer Dokumentation, einem Tutorial o.ä. geben? Oder mir deinen Code zeigen?
Jünger des Lux
Portfolio
Benutzeravatar
B.Y.O.B.
 
Registriert:
04.07.2010, 09:23

Re: 2DRendererRaytraced

Beitragvon Schwenk » 30.04.2012, 20:29

Mach ich noch.

Hier der QImage Doc eintrag:
http://qt-project.org/doc/qt-4.8/qimage.html

Das ganze wird dann als Item der Scene hinzugefügt.
Mein Blogck xD http://www.sschwank.de.pn
Schwenk übnernimt kaine Haftung für Körperliche und Seelische schäden die durch Rechtschreipfeler entstehenBild
Benutzeravatar
Schwenk
1 Animation in Team
1 Animation in Team
 
Registriert:
05.05.2005, 16:08

Re: 2DRendererRaytraced

Beitragvon B.Y.O.B. » 30.04.2012, 21:15

Hm...
Schwenk hat geschrieben:Erst als Float image (eigener Struct) dann rechne ichs als QImage um.

Wie sieht dieser Struct aus und wie genau überträgst du den in ein QImage?
Sorry für die viele Fragerei, ich kann mir darunter grad gar nichts vorstellen :|
Speicherst du in dem Strukt RGB-Werte (wenn ja, wie? In einem Byte-Array?)?
Jünger des Lux
Portfolio
Benutzeravatar
B.Y.O.B.
 
Registriert:
04.07.2010, 09:23

Re: 2DRendererRaytraced

Beitragvon Welti » 30.04.2012, 21:23

Ich frag mich grad nur wie man ein komplett rauschfreies Bild mit einem Sample rendern kann ^^.
Core2QuadQ6600, 7GB DDR2-667, Gigabyte GTX470SOC, 580W SuperFlower
Benutzeravatar
Welti
 
Registriert:
30.01.2011, 10:35

Re: 2DRendererRaytraced

Beitragvon Schwenk » 01.05.2012, 12:07

Der Code steht auf GitHub zu verfügung:
https://github.com/schwenk/2DLightfield/tree/main-branch
Mein Blogck xD http://www.sschwank.de.pn
Schwenk übnernimt kaine Haftung für Körperliche und Seelische schäden die durch Rechtschreipfeler entstehenBild
Benutzeravatar
Schwenk
1 Animation in Team
1 Animation in Team
 
Registriert:
05.05.2005, 16:08

Re: 2DRendererRaytraced

Beitragvon B.Y.O.B. » 01.05.2012, 13:19

Nicht zu glauben, ich habe es geschafft, ein selbst errechnetes Bild in einem Qt-Fenster darzustellen :D

Vielen Dank für die Denkanstöße, Schwenk!
Jünger des Lux
Portfolio
Benutzeravatar
B.Y.O.B.
 
Registriert:
04.07.2010, 09:23

VorherigeNächste

Zurück zu Andere Software


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste