GLAUX

Started by
14 comments, last by Deranged 16 years, 4 months ago
Hi Am a student started with openGL programming recently in Linux.I find this code telling me to include GLaux library whenever I compile it.I tried adding the library file in my home directory but still doesnt work.Can anyone suggest me how to make it working.When i went on into some stuffs i found i need Dyalog APL/W Version 8.1 to make my GLaux working.Kindly Guide.Or can I use some other texture loading techniques?? By the way this is the code for Simulating a fountain. #include <GL\glut.h> //includes gl.h and glu.h #include <GL\glaux.h> //load the texture #include <stdlib.h> //random function #include <math.h> //sine and cosine functions #define PI 3.1415265359 #define RandomFactor 2.0 //cannot be variable, because it is only use in InitFountain(), //zero for perfect physical GLint ListNum; //The number of the diplay list GLfloat OuterRadius = 1.2; GLfloat InnerRadius = 1.0; GLint NumOfVerticesStone = 32; //only a quarter of the finally used vertices GLfloat StoneHeight = 0.5; GLfloat WaterHeight = 0.45; GLint Turned = 0; bool DoTurn = true; bool DoMoveUp = true; bool DoUpdateScene = true; GLfloat MoveUp = 0.8; GLfloat ChangeMoveUp = 0.01; //The variables for the fountain are below struct SVertex { GLfloat x,y,z; }; //It's not the best style to put classes into the main file, //but here it is easier for you and me! class CDrop { private: GLfloat time; //How many steps the drop was "outside", when it falls into the water, time is set back to 0 SVertex ConstantSpeed; //See the doc for explanation of the physics GLfloat AccFactor; public: void SetConstantSpeed (SVertex NewSpeed); void SetAccFactor(GLfloat NewAccFactor); void SetTime(GLfloat NewTime); void GetNewPosition(SVertex * PositionVertex); //increments time, gets the new position }; void CDrop::SetConstantSpeed(SVertex NewSpeed) { ConstantSpeed = NewSpeed; } void CDrop::SetAccFactor (GLfloat NewAccFactor) { AccFactor = NewAccFactor; } void CDrop::SetTime(GLfloat NewTime) { time = NewTime; } void CDrop::GetNewPosition(SVertex * PositionVertex) { SVertex Position; time += 1.0; Position.x = ConstantSpeed.x * time; Position.y = ConstantSpeed.y * time - AccFactor * time * time; Position.z = ConstantSpeed.z * time; PositionVertex->x = Position.x; PositionVertex->y = Position.y + WaterHeight; PositionVertex->z = Position.z; if (Position.y < 0.0) { /*the drop has fallen into the water. The problem is now, that we cannot set time to 0.0, because if there are more "DropsPerRay" than "TimeNeeded" (See InitFountain()) several drops would be seen as one. Check it out. */ time = time - int(time); if (time > 0.0) time -= 1.0; } } CDrop * FountainDrops; SVertex * FountainVertices; GLint Steps = 3; //a fountain has several steps, each with its own height GLint RaysPerStep = 8; GLint DropsPerRay = 50; GLfloat DropsComplete = Steps * RaysPerStep * DropsPerRay; GLfloat AngleOfDeepestStep = 80; GLfloat AccFactor = 0.011; //////////////////////////////////////////////////////////////////////////////// void CreateList(void) { GLuint ID; _AUX_RGBImageRec *Image; glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glGenTextures(1,&ID); glBindTexture( GL_TEXTURE_2D, ID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); Image = auxDIBImageLoadA( "water.bmp" ); gluBuild2DMipmaps( GL_TEXTURE_2D, 3, Image->sizeX, Image->sizeY, GL_RGB, GL_UNSIGNED_BYTE, Image->data); delete Image; SVertex * Vertices = new SVertex[NumOfVerticesStone*4]; //allocate mem for the required vertices ListNum = glGenLists(1); for (GLint i = 0; i<NumOfVerticesStone; i++) { Vertices.x = cos(2.0 * PI / NumOfVerticesStone * i) * OuterRadius; Vertices.y = StoneHeight; //Top Vertices.z = sin(2.0 * PI / NumOfVerticesStone * i) * OuterRadius; } for (i = 0; i<NumOfVerticesStone; i++) { Vertices.x = cos(2.0 * PI / NumOfVerticesStone * i) * InnerRadius; Vertices.y = StoneHeight; //Top Vertices.z = sin(2.0 * PI / NumOfVerticesStone * i) * InnerRadius; } for (i = 0; i&lt;NumOfVerticesStone; i++) { Vertices.x = cos(2.0 * PI / NumOfVerticesStone * i) * OuterRadius; Vertices.y = 0.0; //Bottom Vertices.z = sin(2.0 * PI / NumOfVerticesStone * i) * OuterRadius; } for (i = 0; i&lt;NumOfVerticesStone; i++) { Vertices.x = cos(2.0 * PI / NumOfVerticesStone * i) * InnerRadius; Vertices.y = 0.0; //Bottom Vertices.z = sin(2.0 * PI / NumOfVerticesStone * i) * InnerRadius; } glNewList(ListNum, GL_COMPILE); glBegin(GL_QUADS); //ground quad: glColor3f(0.6,0.6,0.6); glVertex3f(-OuterRadius*1.3,0.0,OuterRadius*1.3); glVertex3f(-OuterRadius*1.3,0.0,-OuterRadius*1.3); glVertex3f(OuterRadius*1.3,0.0,-OuterRadius*1.3); glVertex3f(OuterRadius*1.3,0.0,OuterRadius*1.3); //stone: for (int j = 1; j &lt; 3; j++) { if (j == 1) glColor3f(0.8,0.4,0.4); if (j == 2) glColor3f(0.4,0.2,0.2); for (i = 0; i&lt;NumOfVerticesStone-1; i++) { glVertex3fv(&Vertices[i+NumOfVerticesStone*j].x); glVertex3fv(&Vertices<span style="font-weight:bold;">.x); glVertex3fv(&Vertices[i+1].x); glVertex3fv(&Vertices[i+NumOfVerticesStone*j+1].x); } glVertex3fv(&Vertices[i+NumOfVerticesStone*j].x); glVertex3fv(&Vertices<span style="font-weight:bold;">.x); glVertex3fv(&Vertices[0].x); glVertex3fv(&Vertices[NumOfVerticesStone*j].x); } glColor3f(0.4,0.2,0.2); for (i = 0; i&lt;NumOfVerticesStone-1; i++) { glVertex3fv(&Vertices[i+NumOfVerticesStone*3].x); glVertex3fv(&Vertices[i+NumOfVerticesStone].x); glVertex3fv(&Vertices[i+NumOfVerticesStone+1].x); glVertex3fv(&Vertices[i+NumOfVerticesStone*3+1].x); } glVertex3fv(&Vertices[i+NumOfVerticesStone*3].x); glVertex3fv(&Vertices[i+NumOfVerticesStone].x); glVertex3fv(&Vertices[NumOfVerticesStone].x); glVertex3fv(&Vertices[NumOfVerticesStone*3].x); glEnd(); //The "water": glTranslatef(0.0,WaterHeight - StoneHeight, 0.0); glBindTexture(GL_TEXTURE_2D, ID); glEnable(GL_TEXTURE_2D); glBegin(GL_POLYGON); for (i = 0; i&lt;NumOfVerticesStone; i++) { glTexCoord2f( 0.5+cos(i/GLfloat(NumOfVerticesStone)*360.0*PI/180.0)/2.0, 0.5-sin(i/GLfloat(NumOfVerticesStone)*360.0*PI/180.0)/2.0); glVertex3fv(&Vertices[i+NumOfVerticesStone].x); } glEnd(); glDisable(GL_TEXTURE_2D); glEndList(); } GLfloat GetRandomFloat(GLfloat range) { return (GLfloat)rand() / (GLfloat)RAND_MAX * range * RandomFactor; } void InitFountain(void) { //This function needn't be and isn't speed optimized FountainDrops = new CDrop [ DropsComplete ]; FountainVertices = new SVertex [ DropsComplete ]; SVertex NewSpeed; GLfloat DropAccFactor; //different from AccFactor because of the random change GLfloat TimeNeeded; GLfloat StepAngle; //Angle, which the ray gets out of the fountain with GLfloat RayAngle; //Angle you see when you look down &#111;n the fountain GLint i,j,k; for (k = 0; k &lt;Steps; k++) { for (j = 0; j &lt; RaysPerStep; j++) { for (i = 0; i &lt; DropsPerRay; i++) { DropAccFactor = AccFactor + GetRandomFloat(0.0005); StepAngle = AngleOfDeepestStep + (90.0-AngleOfDeepestStep) * GLfloat(k) / (Steps-1) + GetRandomFloat(0.2+0.8*(Steps-k-1)/(Steps-1)); //This is the speed caused by the step: NewSpeed.x = cos ( StepAngle * PI / 180.0) * (0.2+0.04*k); NewSpeed.y = sin ( StepAngle * PI / 180.0) * (0.2+0.04*k); //This is the speed caused by the ray: RayAngle = (GLfloat)j / (GLfloat)RaysPerStep * 360.0; //for the next computations "NewSpeed.x" is the radius. Care! Dont swap the two //lines, because the second &#111;ne changes NewSpeed.x! NewSpeed.z = NewSpeed.x * sin ( RayAngle * PI /180.0); NewSpeed.x = NewSpeed.x * cos ( RayAngle * PI /180.0); //Calculate how many steps are required, that a drop comes out and falls down again TimeNeeded = NewSpeed.y/ DropAccFactor; FountainDrops[i+j*DropsPerRay+k*DropsPerRay*RaysPerStep].SetConstantSpeed ( NewSpeed ); FountainDrops[i+j*DropsPerRay+k*DropsPerRay*RaysPerStep].SetAccFactor (DropAccFactor); FountainDrops[i+j*DropsPerRay+k*DropsPerRay*RaysPerStep].SetTime(TimeNeeded * i / DropsPerRay); } } } //Tell OGL that we'll use the vertex array function glEnableClientState(GL_VERTEX_ARRAY); //Pass the date position glVertexPointer( 3, //x,y,z-components GL_FLOAT, //data type of SVertex 0, //the vertices are tightly packed FountainVertices); } void DrawFountain(void) { glColor4f(0.8,0.8,0.8,0.8); if (DoUpdateScene) for (int i = 0; i &lt; DropsComplete; i++) { FountainDrops<span style="font-weight:bold;">.GetNewPosition(&FountainVertices<span style="font-weight:bold;">); } glDrawArrays( GL_POINTS, 0, DropsComplete); } void Display(void) { if (DoTurn) Turned += 2; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); //Load a new modelview matrix -&gt; we can apply new transformations glTranslatef(0.0,0.0,-5.0); //glRotatef(90.0,1.0,0.0,0.0); //Enable this line to look down &#111;n the fountain glRotatef((GLfloat)Turned,0.0,1.0,0.0); if (DoMoveUp) { MoveUp += ChangeMoveUp; if (MoveUp&gt;= 1.5 || MoveUp&lt;=0.8) ChangeMoveUp = -ChangeMoveUp; } glTranslatef(0.0,-MoveUp,0.0); glPushMatrix(); glCallList(ListNum); glPopMatrix(); DrawFountain(); glFlush(); //Finish rendering glutSwapBuffers(); //Swap the buffers -&gt;make the result of rendering visible } void Reshape(int x, int y) { if (y == 0 || x == 0) return; //Nothing is visible then, so return //Set a new projection matrix glMatrixMode(GL_PROJECTION); glLoadIdentity(); //Angle of view:40 degrees //Near clipping plane distance: 0.5 //Far clipping plane distance: 20.0 gluPerspective(40.0,(GLdouble)x/(GLdouble)y,0.5,20.0); glMatrixMode(GL_MODELVIEW); glViewport(0,0,x,y); //Use the whole window for rendering //Adjust point size to window size glPointSize(GLfloat(x)/200.0); } void KeyDown(unsigned char key, int x, int y) { switch(key) { case 27: //ESC exit(0); break; case 't': DoTurn = !DoTurn; break; case 'm': DoMoveUp = !DoMoveUp; break; case 'u': DoUpdateScene = !DoUpdateScene; break; } } int main(int argc, char **argv) { //Initialize GLUT glutInit(&argc, argv); //Lets use doublebuffering, RGB(A)-mode and a depth buffer glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(300,300); //Create a window with rendering context and everything else we need glutCreateWindow("Fountain"); //Init some state variables: glEnable(GL_DEPTH_TEST); glClearColor(0.1,0.1,0.1,0.0); glEnable(GL_POINT_SMOOTH); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); //also try GL_LINE //Init the foundtain InitFountain(); //Create the display list CreateList(); //Assign the event-handling routines glutDisplayFunc(Display); glutReshapeFunc(Reshape); glutKeyboardFunc(KeyDown); glutIdleFunc(Display); //If there is no msg, we have to repaint //Let GLUT get the msgs and tell us the &#111;nes we need glutMainLoop(); return 0; } Thanks in advance.
Advertisement
Wow, thats really gay, you posted all your code. You could have at least posted with a code tag.

At any point, what is the error? What is the compiler telling you? Did you include glaux.lib to your project?

NBA2K, Madden, Maneater, Killing Floor, Sims http://www.pawlowskipinball.com/pinballeternal

Ya i did include the Glaux Library but is still not working.It says that file or directory named <GL/glaux.h> doesnot exist.It included the library file in my home directory .It doesnot work.Is there a alternative to make the aux methods work other than GLaux.

By the way it is not gay ,it is gayu (should be pronounced as Gha-u) ,name of a goddess in Hindu religion.
forget glaux it is a crappy and outdated library.
goto nehe website, they have glaux replacement that you may find better ;-)

better yet try using a library like devil or freeimage.
There is actually alot of code on the web to load in simple bmp and other format's too, fire up google and you will be amazed at what you will find
I used glaux and thought it was fine.

So I suggest you download glaux.h if you havent already....... and just put it in your project directory and use:

#include "gl/glaux.h"

Sometimes its a pain finding your compilers include directory. You either don't have the file, or never copied it to your compiler directory.

NBA2K, Madden, Maneater, Killing Floor, Sims http://www.pawlowskipinball.com/pinballeternal

i just noticed u r using linux,there ain't no glaux under linux. Check the texture loading tutorial on nehe as there is a linux port there.
So will it be fine with Windows if not Linux.And I couldnot find a Link to download GLaux.h and its dll.
try http://sourceforge.net/project/showfiles.php?group_id=94270
Thanks a lot for that link...It helps me in progressing in my work..Can u plz tell me wat kind of error is this..Is it something related to the linkers??
C:\Dev-Cpp\Makefile.win [Build Error] [Final.exe] Error1.

I use the following Linkers -lglut32 -lglu32 -lopengl32 -lwinmm -lgdii32.What more should I add..?

Thanks for the support..
Ok theres this nice thing in DevC++:

Tools->check For updates

Select devpaks.org for the server

Select opengl for the groups


You will see "glaux". Download that and everything should run fine. Go to your linker and below everything else type "-glaux"

NBA2K, Madden, Maneater, Killing Floor, Sims http://www.pawlowskipinball.com/pinballeternal

This topic is closed to new replies.

Advertisement