示例#1
0
// A couple thoughts on sphere drawing:
// 1) You need more slices than stacks, but little less than 2:1
// 2) At low LOD, setting stacks to an odd number avoids a "band" around the equator, making things look smoother
void LLRenderSphere::prerender()
{
    //  Create a series of display lists for different LODs
    mDList[0] = glGenLists(1);
    glNewList(mDList[0], GL_COMPILE);
    drawSolidSphere(1.0, 30, 20);
    glEndList();

    mDList[1] = glGenLists(1);
    glNewList(mDList[1], GL_COMPILE);
    drawSolidSphere(1.0, 20, 15);
    glEndList();

    mDList[2] = glGenLists(1);
    glNewList(mDList[2], GL_COMPILE);
    drawSolidSphere(1.0, 12, 8);
    glEndList();

    mDList[3] = glGenLists(1);
    glNewList(mDList[3], GL_COMPILE);
    drawSolidSphere(1.0, 8, 5);
    glEndList();
}
示例#2
0
文件: texture3.c 项目: mox601/grafica
/* ---------------------------------------------------------- */
static void redraw(void)
{
	GLfloat colorwhite []  = {1.0f, 1.0f, 1.0f, 1.0f}; 
	GLfloat light_position[4]={cos(M_PI/4)*(distance+1),0.0,sin(M_PI/4)*(distance+1),1};

	glClearColor(0,0.4f,1,1);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();

	gluLookAt(
		cos(M_PI/4)*(distance+1),0.0,sin(M_PI/4)*(distance+1), 
		0.0,0.0,0.9,  
		0.0,0.0,1.0); 

	glLightfv(GL_LIGHT0, GL_POSITION, light_position);
	glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1);
	glLightfv(GL_LIGHT0, GL_DIFFUSE, colorwhite );
	glEnable (GL_LIGHT0);
	glEnable(GL_LIGHTING);

	glPushMatrix();

		glDisable(GL_LIGHTING);
		glBegin(GL_LINES);
		glColor3f(1,0,0);glVertex3f(0,0,0);glVertex3f(2,0,0);
		glColor3f(0,1,0);glVertex3f(0,0,0);glVertex3f(0,2,0);
		glColor3f(0,0,1);glVertex3f(0,0,0);glVertex3f(0,0,2);
		glEnd();

		glRotatef(angley,0,1,0);
		
		glBindTexture(GL_TEXTURE_2D,textures[curtexture]);
		glEnable(GL_TEXTURE_2D);
		glColor3f(1,1,1);
		glEnable(GL_LIGHTING);
		glEnable( GL_POLYGON_OFFSET_FILL );
		glPolygonOffset(1,1);
		drawSolidSphere(1,64,64);
		glDisable(GL_TEXTURE_2D);
		glDisable( GL_POLYGON_OFFSET_FILL );

	glPopMatrix();
	glutSwapBuffers();
}