⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 objects.cpp

📁 openmosix viewer图形界面工具。o penmosix viewer图形界面工具。o penmosix viewer图形界面工具。o penmosix viewer图形界面工具。
💻 CPP
字号:
#include "objects.h"#include <GL/gl.h>#include <GL/glu.h>#include <GL/glut.h>void CObject :: setMaterials(){	glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, base_data.obj_materials.ambient);	glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, base_data.obj_materials.diffuse);	glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, base_data.obj_materials.specular);	glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, &base_data.obj_materials.shininess);} CDisk :: CDisk(struct CObject_struct &base, CDisk_struct &disk) : CObject(base),disk_data(disk) {   disk_data.disk = gluNewQuadric();      if (!disk_data.disk)	{	    printf("not enough memory..best error handling i can do is exit..\n");	    exit(-1);	}       	 //        base_data.FillStyle =  TheWorld.FillStyle();//      gluQuadricDrawStyle(disk_data.disk, base_data.FillStyle);     gluQuadricDrawStyle(disk_data.disk, GLU_FILL);//        printf("funny file disk ctor..\n");//      getchar();}CDisk :: CDisk(float finner_r, float foutter_r, float x, float y, float z, float fslices, float fstacks) : CObject(DISK, x, y, z){    disk_data.inner_r  = finner_r;    disk_data.outter_r = foutter_r;    disk_data.slices = fslices;    disk_data.stacks = fstacks;    disk_data.disk = gluNewQuadric();      if (!disk_data.disk)	{	    printf("CDisk :: CDisk not enough memory..best error handling i can do is exit..\n");	    exit(-1);	}       	printf("CDisk :: CDisk\n");	//      base_data.FillStyle =  TheWorld.FillStyle(); //   gluQuadricDrawStyle(disk_data.disk, base_data.FillStyle);     gluQuadricDrawStyle(disk_data.disk, GLU_FILL);	setAngle(90, 0.0, 0.0);	setDir(1.0 ,0.0 ,0.0); 	loadMaterials(whiteMaterials);     }    void CDisk :: draw(){   // printf("CDisk :: draw\n");    glPushMatrix();    glColor4f(base_data.color_r, base_data.color_g, base_data.color_b, base_data.color_a);    glTranslatef(base_data.posX, base_data.posY, base_data.posZ);    glRotatef(base_data.angleX, base_data.dirX, 0.0, 0.0);	glRotatef(base_data.angleY,  0.0, base_data.dirY, 0.0);	glRotatef (base_data.angleZ, 0.0, 0.0, base_data.dirZ);	setMaterials();	gluDisk(disk_data.disk, disk_data.inner_r, disk_data.outter_r, (GLint) disk_data.slices, (GLint) disk_data.stacks);    glLoadIdentity();	glFlush();    glEnd();	glPopMatrix();}void CDisk :: dealloc(){    printf("CDisk :: dealloc\b");//        CDisk::~CDisk();    }CDisk :: ~CDisk(){  //  printf("CDisk :: ~CDisk\n");   gluDeleteQuadric(disk_data.disk);}CSphere :: CSphere(struct CObject_struct &base, CSphere_struct &sphere) : CObject(base), sphere_data(sphere) {   sphere_data.sphere = gluNewQuadric();      if (!sphere_data.sphere)	{	    printf("not enough memory..best error handling i can do is exit..\n");	    exit(-1);	}             gluQuadricDrawStyle(sphere_data.sphere, GLU_FILL);//      printf("funny file sphere ctor..\n");//      getchar();}CSphere :: CSphere(float fradius, float x, float y, float z, float fslices, float fstacks) : CObject(SPHERE, x, y, z) {    sphere_data.slices = fslices;    sphere_data.stacks = fstacks;    sphere_data.radius = fradius;    sphere_data.sphere = NULL;     sphere_data.sphere = gluNewQuadric();      if (!sphere_data.sphere)	{	    printf("CSphere :: CSphere not enough memory..best error handling i can do is exit..\n");	    exit(-1);	}       	printf("CSphere :: CSphere\n");    gluQuadricDrawStyle(sphere_data.sphere, GLU_FILL);	setAngle(90, 0.0, 0.0); /* i know this doesnt do much but i prefer consistency to efficency */ 	setDir(1.0 ,0.0 ,0.0); 	loadMaterials(whiteMaterials);     }void CSphere :: draw(){    glPushMatrix();    glColor4f(base_data.color_r, base_data.color_g, base_data.color_b, base_data.color_a);    glTranslatef(base_data.posX, base_data.posY, base_data.posZ);    glRotatef(base_data.angleX, base_data.dirX, 0.0, 0.0);	glRotatef(base_data.angleY,  0.0, base_data.dirY, 0.0);	glRotatef (base_data.angleZ, 0.0, 0.0, base_data.dirZ);	setMaterials();	gluSphere(sphere_data.sphere, sphere_data.radius,(int)sphere_data.slices,(int)sphere_data.stacks);    glLoadIdentity();	glFlush();    glEnd();	glLoadIdentity();    glPopMatrix();}void CSphere :: dealloc(){    printf("CSphere :: dealloc\n");	gluDeleteQuadric(sphere_data.sphere);	     }CSphere :: ~CSphere(){    dealloc();	//printf("CSphere :: ~CSphere\n");	       }CCylinder :: CCylinder(struct CObject_struct &base, CCylinder_struct &cyl) : CObject(base), cyl_data(cyl) {   cyl_data.obj = gluNewQuadric();      if (!cyl_data.obj)	{	    printf("not enough memory..best error handling i can do is exit..\n");	    exit(-1);	}       	  	  gluQuadricDrawStyle(cyl_data.obj, GLU_FILL);	printf("funny file cyl ctor..\n");	//getchar();	//draw();	//xgetchar();}CCylinder ::  CCylinder(float x , float y, float z, double dbase,  double dtop, float fheight, float fslices, float fstacks) : CObject(CYLINDER, x, y, z) {     cyl_data.base = dbase; cyl_data.top = dtop; cyl_data.height = fheight; cyl_data.slices = fslices; cyl_data.stacks = fstacks;    cyl_data.obj = NULL;    cyl_data.obj = gluNewQuadric();      if (!cyl_data.obj)	{	    printf("not enough memory..best error handling i can do is exit..\n");	    exit(-1);	}             gluQuadricDrawStyle(cyl_data.obj, GLU_FILL);	  setAngle(90, 0.0, 0.0);	  setDir(1.0 , 0.0  ,0.0);	loadMaterials(whiteMaterials);  }void CCylinder :: draw(){    glPushMatrix();    glColor4f(base_data.color_r, base_data.color_g, base_data.color_b, base_data.color_a);    glTranslatef(base_data.posX, base_data.posY, base_data.posZ);	glRotatef(base_data.angleY,  0.0, base_data.dirY, 0.0);	glRotatef(base_data.angleX, base_data.dirX, 0.0, 0.0);	glRotatef (base_data.angleZ, 0.0, 0.0, base_data.dirZ);	setMaterials();     gluCylinder(cyl_data.obj, cyl_data.base, cyl_data.top, cyl_data.height, (int)cyl_data.stacks, (int)cyl_data.slices);  //  printf("just drew cylinder %f %f %f %f %f %f\n", cyl_data.base, cyl_data.top, cyl_data.height, cyl_data.stacks, cyl_data.slices);//q     getchar();	glFlush();    glEnd();    glLoadIdentity();	glPopMatrix();}void CCylinder :: dealloc(){    printf("CCylinder :: dealloc\n");//    getchar();//        CCylinder :: ~CCylinder();}CCylinder :: ~CCylinder(){    printf("Cylinder dtor.\n");    gluDeleteQuadric(cyl_data.obj);}void CBar :: draw(){    float right_corner;    int mode;    float ctmp[4];    right_corner = base_data.posX + bar_data.width;        glPushMatrix();    glColor4f(base_data.color_r, base_data.color_g, base_data.color_b, base_data.color_a);    setMaterials();    getColor4v(ctmp);    if (ctmp[3] != 1.0) glDepthMask(GL_FALSE);	else glDepthMask(GL_TRUE);		glBegin(GL_POLYGON);		glVertex3f(base_data.posX, 0,  base_data.posZ);		glVertex3f(base_data.posX + bar_data.width, 0,  base_data.posZ);		glVertex3f(base_data.posX + bar_data.width, bar_data.height,  base_data.posZ);		glVertex3f(base_data.posX, bar_data.height,  base_data.posZ);	glEnd();                                                                                             glBegin(GL_POLYGON);	glVertex3f(base_data.posX,0,base_data.posZ);	glVertex3f(base_data.posX,0,base_data.posZ + bar_data.width);	glVertex3f(base_data.posX, bar_data.height, base_data.posZ + bar_data.width);	glVertex3f(base_data.posX, bar_data.height, base_data.posZ);    glEnd();            glBegin(GL_POLYGON);	glVertex3f(right_corner, 0, base_data.posZ);	glVertex3f(right_corner, 0, base_data.posZ + bar_data.width);	glVertex3f(right_corner, bar_data.height, base_data.posZ +bar_data.width);	glVertex3f(right_corner, bar_data.height, base_data.posZ);	glEnd();    glBegin(GL_POLYGON);	glVertex3f(base_data.posX,0,base_data.posZ + bar_data.width);	glVertex3f(right_corner,0,base_data.posZ + bar_data.width);	glVertex3f(right_corner,bar_data.height, base_data.posZ + bar_data.width);	glVertex3f(base_data.posX, bar_data.height, base_data.posZ + bar_data.width);		    glEnd();       glDepthMask(GL_TRUE);            glLoadIdentity();    glPopMatrix();    }void TwoDRect :: draw(){	float ctmp[4];	glPushMatrix();	glColor4f(base_data.color_r, base_data.color_g, base_data.color_b, base_data.color_a);	setMaterials();	glRotatef(base_data.angleY,  0.0, base_data.dirY, 0.0);	glRotatef(base_data.angleX, base_data.dirX, 0.0, 0.0);	glRotatef (base_data.angleZ, 0.0, 0.0, base_data.dirZ);	getColor4v(ctmp);		glBegin(GL_LINE_LOOP);		glVertex3f(base_data.posX, 0,  base_data.posZ);		glVertex3f(base_data.posX + rect_data.width, 0,  base_data.posZ);		glVertex3f(base_data.posX + rect_data.width, 0,  base_data.posZ + rect_data.depth);		glVertex3f(base_data.posX, 0, base_data.posZ + rect_data.depth);	glEnd();                                                                                         	glFlush();	glLoadIdentity();	glPopMatrix();                                                    }void CCone :: draw(){    glPushMatrix();	glColor4f(base_data.color_r, base_data.color_g, base_data.color_b, base_data.color_a);    glTranslatef(base_data.posX, base_data.posY, base_data.posZ);    glRotatef(base_data.angleY,  0.0, base_data.dirY, 0.0);	glRotatef(base_data.angleX, base_data.dirX, 0.0, 0.0);	glRotatef (base_data.angleZ, 0.0, 0.0, base_data.dirZ);	setMaterials();		glutSolidCone(cone_data.base, cone_data.height, (int)cone_data.stacks, (int)cone_data.slices);        glFlush();//    glEnd();    glLoadIdentity();	glPopMatrix();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -