Hi i have make a project , this is my code :
#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.
#include <stdio.h> // Header file for standard file i/o.
#include <stdlib.h> // Header file for malloc/free.
GLvoid DrawGLScene(GLvoid);
GLvoid ReSizeGLScene(GLsizei,GLsizei);
GLvoid InitGL(GLsizei,GLsizei);
void f(int,char**);
void f2(void);
void f22(void);
void f3(void);
/* The number of our GLUT window */
int window;
GLfloat z=-5.0f; // depth into the screen.
/* white ambient light at half intensity (rgba) */
GLfloat LightAmbient[] = { 0.5f, 0.5f, 0.5f, 1.0f };
/* super bright, full intensity diffuse light. */
GLfloat LightDiffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
/* position of light (x, y, z, (position of light)) */
GLfloat LightPosition[] = { 0.0f, 0.0f, 2.0f, 1.0f };
int main(int argc, char **argv)
{
f(argc,argv);
return 0;
}
/* A general OpenGL initialization function. Sets all of the initial parameters. */
GLvoid InitGL(GLsizei Width, GLsizei 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
glEnable(GL_CULL_FACE);
glEnable(GL_FRONT);
glMatrixMode(GL_MODELVIEW);
// set up light number 1.
glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient); // add lighting. (ambient)
glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse); // add lighting. (diffuse).
glLightfv(GL_LIGHT1, GL_POSITION,LightPosition); // set light position.
glEnable(GL_LIGHT1); // turn light 1 on.
}
/* The function called when our window is resized (which shouldn't happen, because we're fullscreen) */
GLvoid ReSizeGLScene(GLsizei Width, GLsizei 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. */
GLvoid DrawGLScene(GLvoid)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
glLoadIdentity(); // Reset The View
glPushMatrix();
f3();
glPopMatrix();
// since this is double buffered, swap the buffers to display what just got drawn.
glutSwapBuffers();
}
void f(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("--------------------------------------------------------");
/* Register the function to do all our OpenGL drawing. */
glutDisplayFunc(&DrawGLScene);
/* Even if there are no events, redraw our gl scene. */
glutIdleFunc(&DrawGLScene);
/* Register the function called when our window is resized. */
glutReshapeFunc(&ReSizeGLScene);
/* Initialize our window. */
InitGL(640, 480);
/* Start Event Processing Engine */
glutMainLoop();
}
void f2(void){
glBegin(GL_QUADS);
glColor3f(0.0f,1.0f,0.0f); // Set The Color To Blue
glVertex3f( 1.0f, 1.0f,-1.0f); // Top Right Of The Quad (Top)
glVertex3f(-1.0f, 1.0f,-1.0f); // Top Left Of The Quad (Top)
glVertex3f(-1.0f, 1.0f, 1.0f); // Bottom Left Of The Quad (Top)
glVertex3f( 1.0f, 1.0f, 1.0f); // Bottom Right Of The Quad (Top)
// bottom of cube
glColor3f(1.0f,0.5f,0.0f); // Set The Color To Orange
glVertex3f( 2.0f,-1.0f, 1.0f); // Top Right Of The Quad (Bottom)
glVertex3f(-2.0f,-1.0f, 1.0f); // Top Left Of The Quad (Bottom)
glVertex3f(-2.0f,-1.0f,-1.0f); // Bottom Left Of The Quad (Bottom)
glVertex3f( 2.0f,-1.0f,-1.0f); // Bottom Right Of The Quad (Bottom)
// front of cube
glColor3f(1.0f,0.0f,0.0f); // Set The Color To Red
glVertex3f( 1.0f, 1.0f, 1.0f); // Top Right Of The Quad (Front)
glVertex3f(-1.0f, 1.0f, 1.0f); // Top Left Of The Quad (Front)
glVertex3f(-2.0f,-1.0f, 1.0f); // Bottom Left Of The Quad (Front)
glVertex3f( 2.0f,-1.0f, 1.0f); // Bottom Right Of The Quad (Front)
// back of cube.
glColor3f(1.0f,1.0f,0.0f); // Set The Color To Yellow
glVertex3f( 2.0f,-1.0f,-1.0f); // Top Right Of The Quad (Back)
glVertex3f(-2.0f,-1.0f,-1.0f); // Top Left Of The Quad (Back)
glVertex3f(-1.0f, 1.0f,-1.0f); // Bottom Left Of The Quad (Back)
glVertex3f( 1.0f, 1.0f,-1.0f); // Bottom Right Of The Quad (Back)
// left of cube
glColor3f(0.0f,0.0f,1.0f); // Blue
glVertex3f(-1.0f, 1.0f, 1.0f); // Top Right Of The Quad (Left)
glVertex3f(-1.0f, 1.0f,-1.0f); // Top Left Of The Quad (Left)
glVertex3f(-2.0f,-1.0f,-1.0f); // Bottom Left Of The Quad (Left)
glVertex3f(-2.0f,-1.0f, 1.0f); // Bottom Right Of The Quad (Left)
// Right of cube
glColor3f(1.0f,0.0f,1.0f); // Set The Color To Violet
glVertex3f( 1.0f, 1.0f,-1.0f); // Top Right Of The Quad (Right)
glVertex3f( 1.0f, 1.0f, 1.0f); // Top Left Of The Quad (Right)
glVertex3f( 2.0f,-1.0f, 1.0f); // Bottom Left Of The Quad (Right)
glVertex3f( 2.0f,-1.0f,-1.0f); // Bottom Right Of The Quad (Right)
glEnd(); // Done Drawing The Cube
}
void f22(void){
glPushMatrix();
glTranslatef(0,0,-35);
f2();
glPopMatrix();
glPushMatrix();
glTranslatef(2.3,1.2,-35);
glRotatef(55,0,0,1);
f2();
glPopMatrix();
glPushMatrix();
glTranslatef(-2.3,1.2,-35);
glRotatef(-55,0,0,1);
f2();
glPopMatrix();}
void f3(void){
f22();
glRotatef(180,0,0,1);
glTranslatef(0,-4.6,0);
f22();}
evriting is fine but how i can rotate that figure whit 90 grade at the y axis ? if i try
GLvoid DrawGLScene(GLvoid)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
glLoadIdentity(); // Reset The View
glPushMatrix();
[b]glRotatef(90,0,1,0);[/b]
f3();
glPopMatrix();
// since this is double buffered, swap the buffers to display what just got drawn.
glutSwapBuffers();
}
the figure disappear , what i do wrong?