亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? face.cpp

?? 3D游戲場景編輯器
?? CPP
?? 第 1 頁 / 共 3 頁
字號(hào):
		t->TVecs.uOffset = (float)(t->xShift - uOffset);
 		t->TVecs.vOffset = (float)(t->yShift - vOffset);
	} 
}


static void Face_UpdateWorldTextureVecs
	(
	  Face *f
	)
{
	geFloat	ang, sinv, cosv;
	geVec3d uVec, vVec;
	int WhichAxis;
	TexInfo *t = &f->Tex;

	assert (t != NULL);
//	assert (t->xScale != 0.0f);
//	assert (t->yScale != 0.0f);
#pragma message ("this is an ugly hack.  Values should never be == 0.")
	if (t->xScale == 0.0f) t->xScale = 1.0f;
	if (t->yScale == 0.0f) t->yScale = 1.0f;

	ang = UNITS_DEGREES_TO_RADIANS (-t->Rotate);
	sinv = (geFloat)sin(ang);
	cosv = (geFloat)cos(ang);

	// the normal has to be normal, no?
	assert ((t->VecNormal.X != 0.0f) || 
			(t->VecNormal.Y != 0.0f) || 
			(t->VecNormal.Z != 0.0f));

	// Must check x, y, z in order to match tools.
	WhichAxis = 0;
	if (fabs (t->VecNormal.Y) > fabs (t->VecNormal.X))
	{
		if (fabs (t->VecNormal.Z) > fabs (t->VecNormal.Y))
		{
			WhichAxis = 2;
		}
		else
		{
			WhichAxis = 1;
		}
	}
	else if (fabs (t->VecNormal.Z) > fabs (t->VecNormal.X))
	{
		WhichAxis = 2;
	}

	switch (WhichAxis)
	{
		case 0:
			geVec3d_Set (&uVec, 0.0f, sinv, cosv);
			geVec3d_Set (&vVec, 0.0f, -cosv, sinv);
			break;
		case 1:
			geVec3d_Set (&uVec, cosv, 0.0f, sinv);
			geVec3d_Set (&vVec, -sinv, 0.0f, cosv);			
			break;
		case 2:
			geVec3d_Set (&uVec, cosv, sinv, 0.0f);
			geVec3d_Set (&vVec, sinv, -cosv, 0.0f);
			break;
	}

	//version 1.10 now has a one to one unit to texel ratio
	t->TVecs.uOffset = (geFloat)(t->xShift);
	t->TVecs.vOffset = (geFloat)(t->yShift);

	geVec3d_Scale(&uVec, (1.0f/t->xScale), &t->TVecs.uVec);
	geVec3d_Scale(&vVec, (1.0f/t->yScale), &t->TVecs.vVec);
}


static void Face_UpdateTextureVecs
	(
	  Face *f
	)
{
	if (Face_IsTextureLocked (f))
	{
		Face_UpdateLockedTextureVecs (f);
	}
	else
	{
		Face_UpdateWorldTextureVecs (f);
	}
}

const TexInfo_Vectors	*Face_GetTextureVecs(const Face *f)
{
	assert(f != NULL);

	// if info has been changed then we have to re-calculate the vecs...
	if (f->Tex.DirtyFlag)
	{
		//make sure the texinfos plane and vecs are good
		Face_SetPlaneFromFace((Face *)f);

		// The cast is kinda ugly, but we really want the parameter
		// to this function to be const!
		// mutable would be nice here, huh?
		Face_UpdateTextureVecs ((Face *)f);
		((Face *)f)->Tex.DirtyFlag = GE_FALSE;
	}

	return &(f->Tex.TVecs);
}

int	Face_GetTextureDibId(const Face *f)
{
	assert(f != NULL);

	return	f->Tex.Dib;
}

char const	*Face_GetTextureName(const Face *f)
{
	assert(f != NULL);

	return	f->Tex.Name;
}

geFloat	Face_GetMipMapBias(const Face *f)
{
	assert (f != NULL);

	return f->MipMapBias;
}

geFloat	Face_GetTranslucency(const Face *f)
{
	assert (f != NULL);

	return f->Translucency;
}

geFloat	Face_GetReflectivity(const Face *f)
{
	assert (f != NULL);

	return f->Reflectivity;
}

//check flags
geBoolean	Face_IsSelected(const Face *f)
{
	assert(f != NULL);

	return	(f->Flags & FACE_SELECTED)?	GE_TRUE : GE_FALSE;
}

geBoolean	Face_IsFixedHull(const Face *f)
{
	assert(f != NULL);

	return	(f->Flags & FACE_FIXEDHULL)?	GE_TRUE : GE_FALSE;
}

geBoolean	Face_IsLight(const Face *f)
{
	assert(f != NULL);

	return	(f->Flags & FACE_LIGHT)?	GE_TRUE : GE_FALSE;
}

geBoolean	Face_IsMirror(const Face *f)
{
	assert(f != NULL);

	return	(f->Flags & FACE_MIRROR)?	GE_TRUE : GE_FALSE;
}

geBoolean	Face_IsFullBright(const Face *f)
{
	assert(f != NULL);

	return	(f->Flags & FACE_FULLBRIGHT)?	GE_TRUE : GE_FALSE;
}

geBoolean	Face_IsSky(const Face *f)
{
	assert(f != NULL);

	return	(f->Flags & FACE_SKY)?	GE_TRUE : GE_FALSE;
}

geBoolean	Face_IsGouraud(const Face *f)
{
	assert(f != NULL);

	return	(f->Flags & FACE_GOURAUD)?	GE_TRUE : GE_FALSE;
}

geBoolean	Face_IsFlat(const Face *f)
{
	assert(f != NULL);

	return	(f->Flags & FACE_FLAT)?	GE_TRUE : GE_FALSE;
}

geBoolean	Face_IsTextureLocked (const Face *f)
{
	return (f->Flags & FACE_TEXTURELOCKED) ? GE_TRUE : GE_FALSE;
}

geBoolean	Face_IsVisible (const Face *f)
{
	return (f->Flags & FACE_VISIBLE) ? GE_TRUE : GE_FALSE;
}

geBoolean	Face_IsSheet (const Face *f)
{
	return (f->Flags & FACE_SHEET) ? GE_TRUE : GE_FALSE;
}

geBoolean	Face_IsTransparent (const Face *f)
{
	return (f->Flags & FACE_TRANSPARENT) ? GE_TRUE : GE_FALSE;
}

void	Face_SetSelected(Face *f, const geBoolean bState)
{
	assert(f != NULL);

	f->Flags	=(bState)? f->Flags|FACE_SELECTED	: f->Flags&~FACE_SELECTED;
}

void	Face_SetFixedHull(Face *f, const geBoolean bState)
{
	assert(f != NULL);

	f->Flags	=(bState)? f->Flags|FACE_FIXEDHULL	: f->Flags&~FACE_FIXEDHULL;
}

void	Face_SetLight(Face *f, const geBoolean bState)
{
	assert(f != NULL);

	f->Flags	=(bState)? f->Flags|FACE_LIGHT	: f->Flags&~FACE_LIGHT;
}

void	Face_SetMirror(Face *f, const geBoolean bState)
{
	assert(f != NULL);

	f->Flags	=(bState)? f->Flags|FACE_MIRROR	: f->Flags&~FACE_MIRROR;
}


void	Face_SetSky(Face *f, const geBoolean bState)
{
	assert(f != NULL);

	f->Flags	=(bState)? f->Flags|FACE_SKY	: f->Flags&~FACE_SKY;
}

// Fullbright, flat, and gouraud are mutually exclusive
static void Face_SetShadingExclusive (Face *f, const int StateFlag)
{
	// clear all face shading flags
	f->Flags &= ~(FACE_FULLBRIGHT | FACE_GOURAUD | FACE_FLAT);

	// set the desired flag
	f->Flags |= StateFlag;
}

void	Face_SetFullBright(Face *f, const geBoolean bState)
{
	assert(f != NULL);

	if (bState)
	{
		Face_SetShadingExclusive (f, FACE_FULLBRIGHT);
	}
	else
	{
		f->Flags &= ~FACE_FULLBRIGHT;
	}
}

void	Face_SetGouraud(Face *f, const geBoolean bState)
{
	assert (f != NULL);

	if (bState)
	{
		Face_SetShadingExclusive (f, FACE_GOURAUD);
	}
	else
	{
		f->Flags &= ~FACE_GOURAUD;
	}
}

void	Face_SetFlat(Face *f, const geBoolean bState)
{
	assert (f != NULL);

	if (bState)
	{
		Face_SetShadingExclusive (f, FACE_FLAT);
	}
	else
	{
		f->Flags &= ~FACE_FLAT;
	}
}

void	Face_SetTextureLock (Face *f, const geBoolean bState)
{
	f->Flags = (bState) ? (f->Flags | FACE_TEXTURELOCKED) : (f->Flags & ~FACE_TEXTURELOCKED);

	Face_InitFaceAngle( &f->Tex, &f->Face_Plane.Normal );
	
	Face_SetTexturePos (f);


}

void	Face_SetVisible (Face *f, const geBoolean bState)
{
	f->Flags = (bState) ? (f->Flags | FACE_VISIBLE) : (f->Flags & ~FACE_VISIBLE);
}

void	Face_SetSheet (Face *f, const geBoolean bState)
{
	f->Flags = (bState) ? (f->Flags | FACE_SHEET) : (f->Flags & ~FACE_SHEET);
}

void	Face_SetTransparent (Face *f, const geBoolean bState)
{
	f->Flags = (bState) ? (f->Flags | FACE_TRANSPARENT) : (f->Flags & ~FACE_TRANSPARENT);
}

void	Face_SetLightIntensity(Face *f, const int Value)
{
	assert (f != NULL);

	f->LightIntensity = Value;
}

void	Face_SetLightScale(Face *f, const geFloat xScale, const geFloat yScale)
{
	assert (f != NULL);

	f->LightXScale = xScale;
	f->LightYScale = yScale;
}

void	Face_SetTextureScale(Face *f, const geFloat xScale, const geFloat yScale)
{
	assert(f != NULL);

	f->Tex.xScale = xScale;
	f->Tex.yScale = yScale;

	f->Tex.DirtyFlag = GE_TRUE;
}

void	Face_SetTextureShift(Face *f, const int xShift, const int yShift)
{
	assert(f != NULL);

	f->Tex.xShift = xShift;
	f->Tex.yShift = yShift;
	f->Tex.DirtyFlag = GE_TRUE;
}

void	Face_SetTextureRotate(Face *f, const geFloat Rotate)
{
	assert(f != NULL);


	f->Tex.Rotate = Rotate;
	f->Tex.DirtyFlag = GE_TRUE;
}

void	Face_SetTextureDibId(Face *f, const int Dib)
{
	assert(f != NULL);

	f->Tex.Dib = Dib;
}

void	Face_SetTextureName(Face *f, const char *pName)
{
	assert(f != NULL);

	// copy the name (safely), and then nul-terminate
	strncpy (f->Tex.Name, pName, sizeof (f->Tex.Name));
	f->Tex.Name[sizeof (f->Tex.Name)-1] = '\0';
}

void Face_XfmTexture (Face *f, const geXForm3d *pXfm)
{
	assert (f != NULL);
	assert (pXfm != NULL);

	geXForm3d_Multiply (pXfm, &f->Tex.XfmFaceAngle, &f->Tex.XfmFaceAngle);
}

void	Face_SetTextureSize (Face *f, const int txSize, const int tySize)
{
	assert (f != NULL);

	f->Tex.txSize = txSize;
	f->Tex.tySize = tySize;
}

void	Face_SetMipMapBias (Face *f, const geFloat Bias)
{
	assert (f != NULL);

	f->MipMapBias = Bias;
}

void	Face_SetTranslucency (Face *f, const geFloat trans)
{
	assert (f != NULL);

	f->Translucency = trans;
}

void	Face_SetReflectivity (Face *f, const geFloat rscale)
{
	assert (f != NULL);

	f->Reflectivity = rscale;
}


void	Face_CopyTexInfo(const Face *src, Face *dst)
{
	assert(src);
	assert(dst);

	dst->Tex	=src->Tex;

	//make sure the texinfos plane and vecs are good
	Face_SetPlaneFromFace(dst);
}

//copies texinfo, flags, light, value
void	Face_CopyFaceInfo(const Face *src, Face *dst)
{
	assert(src);
	assert(dst);

	dst->Flags			=src->Flags;
	dst->LightIntensity	=src->LightIntensity;
	dst->MipMapBias		=src->MipMapBias;
	dst->Translucency	=src->Translucency;
	dst->Reflectivity	=src->Reflectivity;
	dst->Tex			=src->Tex;
	dst->LightXScale	=src->LightXScale;
	dst->LightYScale	=src->LightYScale;

	//make sure the texinfos plane and vecs are good
	Face_SetPlaneFromFace(dst);
}

void	Face_Rotate(Face *f, const geXForm3d *pXfmRotate, const geVec3d *pCenter)
{
	int	i;
	geVec3d	*pPoint;

	assert(f != NULL);
	assert(pXfmRotate != NULL);
	assert(pCenter != NULL);

	for(i=0;i < f->NumPoints;i++)
	{

		pPoint	=&f->Points[i];
		geVec3d_Subtract(pPoint, pCenter, pPoint);
		geXForm3d_Rotate(pXfmRotate, pPoint, pPoint);
		geVec3d_Add(pPoint, pCenter, pPoint);
	}
	Face_SetPlaneFromFace(f);
	Face_XfmTexture (f, pXfmRotate);
	pPoint	=&f->Tex.Pos;
	geVec3d_Subtract(pPoint, pCenter, pPoint);
	geXForm3d_Rotate(pXfmRotate, pPoint, pPoint);
	geVec3d_Add(pPoint, pCenter, pPoint);
	f->Tex.DirtyFlag = GE_TRUE;
}

void	Face_Move(Face *f, const geVec3d *trans)
{
	int i;

	assert(f);
	assert(trans);

	for(i=0;i < f->NumPoints;i++)
	{
		geVec3d_Add(&f->Points[i], trans, &f->Points[i]);
	}
	Face_SetPlaneFromFace(f);

	// Update position...
	geVec3d_Add (&f->Tex.Pos, trans, &f->Tex.Pos);
	f->Tex.DirtyFlag = GE_TRUE;
}

void	Face_Transform(Face *f, const geXForm3d *pXfm)
{
	int	i;

	assert(f != NULL);
	assert(pXfm != NULL);

	for(i=0;i < f->NumPoints;i++)
	{
		geXForm3d_Transform(pXfm, &f->Points[i], &f->Points[i]);
	}
	Face_SetPlaneFromFace(f);
	Face_XfmTexture (f, pXfm);
	f->Tex.DirtyFlag = GE_TRUE;
}

static void Face_UpdateFaceAngle (Face *f, const geVec3d *OldNormal)
/*
  Compute rotation matrix from OldNormal to current normal (f->Tex.VecNormal),
  and include that rotation in the XfmFaceAngle transform.
*/
{
	geVec3d VecDest;
	geVec3d VecAxis;
	geFloat cosv, Theta;
	geXForm3d Xfm;

	// Compute rotation from 
	VecDest = f->Tex.VecNormal;
	geVec3d_CrossProduct (&VecDest, OldNormal, &VecAxis);
	cosv = geVec3d_DotProduct (&VecDest, OldNormal);
	// Now here's an interesting twist.
	// Due to floating point inaccuracies, the dot product of two supposedly
	// normal vectors may result in a number larger than 1.0.
	// If that happens, it's supposed to be 1.0, so we'll force it.
	if (cosv > 1.0f) 
	{
		cosv = 1.0f;
	}
	Theta = (geFloat)acos (cosv);
	if (geVec3d_Normalize (&VecAxis) == 0.0f)
	{
		// If the resulting vector is 0 length, 
		// then a rotation about X will put us where we need to be.
		geXForm3d_SetIdentity (&Xfm);
		geXForm3d_RotateX (&Xfm, -Theta);
	}
	else
	{
		geQuaternion QRot;

		geQuaternion_SetFromAxisAngle (&QRot, &VecAxis, -Theta);
		geQuaternion_ToMatrix (&QRot, &Xfm);
	}
	// and include it in the face's rotation...
	Face_XfmTexture (f, &Xfm);
}

void	Face_Scale(Face *f, const geVec3d *ScaleVec)
{
	int i;

	assert(f);
	assert(ScaleVec);

	for(i=0;i < f->NumPoints;i++)
	{
		//no magnitude operation in vec3d
		f->Points[i].X	*=ScaleVec->X;
		f->Points[i].Y	*=ScaleVec->Y;
		f->Points[i].Z	*=ScaleVec->Z;
	}
	{
		geVec3d OldNormal = f->Tex.VecNormal;
		Face_SetPlaneFromFace(f);

		Face_UpdateFaceAngle (f, &OldNormal);
	}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
黑人精品欧美一区二区蜜桃| 日韩欧美激情一区| 婷婷国产v国产偷v亚洲高清| 国产午夜精品久久久久久久| 日韩欧美国产高清| 欧美一区二区观看视频| 91社区在线播放| 久久综合丝袜日本网| 91国偷自产一区二区开放时间 | 麻豆成人久久精品二区三区小说| 精品国产123| 欧美精品xxxxbbbb| 日韩美女视频一区二区在线观看| 青青草91视频| 国产精品国产三级国产aⅴ原创| 久久亚洲精精品中文字幕早川悠里| 日韩欧美激情在线| 精品sm捆绑视频| 精品99一区二区三区| 欧美mv日韩mv国产网站| 欧美激情一区二区三区在线| 国产精品欧美经典| 日本欧美一区二区三区乱码| 国产欧美一区二区精品性色超碰| 久久精品综合网| 国产精品亲子伦对白| 日韩美女啊v在线免费观看| 国产精品免费久久久久| 亚洲精品久久久久久国产精华液| 一区二区在线看| 精品午夜久久福利影院| 北条麻妃一区二区三区| 精品在线免费观看| 亚洲素人一区二区| 日韩制服丝袜先锋影音| 精品在线播放免费| av在线不卡免费看| 欧美巨大另类极品videosbest| 欧美精品v国产精品v日韩精品| 欧美va在线播放| 一区二区三区不卡视频在线观看| 麻豆精品国产91久久久久久| 色综合久久综合网97色综合 | 亚洲国产一区二区在线播放| 亚洲国产精品自拍| 国产一区二区视频在线| 色综合婷婷久久| 精品三级在线看| 亚洲一二三四区| av亚洲精华国产精华精华| 欧美高清性hdvideosex| 亚洲欧美影音先锋| 国产激情视频一区二区在线观看| 久久福利视频一区二区| 欧美性极品少妇| 精品99一区二区三区| 青青草成人在线观看| 欧洲av在线精品| 亚洲欧美另类在线| 成人免费高清视频在线观看| 欧美大片一区二区| 麻豆传媒一区二区三区| 欧美日韩国产a| 亚洲综合久久久| jizzjizzjizz欧美| 亚洲综合在线视频| 欧美绝品在线观看成人午夜影视| 性久久久久久久久久久久| 精品一区二区综合| 99久久久国产精品免费蜜臀| 国产偷国产偷亚洲高清人白洁| 成人免费视频一区| 日韩美女啊v在线免费观看| 在线观看视频91| 热久久一区二区| 国产精品全国免费观看高清| 有码一区二区三区| 中文字幕在线一区免费| 国产伦精品一区二区三区免费| 久久精品一区二区三区av| 韩国v欧美v亚洲v日本v| 国产精品超碰97尤物18| 日本道免费精品一区二区三区| 亚洲欧美另类久久久精品| 欧美日韩精品系列| 国产精品一区久久久久| 久久一夜天堂av一区二区三区| 国产麻豆精品95视频| 在线观看亚洲成人| 日韩黄色免费网站| 国产欧美日韩综合精品一区二区| 色婷婷久久综合| 国产伦精品一区二区三区视频青涩 | 国产精品国产成人国产三级| 亚洲国产日韩精品| 洋洋av久久久久久久一区| 日本久久电影网| 国产一区二区成人久久免费影院 | 欧美日韩国产首页在线观看| 久久99国内精品| 一区二区激情小说| 久久青草国产手机看片福利盒子| 91色porny| 9色porny自拍视频一区二区| 欧美一区二区三区白人| 久久先锋资源网| 亚洲国产精品尤物yw在线观看| 精品免费日韩av| 日韩一卡二卡三卡国产欧美| 91麻豆国产自产在线观看| 国产精品综合视频| 久久综合综合久久综合| 午夜在线成人av| 亚洲日本中文字幕区| 国产精品欧美一区喷水| 色8久久人人97超碰香蕉987| 欧美va日韩va| 一区二区三区.www| 日韩一本二本av| 欧美高清www午色夜在线视频| 欧美视频中文字幕| 欧美亚洲综合在线| 欧美艳星brazzers| 欧美性大战久久久久久久蜜臀| 精品视频一区二区三区免费| 欧美亚洲国产一区二区三区| 欧美老女人第四色| 日韩欧美国产综合在线一区二区三区| 日韩精品一区二区三区视频| 国产女人aaa级久久久级| 欧美性大战久久| 国产一区二区美女| 午夜精品福利一区二区三区av| 亚洲一区二区三区爽爽爽爽爽| 亚洲一区二区美女| 视频一区国产视频| 免费三级欧美电影| 成人激情免费视频| 欧美日韩高清影院| 久久这里只有精品6| 亚洲午夜在线电影| 国产福利精品一区二区| 欧美男生操女生| 久99久精品视频免费观看| 26uuu国产日韩综合| 国产精品传媒视频| 久久精品国产久精国产| 91久久精品日日躁夜夜躁欧美| 精品区一区二区| 亚洲一区二区不卡免费| 成人手机电影网| 精品久久久三级丝袜| 亚洲成在线观看| 91片黄在线观看| 国产乱码精品一区二区三| 视频一区二区欧美| 日本不卡在线视频| 色呦呦国产精品| 中文字幕一区二区三区视频| 精品一区二区三区不卡| 欧美日韩成人一区| 国产网站一区二区三区| 毛片基地黄久久久久久天堂| 久久精品国内一区二区三区| 欧美福利电影网| 国产一区二区三区四| 亚洲一区二区在线免费看| 久久精品国产一区二区三| 欧美日韩亚洲综合一区| 日韩欧美一级二级三级| 一区二区三区不卡视频在线观看| 紧缚捆绑精品一区二区| 日韩亚洲欧美成人一区| 另类中文字幕网| 精品日韩一区二区三区 | 日本一区二区成人在线| 91在线免费看| 捆绑调教一区二区三区| 日本一区二区三区国色天香| 色婷婷精品久久二区二区蜜臂av| 天天影视网天天综合色在线播放| 26uuu亚洲综合色| 91农村精品一区二区在线| 麻豆91在线观看| 一区二区三区在线免费播放| 久久综合九色综合欧美98| 在线一区二区三区四区五区| 九九九精品视频| 亚洲电影视频在线| 综合av第一页| 欧美国产精品中文字幕| 91精品国产91热久久久做人人| av在线播放成人| 国产精品99久久久久久有的能看| 午夜影视日本亚洲欧洲精品| 亚洲婷婷国产精品电影人久久| 亚洲精品在线电影| 日韩精品专区在线影院观看| 欧美中文字幕一区二区三区亚洲| 99久久精品久久久久久清纯|