Du bist nicht angemeldet.

Werbeanzeige

Architekt

Community-Fossil

Beiträge: 2 490

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

631

07.10.2015, 16:12

Debug-Code nicht rausgeräumt? Aber einmal true und einmal false ist zusammen doch recht seltsamer Debug-Code... :D
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

ByteJunkie

Alter Hase

Beiträge: 843

Wohnort: Deutschland

Beruf: Softwareentwickler

  • Private Nachricht senden

632

07.10.2015, 16:57

Mir gefällt besonders die 1. Zeile ... :pillepalle:
"Alles bleibt wie immer. :rolleyes: Wenn es nicht besser wird, wird es schlimmer!." :huh:

JaielSoft

Alter Hase

Beiträge: 1 164

Wohnort: Berlin

Beruf: Student Ang. Informatik

  • Private Nachricht senden

633

07.10.2015, 17:06

C-/C++-Quelltext

1
2
3
4
5
6
7
8
public bool IsTrue(bool b)
{
        if (b == true)
        {
                return true;
        }
        return false;
}

Maggot

Frischling

Beiträge: 53

Wohnort: Wien

Beruf: Software Entwickler

  • Private Nachricht senden

634

08.10.2015, 06:28

Quellcode

1
2
3
if (!!!sichtId) {
   . . .
}

635

14.10.2015, 21:57

HLSL-Quelltext

1
2
3
4
5
6
output.worldPosition = float4((((((SectorSize*lSectorPositionOffset)
    + (1024.0f*1024.0f*16.0f)*float3(PosHighDiff.x & 0xFFFF0000, PosHighDiff.y & 0xFFFF0000, PosHighDiff.z & 0xFFFF0000))
    + (1024.0f*1024.0f*16.0f)*float3(PosHighDiff.x & 0xFFFF, PosHighDiff.y & 0xFFFF, PosHighDiff.z & 0xFFFF))
    + (1.0f / 256.0f)*float3(PosLowDiff.x & 0xFFFF0000, PosLowDiff.y & 0xFFFF0000, PosLowDiff.z & 0xFFFF0000))
    + (1.0f / 256.0f)*float3(PosLowDiff.x & 0xFFFF, PosLowDiff.y & 0xFFFF, PosLowDiff.z & 0xFFFF))
    + input.radius*input.position.xyz, 1.0f);

Immerhin funktioniert es xD Ich bin mir nicht sicher, aber ich glaube sogar, dass es nicht anders geht. Ich hatte vorher die uint3 direkt in float3 konvertiert, aber dann waren die errechneten Positionen falsch.
Cube Universe
Entdecke fremde Welten auf deiner epischen Reise durchs Universum.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Magogan« (14.10.2015, 22:12)


Schorsch

Supermoderator

Beiträge: 5 200

Wohnort: Wickede

Beruf: Student

  • Private Nachricht senden

636

14.10.2015, 23:13

Das ist mal ein WTF Codeschnipsel ;) Ich bin mir ziemlich sicher dass das einfacher geht aber sträube mich stark dagegen mir das anzusehen ;) Aber auf die schnelle, da sind einige Magic Numbers drin die man austauschen könnte und ob man für eine Weltposition wirklich diese ganzen bitweisen Operationen benötigt bezweifle ich grad einfach mal. Aber wie gesagt da möchte ich auch einfach gar nicht genauer hinsehen müssen:) Thema des Threads auf jeden Fall genau getroffen:)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

JaielSoft

Alter Hase

Beiträge: 1 164

Wohnort: Berlin

Beruf: Student Ang. Informatik

  • Private Nachricht senden

637

14.10.2015, 23:20

ich glaube die ersten 4 adiitionen kann man weglassen die werden eh immer 0 ergeben außer bei 4 bestimmten Werten :D
oh gott wo soll man da nur anfangen es zu verbessern....markieren+löschen würd ich sagen :)

Logik lol

638

15.10.2015, 07:19

Die bitweisen Operatoren sind nötig, die hatte ich vorher nicht drin und das hat zu falscher Darstellung geführt. Im Prinzip werden da 3x64 Bit unsigned integer in float3 konvertiert, sodass sowohl sehr nahe als auch sehr ferne Objekte an der korrekten Position dargestellt werden. Die Genauigkeit soll in der Nähe bis zu 1/256 Meter (rund 4 mm) betragen (wichtig für die Bewegung von Raumschiffen, vor allem, wenn diese sich sehr nahe kommen), während entfernte Objekte (Sterne) mehrere Lichtjahre entfernt sein können.

Den Abstand zum Betrachter könnte man vorher auf der CPU ausrechnen, dann müsste man das aber jeden Frame machen und die Daten an die GPU übertragen, was bei Sternen mit fester Position etwas sinnlos ist. Also bleibt wirklich nur diese umständliche Rechnung und Konvertierung, die ich derzeit ausführe. Für Sterne könnte man vielleicht die unteren 16 Bit weglassen, die dürften eh weggeschnitten werden bei der Addition, aber ich will das mal lieber nicht ausprobieren, da es jetzt funktioniert und die Performance auch in Ordnung ist.
Cube Universe
Entdecke fremde Welten auf deiner epischen Reise durchs Universum.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Magogan« (15.10.2015, 07:31)


639

15.10.2015, 15:24

Naja, was man auf jeden Fall machen könnte (und sollte), wäre Zwischenvariablen und Funktionen einzufügen. Derartiges bekommt der Compiler wunderbar wegoptimiert, zur sicherheit kann man sich ja auch nochmal den Assembly-Output anschauen um sicher zu stellen, dass wirklich der selbe Code generiert wird. Denn so wie es da steht ist es halt write-only Code, und sowas macht man einfach nicht.
Lieber dumm fragen, als dumm bleiben!

640

16.10.2015, 09:16

Ist ja eh nur der Shader, da ist mir das - ehrlich gesagt - egal.

Ach ja, noch ein Fail:

C-/C++-Quelltext

1
2
double CurrentTimeDeceleration = CurrentCourse->DecelerationTime - TimeToEnd;
Progress += (CurrentCourse->EndVelocity + 0.5*MaxAcceleration*CurrentTimeDeceleration)*CurrentTimeDeceleration;

MaxAcceleration ist übrigens positiv...
Cube Universe
Entdecke fremde Welten auf deiner epischen Reise durchs Universum.

Werbeanzeige