PDA

View Full Version : My first OpenGL program



gauravkumar
06-16-2012, 04:59 AM
Hello,

Please find below the code for my first simple OpenGL program, but it gives me the following error:


g4b1e1@ubuntu:~/programming$ gcc -lGL -lglut cube.c -o cube
/tmp/ccCQkTKm.o:cube.c:function display: error: undefined reference to 'gluLookAt'
collect2: ld returned 1 exit status
g4b1e1@ubuntu:~/programming$


Program Code:

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

void reshape(int, int);
void display(void);
void keyboard(unsigned char, int, int);


int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition (100, 100);
glutCreateWindow(argv[0]);
glClearColor(0.0,0.0,0.0,0.0);
glShadeModel(GL_FLAT);
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}

void reshape(int w, int h)
{
glViewport(0,0,(GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1.0,1.0,-1.0,1.0,1.5,20.0);
glMatrixMode(GL_MODELVIEW);
}

void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,1.0,1.0);

glLoadIdentity();
//glMatrixMode(GL_PROJECTION);
gluLookAt(0.0,0.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0);
glScalef(1.0,2.0,1.0);
glutWireCube(1.0);
glFlush();
}

void keyboard(unsigned char key, int x, int y)
{
switch(key) {
case 27: exit(10);
break;
}
}

I tried to browse for the solution, but coludn't get it.

Kindly guide.

kowal
06-16-2012, 05:16 AM
Hello,
add -lGLU to link against glu library:



gcc -o cube cube.c -lGL -lGLU -lglut

gauravkumar
06-17-2012, 02:28 AM
Thanks a ton KOWAL...
It worked...

Do we have a way to link the same permanently; instead of punching in it with the command everytime.

kowal
06-17-2012, 07:06 AM
Yes, we have, it's called Makefile (or project settings if You use IDE)

http://en.wikipedia.org/wiki/Makefile

I use this for most of my small projects.
Just copy-paste code below to file named 'Makefile' in your project directory,
and adjust EXECUTABLE, HEADERS and OBJS variables to match your files.
(By default I keep my source files in src directory, and headers in src/include)
Change compiler flags in DEBUG_FLAGS and RELEASE_FLAGS as You wish.
Add Your libs in LIBS variable, library dirctories in LIBDIRS (for example -L../lib),
whenever You wish to compile program, type 'make' .



.PHONY: clean rebuild compressed doc
VPATH = src src/include

GPP = g++
GCC = gcc
LINK = gcc
DOCGEN = doxygen

INCDIRS = -I./src/include
LIBDIRS =
LIBS = -lm -lGL -lGLU -lglut

RELEASE_FLAGS = -Wall -O2 -flto
DEBUG_FLAGS = -Wall -O0 -g

RELEASE_LINK_FLAGS = -flto
DEBUG_LINK_FLAGS = -g

IFLAGS = $(INCDIRS)
CFLAGS = $(IFLAGS) $(DEBUG_FLAGS)
LFLAGS = $(LIBS) $(DEBUG_LINK_FLAGS)
UPXFLAGS = --best --ultra-brute

#----------------file utils---------------
RM = rm -rf
CAT = cat
ECHO = echo
TAR = tar
GZIP = gzip
BZIP = bzip2
XZ = xz
STRIP = strip
UPX = upx
#-----------------------------------------


EXECUTABLE = cube
OBJS = cube.o
HEADERS =

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJS)
$(LINK) -o $(EXECUTABLE) $(OBJS) $(LFLAGS)

%.o : %.c $(HEADERS)
$(GCC) $(CFLAGS) -c -o $@ $<

%.o : %.cpp $(HEADERS)
$(GPP) $(CFLAGS) -c -o $@ $<

clean:
$(RM) $(EXECUTABLE) $(OBJS) *~ src/*~ src/include/*~

rebuild: clean all

compressed: all
$(UPX) $(UPXFLAGS) $(EXECUTABLE)

doc:
$(DOCGEN)