Ich vermute mal du musst durch 255 teilen und nicht durch high(cardinal). Ein cardinal hat nämlich laut Google 32bit...was dann bedeuten würde das du durch 4294967295 teilst.
Ist zwar schon lange her das ich glBitmap benutzt habe, aber soweit ich noch weiß liefert die GetPixel Funktion die einzelnen Farben nicht in einem definierten Bereich zurück. Sondern Pixelformat abhängig.
Beispielwerte durch die dividiert werden muss: RGBA8 = R: 255 G: 255 B: 255 A: 255 R5G6B5 = R: 31 G: 63 B: 31
naja das ja doof.. dann muss ich ja alle Pixelformate durchgehen... da wollt ich jetzt lieger ein assigntoBitmap machen, doch das haut auch net hin.. da bleibt die bmp weiss...
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Die Pixeldaten haben deswegen ein Cardinal, da dort durchaus auch RGB10A2 Daten enthalten sein können und je nach Anwendungsfall macht es schlicht keinen Sinn die Daten zu transformieren. Denn dadurch geht massiv Zeit flöten. Zu mal es nur in eher wenigen Fällen wirklich Sinn machen würde die Werte immer normalisiert zurück zu geben.
Thmfrnk hat geschrieben:
naja das ja doof.. dann muss ich ja alle Pixelformate durchgehen...
Ach. Ist das so? Das geht auch deutlich einfacher. Und auch ohne wissen zu müssen welches Format vorliegt.
Code:
function T3DLight.GetColorAtPixel(pX, pY: Single): TVector3f; var Pixel: TglBitmapPixelData begin FormatPreparePixel(Pixel, lighttexture.InternalFormat); lighttexture.GetPixel(Pos, Pixel);
FormatPreparePixel befüllt das Feld PixelDesc von Pixel. Dort zu finden ist dann jeweils die Größe des Wertebereiches und die Position. Also um wie viele Bits es vom Pixelanfang verschoben ist. Damit solltest du in der Lage sein immer Werte zwischen 0 und 1 zu bekommen.
Im übrigen solltest du GetPixel nicht zu oft aufrufen. Es ist zwar schon so leidlich optimiert. Allerdings aufgrund der Fülle der Formate die unterstützt werden müssen hat es prinziepbedingt eine Grenze über die man nicht hinwegoptimieren kann.
Mitglieder in diesem Forum: 0 Mitglieder und 11 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.