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

Aktuelle Zeit: Di Jul 15, 2025 17:22

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Di Mär 06, 2012 17:07 
Offline
DGL Member

Registriert: Mi Mai 25, 2011 07:11
Beiträge: 2
Ich habe einen (!) RGB-Farbwert definiert, der im Programm geändert werden kann:

var LinkeSeiteCol:longint=65536*100+256*150+1*250;

Mit welchem glColor - Befehl weise ich einen solchen Farbwert zu?

Danke für eure Hilfe.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Mär 06, 2012 17:34 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Mär 06, 2012 18:42 
Offline
DGL Member

Registriert: Mi Mai 25, 2011 07:11
Beiträge: 2
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.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Mär 06, 2012 19:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Dann bräuchte ich für jede Farbe nur einen Zahlenwert speichern.

Dann definiere dir doch einen Record (Delphi) bzw. ein Struct (C++) dafür. ;)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Mär 06, 2012 19:35 
Offline
DGL Member
Benutzeravatar

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:
  1. type
  2.   TColour = packed record
  3.     Red, Green, Blue: Single;
  4.   end;

kann man dann sogar mit
Code:
  1.  
  2. var Colour: TColour;
  3. // ...
  4.   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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Mär 06, 2012 20:35 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Guckst du:
http://wiki.delphigl.com/index.php/glColor

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.)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Mär 06, 2012 21:15 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Mär 06, 2012 21:20 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Ey heute kann man sich ja auf gar Niemanden mehr verlassen. Jetzt gibt es doch noch structs.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Mär 06, 2012 21:45 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Apr 13, 2011 22:05
Beiträge: 218
Programmiersprache: Lazarus/FPC
Du hast deinen Farbwert ja in einem Longint gespeichert, was ja nichts anderes als ein longword oder ein TColor ist!

Code:
  1. var Color :LongInt; //oder TColor
  2. r,g,b: real;
  3.  
  4. begin
  5.   r := Color;
  6.   g := Color shr 8;
  7.   b := Color shr 16;
  8.   glcolor3f(r/255, g/255, b/255);
  9. end;
  10.  

_________________
Ich teile manchmal heimlich durch Null. - Alber Einstein


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Mär 07, 2012 10:31 
Offline
DGL Member
Benutzeravatar

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:
  1. var Color :LongInt; //oder TColor
  2. r,g,b: Byte;
  3. begin
  4.   r := Color and $FF;
  5.   g := (Color shr 8) and $FF;
  6.   b := (Color shr 16) and $FF;
  7.   glcolor3f(r/255, g/255, b/255);
  8. 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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Mär 07, 2012 15:26 
Offline
DGL Member
Benutzeravatar

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:
  1. var Color :LongInt; //oder TColor
  2. r,g,b: Byte;
  3. begin
  4.   r := Color and $FF;
  5.   g := (Color shr 8) and $FF;
  6.   b := (Color shr 16) and $FF;
  7.   glcolor3f(r/255, g/255, b/255);
  8. 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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Mär 07, 2012 16:03 
Offline
DGL Member
Benutzeravatar

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,


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Mär 07, 2012 17:00 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Mär 07, 2012 18:28 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 15, 2009 20:48
Beiträge: 111
Wohnort: Berlin
Programmiersprache: Delphi,JS,PHP,AS3,C#
ok nvm. hatte mal nachgeschaut, aber irgendwie komplett falsches erinnert.

_________________
thanks to the internet we have rule 34, wich states that if something exists, theres a pornographic version of it,


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


Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot] und 17 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.010s | 15 Queries | GZIP : On ]