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

📄 bezier_surface.cpp

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

void bezier_surface::init()
{
	if (patch&&source)
	{
	pos=patch->pivot;
	patch->build_surface();
	if (objmesh)
		delete objmesh;
	objmesh=patch->build_mesh();
	}
}

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

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

void bezier_surface::draw()
{
	if (patch)
	{
		glPushMatrix();
		glTranslatef(pos.x,pos.y,pos.z);
		glMultMatrixf((float *)&mat);

		int i=((int)(flyengine->cam->pos-pos).length());
		int d=(int)flyengine->viewmaxdist;

		i-=(d>>1);
		if (i<0)
			patch->draw(0);
		else 
		{
			i-=(d>>2);
			if (i<0)
				patch->draw(1);
			else
				patch->draw(2);
		}

		glPopMatrix();
	}
}

int bezier_surface::message(vector& p,float rad,int msg,int param,void *data)
{
	if (msg==FLYOBJM_ILLUM && (flyengine->mapmode&MAPPING_LIGHTMAP))
		patch->illuminate((p-pos)*mat_t,rad,*((vector *)data),param);
	else 
	if (msg==FLYOBJM_CHANGEPARAM)
		if (param>=0 || 
			((param_desc *)data)->data==&flyengine->curveerr)
			init();
	return 0;
}

⌨️ 快捷键说明

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