Code:
#include <windows.h>
#include <GL/glut.h>
#include <stdio.h>
//****** DEFINE CONSTANTS AND THE POSITION STRUCTURE *************************//
#define NUM_PARTICLES 2592
struct Position{
float x;
float y;
float z;
};
//******* GLOBAL VARIABLES ***************************************************//
Position XYZ[NUM_PARTICLES];
//****** DRAWPARTICLE() A SPHERE AT THE POINT USING GLUT *********************//
void DrawParticle(double x, double y, double z){
glLoadIdentity();
glPushMatrix();
glTranslatef(x,y,z);
glutSolidSphere(0.3,24,24);
glPopMatrix();
}
//****** READDATA() OPENS THE COORDINATES FILE AND STORES THEM ***************//
void ReadData() {
FILE *file;
file=fopen("001.txt","r");
for(int i=0;i<NUM_PARTICLES;i++){
fscanf(file," %f %f %f \n", &XYZ[i].x,&XYZ[i].y,&XYZ[i].z);
}
fclose(file);
}
//****** MYINIT() INITALIZES THE OPENGL ENVIROMENT ***************************//
void myInit(void)
{
//****** Initalize Lighting and Turn on Lights for the scene *****************//
glEnable(GL_LIGHTING); //
glLightModelf(GL_LIGHT_MODEL_LOCAL_VIEWER,1.0); //
GLfloat lightIntensity[]={0.8,0.8,0.8, 0.8}; //
GLfloat lightSpecular[]={1.00,1.0,1.0, 1.0}; //
GLfloat lightPosition[]={0.0,5.00,0.0,1.00}; //
GLfloat lightAmbient[]={0.50,0.50,0.50,1.0}; //
//
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightIntensity); //
glLightfv(GL_LIGHT0, GL_SPECULAR, lightSpecular); //
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition); //
glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbient); //
glEnable(GL_LIGHT0); //
glDepthFunc(GL_LEQUAL); //
glEnable(GL_DEPTH_TEST); //
} //
//****************************************************************************//
//****** ALL THE DRAWING CODE GOES INTO DISP() *******************************//
void display(void)
{
//****** SET THE SYSTEM UP TO BE A 6X6X18 BOX ********************************//
glMatrixMode(GL_PROJECTION);
glOrtho(0.0,6.0,0.0,6.0,0.0,25.0);
//****** CLEAR BUFFERS *******************************************************//
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//****** SETUP THE CAMERA ANGLE***********************************************//
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluLookAt(0.0,0.0,0.0,10.0,10.0,0.0,0.0,1.0,0.0);
glMatrixMode(GL_MODELVIEW);
//****** DRAW THE PARTICLES***************************************************//
for (int i=0;i<NUM_PARTICLES;i++){DrawParticle(XYZ[i].x,XYZ[i].y,XYZ[i].z);}
glFlush();
}
//****** RESHAPE FUNCTION TO MAINTAIN ASPECT RATIOS **************************//
//****** WHEN THE WINDOW IS RESIZED **************************//
//****** FOR THE MOST PART COPY AND PASTED FROM VARIOUS TUTORIALS ************//
void myReshape(GLsizei w, GLsizei h) //
{ //
glViewport(0, 0, w, h); //
glMatrixMode(GL_PROJECTION); //
glLoadIdentity(); //
if (w <= h) //
glOrtho (-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w, //
1.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0); //
else //
glOrtho (-1.5*(GLfloat)w/(GLfloat)h, //
1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0); //
glMatrixMode(GL_MODELVIEW); //
glLoadIdentity(); //
} //
//****** END RESIZE FUNCTION**************************************************//
int main(int argc, char** argv)
{
ReadData();
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowPosition (10, 10);
glutInitWindowSize (500,500);
glutCreateWindow("Visualization Of Crystal Face Structures");
myInit();
glutReshapeFunc (myReshape);
glutDisplayFunc(display2);
glutMainLoop();
}