NeHe Tutorials OpenGL
 18. OpenGL

Quadratics

(quadratic) - , , FOR . (. : - ).

 

7- . 7 .

 

#include <windows.h> // Windows

#include <stdio.h> // /

#include <gl\gl.h> // OpenGL32

#include <gl\glu.h> // GLu32

#include <gl\glaux.h> // GLaux

 

HDC hDC=NULL; // GDI

HGLRC hRC=NULL; //

HWND hWnd=NULL; //

HINSTANCEhInstance;//

 

boolkeys[256]; //

boolactive=TRUE; // , = TRUE

boolfullscreen=TRUE;//

bool light; // /

bool lp; // L ?

bool fp; // F ?

boolsp; // ? ( )

 

int part1; // ( )

int part2; // ࠠ( )

int p1=0; // 1( )

int p2=1; // 2( )

 

GLfloatxrot; // X

GLfloatyrot; // Y

GLfloat xspeed; // X

GLfloat yspeed; // Y

 

GLfloat z=-5.0f;//

 

GLUquadricObj *quadratic; // Quadratic ( )

 

GLfloat LightAmbient[]= { 0.5f, 0.5f, 0.5f, 1.0f }; //

GLfloat LightDiffuse[]={ 1.0f, 1.0f, 1.0f, 1.0f }; //

GLfloat LightPosition[]= { 0.0f, 0.0f, 2.0f, 1.0f }; //

 

GLuint filter; //

GLuinttexture[3]; // 3-

GLuintobject=0; // ( )

 

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // WndProc

 

. InitGL(). 3 , . 3 (light1), return true. , . , 0. , . - GLU_NONE GLU_FLAT. , .

 

quadratic=gluNewQuadric(); // ( )

gluQuadricNormals(quadratic, GLU_SMOOTH);// ( )

gluQuadricTexture(quadratic, GL_TRUE); // ( )

 

, , , . , , , . .

 

GLvoid glDrawCube() //

{

glBegin(GL_QUADS); //

 

//

glNormal3f( 0.0f, 0.0f, 1.0f); //

glTexCoord2f(0.0f, 0.0f);

glVertex3f(-1.0f, -1.0f, 1.0f); //

glTexCoord2f(1.0f, 0.0f);

glVertex3f( 1.0f, -1.0f, 1.0f); //

glTexCoord2f(1.0f, 1.0f);

glVertex3f( 1.0f, 1.0f, 1.0f); //

glTexCoord2f(0.0f, 1.0f);

glVertex3f(-1.0f, 1.0f, 1.0f); //

 

//

glNormal3f( 0.0f, 0.0f,-1.0f); //

glTexCoord2f(1.0f, 0.0f);

glVertex3f(-1.0f, -1.0f, -1.0f);//

glTexCoord2f(1.0f, 1.0f);

glVertex3f(-1.0f, 1.0f, -1.0f);//

glTexCoord2f(0.0f, 1.0f);

glVertex3f( 1.0f, 1.0f, -1.0f);//

glTexCoord2f(0.0f, 0.0f);

glVertex3f( 1.0f, -1.0f, -1.0f);//

 

//

glNormal3f( 0.0f, 1.0f, 0.0f); //

glTexCoord2f(0.0f, 1.0f);

glVertex3f(-1.0f, 1.0f, -1.0f);//

glTexCoord2f(0.0f, 0.0f);

glVertex3f(-1.0f, 1.0f, 1.0f); //

glTexCoord2f(1.0f, 0.0f);

glVertex3f( 1.0f, 1.0f, 1.0f); //

glTexCoord2f(1.0f, 1.0f);

glVertex3f( 1.0f, 1.0f, -1.0f);//

 

//

glNormal3f( 0.0f,-1.0f, 0.0f); //

glTexCoord2f(1.0f, 1.0f);

glVertex3f(-1.0f, -1.0f, -1.0f);//

glTexCoord2f(0.0f, 1.0f);

glVertex3f( 1.0f, -1.0f, -1.0f);//

glTexCoord2f(0.0f, 0.0f);

glVertex3f( 1.0f, -1.0f, 1.0f); //

glTexCoord2f(1.0f, 0.0f);

glVertex3f(-1.0f, -1.0f, 1.0f); //

 

//

glNormal3f( 1.0f, 0.0f, 0.0f); //

glTexCoord2f(1.0f, 0.0f);

glVertex3f( 1.0f, -1.0f, -1.0f);//

glTexCoord2f(1.0f, 1.0f);

glVertex3f( 1.0f, 1.0f, -1.0f);//

glTexCoord2f(0.0f, 1.0f);

glVertex3f( 1.0f, 1.0f, 1.0f); //

glTexCoord2f(0.0f, 0.0f);

glVertex3f( 1.0f, -1.0f, 1.0f); //

 

//

glNormal3f(-1.0f, 0.0f, 0.0f); //

glTexCoord2f(0.0f, 0.0f);

glVertex3f(-1.0f, -1.0f, -1.0f);//

glTexCoord2f(1.0f, 0.0f);

glVertex3f(-1.0f, -1.0f, 1.0f); //

glTexCoord2f(1.0f, 1.0f);

glVertex3f(-1.0f, 1.0f, 1.0f); //

glTexCoord2f(0.0f, 1.0f);

glVertex3f(-1.0f, 1.0f, -1.0f);//

glEnd(); //

}

 

- DrawGLScene. case . ( , ) , . DrawGLScene .

 

, , , (quadratic). , , , , .

 

int DrawGLScene(GLvoid) //

{

//

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glLoadIdentity(); //

glTranslatef(0.0f,0.0f,z); //

 

glRotatef(xrot,1.0f,0.0f,0.0f); // X

glRotatef(yrot,0.0f,1.0f,0.0f); // Y

 

glBindTexture(GL_TEXTURE_2D, texture[filter]); //

 

// ( )

switch(object) // ,

{

case 0: //

glDrawCube(); //

break; //

 

, , . (1.0f) (). (1.0f) - . (3.0f) - ( ). (32) "" Z, , , (32) - "" Z. . , . . - .

 

case 1: //

glTranslatef(0.0f,0.0f,-1.5f); //

gluCylinder(quadratic,1.0f,1.0f,3.0f,32,32); //

break; //

 

, , CD . (0.5f) - . , , . - . (1.5f) - . , . , . , , . (32) , . , . , . , , (32) - , . . . , . , , .

 

case 2: //

gluDisk(quadratic,0.5f,1.5f,32,32); // ( CD)

break; //

 

- , , , . ! . - . / .., , - , . 1.3f. "" Z (32), "" Z (32). . , , .

 

case 3: //

gluSphere(quadratic,1.3f,32,32); //

break; //

 

, . , , . , , . . , . , .

 

case 4: //

glTranslatef(0.0f,0.0f,-1.5f); //

// .5 2

gluCylinder(quadratic,1.0f,0.0f,3.0f,32,32);

break; //

 

gluParticalDisc. , , , gluParticalDisc 2 . (part1) - , . - ( ). , . , , . 360 , . , , !

 

case 5: //

part1+=p1; //

part2+=p2; //

 

if(part1>359) // 360

{

p1=0; //

part1=0; // 0

p2=1; //

part2=0; // 0

}

if(part2>359) // 360

{

p1=1; //

p2=0; //

}

// , -

gluPartialDisk(quadratic,0.5f,1.5f,32,32,part1,part2-part1);

break; //

};

 

xrot+=xspeed; // X

yrot+=yspeed; // Y

return TRUE; //

}

 

, , . , , .

 

if (keys[' '] && !sp) // ""?

{

sp=TRUE; // , sp TRUE

object++; //

if(object>5) // 5?

object=0; // , 0

}

if (!keys[' ']) // "" ?

{

sp=FALSE; // , sp FALSE

}

 

! OpenGL. . - .

 

, TipTup.Com 2000. (http://www.tiptup.com)

GB Schmick (TipTup)

PMG  1 2002 (c)