Open GL nur drei Farben
-
Hallo.
Ich zeichne in meinem Programm Elemente, Linien, Dreiecke und Vierecke.
Dabei sollen die Elemente gefärbt sein, die Knoten erhalten Werte und im
Idealfall bekommt man einen linearen Übergang zwischen den Knoten. In den meisten Tutorials bei Google ist das auch so.Nun bekomme ich stets ein Bild mit nur drei Farben - es sieht so aus, als würde er das Farbspektrum einfach verringern. fRed, fBlue, fGreen sind zeiger auf uint - aber sie beinhalten nur zahlen bis 255 - das prpfe ich. Die Felder beunhalten also den bytewert der Knotenfarbe. Warum uint? Ist kompliziert...
Muss ich vorher noch eine Einstellung laden? Es können unmöglich nur drei verschiedene Werte hier rauskommen.
Vielen Dank,
JanAnbei der Code:
private static unsafe void DrawElement(Struct_cs.TElement* P, Color ElColor, bool IntElNumber, bool ExtElNumber, Color IntColor, Color ExtColor) { uint* fAlpha = GlobalVariables.Alpha; uint* fRed = GlobalVariables.Red; uint* fGreen = GlobalVariables.Green; uint* fBlue = GlobalVariables.Blue; Gl.glColor3f((float)ElColor.R/255, (float)ElColor.G/255, (float)ElColor.B/255); switch (P->nNode) { case 2: //Line element Gl.glBegin(Gl.GL_LINES); Gl.glColor3f((float)(fRed[P->Node[0]->Index] / 255), (float)(fGreen[P->Node[0]->Index] / 255), (float)(fBlue[P->Node[0]->Index] / 255)); Gl.glVertex2d(P->Node[0]->P.x, P->Node[0]->P.y); Gl.glColor3f((float)(fRed[P->Node[1]->Index] / 255), (float)(fGreen[P->Node[1]->Index] / 255), (float)(fBlue[P->Node[1]->Index] / 255)); Gl.glVertex2d(P->Node[1]->P.x, P->Node[1]->P.y); Gl.glEnd(); break; case 3: //Tri element Gl.glBegin(Gl.GL_TRIANGLES); Gl.glColor3f((float)(fRed[P->Node[0]->Index] / 255), (float)(fGreen[P->Node[0]->Index] / 255), (float)(fBlue[P->Node[0]->Index] / 255)); Gl.glVertex2d(P->Node[0]->P.x, P->Node[0]->P.y); Gl.glColor3f((float)(fRed[P->Node[1]->Index] / 255), (float)(fGreen[P->Node[1]->Index] / 255), (float)(fBlue[P->Node[1]->Index] / 255)); Gl.glVertex2d(P->Node[1]->P.x, P->Node[1]->P.y); Gl.glColor3f((float)(fRed[P->Node[2]->Index] / 255), (float)(fGreen[P->Node[2]->Index] / 255), (float)(fBlue[P->Node[2]->Index] / 255)); Gl.glVertex2d(P->Node[2]->P.x, P->Node[2]->P.y); Gl.glEnd(); break; case 4: //Quad element Gl.glBegin(Gl.GL_QUADS); Gl.glColor3f((float)(fRed[P->Node[0]->Index] / 255), (float)(fGreen[P->Node[0]->Index] / 255), (float)(fBlue[P->Node[0]->Index] / 255)); Gl.glVertex2d(P->Node[0]->P.x, P->Node[0]->P.y); Gl.glColor3f((float)(fRed[P->Node[1]->Index] / 255), (float)(fGreen[P->Node[1]->Index] / 255), (float)(fBlue[P->Node[1]->Index] / 255)); Gl.glVertex2d(P->Node[1]->P.x, P->Node[1]->P.y); Gl.glColor3f((float)(fRed[P->Node[2]->Index] / 255), (float)(fGreen[P->Node[2]->Index] / 255), (float)(fBlue[P->Node[2]->Index] / 255)); Gl.glVertex2d(P->Node[2]->P.x, P->Node[2]->P.y); Gl.glColor3f((float)(fRed[P->Node[3]->Index] / 255), (float)(fGreen[P->Node[3]->Index] / 255), (float)(fBlue[P->Node[3]->Index] / 255)); Gl.glVertex2d(P->Node[3]->P.x, P->Node[3]->P.y); Gl.glEnd(); break; case 1: //Point element break; default: if (P->nNode > 0) { } break; } if (IntElNumber) { FixedNumberFont.DrawInt((int)P->Index, P->P.x, P->P.y, NumberZoomFactor, InternalElementNumberCol); } else if (ExtElNumber) { FixedNumberFont.DrawInt((int)P->ExternalNumber, P->P.x, P->P.y, NumberZoomFactor, ExternalElementNumberCol); } }
-
CJens schrieb:
uint* fRed = GlobalVariables.Red; ... (float)(fRed[P->Node[0]->Index] / 255)
die knacknuss ueberlasse ich dir