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,
    Jan

    Anbei 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);
                }
            }
    

  • Mod

    CJens schrieb:

    uint* fRed = GlobalVariables.Red;
    ...
           (float)(fRed[P->Node[0]->Index] / 255)
    

    die knacknuss ueberlasse ich dir 😉


Log in to reply