#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <GLUT/glut.h>
#include "VBO.h"
int xsize, ysize;
float aspect;
float zNear = 0.1;
float zFar = 100.;
float *data;
int planes = 3;
int data_width = 4;
int data_height = 4;
VBO vbo;
void init()
{
data = new float[planes*data_width*data_height];
float snorm_x, snorm_y;
for(int j=0; j < data_height; j++) {
snorm_y = 2.*((float)j)/((float)(data_height-1))-1.;
for(int i=0; i < data_width; i++) {
snorm_x = 2.*((float)i)/((float)(data_width-1))-1.;
data[(i+j*data_width)*3] = snorm_x;
data[(i+j*data_width)*3+1] = snorm_y;
data[(i+j*data_width)*3+2] = sqrt(snorm_x*snorm_x + snorm_y*snorm_y);
}
}
vbo.set_vertices(data_width, data_height, planes, data);
}
void cleanup()
{
delete data;
}
void reset(int value)
{
glutPostRedisplay();
}
void setDisplay(int value)
{
glutPostRedisplay();
}
void reshape(int width, int height)
{
xsize = width;
ysize = height;
aspect = (float)xsize/(float)ysize;
glViewport(0, 0, xsize, ysize);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutPostRedisplay();
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(64.0, aspect, zNear, zFar);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0, 0.0, -4.);
glRotatef(-20., 1.0, 0.0, 0.0);
glPointSize(2.);
vbo.draw();
glutSwapBuffers();
}
void visibility(int state)
{
//
}
void mouse(int button, int state, int x, int y)
{
//
}
void keyboard(unsigned char ch, int x, int y)
{
switch (ch)
{
case 27: exit(0); break;
}
glutPostRedisplay();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(500, 500);
glutCreateWindow("VBOs");
float lightPosition[] = {1., 1., 1., 1.};
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glClearColor(0.0, 0.0, 0.0, 0.0);
glPolygonOffset(1.0, 1.0);
glEnable(GL_CULL_FACE);
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT, GL_DIFFUSE);
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
glEnable(GL_LIGHT0);
glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutVisibilityFunc(visibility);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
init();
glutMainLoop();
cleanup();
return 0;
}
评论0
最新资源