Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Spalte den am besten in seine Rot, Grün und Blau-Komponenten auf und normalisiere diese auf den Float-Bereich [0,1]. Dann kannst du das einfach per glColor3f(red, green, blue); übergeben, unter der Annahme, dass red, green und blue jeweils die Farbkomponenten im Bereich von 0..1 sind.
greetings
(praktisch nimmst du die Farbanteile als bytes und teilst durch 255.)
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Solange ich mit 3 einzelnen Farb-Werten arbeite, bekomme ich das alles schon hin, auch Deinen Vorschlag habe ich schon probiert (Danke!). So muss ich aber immer 3 Farbwerte speichern. Ich dachte bei den vielen Varianten des glColor-Befehls gibt es auch einen, dem man den longint-Wert direkt übergeben könnte, und der dann intern geeignet verarbeitet wird. Dann bräuchte ich für jede Farbe nur einen Zahlenwert speichern.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Coolcat hat geschrieben:
Dann definiere dir doch einen Record (Delphi) bzw. ein Struct (C++) dafür.
Code:
type
TColour =packedrecord
Red, Green, Blue:Single;
end;
kann man dann sogar mit
Code:
var Colour: TColour;
// ...
glColor3fv(@Colour);
übergeben.
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Laut dem Eintrag gibt es kein direkten Befehl. Die Pointer-Varianten kannste dank Little-Endian wohl knicken. Mehrere Variablen zu nutzen ist aber kein wirkliches Problem. Letztlich hast du nur eine Ansammlung von Bits im Speicher und ob du nun sagst das da sind 3 verschiedene mit je icks bit oder das ist eine mit der Speichergröße 3icks sollte egal sein.
Meines Wissens nach gibt es in C++ keinen struct mehr sondern ausschließlich class, struct wird aber von den meisten Compilern trotzdem unterstützt bzw. intern wie ein class behandelt. (Ich kann unter QT einem struct sogar Funktionen zuweisen.)
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
SDH.Prod hat geschrieben:
Die Pointer-Varianten kannste dank Little-Endian wohl knicken.
Interessanter Hinweis. Mit glColor3ubv sollte es gehen, sofern Rot die niedrigste Signifikanz hat, also der Wert ist, der mit 1 multipliziert wird.
SDH.Prod hat geschrieben:
Meines Wissens nach gibt es in C++ keinen struct mehr sondern ausschließlich class, struct wird aber von den meisten Compilern trotzdem unterstützt bzw. intern wie ein class behandelt. (Ich kann unter QT einem struct sogar Funktionen zuweisen.)
Da trügt dich dein Wissen, in C++ gibts sowohl Structs als auch Klassen, die semantisch aber fast gleich sind. Bei Structs besteht noch der unterschied, dass die Member standardmäßig public sind, während bei Klassen private der Standard ist. Siehe auch: C++ - struct vs. class auf StackOverflow.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Das wird schief gehen. r ist keineswegs einfach nur Color.
Ida hat geschrieben:
Code:
var Color :LongInt;//oder TColor
r,g,b:Byte;
begin
r := Color and$FF;
g :=(Color shr8)and$FF;
b :=(Color shr16)and$FF;
glcolor3f(r/255, g/255, b/255);
end;
So würde ich das vorschlagen.
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Mi Apr 13, 2011 22:05 Beiträge: 218
Programmiersprache: Lazarus/FPC
Lord Horazont hat geschrieben:
Das wird schief gehen. r ist keineswegs einfach nur Color.
Ida hat geschrieben:
Code:
var Color :LongInt;//oder TColor
r,g,b:Byte;
begin
r := Color and$FF;
g :=(Color shr8)and$FF;
b :=(Color shr16)and$FF;
glcolor3f(r/255, g/255, b/255);
end;
So würde ich das vorschlagen.
Naja...dadurch das es ein byte-wert ist der nie größer als 255(256?) Beim Wert-Zuweisen kalkuliert sich das lustigerweise auf genau den richtigen Wert runter^^
_________________ Ich teile manchmal heimlich durch Null. - Alber Einstein
Registriert: Mi Jul 15, 2009 20:48 Beiträge: 111 Wohnort: Berlin
Programmiersprache: Delphi,JS,PHP,AS3,C#
ok, vill hab ich das problem nicht verstanden, aber meines wissens nach hat ein single 16bit, und n longint 64 bit. du möchtest nur eine farmkomponente speichern, tatsächlich würdest du mit 3 singles aber speicher sparen (quasi den alpha-kanal).
komplett am problem vorbei?^^
_________________ thanks to the internet we have rule 34, wich states that if something exists, theres a pornographic version of it,
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
sirrk hat geschrieben:
ok, vill hab ich das problem nicht verstanden, aber meines wissens nach hat ein single 16bit, und n longint 64 bit. du möchtest nur eine farmkomponente speichern, tatsächlich würdest du mit 3 singles aber speicher sparen (quasi den alpha-kanal).
Single hat 32-bit, LongInt ebenfalls. Double hat 64-bit, Int64 ebenfalls. Extended hat 80-bit, dazu gibts kein Integer äquivalent. 16-bit Floats haben wir in Pascal nicht.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
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.