# OpenGL/C Frage - externe Funktionen



## yest86 (18. Dez 2006)

Hallo, 
hoffe ihr könnt mir weiterhelfen. Habe bisher nur ein bisschen Java programmiert und wollte mir jetzt auch mal andere Sachen anschauen um gleich mit einem etwas weiteren Überblick anzufangen. Nun hat mir ein Freund ein paar Aufgaben seiner Hochschule zur Verfügung gestellt. Im ersten Teil zu open GL wird einfach nur ein Bildpunkt gesetzt. So weit, so einfach. Nun ist der Code aber auf zwei Dateien aufgeteilt, eine die Wohl die Initialisierungen übernimmt und eine, die das Programm ausführt. 
Dabei wird mit externen Funktionen gearbeitet, allerdings verstehe ich nicht, wie man diese Dateien gegenseitig bekannt macht bzw einbindet. Bei der Suche nach der Lösung habe ich nur Hinweise gelesen, dieses über include "..." zu machen, aber ich denke, hier ist wohl etwas anderes gemeint. 
Anbei mal die "Musterlösung", die bei mir aber wie gesagt nicht funktioniert, da die externen Funktionen nicht gefunden werden. (Benutze Dev-C++ und habe beide Dateien in einem gemeinsamen Projekt liegen)


```
pixel.c


#include <GL/glut.h>
#include <stdlib.h>

/* Auflösung des Ausgabefensters -> Top-Level Window */
int breite = 800, hoehe = 600;
/* Position des Bildpunktes */
int px = 400, py = 300;

/* Funktionsprototypen */
extern void display(void);
extern void putpixel(GLint x, GLint y);
void init(void);
void zeichnen(void);

/* Funktionen */
void init(void) 
{
    /* Hintergrundfarbe setzen -> Weiß */
    glClearColor(1.0,1.0,1.0,1.0);
    /* Verdergrundfarbe setzen -> Rot */
    glColor3f(1.0,0.0,0.0);
}

void zeichnen (void) 
{
    /* Grafik realisieren, Bildpunkt an (px,py) setzen */
    putpixel(px,py);
}
```



```
main.c


#include <GL/glut.h>

extern GLint breite, hoehe;

/* Funktionsprototypen */
extern void init(void);
extern void zeichen(void);
void putpixel(GLint x, GLint y);
void display(void);

/* Funktionen */
void putpixel(GLint x, GLint y) 
{
    /* Bildpunkt an Position (x,y) setzen */
    glBegin(GL_POINTS);
        glVertex2i(x,y);
    glEnd();
}

void display(void) 
{
    glClear(GL_COLOR_BUFFER_BIT);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    /* Viewingvolumen einstellen */
    glOrtho(0,breite,0,hoehe,-1,1);
    /* Grafik realisieren */
    zeichnen();
    glFlush();
}

int main(int argc, char** argv) 
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(breite, hoehe);
    glutCreateWindow(argv[0]);
    init();
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}
```


Wäre nett, wenn mir jemand sagen könnte, wie ich das mit den zwei Dateien zum laufen bekomme.


----------



## Jango (18. Dez 2006)

Du bist hier in einem Java-Forum. Was du da gepostet hast ist C++ :bae:


----------



## yest86 (18. Dez 2006)

Jo, aber das hier ist ja das Sonstiges -> Programmierung allgemein Forum, denke da dürfte es reinpassen.


----------



## Guest (18. Dez 2006)

yest86 hat gesagt.:
			
		

> Jo, aber das hier ist ja das Sonstiges -> Programmierung allgemein Forum, denke da dürfte es reinpassen.



Ja - Programmierung Allgemein. C++ ist doch speziell, oder? Na, mir solls egal sein, vielleicht findet sich jemand, der das weiß. Wenn nicht, hier mal ein Link: http://www.c-plusplus.de/cms/

Tschaui


----------



## wranger (18. Dez 2006)

Jo ... das gute alte C!

Das hängt alles von deinem Compiler ab. Ich kann dir das hier nur für den gcc beschreiben. Dieser ist jedoch für windows als auch für linux verfügbar

Du bekommst die Dateien zusammen bzw. die eine Datei kennt die Funktion aus der anderen Datei in dem du:

1. Beide Dateien beim Compilieren mit angiebst: gcc main.c pixel.c -o out.exe
2. Dir eine Makefile dafür schreibst und dieses aufrufst: Bei google/wikipedia wirst was finden

wranger


----------



## Jango (19. Dez 2006)

ich selbst hat gesagt.:
			
		

> Du bist hier in einem Java-Forum. Was du da gepostet hast ist *C++* :bae:


Völliger, unsinniger Blödsinn 





			
				wranger hat gesagt.:
			
		

> Jo ... das gute alte C!



Natürlich! Nur in C gibts Sachen wie <stdlib.h> oder <stdio.h> (header).


----------

