|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
//// TT.cpp : Defines the entry point for the console application.
////
//#include "stdafx.h"
#include <gl/glut.h>
#include <math.h>
#define DEG_TO_RAD 0.017453
#define n 100
float a=45.0;
int r=2;
int i=1;
float deta=3;
float detz=0.15;
float eyetheta = 0.0f;
void idle()
{
eyetheta = eyetheta + 0.1f;
glutPostRedisplay();
}
void display()
{
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,1.0,1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-10.0,10.0,-10.0,10.0,-50.0,100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt( 50,50,15.0,0.0,0.0,7,0.0,0,1.0);
for(i=0;i<n;i++)
{
float utheta = i * deta;
float dtheta = ( i - 1 ) * deta;
float uz =i*detz;
float dz = ( i - 1 ) * detz;
GLint vertices[][3]={
{ r * cos( DEG_TO_RAD*( 45 + dtheta ) ), r * sin( DEG_TO_RAD * ( 45 + dtheta )), dz},
{ r * cos( DEG_TO_RAD*( 45 + utheta ) ), r * sin( DEG_TO_RAD * ( 45 + utheta )), uz },
{r * cos( DEG_TO_RAD*( 135 + dtheta ) ), r * sin( DEG_TO_RAD * ( 135 + dtheta )), dz },
{ r * cos( DEG_TO_RAD*( 135 + utheta ) ), r * sin( DEG_TO_RAD * ( 135 + utheta )), uz },
{r * cos( DEG_TO_RAD*( 225 + dtheta ) ), r * sin( DEG_TO_RAD * ( 225 + dtheta )), dz},
{r * cos( DEG_TO_RAD*( 225 + utheta ) ), r * sin( DEG_TO_RAD * ( 225 + utheta )), uz},
{r * cos( DEG_TO_RAD*( 315 + dtheta ) ), r * sin( DEG_TO_RAD * ( 315 + dtheta )), dz },
{ r * cos( DEG_TO_RAD*( 315 + utheta ) ), r * sin( DEG_TO_RAD * ( 315 + utheta )), uz},
{ r * cos( DEG_TO_RAD*( 45 + dtheta ) ), r * sin( DEG_TO_RAD * ( 45 + dtheta )), dz},
{ r * cos( DEG_TO_RAD*( 45 + utheta ) ), r * sin( DEG_TO_RAD * ( 45 + utheta )), uz },};
glEnable(GL_POLYGON_MODE);
glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3,GL_INT,0,vertices);
glDrawElements(GL_TRIANGLE_STRIP,24,GL_UNSIGNED_INT,vertices);}
/*glBegin(GL_TRIANGLE_STRIP);
glNormal3f( cos( DEG_TO_RAD*( 45 + dtheta ) ), sin( DEG_TO_RAD * ( 45 + dtheta )), 0 );
glVertex3f( r * cos( DEG_TO_RAD*( 45 + dtheta ) ), r * sin( DEG_TO_RAD * ( 45 + dtheta )), dz );
glNormal3f( cos( DEG_TO_RAD*( 45 + utheta ) ) , sin( DEG_TO_RAD * ( 45 + utheta )), 0 );
glVertex3f( r * cos( DEG_TO_RAD*( 45 + utheta ) ), r * sin( DEG_TO_RAD * ( 45 + utheta )), uz );
glNormal3f( cos( DEG_TO_RAD*( 135 + dtheta ) ), sin( DEG_TO_RAD * ( 135 + dtheta )), 0 );
glVertex3f( r * cos( DEG_TO_RAD*( 135 + dtheta ) ), r * sin( DEG_TO_RAD * ( 135 + dtheta )), dz );
glNormal3f( cos( DEG_TO_RAD*( 135 + utheta ) ) , sin( DEG_TO_RAD * ( 135 + utheta )), 0 );
glVertex3f( r * cos( DEG_TO_RAD*( 135 + utheta ) ), r * sin( DEG_TO_RAD * ( 135 + utheta )), uz );
glNormal3f( cos( DEG_TO_RAD*( 225 + dtheta ) ), sin( DEG_TO_RAD * ( 225 + dtheta )), 0 );
glVertex3f( r * cos( DEG_TO_RAD*( 225 + dtheta ) ), r * sin( DEG_TO_RAD * ( 225 + dtheta )), dz );
glNormal3f( cos( DEG_TO_RAD*( 225 + utheta ) ) , sin( DEG_TO_RAD * ( 225 + utheta )), 0 );
glVertex3f( r * cos( DEG_TO_RAD*( 225 + utheta ) ), r * sin( DEG_TO_RAD * ( 225 + utheta )), uz );
glNormal3f( cos( DEG_TO_RAD*( 315 + dtheta ) ), sin( DEG_TO_RAD * ( 315 + dtheta )), 0 );
glVertex3f( r * cos( DEG_TO_RAD*( 315 + dtheta ) ), r * sin( DEG_TO_RAD * ( 315 + dtheta )), dz );
glNormal3f( cos( DEG_TO_RAD*( 315 + utheta ) ) , sin( DEG_TO_RAD * ( 315 + utheta )), 0 );
glVertex3f( r * cos( DEG_TO_RAD*( 315 + utheta ) ), r * sin( DEG_TO_RAD * ( 315 + utheta )), uz );
glNormal3f( cos( DEG_TO_RAD*( 45 + dtheta ) ), sin( DEG_TO_RAD * ( 45 + dtheta )), 0 );
glVertex3f( r * cos( DEG_TO_RAD*( 45 + dtheta ) ), r * sin( DEG_TO_RAD * ( 45 + dtheta )), dz );
glNormal3f( cos( DEG_TO_RAD*( 45 + utheta ) ) , sin( DEG_TO_RAD * ( 45 + utheta )), 0 );
glVertex3f( r * cos( DEG_TO_RAD*( 45 + utheta ) ), r * sin( DEG_TO_RAD * ( 45 + utheta )), uz );
glArrayElement(0);
glArrayElement(1);
glArrayElement(2);
glArrayElement(3);
glArrayElement(4);
glArrayElement(5);
glArrayElement(6);
glArrayElement(7);
glArrayElement(1);
glArrayElement(0);*/
/*glVertex3iv(vertices[0]);
glVertex3iv(vertices[1]);
glVertex3iv(vertices[2]);
glVertex3iv(vertices[3]);
glVertex3iv(vertices[4]);
glVertex3iv(vertices[5]);
glVertex3iv(vertices[6]);
glVertex3iv(vertices[7]);
glVertex3iv(vertices[0]);
glVertex3iv(vertices[1]);
glEnd();*/
glutSwapBuffers();
}
// Lighting data
GLfloat lightAmbient[] = { 0.2f, 0.2f, 0.2f, 1.0f };
GLfloat lightDiffuse[] = { 0.7f, 0.7f, 0.7f, 1.0f };
GLfloat lightSpecular[] = { 0.9f, 0.9f, 0.9f };
GLfloat materialColor[] = { 0.8f, 0.0f, 0.0f };
GLfloat vLightPos[] = { -80.0f, 120.0f, 100.0f, 0.0f };
GLfloat ground[3][3] = { { 0.0f, -25.0f, 0.0f },
{ 10.0f, -25.0f, 0.0f },
{ 10.0f, -25.0f, -10.0f } };
void main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(0,0);
glutCreateWindow("Orthogonal projection");
glutDisplayFunc(display);
glutIdleFunc( idle );
//glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glEnable(GL_COLOR_MATERIAL);
glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, lightSpecular);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
//glMaterialfv(GL_FRONT, GL_SPECULAR,lightSpecular);
//glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, materialColor);
//glMateriali(GL_FRONT, GL_SHININESS,128);
glutMainLoop();
}
|
|