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

📄 cartoon_mesh.cpp

📁 是3D游戏一书中所讲的游戏引擎fly3D 包括fly3D引擎的源码及应用此引擎开发出来的游戏实例 有fly3D引擎的教程,易于step by step跟学
💻 CPP
字号:
#include "..\..\lib\Fly3D.h"
#include "gamelib.h"

void cartoon_mesh::init()
{
	if (objmesh)
	{
		pos=objmesh->pivotpos;
		if (objmesh->edges==0)
			objmesh->compute_normals(MESH_EDGES);
	}
}

void cartoon_mesh::draw()
{
	if (objmesh)
	{
	// position the object
	glPushMatrix();
	glTranslatef(pos.x,pos.y,pos.z);
	glMultMatrixf((float *)&mat);

	// compute ambient light
	vector ambient;
	if (node)
		ambient=node->color;
	else ambient.null();

	vector v=flyengine->cam->pos-pos;
	float f=v.length()/flyengine->viewmaxdist;
	if (f<1.0f)
		f=(1.0f-f)*flyengine->cartoonwidth;
	else f=0.0f;
	
	// make light positions local to object
	for( int i=0;i<lights.nlights;i++ )
		lights.pos[i]-=pos;
	// draw object as cartoon
	objmesh->draw_cartoon(v,ambient,lights,f);
	//clear lights
	lights.nlights=0;

	glPopMatrix();
	}
}

bsp_object *cartoon_mesh::clone()
{
	cartoon_mesh *tmp=new cartoon_mesh;
	*tmp=*this;
	tmp->source=this;
	return tmp;
}

int cartoon_mesh::get_custom_param_desc(int i,param_desc *pd)
{
	if (pd!=0)
	switch(i)
	{
	case 0:
		pd->type='3';
		pd->data=&objmesh;
		strcpy(pd->name,"objmesh");
		break;
	}
	return 1;
}

int cartoon_mesh::message(vector& p,float rad,int msg,int param,void *data)
{
	if (msg==FLYOBJM_CHANGEPARAM && param>=0)
		init();
	else
	if (msg==FLYOBJM_ILLUM || msg==FLYOBJM_DYNILLUM)
		lights.add_light(p,*((vector *)data),rad);

	return 0;
}

⌨️ 快捷键说明

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