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

Aktuelle Zeit: Fr Mär 29, 2024 09:12

Foren-Übersicht » Sonstiges » Projekte
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Jun 15, 2011 18:56 
Offline
DGL Member

Registriert: Fr Apr 08, 2011 23:41
Beiträge: 19
Programmiersprache: Free Pascal, ASM
Tja, ich moechte ihnen mein projekt vorzustellen. Es handelt sich um ein 3d engine mit einen software render. Also kein GPU, nur CPU. In momentalen zustand sind diese techniken implementiert:
-Die Half-space rasterization technik, welche besiert auf Nick's article (http://www.devmaster.net/codespotlight/show.php?id=17). Diese technik is erweitert durch die 2dh rasterization technik (pdf: http://www.csee.umbc.edu/~olano/papers/ ... dh-tri.pdf). Bei der implementierung hat mir das source code von Attila GPU simulator (https://attila.ac.upc.edu/wiki/index.php/Attila_Project). Ich habe die normaliziernug und konvertierung der linien gleichungen von floating-point to fixed-point format selber erfunden und implementiert. Wir brauchen diese konvertierung weil wir brauchen exakt zu wissen ob der pixel ist in den dreieck oder nicht. Bei floating-point hatte ich probleme und zwishen den polys wahren loecher
-Die Bounding-box berechnung basiert auch auf dem source-code von dem Attile GPU simulator project und das basiert auf Jim Blinn's artikel "Jim Blinn's Corner: Calculating Screen Coverage"
-Die "Early accept-reject of block-in-triangle" idea basiert auf intels Larabee artikel (http://software.intel.com/en-us/article ... -larrabee/), und ich die implementierung is meine
-Die "deferred rendering pipeline" idea basiert auf dem PowerVR thechnology artikel http://www.imgtec.com/factsheets/SDK/Po ... ternal.pdf, aber die triangle-tile-coverage(t_t_c) stack habe ich sebst erfunden und implementiert.
-Die idea von erneuerung des hierarchischen Zmin in zbuffer wen die coverage-mask ist voll ,basiert auf dem article Two-level hierarchical z-buffer for 3D graphics hardware (http://www.si2lab.org/publications/cnf/ ... scas02.pdf)
-Das transformation code basiert auf dem artikel http://www.cortstratton.org/articles/Op ... ForSSE.php
-Die berechnung von mip-maps ist auch implementiert als post-process, wenn mann per tile die texturen zeichnet
-Fur ladung der bilder nutze ich die DEVIL lib. Aber das ist nur am anfag. Spaeter werde ich einige bilder-formate selber implementieren.
-Die high-level fuktionen sind noch nicht so gut implementiert, weil ich mich jetzt mit dem rasterizer bescheftige.

In der zukunft werde ich auch das per-pixel-licht und post-process efekts implementieren. Ich denke auch uber shadern. Wir werden sehen.
link zum projekt : http://sourceforge.net/projects/phenomenonngsw/
link zum letzten update : http://sourceforge.net/projects/phenome ... r/download

Man bewegt sich im demo mit w,a,s,d tasten und die kamera dreht sich mit pfeil tasten. Die wurfel sind nich geordnet gezeichnet.

Tja ok. Wenn man einige fragen hat, schreibt es in der "Meinungen zu den Projekten"


Dateianhänge:
screenshot.jpg
screenshot.jpg [ 81.1 KiB | 9474-mal betrachtet ]

_________________
Mich interesiert es nicht in welcher sprache du programmiers. Mich interesiert, was du in dieser sprache programmieren kannst.
Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Jul 03, 2011 01:51 
Offline
DGL Member

Registriert: Fr Apr 08, 2011 23:41
Beiträge: 19
Programmiersprache: Free Pascal, ASM
Ok jungs. Ein update ist da.

Tja was habe ich gemacht? Die textur representation ist jetzt anders. Ich kodiere die texture jetzt in 9x9 tiles. Sie ist geteilt in 8x8 texel-tiles als vorher, aber die extra-texel rechts und unten sind gefuehlt mit texel-farben von den nachbar-tiles. Es war ein problem wenn ich fur die bilineare filterung die 3 extra-texels lesen musste und in andere tiles fur die nachbar-texel zugriffen musste. Mann musste die adresse 3 mal neu umrechnen und das alles kostete wertvolle cpu-cyklen. Mit der neuen kodierung sind die nachbar-texel nur in einem tile und ich rechne die texel-adresse nur einmal. Ich lese das erstes paar mit MOVQ instruktion und mit der durgerechneten adresse. Das andere paar auch mit der MOVQ instruktion aber ich addiere einen konstanten offset mit vert 9xsizeof (dword). Dass sind alles nur 2 instruktionen ohne multiplikation oder shifts oder was weiss ich. Ich denke dass ist die beste loesung wenn mann die tile-texturen benutzt und die bilinear-filterung. Oder hat noch jemand bessere idee? :D

ok unde jetzt zum triangle-occlusion. Wenn ich die dreiecke zeichne von der kamera vorwertzt, einige dreiecke sieht man nicht, so wie mussen sie nicht durch die zeichnung-pipeline schicken. Wie erkenne ich das? Ich nehme den transformierten 1/z koordinaten der am nächsten zur kamera von den drei ecken des dreiecks ist. Ich rechne den minimalen bounding-box fur den dreieck, unde gehe durch alle Tile-Zmin's die in diesen box legen. Die tile-Zmin's sind in einer separaten array als das ganze z-buffer, was feur die cache gut ist. Das ist wie die on-chip-memory-rough-z-buffer in manchem grafik-karten. Also das lesen der tile-zmin werte ist so sehr schnell. Wenn man feststellen das nur ein tile-zmin vert kleiner ist als das 1/z koordinate, man musst den dreieck zeichnen. Diese technik ist in einen artikel "Method for accelerated triangle occlusion culling" (http://www.freepatentsonline.com/20030043148.pdf), aber wenn man mit den hierarchischen z-buffer arbeitet, kommt solche idee automatish. Ich hate ja ähnliche idee wenn ich am n-level-z-buffer arbeitete.

http://sourceforge.net/projects/phenome ... r/download

_________________
Mich interesiert es nicht in welcher sprache du programmiers. Mich interesiert, was du in dieser sprache programmieren kannst.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Sep 02, 2011 14:37 
Offline
DGL Member

Registriert: Fr Apr 08, 2011 23:41
Beiträge: 19
Programmiersprache: Free Pascal, ASM
Nach langer zeit ist ein neues update ist da.

Das problem war, das ich von 32-bit zum 64-bit OS kamm. Ich musste mir z.b. ein neues modem kaufen, weil mit dem alten die firmware nich fur das 64-bit environmnet gemacht woerde.. und viele andere dinge, die nicht mit der 64-bit OS funktionierten. Aber jetz leuft alles gut :)

Mit 64-bit umgebung hat man mehr moeglichkeiten, wie z.b. mehr register, erweitete register, mehr speicher. Als assembler programmierer fuehlte ich mich wie ein kind in spielzeugladen. So viele register :)... Mehr register ist gleich mehr speed. Mit der 32-bit umgehbung hatte ich einige probleme weil manchmal programierte ich eine function und hatte wenig register zu verfugung. Automatich muste ich mit dem speicher arbeiten was bedeutete ein slowdown der funktion. Als programierer des software-renders kann ich mich es nich leisten. Die schnelligkeit is essenciel fuer das program. Und jetzt hat man 15 GP und 15 xmm register. Mein Gott.. :D.

Also ich musste auch die source-code umschreiben (pointers mit der dword groesse zur qword groesse). Hatte auch die tile -funktion optimalisiert fur die 15 xmm register. Ich habe auch ein par kommentare mehr hingeschrieben und namen einigen variablen umgeschrieben so, dass man es besser verstieht.
Flash hatte mal problem mit den psychadelischen farben, so hatte ich als output wieder die GDI reinprogramier. Ich hatte auch so wie so probleme mit der direct-draw un mit der 64-bit umgebung. Es zeigte mir exceptions ohne ende.
Ach began auch die sse4 instruktionen zu nutzen. Ich weiss es nich gut fur die kompatibilitaet fur altere processoren ist aber... ich mache den program fur zukunftige processoren, und nicht fuer die alten. http://sourceforge.net/projects/phenome ... r/download

Ich habe wieder auch einige tests durchgefuhrt. Ich habe meinen altern rectanglar-traversal algorhytmus mit dem rekursieven. Tja... das alte war schneller. So wie so habe ich den rekursieven hochgeladen fur studierzwecke.http://sourceforge.net/projects/phenome ... r/download

Cya :)

_________________
Mich interesiert es nicht in welcher sprache du programmiers. Mich interesiert, was du in dieser sprache programmieren kannst.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Sonstiges » Projekte


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 33 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.106s | 17 Queries | GZIP : On ]