⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 extra.cpp

📁 Algo de codigo de openGL que obtuve en la web :P
💻 CPP
字号:
/* GL_shadow: an implementation of the stencil shadow volume technique * Copyright (C) 2005 Angelo "Encelo" Theodorou * * extra.c: general and light relative functions */    #include <math.h>#include <SDL/SDL.h>#include <GL/gl.h>#include "extra.h"#include "object.h"/* Calculate frame interval and print FPS each 5s */int FrameTiming(void){	Uint32 interval;	static Uint32 current, last = 0, five = 0, nframes = 0;	current = SDL_GetTicks();	nframes++;	if (current - five > 5*1000) {		printf("%u frames in 5 seconds = %.1f FPS\n", nframes, (float)nframes/5.0f);		nframes = 0;		five = current;	}		interval = current - last;	last = current;		return interval;}/* Replaces gluPerspective. Sets the frustum to perspective mode. * fovY     - Field of vision in degrees in the y direction * aspect   - Aspect ratio of the viewport * zNear    - The near clipping distance * zFar     - The far clipping distance */void perspectiveGL(GLdouble fovY, GLdouble aspect, GLdouble zNear, GLdouble zFar){	GLdouble fW, fH;	fH = tan( (fovY / 2) / 180 * M_PIl ) * zNear;	fW = fH * aspect;	glFrustum( -fW, fW, -fH, fH, zNear, zFar );}/* Draws the walls on which objects' shadow will be projected */void DrawRoom(void){	glPushAttrib(GL_TEXTURE_BIT);		glDisable(GL_TEXTURE_2D);	glColor3f(0.6f, 0.6f, 0.6f);	glBegin(GL_QUADS);		/* Floor */		glNormal3f(0.0f, 1.0f, 0.0f);		glVertex3f(-1.0f,-1.0f,-2.0f);		glVertex3f(-1.0f,-1.0f, 2.0f);		glVertex3f( 1.0f,-1.0f, 2.0f);		glVertex3f( 1.0f,-1.0f,-2.0f);		/* Ceiling */		glNormal3f(0.0f,-1.0f, 0.0f);		glVertex3f(-1.0f, 1.0f, 2.0f);		glVertex3f(-1.0f, 1.0f,-2.0f);		glVertex3f( 1.0f, 1.0f,-2.0f);		glVertex3f( 1.0f, 1.0f, 2.0f);		/* Back Wall */		glNormal3f(0.0f, 0.0f, 1.0f);		glVertex3f(-1.0f, 1.0f, -2.0f);		glVertex3f(-1.0f,-1.0f, -2.0f);		glVertex3f( 1.0f,-1.0f, -2.0f);		glVertex3f( 1.0f, 1.0f, -2.0f);		/* Left Wall */		glNormal3f( 1.0f, 0.0f, 0.0f);		glVertex3f(-1.0f, 1.0f, 2.0f);		glVertex3f(-1.0f,-1.0f, 2.0f);		glVertex3f(-1.0f,-1.0f,-2.0f);		glVertex3f(-1.0f, 1.0f,-2.0f);		/* Right Wall */		glNormal3f(-1.0f, 0.0f, 0.0f);		glVertex3f( 1.0f, 1.0f,-2.0f);		glVertex3f( 1.0f,-1.0f,-2.0f);		glVertex3f( 1.0f,-1.0f, 2.0f);		glVertex3f( 1.0f, 1.0f, 2.0f);	glEnd();		glPopAttrib();}/* Updates light position in the OpenGL state machine and then draws the light */void UpdateLight(Light *light, GLint gl_light, GLfloat size){	GLfloat x, y, z;	x = light->Position[0];	y = light->Position[1];	z = light->Position[2];			glLightfv(gl_light, GL_POSITION, light->Position);	glLightfv(gl_light, GL_AMBIENT, light->Ambient);	glLightfv(gl_light, GL_DIFFUSE, light->Diffuse);	glLightfv(gl_light, GL_SPECULAR, light->Specular);	glPushAttrib(GL_ENABLE_BIT);		glDisable(GL_TEXTURE_2D);	glDisable(GL_LIGHTING);	glColor3f(light->Diffuse[0], light->Diffuse[1], light->Diffuse[2]);	glBegin(GL_QUADS);		glVertex3f(x+(0.5f*size), y+(0.5f*size), z);		glVertex3f(x-(0.5f*size), y+(0.5f*size), z);		glVertex3f(x-(0.5f*size), y-(0.5f*size), z);		glVertex3f(x+(0.5f*size), y-(0.5f*size), z);	glEnd();		glPopAttrib();}/* Vector per matrix multiplication */void VMatMult(GLfloat M[16], GLfloat v[4]){	GLfloat res[4];	res[0] = M[0] * v[0] + M[4] * v[1] + M[8] *v[2] +M[12] * v[3];	res[1] = M[1] * v[0] + M[5] * v[1] + M[9] *v[2] +M[13] * v[3];	res[2] = M[2] * v[0] + M[6] * v[1] + M[10] *v[2] +M[14] * v[3];	res[3] = M[3] * v[0] + M[7] * v[1] + M[11] *v[2] +M[15] * v[3];	/* Results Are Stored Back In v[] */		v[0] = res[0];	v[1] = res[1];	v[2] = res[2];	v[3] = res[3];}/* Vector copy function */void CpVec(GLfloat *src, GLfloat *dst, int size){	int i;		for(i=0; i<size; i++)		dst[i] = src[i];}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -