图形学作业的最后一部分……
添加了光照, 但是没有纹理。
#ifndef SHOW_BY_GLUT_H_
#define SHOW_BY_GLUT_H_
#include <gl/glut.h>
#define max_point 1000000
#define max_face 1000000
float p[max_point][3];
int f[max_face][3];
int f_count;
int p_count;
// gl parameters
// Rotation amounts
GLfloat xRot = 0.0f;
GLfloat yRot = 0.0f;
// mouse
int oldmy=-1,oldmx=-1;
// functions
void initializeMesh(float (*point)[3], int point_count, int (*face)[3], int face_count)
{
f_count = face_count;
p_count = point_count;
for (int i = 0; i< p_count; i++)
{
for (int j = 0; j< 3; j++)
{
p[i][j] = point[i][j];
}
}
for (int i = 0; i< f_count; i++)
{
for (int j = 0; j< 3; j++)
{
f[i][j] = face[i][j];
}
}
}
void calclater_normilize(float *a, float *b, float *c, float re[3])
{
float vec1[3], vec2[3];
for (int i = 0; i< 3; i++)
{
vec1[i] =b[i]-a[i];
}
for (int i = 0; i< 3; i++)
{
vec2[i] =c[i]-a[i];
}
re[0] = vec1[1]*vec2[2] - vec2[1]*vec1[2];
re[1] = vec1[2]*vec2[0] - vec2[2]*vec1[0];
re[2] = vec1[0]*vec2[1] - vec2[0]*vec1[1];
float all = sqrt(re[0]*re[0]+re[1]*re[1]+re[2]*re[2]);
for (int i = 0; i< 3; i++)
{
re[i] = re[i]/all;
}
}
void drawTriangles()
{
for (int i = 0; i< f_count; i++)
{
glBegin(GL_TRIANGLES);
float nor[3];
calclater_normilize(p[f[i][0]], p[f[i][1]], p[f[i][2]], nor);
glNormal3f(nor[0], nor[1], nor[2]);
for (int j = 0; j< 3; j++)
{
int pindex = f[i][j];
glVertex3f(p[pindex]