Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mo Mai 13, 2024 23:03

Foren-Übersicht » DGL » Feedback
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 33 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 16, 2007 13:56 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Das es Techniken gibt, die auf der GPU nicht schneller ablaufen hätte ich jetzt eben grade wegen der Parallelisierung eigentlich nicht erwartet. Weißt du zufällig, inwieweit "komerziellere" Raytracer sowas auch auf die GPU auslagern bzw. wieviele es gibt, die sowas unterstützen? Ich ging bislang immer davon aus, die "begnügen" sich damit, Vielkern-Prozessoren bzw. Vielprozessoren-Systeme durch mehrere Threads voll ausnutzen. GPU(s) gleichzeitig mitrechnen lassen wird ja dann wohl noch ne Ecke komplizierter.

Eigentlich war ich ja überrascht, dass es doch schon so schnell auf Rasterizer-Karten geht (gut, da fehlt ja eigentlich noch der größte Spaß), insbesondere, da ich vor einigen Monaten mal die Ankündigung einer IBM-Raytracerkarte gelesen habe, die den Tod von ATI, nVidia und Rasterizern wegen der Qualität und Performance prophezeit hat. Leider ist mir dazu der Projektname entfallen und auf die Schnelle finde ich da auch nichts. Hat da zufällig jemand Infos zu?

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 21, 2007 16:42 
Offline
DGL Member
Benutzeravatar

Registriert: So Jan 07, 2007 21:26
Beiträge: 130
Wohnort: mal hier mal da mal irgendwo
sry will nich nerven
aba ich komm halt alleine bei meinem problem bzw meinen problemen (siehe mein letzten post) nich weiter
hoffe du kannst mir ma dem nächst weiter helfen ...

cuz bubble

_________________
Wenn Worte nichts als Worte sind,
dann müssen's Steine sein!
Solange - bis sie pleite sind - schmeißt Fensterscheiben ein!

- Fidl Kunterbunt -


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 21, 2007 20:19 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
oh sorry, das ging wohl unter. hatte gedacht, daß alles beantwortet war.

du solltest die kamera besser als klasse definieren. wenn dus geschickt anstellst, kannst du die klasse genauso behandeln wie alle anderen objekte musst nur bei anwendung der rotation/verschiebung daran denken, daß das am ende auf die von der kamera erzeugten strahlen genau umgekehrt wirkt. das bild solltest du auch besser mit vorzeichenlosen zahlen speichern - negative werte machen hier eher wenig sinn. üblicherweise genügen sowieso bytes, wenn du allerdings HDR planst, kanns schon sinnvoll sein.
das raytraceimage kannst du durchaus in der kamera lassen. ich hielt es bei meinem tracer aber für sinnvoller, dieses und alle schnittsucher (schatten, licht, etc.) in eine eigene klasse zu legen und sie dann davon sogar verschiedene tracer abzuleiten - etwa welche, die nur den ersten schnitt suchen und dann die normale der oberfläche oder die tiefe im bild anzeigen, nur deren ambiente grundfarbe oder tatsächlich alles rechnen, was der tracer kann. aber im wesentlichen handelt es sich dabei um eine recht grundlegende designfrage, die man am besten für sich selber beantwortet, wie man seinen tracer organisieren will, damit man auch selbst den überblick behält. meine lösung ist da sicher nicht die einzig richtige - da spielt aber v.a. erfahrung und konzentrierte planung eine bedeutende rolle.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 29, 2007 13:35 
Offline
DGL Member

Registriert: So Okt 21, 2007 14:16
Beiträge: 123
Programmiersprache: Delphi
Hallo,

ich find es auch super aber ich komme nicht richtig weiter (hab keine Erfahrung und kaum Ahnung von C). Kann mir bitte jemand sagen, was
Code:
  1. return x1 == x2 ? 1 : 2;

in Delphi ist? Und von RaytraceImage verstehe ich
Code:
  1. foreach (Kugel obj in SichtbareKugeln)

nicht. Ich fände es wirklich sehr nett, wenn mir jemand helfen würde!

P.S. Eigentlich schade, dass in einem Delphi(GL)-Forum Tutorials in C auftreten. Ansonsten sieht es aber recht vielversprechend aus :D .


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 29, 2007 14:26 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also. Das erstere ist etwas besonderes. Ein Operator mit 3 Argumenten. Er macht das selbe wie ein If then else.

Heißt im konkreten Fall:
Code:
  1. if (x1 = x2)
  2. than return 1;
  3. else return 2;
  4.  

Das zweite ist eine neue For-Schleifen-Art. Eine Schleife über alle Bestandteile eines Arrays.
Anstatt einen Zähler hochzuzählen wird nacheinander die Bestandteile eines Arrays in die Hand genommen.

Umgeschrieben in eine klassische For-Schleife hieße das hier:
Code:
  1.  
  2. var obj : Kugel;
  3.  
  4. for i := 0 to SichtbareKugeln.length-1 do
  5. begin
  6.     obj := SichtbareKugeln[i];
  7.  
  8.    //Hier kommt der eigentliche Schleifeninhalt hin.
  9. end;
  10.  

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 29, 2007 14:36 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Du kannst auch die Funktion IfThen benutzen. Würd ich aber nicht empfehlen, da derlei Konstrukte den Quelltest doch sehr unleserlich machen.

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 29, 2007 15:36 
Offline
DGL Member

Registriert: So Okt 21, 2007 14:16
Beiträge: 123
Programmiersprache: Delphi
Hallo,

vielen Dank, das hat mir sehr geholfen.

Gruß Joni.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 18, 2008 07:39 
Offline
DGL Member
Benutzeravatar

Registriert: So Jan 07, 2007 21:26
Beiträge: 130
Wohnort: mal hier mal da mal irgendwo
huhu,
bin jetzte schon nen kleines stückchen weiter ... hab aber irgendwie nen problem mit licht/schatten

erstmal zur theorie:

man hat ja den nahesten schnittpunkt des körpers zur kamera. nun muss man doch eigentlich von da aus einfach nur jeweils einen strahl zu den lichtquellen "schicken" und gucken ob dieser von anderen körpern getroffen wird und ob diese zwischen lichtquelle und dem eigentlichen schnittpunkt liegen oder?

ich hab das jetzte mal probiert einzubauen:

Code:
  1.  
  2. for i:=Low(lights) to High(lights) do
  3.     begin
  4.       lightShot.Position:=RayEvaluate(shot,hit);
  5.       lightShot.Direction:=VertexSub(lights[i].Position,lightShot.Position);
  6.       hits:=TSphere(Objects[obj]).RayIntersection(a,b,lightShot);
  7.       if(hits>0)and((a>0)and(a<1))or((b>0)and(b<1))then
  8.       begin
  9.         colors[light]:=clWhite;
  10.       end;
  11.     end;
  12.  


so nun hab ich aber folgendes problem, die meine kugel (die im moment noch wie nen kreis aussieht >.< ) ist auf den Koordinaten (0,0,50) und meine lichtquelle auf der Koordinate (0,10,50) also 10 LE drüber wenn man sich jetzte die bilder mit und ohne licht anguckt dann sieht man das da was nicht stimmt

könnt ihr irgendnen fehler entdecken?

cuz bubble


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
Wenn Worte nichts als Worte sind,
dann müssen's Steine sein!
Solange - bis sie pleite sind - schmeißt Fensterscheiben ein!

- Fidl Kunterbunt -


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 18, 2008 16:45 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
durch rechenungenauigkeit schneidet sich der strahl von der kugel zur sonne oft mit der kugel direkt dort wo du ihn hast starten lassen - den startpunkt mithilfe der normalen ein klein bischen von der oberfläche wegbewegen löst das problem.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 26, 2008 06:45 
Offline
DGL Member
Benutzeravatar

Registriert: So Jan 07, 2007 21:26
Beiträge: 130
Wohnort: mal hier mal da mal irgendwo
huhu,

ich komm schon wieder mit einem Problem.

Dieses Mal gehts um den Reflektionsstrahl. Und zwar weiß ich nicht wie man den berechnet ... Ich hab schon gegooglet und nix gefunden. Mir Bücher in der Uni ausgeliehen, wieder nix. Dann hab ich gestern meine Mathe-Lehrerin gefragt. Sie wusste wie man den berechnet, hat's aber nicht hinbekommen es so zu erklären, dass ich es verstehe (das ist bei Lehrerin allgemein das Problem, nicht das hier jmd was falsches über mich denkt ;))

Genauer brauch ich beim Reflektionsstrahl eigentlich nur noch den Richtungsvektor ;)

cuz bubble

_________________
Wenn Worte nichts als Worte sind,
dann müssen's Steine sein!
Solange - bis sie pleite sind - schmeißt Fensterscheiben ein!

- Fidl Kunterbunt -


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 26, 2008 11:34 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
r=e-2*(e.n)*n
r reflektierter Vektor
e einfallender Vektor
n Einheitsnormale
. dotproduct

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 26, 2008 11:38 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 20, 2003 13:59
Beiträge: 134
Hi,

also ich würd mal sagen Einfallswinkel = Ausfalswinkel

der Reflektionsstrahl hat also als Ursprung deinen Schnittpunkt und als Richtungsvektor deinen Normalvektor minus deinen Einfallsvektor. (korrigiert mich wenn ich falsch liege :?)
aber das müsste eigendlich so hinkommen

_________________
ghost-site.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 30, 2008 09:23 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 20, 2003 13:59
Beiträge: 134
Hi,

also ich muss jetzt ja auch mal mein Lob für diese Tutorials ausdrücken.
Die sind wircklich sehr gut um sich in die Materie einzuarbeiten und dann von dort aus weiter zu machen.

Ich bin erstaunt wie schnell man dabei gute Ergebnisse erzielen kann, ich hab letzte Woche angefangen mir einen Raytracer zu schreiben und hab schon ein paar schöne Bilder erzeugen können. Er kann zwar bisher nur Kugeln, Ebenen, und Dreiecke aber damit kann man ja schon was anfangen. ;)

Hab mal ein Bild in Anhang gepackt.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
ghost-site.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 29, 2008 14:54 
Offline
DGL Member

Registriert: Do Aug 28, 2008 16:29
Beiträge: 3
Hallo,
das Tutorial ist echt super, nur hab ich ein paar Fragen zur Kamera ( http://www.delphigl.com/forum/viewtopic.php?t=7790 )[/url]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 17, 2009 13:26 
Offline
DGL Member
Benutzeravatar

Registriert: So Jan 07, 2007 21:26
Beiträge: 130
Wohnort: mal hier mal da mal irgendwo
Das damalige Projekt Raytracer hatte ich eingestellt, durch Hardware-Schäden hatte ich einen kompletten Datenverlust.

Da ich nun das Projekt ganz neu aufrolle, bin ich auf ein Problem gestoßen. Muss dazu sagen, dass ich das ganze unter Delphi entwickle:

Das Problem ist folgendes: Ich habe Objekt TScene, da drinne ist zur Zeit nur ein Objekte-Array, das halt Informationen über die aktuelle Szene enthält, die wird halt der Render-Prozedur des Raytracer-Objekts übergeben. Diese berechnet dann die Farbe für jeden Pixel. Bisher habe ich nur Kugeln implementiert, soll sich noch ändern, dazu solls aber erstmal mit Kugel funktionieren. Das Problem ist, dass ich egal wie Groß die Kugel ist, oder wo ihr Mittelpunkt ist, dass alle Pixel des Bildes die Farbe der Kugel bekommen (Ich möchte erstmal ganz simpel die Farbe der Kugel halt ausgeben)

Ich habe ein eigenes Objekt für Farben gebastelt, welches die Farbkanäle RGBA hat. Alle "Kanalwerte" sind single-Variablen.
Also ich habe 2 vermutungen, was der Fehler sein könnte, finde ihn aber nicht :-/

1. Variante: Die RayIntersection-Funktion ist falsch.
2. Variante: Meine ShootRay-Funktion ist fehlerhaft.

Zu Variante 1:
Code:
  1. function TSphereObject.RayIntersection(const Ray: TRay;
  2.   var Hits: THits): boolean;
  3. var a,b,D:single;
  4. begin
  5.   a:=(Ray.Position.Dot(Ray.Direction)-Self.Position.Dot(Ray.Direction))/2;
  6.   b:=Ray.Position.Dot-2*Position.Dot(Ray.Position)-Position.Dot-Radius*Radius;
  7.   D:=a*a-b;
  8.   if D<0 then
  9.   begin
  10.     SetLength(Hits,0);
  11.     result:=false;
  12.   end
  13.   else
  14.     if D=0 then
  15.     begin
  16.       SetLength(Hits,1);
  17.       Hits[0]:=-a+Sqrt(D);
  18.       Result:=true;
  19.     end
  20.     else
  21.     begin
  22.       SetLength(Hits,2);
  23.       Hits[0]:=-a+Sqrt(D);
  24.       Hits[1]:=-a-Sqrt(D);
  25.       Result:=true;
  26.     end;
  27. end;


Dabei ist Ray der Strahl, und wenns kein Ray. davor hat alles von der Kugel. Hab ich die Intersektionsberechnung falsch?

Variante 2:
Code:
  1. function TBaseRenderer.ShootRay(const x, y: integer): TRay;
  2. begin
  3.   Result.Position:=Position;
  4.   Result.Direction.X:=View.Left+(x/High(Image))*(View.Right-View.Left);
  5.   Result.Direction.Y:=View.Top+(y/High(Image[0]))*(View.Bottom-View.Top);
  6.   Result.Direction.Z:=1;
  7.   Result.Direction.Normalize;
  8. end;


Oder hab ich die Berechnung des Richtungsvektors für die Strahlen falsch?

Mein View ist eine Variable vom Typ TView, welche 4 single-Variablen beinhaltet (Left,Top,Right und Bottom), View ist -4,-3,4,3.

Zum krönenden Abschluss hier mal die Render-Prozedur:
Code:
  1. procedure TBaseRenderer.Render(const Scene: TScene);
  2. var x,y,i:integer;
  3.     ray:TRay;
  4.     maxdist, hitdist:single;
  5.     hits:THits;
  6. begin
  7.   for x:=0 to High(Image) do
  8.     for y:=0 to High(Image[x]) do
  9.     begin
  10.       ray:=ShootRay(x,y);
  11.       maxdist:=Infinity;
  12.       for i:=0 to High(Scene.Objects) do
  13.         if Scene.Objects[i].RayIntersection(ray,hits) then
  14.           Image[x,y]:=Scene.Objects[i].Material.Color
  15.         else
  16.           Image[x,y].Init(0,0,0,0);
  17.     end;
  18. end;


Ich hoffe hier versteht mein Problem, wenn Informationen fehlen einfach Bescheid sagen ;)

Edit: Was höhst interessant sein sollte und mir gerade aufgefallen ist:
Der Strahl hat ja ein Skalar für den Richtunsvektor, davon hab ich fast jeweils 2, alle sind gerundet 110 bzw. -90, bei Radien von 10, 0.1 und 0.001
Quasi immer gleich... Ich versteh aber nicht wieso :S

cuz bubble

_________________
Wenn Worte nichts als Worte sind,
dann müssen's Steine sein!
Solange - bis sie pleite sind - schmeißt Fensterscheiben ein!

- Fidl Kunterbunt -


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 33 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Foren-Übersicht » DGL » Feedback


Wer ist online?

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


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.027s | 17 Queries | GZIP : On ]