C-Uebung

Plot Library

Header und Module | | Liniengrafik

Zusatzaufgabe “PlotLibrary”:

In den folgenden Aufgaben wird eine sogenannte Plot-Library verwendet, um Linien und andere grafische Elemente darzustellen. In dieser Aufgabe sollen die notwendigen Voraussetzungen dafür geschaffen werden. Dies beinhaltet insbesondere die Installation und den ersten Test der Bibliothek. Die Übung erfolgt mit Unix, also z.B. mit Linux oder MacOS X.

0) Machen Sie Sich mit der Unix Shell vertraut und legen Sie ein Projekt Verzeichnis an (z.B. ~/Projects)

console: mkdir ~/Projects
console: cd ~/Projects

1) Laden und speichern Sie den Quelltext der Plot-Library “libMini” in ihrem Projektverzeichnis ~/Projects. Verwenden sie dazu das Software-Verwaltungs-Tool SVN:

console: svn co http://svn.code.sf.net/p/libmini/code/libmini libmini
Das kann ein paar Minuten dauern…

2a) Laden Sie den Quelltext der GLUT Bibliothek ebenfalls mit SVN herunter:

console: svn co -r 855 http://freeglut.svn.sourceforge.net/svnroot/freeglut/trunk/freeglut/freeglut/ freeglut

Auf MacOS X ist die GLUT Bibliothek standardmäßig bereits installiert, die Installation kann daher übersprungen werden.

2b) Ãœbersetzen und installieren Sie die GLUT Bibliothek lokal in ~/Projects:

console: cd freeglut
console: ./autogen.sh; ./autogen.sh

console: ./configure --prefix=$HOME/Projects
console: make
console: make install

Die entsprechenden Header einer Bibliothek werden bei der Installation in das Unterverzeichnis “include” des Installationspfads kopiert und die übersetzte Bibliothek wird im Unterverzeichnis “lib” abgelegt.

Wenn Sie Administrator-Rechte haben, können Sie als Installationspfad auch “/usr/local” angeben. Dies ist der Standardinstallationspfad von Unix. Vorinstallierte Software wie z.B. die Standard-Bibliothek findet sich im Verzeichnis “/usr”. In diesen Standardpfaden wird automatisch nach vorhandenen Headern gesucht, wenn diese inkludiert werden.

3a) Finden Sie heraus, ob cmake auf Ihrem System installiert ist, indem Sie das cmake Programm auf der Konsole versuchen zu starten.

console: cmake

Im Erfolgsfall, gibt cmake einen Hilfstext aus. Andernfalls müssen Sie cmake installieren. Laden Sie dazu den Source-Code herunter:

3b) Dann entpacken Sie das Tar-Archiv:

console: tar zxf cmake-2.8.2.tar.gz
console: cd cmake-2.8.2

3c) Und schliesslich installieren Sie cmake

lokal für Sich selber, wenn Sie keine Administrator-Rechte besitzen:

console: ./configure --prefix=$HOME
console: make
console: make install

global für alle Benutzer, wenn Sie Administrator-Rechte haben:

console: ./configure --prefix=/usr/local
console: make
console: sudo make install

Jetzt sollten Sie cmake starten können. Wenn Sie das Programm lokal installiert haben, dann benutzen Sie:

console: ~/bin/cmake

4a) Kompilieren und installieren Sie die “Mini”-Bibliothek lokal in ~/Projects:

console: cd libmini/mini

console: cmake -DCMAKE_INSTALL_PREFIX=~/Projects .
console: make
console: make install

4b) Kompilieren und installieren Sie die “Plot”-Bibliothek lokal in ~/Projects:

console: cd libmini/plotter

console: cmake -DCMAKE_INSTALL_PREFIX=~/Projects .
console: make
console: make install

5a) Verwenden Sie folgendes Rahmenprogramm (test.cpp), um mit der Plot-Library ein (vorerst leeres) Fenster zu öffnen.

#include <mini/minibase.h>

#include <plotter/plot.h>

BOOLINT keypress(unsigned char key, float x, float y)
{
   /* insert keyboard actions here */

   if (tolower(key)=='x') exit(0);

   return(FALSE); /* do not update window */
}

void render(double time)
{
   /* insert plot code here */
}

int main(int argc, char *argv[])
{
   plot_openwindow(&argc,argv,     /* main arguments */
                   512,512,        /* window size */
                   1.0f,1.0f,1.0f, /* background color */
                   render,         /* render function */
                   keypress,       /* keypress function */
                   FALSE);         /* render continuously */

   return(0);
}

5b) Kompilieren Sie das Rahmenprogramm mit dem c++ bzw. g++.

c++ test.cpp -o test

Dieses Kommando schlägt noch fehl, da die benötigten Header nicht automatisch gefunden werden können. In diesem Fall, geben sie folgende zusätzliche Argumente auf der Kommandozeile ein:

Verwenden Sie als zusätzliche Kommandozeilenargumente “-I$$$HOME/Projects/include”, damit der Compiler die notwendigen Header findet.

5c) Binden (Linken) Sie das Rahmenprogramm mit der übersetzten Bibliothek. Verwenden Sie als zusätzliche Kommandozeilenargumente “-L$$$HOME/Projects/lib -lPlot -lMini”, damit der Linker die übersetzten und lokal installierten Archive findet. Binden Sie ebenfalls die Bibliotheken OpenGL und GLUT mit den zusätzlichen Argumenten “-lGL -lGLU -lglut”. Auf MacOS X binden Sie letztere als sogenanntes Framework via “-framework OpenGL -framework GLUT”.

Tipp: Speichern Sie Sich die benötigten Kommandos in einem Shell Skript oder benutzen Sie Make bzw. CMake, damit Sie die Kommandos nicht jedesmal aufs Neue zusammenstellen müssen.

6) Sie haben nun ein Programm erzeugt, welches ein weißes quadratisches Fester öffnet. Füllen Sie das Rahmenprogramm mit Leben, indem Sie eine erste grafische Ausgabe mit Hilfe der in <plotter/plot.h> zur Verfügung stehenden Bibliotheksfunktionen vornehmen.

Ausschnitt aus <plotter/plot.h>:

// set plot line attributes such as color and line width
void plot_color(const float r,const float g,const float b);
void plot_linewidth(const int w);

// plot line from (x1,y1) to (x2,y2) in normalized (x,y) coordinates
// with the origin at the bottom left corner
void plot_line(const float x1,const float y1,
               const float x2,const float y2);

Die vollständige Liste der zur Verfügung stehenden Funktionen können Sie im SVN Repository der Plot-Library online nachschlagen:

Ihr Programm soll mit Hilfe der Funktionen plot_color() und plot_line() zwei verschiedenfarbige Linien entlang der Fensterdiagonalen zeichnen. Tragen Sie die entsprechenden Funktionsaufrufe im Rahmenprogramm in der Funktion render() ein.

Das Zeichenfenster soll wie folgt aussehen:

GLUTFenster

Hinweise:

  • Das Zeichenkoordinatensystem hat seinen Ursprung in der linken unteren Ecke.
  • Die Koordinaten des Fensters sind normalisiert, d.h. die Koordinaten liegen im Bereich [0..1]. Die linke obere Ecke hat also z.B. die Koordinate (0,1).
  • Die Farbe Rot wird z.B. durch die RGB-Werte (1,0,0) repräsentiert.


Header und Module | | Liniengrafik

Options: