-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
1. Jun 2011
Entshculdigt ich bins nochmal:
@Bit4Bit: in einem der vorherigen Posts hatte ich einen Formelbuffer erähnt. Dabei hatte ich gedacht, dass ich im Ratserizer nicht mehr direkt die Pixel(Farben) berechne, sondern lediglich in einen Buffer pro pixel abspeichere, was ich für den jeweiligen Pixel berechnen muss(also die zahlenwerte). Sobald der Rasterizer durchgelaufen ist, nudel ich dan einfach...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
31. Mai 2011
@Bit4Bit: Den code kann ich leider nciht zeigen. Den habe ich während der Arbeitszeit geschrieben, und ist somit unter Verschluss. Wenn ich das ganze hier zuhause nochmal schreibe, werd ichs mal posten, aber zuhause momentan beschäftigt mit anderen programmen^^
MFG
Memnarch
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
30. Mai 2011
WOW klasse.
Mit dieser Methode ist meine spitzen fps von 28-30 auf 52(!!) gestiegen. Ich wusste doch dass die divs und die float/int das waren. Klasse :).
MFG
Memnarch
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
30. Mai 2011
ACH MIST,
ja lag daran dass ich zu kleine werte eingegeben hatte. Je größer die werte sind, umso ungenauer wird es >.<.
€dit: Zeitlich aber weiterhin dasselbe.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
30. Mai 2011
@gammatester: ich soll shr auf 32 ändern? bit4bit's beispiel mit shr/shl 32 klappt nicht, da komtm immer 0 raus.
Könntest du mir es bitte etwas genauer erklären was du meinst o.O?
EDIT: mal ganz abgesehen davon hab ich gerade ein problem: Ergebnis ist ein Byte wert(farbe eben), und wnen ich nen hardcast Integer reinpacke gibts zwar keine fehler....aber alle farbwerte immer schwarz :stupid:
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
30. Mai 2011
Wert ändert sich pro Triangle, nicht voraussehbar da sich umgebung/triangles verändern.
Gerade mal getestet:
bit4bit's methode funktioniert SO:
Wert2 := Integer((2 shl 12) div Wert);
Ergebnis := Integer(((A*x + B*Y + C*Z) * Wert2) shr 13);
Ergebnis2 := Integer(((A*x2 + B*Y2 + C*Z2) * Wert2) shr 13);
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
30. Mai 2011
Wenn dass wirklich das ist was bit4bit's Idee war, und das funktioniert, bin ich dochmal gespannt.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
30. Mai 2011
oh klasse 1/wert zu multiplizieren wär super...dan hab ich wieder ne float und müsste truncaten >.<
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
30. Mai 2011
Ich nochmal:
Also im Moment ist es ja so, dass ich bei jedem Pixel dividieren muss. Allerdings werkelt da noch so einiges nebenher, womit das nicht die einzigen operationen wären.
Stellen wir uns mal vor, ich dividiere nicht im rasterizer, sondern speicher im Rasterizer nur pro pixel die werte für die Formeln ab. Wenn der rasterizer durchgelaufen ist, gehe ich durch diesen FormelBuffer und...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
30. Mai 2011
Ah, sone art lookup table? Sowas nutz ich schon für die COS/SIN funktionen^^.
Nur wie soll ich die einrichten?
Wenn die formel X/Y ist dan sowas wie:
Ergebnis := Tabelle;
oder wie?
Von der genauigkeit könnte es reichen weil der finale schritt der division immer für die Pixelkoordinaten also Integer ist. Aber wie soll ich die aufbauen?
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
30. Mai 2011
@Blackfin: Danke^^.
Allerdings weniger zeit im Moment dran weiterzuarbeiten. Sourcecode auf der Arbeit geschrieben, und wenn ich dran weitermachen will muss ichs im moment zuhause machen...dafür muss ich dan nochmal alles schreiben XD.(da hab ich dan aber auch nen Dualcore mit 2.66GHZ pro REALEM Kern :twisted: )
Wenn es mal interressiert:
...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
28. Mai 2011
@Bjoerk: Dir ist schon klar, dass ich mein momentanes Programm auf nem P4 3GHZ im MT Modus ausführe?(Somit nur 1.5GHz wegen virtuellem kern). :)
@Amateurprofi:
Habe schonmal nen Mix versucht, das Resultat war auch ernüchtenrd. Da die CPU immerwieder in die FPU wechseln muss, nimtm schonalleine diese umstellung in meinder anwendung mehr weg als wenn ich einfach nur stumpf dividieren würde.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
27. Mai 2011
@AmateurProfi: Flächen ABC und Gesamt sind Integer, in diesem Beispiel waren die XYZ variablen die Farben also Bytes.
Bei den flächen kann ich schlecht auf kleinere größen ausweichen. 512*512/2 liegt soweit ich weiß über Shortint.
Whops glaube ich hab mich verschrieben :P Pro BildAufbau werden 786432 DIVs für die FARBEN gebraucht.
ZWert ist natürlich imo "nur" 262144 pro bildaufbau(eben...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
27. Mai 2011
Ich nutze FrontToBack rendering + Groben TopLevel ZBuffer + PerPixelZbuffer.
Der grobe Buffer Speichert von einem dreieck an den stellen immer nur den Größt möglichen ZWert des dreiecks, so können andere dreiecken deren kleinster ZWert darunter liegt an diesen stellen gleich verworfen, und der ZWert nicht erst interpoliert werden ;).
Indem ich Die dreiecke in Quadrate unterteile, die die ganz...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
27. Mai 2011
Na für die Depthmap ;)
Sonst quadrutschelt es mir ja alles durcheinander ;)(Selbs wenn ich vorher sortieren würde).
Ist dieselbe Technik wie sie auch seit Jahren für alle 3dspiele angewand wird.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
27. Mai 2011
Was? Die farben oder die Z-Koordinaten?
Die Farben werden einfach für den Farbverlauf zwischen den 3 Vertices benutzt. Jeder Vertex hat RGB farbwerte.
Besser als eine einzige Farbe, bis ich nen Texturrasterizer draus gemacht hab^^.
MFG
Memnarch
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
27. Mai 2011
@Medium: Das ist richtig wenn ich nur die Plane zeichnen will(also das rasterisieren), wenn ich aber einen wert der Vertices interpolieren muss(z.B. welchen Z wert hat der punkt P an PosXY wenn die Vertixe ABC die ZWerte SoUndSo haben), reicht es nicht wenn ich nur zwischen den Vertices interpoliere.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
27. Mai 2011
Mit MMX hab ich zwar mal angefangen, aber nicht alles gefunden was ich brauchte. Ich habe es dann gelassen.
Soll ja für sowas wie geschaffen sein, da ich eine formel 3 mal hintereinander ausführe.
Hatte aber irgendwo seinerzeit probleme damit, ka mehr wo.
Aber am ende muss truncated werden und hier ist einfach alles futsch. da geht garnichts. wenn ich truncate kann ich auch gleich DIV...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
27. Mai 2011
Nur bei Currency bin ich mir icht sicher wie das ergebnis ausschaut. Wenn es sich um einen 64bit integer handelt, wie schnell kann der im vergleich zu einem 32bit integer kalkuliert werden?(P4 hier muhaha^^).
Und den bekomm ich dann z.B per bitshift in einen Integer oder übernimmt das Delphi hier für mich?
Erstmal testen wie schnell das mit dem datentypen hier geht o.O.( er braucht ja...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
27. Mai 2011
Das ganze ist wie folgt:
Obiges ist ein MinimalTeil eines Softwarerasterizers den ich geschrieben habe, nämlich die Finale kalkulation der Farbwerte eines Bildpunktes. Dazu müssen die Farbwerte der 3 Vertices interpoliert werden.
Wenn ich ein dreieck ABC habe, und einen Punkt P der dadrin liegt, muss ich die Farbwerte für P ermitteln. Nehmen wir als beispiel den rotkanal:
Alle 3 Vertices...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
26. Mai 2011
@Jason: das hört sich nicht schlecht an, danke :). Fürchte zwar dann kann ich meinen Softwarerasterizer nicht mehr Softwarerasterizer nennen(das ist das eigentliche anwendungsgebiet :twisted: ), aber trotzdem interressant ;). werds mir angucken.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
26. Mai 2011
ich kann mit float rechnen, aber trunc amt DIV in sachen performance gut nach.
Leider sind bei jedem durchlauf alle werte anders, ich kann mir also über mehrere durchläufe keine werte zurücklegen, das ist mein problem.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
26. Mai 2011
Das problem war glaub ich das synchronisieren, da war dann alles wieder futsch, vllt auch was falsch gemacht mal gucken.
Genaue erklärung: 30 mal pro sekunden werden pixelbasierte operationen auf eine bitmap angewand. ich hatte es schonmal so gemacht, das je ein Thread eine hälfte des bildes machte, und am ende das ganze in eines gepackt wurde, war aber irgendwie langsamer >.<
MFG...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Memnarch,
26. Mai 2011
Tag allerseits, also:
ich habe eine Formel:
Ergebnis := (A*x + B*Y + C*Z) div Wert;
Ergebnis2 := (A*x2 + B*Y2 + C*Z2) div Wert;
Ergebnis3 := (A*x3 + B*Y3 + C*Z3) div Wert;