Advertisement

simple nehe tutorial question on making a window in linux

Started by November 18, 2003 08:16 PM
13 comments, last by HTML 21 years, 3 months ago

//

// This code was created by Jeff Molofee '99 (ported to Linux/GLUT by Richard Campbell '99)

//

// If you've found this code useful, please let me know.

//

// Visit me at www.demonews.com/hosted/nehe

// (email Richard Campbell at ulmont@bellsouth.net)

//

#include <GL/glut.h>    // Header File For The GLUT Library

#include <GL/gl.h>	// Header File For The OpenGL32 Library

#include <GL/glu.h>	// Header File For The GLu32 Library

#include <unistd.h>     // Header file for sleeping.


/* ascii code for the escape key */
#define ESCAPE 27

/* The number of our GLUT window */
int window;

/* A general OpenGL initialization function.  Sets all of the initial parameters. */
void InitGL(int Width, int Height)	        // We call this right after our OpenGL window is created.

{
  glClearColor(0.0f, 0.0f, 0.0f, 0.0f);		// This Will Clear The Background Color To Black

  glClearDepth(1.0);				// Enables Clearing Of The Depth Buffer

  glDepthFunc(GL_LESS);				// The Type Of Depth Test To Do

  glEnable(GL_DEPTH_TEST);			// Enables Depth Testing

  glShadeModel(GL_SMOOTH);			// Enables Smooth Color Shading


  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();				// Reset The Projection Matrix


  gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f);	// Calculate The Aspect Ratio Of The Window


  glMatrixMode(GL_MODELVIEW);
}

/* The function called when our window is resized (which shouldn't happen, because we're fullscreen) */
void ReSizeGLScene(int Width, int Height)
{
  if (Height==0)				// Prevent A Divide By Zero If The Window Is Too Small

    Height=1;

  glViewport(0, 0, Width, Height);		// Reset The Current Viewport And Perspective Transformation


  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();

  gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f);
  glMatrixMode(GL_MODELVIEW);
}

/* The main drawing function. */
void DrawGLScene()
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);		// Clear The Screen And The Depth Buffer

  glLoadIdentity();				// Reset The View


  // since this is double buffered, swap the buffers to display what just got drawn.

  glutSwapBuffers();
}

/* The function called whenever a key is pressed. */
void keyPressed(unsigned char key, int x, int y)
{
    /* avoid thrashing this procedure */
    usleep(100);

    /* If escape is pressed, kill everything. */
    if (key == ESCAPE)
    {
	/* shut down our window */
	glutDestroyWindow(window);

	/* exit the program...normal termination. */
	exit(0);
    }
}

int main(int argc, char **argv)
{
  /* Initialize GLUT state - glut will take any command line arguments that pertain to it or
     X Windows - look at its documentation at http://reality.sgi.com/mjk/spec3/spec3.html */

  glutInit(&argc, argv);

  /* Select type of Display mode:
     Double buffer
     RGBA color
     Alpha components supported
     Depth buffer */
  glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH);

  /* get a 640 x 480 window */
  glutInitWindowSize(640, 480);

  /* the window starts at the upper left corner of the screen */
  glutInitWindowPosition(0, 0);

  /* Open a window */
  window = glutCreateWindow("Jeff Molofee's GL Code Tutorial ... NeHe '99");

  /* Register the function to do all our OpenGL drawing. */
  glutDisplayFunc(&DrawGLScene);

  /* Go fullscreen.  This is as soon as possible. */
  glutFullScreen();

  /* Even if there are no events, redraw our gl scene. */
  glutIdleFunc(&DrawGLScene);

  /* Register the function called when our window is resized. */
  glutReshapeFunc(&ReSizeGLScene);

  /* Register the function called when the keyboard is pressed. */
  glutKeyboardFunc(&keyPressed);

  /* Initialize our window. */
  InitGL(640, 480);

  /* Start Event Processing Engine */
  glutMainLoop();

  return 1;
}
It seems to be giving me an error: main.cpp:91: error: `exit' undeclared (first use this function) main.cpp:91: error: (Each undeclared identifier is reported only once for each function it appears in.) Also... I am just trying to get a window to put some text and graphics in...I was wondering how I would do that. Maybe make a text file for the window to refer to? Or could I just add the code (text game)? thanks and thank you to the authors of the code [edited by - HTML on November 18, 2003 9:17:30 PM]
quote:
Original post by HTML
It seems to be giving me an error:
main.cpp:91: error: `exit'' undeclared (first use this function)



#include <stdlib.h>

Advertisement
hmm, I did that but then I get

undefined reference to...something errors

ex:undefined reference to ''glutinit''


Any suggestions?
You mightwant to take a look at some of the glut stuff. According to the glut stuff I''ve found ... you should only include - the rest is taken care of for you.

Also, you''ll want a program something like this:

~$ cat bin/compc
#!/bin/sh
c++ $1.C -lglut -lGLU -lGL -o $1

Note that you have to include the libraries -lglut -lGLU -lGL...
the -l flag links the libraries in.

On *nix systems, capitalization is important.
I myself recently began working with opengl, and this is the information I found handy.

Also, you might want to download the redbook problems from SGI. Also, there''s some nice sample programs from SGI. (Seeing as how SGI made opengl, this isn''t such a bad idea!)

Scout




All polynomials are funny - some to a higher degree.
Furthermore, polynomials of degree zero are constantly funny.
All polynomials are funny - some to a higher degree.Furthermore, polynomials of degree zero are constantly funny.
And now I realize that the angle braces are not allowed. only include GL/glut.h

All polynomials are funny - some to a higher degree.
Furthermore, polynomials of degree zero are constantly funny.
All polynomials are funny - some to a higher degree.Furthermore, polynomials of degree zero are constantly funny.
I am kind of confused by that, also I am using an IDE for the code so I am not sure how to go about this.

But thanks for the input on doing it in glut

I am sure there is some way to just fix the code, but I have no idea how to since I am just starting OpenGL...

anyone happen to know how to modify the code to work in an IDE on linux ?

or just fix the undefined errors I am getting...

Thanks


[edited by - html on November 20, 2003 1:05:56 AM]
Advertisement
try add this line after the include statements

using namespace std;

all standard C++ stuff is declared in namespace std, cout and cin for example.

also if you are using C++, to include c header files you should use the new (relatively) convention as so:

#include <cstdlib>

Just because it is not nice, doesn''t mean it is not miraculous.
Keep looking, there are more samples from nehe which use the SDL library wich is easier to code with and portable!
[size="2"]I like the Walrus best.
Ok. Downloading the GLUT tutorials from *THIS WEBSITE* work. The only thing that is wrong with them is that you *MUST* edit them to have include GL/glut.h instead of gl/glut.h.

If you want to compile these programs, you must link them against libraries. That''s how linux works. that''s why I was telling you...
LINK them against libglut, libGL, and libGLU.

If you''re using an IDE to do this.. then try casting around for linking options. Also, another problem may be that you don''t have gl or glut installed. :-x.

check to see if you have the libraries installed by:
ld -lglut
ld -lGL
ld -lGLU
If it complains that it can''t find the libs - you don''t have them installed. ...
One more thing
The code is fine.
There''s nothing wrong with it. Link against the proper libraries.
You can''t fix code that isn''t broken.
;-)

Scout (And I will say it again.. link against the libraries!)




All polynomials are funny - some to a higher degree.
Furthermore, polynomials of degree zero are constantly funny.
All polynomials are funny - some to a higher degree.Furthermore, polynomials of degree zero are constantly funny.
quote:
Original post by MrScout
Ok. Downloading the GLUT tutorials from *THIS WEBSITE* work. The only thing that is wrong with them is that you *MUST* edit them to have include GL/glut.h instead of gl/glut.h.

If you want to compile these programs, you must link them against libraries. That''s how linux works. that''s why I was telling you...
LINK them against libglut, libGL, and libGLU.

If you''re using an IDE to do this.. then try casting around for linking options. Also, another problem may be that you don''t have gl or glut installed. :-x.

check to see if you have the libraries installed by:
ld -lglut
ld -lGL
ld -lGLU
If it complains that it can''t find the libs - you don''t have them installed. ...
One more thing
The code is fine.
There''s nothing wrong with it. Link against the proper libraries.
You can''t fix code that isn''t broken.
;-)

Scout (And I will say it again.. link against the libraries!)




All polynomials are funny - some to a higher degree.
Furthermore, polynomials of degree zero are constantly funny.


I don''t understand how you would link the libraries in IDE..would you possibly be able to give me a quick example?

Thanks!

This topic is closed to new replies.

Advertisement