sorry ich bin absoluter anfaenger - darum eine relativ simple frage:
ich habe mir konstanten als farbe definiert z.b.:
Code:
const GLfloat Lila[] ={1.0,0.0,1.0};
nun möchte ich diese konstante an eine funktion übergeben, welche ein rechteck zeichnet - dort soll dann die farbe verwendet werden...
Code:
void test (float laenge, float breite, const GLfloat farbe);
void test (float laenge, float breite, const GLfloat farbe)
{
glBegin(GL_QUADS);
glTranslatef(-2.0,-1.0,0.0);
glColor3fv(farbe);
glVertex2f(0.0f, 0.0f);
glVertex2f(0.0f, laenge);
glVertex2f(breite, laenge);
glVertex2f(breite, 0.0f);
glEnd();
}
test (1.0, 2.0, Violett);
--> das funktioniert nicht, ich weiss auch warum aber ich komme nicht drauf, wie ich die variable als string (also als den namen der farbe) übergeben kann, wenn doch eigentlich ein array erwartet wird (da der datentyp der variable ein array ist)...
ist das irgendwie verständlich? letztendlich will ich nur noch die funktion test aufrufen und farben durchlaufen lassen, indem ich ihren namen (im beispiel: LILA) übergebe...
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Vielleicht weil du oben lila definierst dann aber mit Violett aufrufst..?
Ne aber Spass beiseite... Mir fällt bei deinem Beispiel nur 2 was auf:
1. Du versuchst ein Feld auf eine einzelne Float Variable zu übergeben
2. Du benutzt nicht die Code-Tags
_________________ Blog: kevin-fleischer.de und fbaingermany.com
ähm, das mit lila und violett is net das problem - habs nur copy and paste (wobei wir auch beim 2.problem sind - sorry 4 that!) gemacht und halt den falschen aufruf genommen - das mit dem feld und der float variable ist das eigentlich problem! wie kann ich eine farbe mit einem namen (dann wohl string oder char) definieren, wobei der eigentliche wert dann halt ein array ist? vll hätte ich das ganze ins anfängerforum stellen sollen
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ehrlich gesagt glaube ich ein wenig, dass es das komplett falsche Forum ist. Das was du wissen möchtest ist kein Problem von OpenGL sondern eher von C++. Nur sind wir auf Delphi spezialisiert. Aber da du schon mal da bist können wir auch versuchen dir zu helfen.
Ach ja. Im Anschluss an meinen Beitrag werde ich das Thema in den Anfänger Beriech verschieben und die Codetags hinzufügen.
So zu deinem Problem. Ein Farbarray besteht aus 3 Werten. Deine Methode Test erwartet aber lediglich nur einen GLfloat. Sie müsste ein Array erwarten. Die Methode glColor3fv möchte aber einen Pointer auf ein Array haben. Also hat du 3 vollkommen verschiedene Typen die so nicht miteinander funktionieren.
Mein Vorschlag wäre folgender du lässt dir bei Test einen Pointer (oder eine Referenz) auf ein GLfloat oder GLfloat Array übergeben. Diese solltest du dann auch direkt an glColor3fv übergeben können. Dadurch musst du zum Beispiel auch nicht das Array an die Funktion reichen sondern es würde lediglich dessen Adresse weiter gereicht werden. Das ist natürlich wesentlich weniger aufwand. Das würde bei konsequenter Anwendung ein wenig mehr Geschwindigkeit bringen, da C++ nicht mehr so viel machen müsste.
Was du allerdings schreiben müsstest könnte ich dir zwar so halb erklären aber ich denke nicht, dass es so praktisch wäre, da C++ bei mir schon eine Weile her ist und ich es nicht Anfängertauglich (und wahrscheinlich auch nicht 100%tig richtig) erklären könnte. Ich würde dir also dringlichst empfehlen dich erst einmal gründlich mit deiner Sprache auseinander zu setzen. Also bei Google mal nach tutorials oder nachschlagewerken suchen. Das ist nämlich eine Sache bei dir wir dir nur schlecht helfen können.
Zuletzt geändert von Lossy eX am Do Aug 11, 2005 08:33, insgesamt 1-mal geändert.
Registriert: Sa Nov 13, 2004 11:00 Beiträge: 229 Wohnort: Steinhude
nur um sicher zu gehen, das ich das richtig verstanden hab:
du willst eine Konstante über einen String ansprechen, der ihren Namen enthält?
So ohne weiteres ist das nicht möglich, da die Variablennamen nichts anderes als eine Vereinfachung sind, weil unser Gehirn mit den Addressen, in die die Variablennamen später umgewandelt werden, überfordert wäre.
Was du allerdings machen kannst ist einen array anzulegen, der aus records mit je einem string und einer Farbe besteht und diesen dann nach dem passenden feld zu durchsuchen, indem du den eingabestring mit dem string des jeweiligen feldes vergleichst.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Mittlerweile glaube ich, dass das "nur" ein Anfängerproblem ist. Also ein Problem was entsteht, wenn man die Sprache noch nicht ganz durchschaut hat. Wenn du erstmal paar kleine Testprogramme schreibst und dir Tuts durchliest sollte dir in einer Woche klar sein, dass dein Momentaner Ansatz bestimmt nicht praktikabel ist.
Also wie Lossy schon sagte, erstmal die Sprache lernen. Das grigt man in 2-3 Wochen schon soweit hin, dass solche Elementaren sachen verstanden sind.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
naja, das mit den pointern is ne gute idee...werde ich mal nachschlagen
... und sicherlich ist es nur ein anfängerproblem - aber ich habe leider weder die zeit, noch das große interesse mich 3 wochen mit c++ zu beschäftigen, da ich das ganze nur für nen beleg machen, wovon dies auch wieder nur ein kleiner teil ist - wollte halt nur schnell hilfe, damit ich mir das ewige ausprobieren und erlernen sparen kann - sicherlich ist so eine einstellung für manche fragwürdig, aber da ich c++ wohl nicht mehr so schnell brauchen werde für mich einfach praktikabel
... also danke für den tipp
Mitglieder in diesem Forum: 0 Mitglieder und 3 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.