Glut



  • Hi ihr da draußen,

    ich bin momentan an meiner Oszilloskopsoftware am schreiben. Ich bin auf die Funktionen mit glut gestoßen und wende sie jetzt an mein Oszi auf dem Bildschirm darzustellen. Leider klappt es noch nicht ganz mit der Performance etc. Mein Problem ist, dass ich zwar den Kanal auf dem Raster darstellen kann, aber nicht das es kontinuierlich aufgebaut wird. Wollte es jetzt mit ner While Schleife machen. Aber erstens baut er immer wieder neu das Raster dann auf und zweitens hängt er sich dann auf. Hat einer ne Idee wie ich das geschickter lösen kann, also das ich den KAnal kontinuerlich schreiben lassen kann. Bin auf jede Kritik gespannt.

    Danke.

    while(fRun == 1)
      {
      glColor3f(0.0f, 0.0f, 0.0f);
      glClear(GL_COLOR_BUFFER_BIT);
      glBegin(GL_POINTS);
      glBegin(GL_LINE_STRIP);
    for (GLdouble x = 0; x < 640; x += 1) // Definition Raster
        {
    	for (int i = 0; i < 480; i += 32)
    	{
          GLdouble scalex = x;
          GLdouble scaley = i;
          glVertex2d(scalex, scaley);
    	}
     }
     for (GLdouble x = 0; x < 480; x += 1) // Definition Raster
        {
    	for (int i = 0; i < 640; i += 32)
    	{
          GLdouble scalex = i;
          GLdouble scaley = x;
          glVertex2d(scalex, scaley);
    	}
     }
      glEnd();
      glFlush();
    
      glColor3f(2.0f, 0.0f, 0.0f); // Farbe Kanal 1
      int i = 0;
      for (GLdouble x = 0; x < 640; x += 0.5)
    	{
    		Status = DS_GetDataCaptureDeviceChannelGroundOffsetCorrectedValues(dsHandle, &ChannelAData, &ChannelBData); // Auslesen Oszilloskop
    	//	 if ((ChannelAData.dwNumValuesReturned > 0) || (ChannelBData.dwNumValuesReturned > 0))
    		 {
    			glBegin(GL_POINTS);
    			glBegin(GL_LINE_STRIP);
    			GLdouble scalex = x;
    			GLdouble scaley = ChannelAData.iDataBuffer[i]+320; // Auslesen Oszilloskop
    			glVertex2d(scalex, scaley); //Werte auf Bildschirm schreiben
    			glEnd();
    			glFlush();
    			i++;
    			}
         }
      }
    }
    


    1. Brauchst du mit GLUT keinerlei Endlosschleife, du musst nur die richtige Callback (draw bzw. idle IMO) übergeben.

    2. Rufst du innerhalb deiner Schleife 2. glFlush auf. Das dürfte IMO nicht sonderlich sinnvoll sein ...

    glBegin(GL_POINTS);
                glBegin(GL_LINE_STRIP);
                GLdouble scalex = x;
                GLdouble scaley = ChannelAData.iDataBuffer[i]+320; // Auslesen Oszilloskop
                glVertex2d(scalex, scaley); //Werte auf Bildschirm schreiben
                glEnd();
                glFlush();
                i++;
    

    Glaube ich auch hier nicht, dass die 2 glBegin(); Absicht sind. Entscheide dich, was du willst 😉



  • Danke schonmal für die Antwort. Ich bin erst seit kurzem an der grafischen Programmierung dran und kenne mich dementsprechend sehr sehr wenig aus.
    Welchen Callback meinst du? Könntest du mir dabei nochmal helfen?
    Bei mir läuft das meiste nach Trial and Error. Und so hatte der Code immerhin was angezeigt was in der Nähe von meiner Vorstellung war. 🙂





  • Hi

    Super danke, läuft jetzt schon sehr viel dadurch bei mir. Leider stürzt mein programm immer ab. In double passt ja eigentlich 10 Zeichen. Das der Fehler daran liegt kann ich mit sicherheit sagen. Wenn ich die Grenze ändere von x läuft es wieder.

    int i = 0;
    	for (GLdouble x = 0; x < 1048576; x += 0.05)
    	{
    		Status = DS_GetDataCaptureDeviceChannelGroundOffsetCorrectedValues(dsHandle, &ChannelAData, &ChannelBData);
    		//	 if ((ChannelAData.dwNumValuesReturned > 0) || (ChannelBData.dwNumValuesReturned > 0))
    		 {
    			GLdouble scalex = x/10;
    			if (varSwtCH == 0)
    			{
    			glColor3f(0.0f, 0.0f, 2.0f);
    			GLdouble scaley = ChannelAData.iDataBuffer[i]+varCH1Offset;
    			glVertex2d(scalex, scaley);
    


  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Spiele-/Grafikprogrammierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Log in to reply