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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? face.cpp

?? 3D游戲場景編輯器
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/****************************************************************************************/
/*  face.c                                                                              */
/*                                                                                      */
/*  Author:       Jim Mischel, Ken Baird                                                */
/*  Description:  Face csg, management, io, etc...                                      */
/*                                                                                      */
/*  The contents of this file are subject to the Genesis3D Public License               */
/*  Version 1.01 (the "License"); you may not use this file except in                   */
/*  compliance with the License. You may obtain a copy of the License at                */
/*  http://www.genesis3d.com                                                            */
/*                                                                                      */
/*  Software distributed under the License is distributed on an "AS IS"                 */
/*  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See                */
/*  the License for the specific language governing rights and limitations              */
/*  under the License.                                                                  */
/*                                                                                      */
/*  The Original Code is Genesis3D, released March 25, 1999.                            */
/*Genesis3D Version 1.1 released November 15, 1999                            */
/*  Copyright (C) 1999 WildTangent, Inc. All Rights Reserved           */
/*                                                                                      */
/*  Prepared for GenEdit-Classic ver. 0.5, Dec. 15, 2000								*/
/****************************************************************************************/
#include "stdafx.h"
#include "face.h"
#include <assert.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include "basetype.h"
#include "units.h"
#include "box3d.h"
#include "typeio.h"
//#include "consoletab.h"

#include "ram.h"
#include "quatern.h"
#include "util.h"

#include "Globals.h"
const geVec3d	VecOrigin	={ 0.0f, 0.0f, 0.0f };

//temp buffers for splitting faces
//use caution in recursive code that uses these...
static	geVec3d		spf[256], spb[256];

#define	VCOMPARE_EPSILON			(0.001f)
#define MAX_POINTS					64
#define	ON_EPSILON					(0.1f)
#define	VectorToSUB(a, b)			(*((((geFloat *)(&a))) + (b)))
#define FACE_DEFAULT_LIGHT			300
#define FACE_DEFAULT_BIAS			(1.0f)
#define FACE_DEFAULT_TRANSLUCENCY	(255.0f)
#define FACE_DEFAULT_REFLECTIVITY	(1.0f)

enum FaceFlags
{
	FACE_MIRROR		= (1<<0),
	FACE_FULLBRIGHT	= (1<<1),
	FACE_SKY		= (1<<2),
	FACE_LIGHT		= (1<<3),
	FACE_SELECTED	= (1<<4),
	FACE_FIXEDHULL	= (1<<5),		//doesn't expand (rings)
	FACE_GOURAUD	= (1<<6),
	FACE_FLAT		= (1<<7),
	FACE_TEXTURELOCKED = (1<<8),
	FACE_VISIBLE	= (1<<9),
	FACE_SHEET		= (1<<10),		//visible from both sides
	FACE_TRANSPARENT= (1<<11)		//use transparency value for something
};

enum OldFaceFlags
{
	oldINSOLID		=1,
	oldSELECTED		=2,
	oldLIGHT		=4,
	oldMIRROR		=8,
	oldFULLBRIGHT	=16,
	oldSKY			=32
};

enum SideFlags
{
	SIDE_FRONT	=0,
	SIDE_BACK	=1,
	SIDE_ON		=2
};

typedef struct TexInfoTag
{
	geVec3d VecNormal;
	geFloat xScale, yScale;
	int xShift, yShift;
	geFloat	Rotate;			// texture rotation angle in degrees
	TexInfo_Vectors TVecs;
	int Dib;				// index into the wad
	char Name[16];
	geBoolean DirtyFlag;
	geVec3d Pos;
	int txSize, tySize;		// texture size (not currently used)
	geXForm3d XfmFaceAngle;	// face rotation angle
} TexInfo;

typedef struct FaceTag
{
	int			NumPoints;
	int			Flags;
	Plane		Face_Plane;
	int			LightIntensity;
	geFloat		Reflectivity;
	geFloat		Translucency;
	geFloat		MipMapBias;
	geFloat		LightXScale, LightYScale;
	TexInfo		Tex;
	geVec3d		*Points;
} Face;

enum NewFaceFlags
{
	ffMirror		= (1<<0),	// face is a mirror
	ffFullBright	= (1<<1),	// give face full brightness
	ffSky			= (1<<2),	// face is sky
	ffLight			= (1<<3),	// face emits light
	ffTranslucent	= (1<<4),	// internal to tools
	ffGouraud		= (1<<5),	// shading
	ffFlat			= (1<<6)
};

static void Face_SetTexInfoPlane
	(
	  TexInfo *t,
	  geVec3d const *pNormal
	)
{
	assert (t != NULL);
	assert (pNormal != NULL);
	assert (geVec3d_IsNormalized (pNormal));

	t->VecNormal = *pNormal;

	t->DirtyFlag = GE_TRUE;
}

static void Face_InitFaceAngle
	(
	  TexInfo *t,
	  geVec3d const *pNormal
	)
{
	geVec3d VecDest;
	geVec3d VecAxis;
	geFloat cosv, Theta;
	geVec3d		PosNormal;

	PosNormal = *pNormal;

	if (fabs(pNormal->X) > fabs(pNormal->Y))
	{
		if (fabs(pNormal->X) > fabs(pNormal->Z))
		{
			if (pNormal->X > 0)
				geVec3d_Inverse(&PosNormal);
		}
		else
		{
			if (pNormal->Z > 0)
				geVec3d_Inverse(&PosNormal);
		}

	}
	else 
	{
		if (fabs(pNormal->Y) > fabs(pNormal->Z))
		{
			if (pNormal->Y > 0)
				geVec3d_Inverse(&PosNormal);
		}
		else
		{
			if (pNormal->Z > 0)
				geVec3d_Inverse(&PosNormal);
		}
	}
	
	// Create rotation matrix that will put this face into the X,Y plane.
	geVec3d_Set (&VecDest, 0.0f, 0.0f, 1.0f);
	geVec3d_CrossProduct (&VecDest, &PosNormal, &VecAxis);
	cosv = geVec3d_DotProduct (&VecDest, &PosNormal);
	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 (&t->XfmFaceAngle);
		geXForm3d_RotateX (&t->XfmFaceAngle, -Theta);	//	old gedit
//		geXForm3d_RotateX (&t->XfmFaceAngle, Theta);	//	new g3dc
	}
	else
	{
		geQuaternion QRot;

		geQuaternion_SetFromAxisAngle (&QRot, &VecAxis, -Theta);	// old gedit
//		geQuaternion_SetFromAxisAngle (&QRot, &VecAxis, Theta);	// new g3dc
		geQuaternion_ToMatrix (&QRot, &t->XfmFaceAngle);
	}
}

static void Face_InitTexInfo
	(
	  TexInfo *t,
	  geVec3d const *pNormal
	)
{
	assert (t != NULL);
	assert (pNormal != NULL);

	t->Name[0] = '\0';
	t->xScale = 1.0f;
	t->yScale = 1.0f;
	t->xShift = 0;
	t->yShift = 0;
	t->Rotate = 0.0f;
	t->Dib = 0;
	t->DirtyFlag = GE_FALSE;
	t->txSize = 0;
	t->tySize = 0;
	geVec3d_Clear (&t->Pos);
	Face_SetTexInfoPlane (t, pNormal);
	Face_InitFaceAngle( t, pNormal );
}

static geBoolean	Face_SetPlaneFromFace(Face *f)
{
	int		i;
	geVec3d	v1, v2;

	assert(f != NULL);

	//catches colinear points now
	for(i=0;i < f->NumPoints;i++)
	{
		//gen a plane normal from the cross of edge vectors
		geVec3d_Subtract(&f->Points[i], &f->Points[(i+1) % f->NumPoints], &v1);
		geVec3d_Subtract(&f->Points[(i+2) % f->NumPoints], &f->Points[(i+1) % f->NumPoints], &v2);

		geVec3d_CrossProduct(&v1, &v2, &f->Face_Plane.Normal);
		if(!geVec3d_Compare(&f->Face_Plane.Normal, &VecOrigin, VCOMPARE_EPSILON))
		{
			break;
		}
		//try the next three if there are three
	}
	if(i >= f->NumPoints)
	{
//		ConPrintf("Face with no normal!\n");	//	old gedit
		CGlobals::GetActiveDocument()->mpMainFrame->ConPrintf("Face with no normal!\n");	//	new g3dc
		return	GE_FALSE;
	}
	geVec3d_Normalize(&f->Face_Plane.Normal);
	f->Face_Plane.Dist	=geVec3d_DotProduct(&f->Points[1], &f->Face_Plane.Normal);

	Face_SetTexInfoPlane(&f->Tex, &f->Face_Plane.Normal);
	return	GE_TRUE;
}

static void Face_SetTexturePos (Face *f)
{
//	Face_GetCenter (f, &f->Tex.Pos);
	geVec3d_Clear (&f->Tex.Pos);
	f->Tex.DirtyFlag = GE_TRUE;
}


Face	*Face_Create(int NumPnts, const geVec3d *pnts, int DibId)
{
	Face	*f;

	assert(NumPnts > 0);
	assert(NumPnts < MAX_POINTS);
	assert(pnts != NULL);

	f	=(Face*)geRam_Allocate(sizeof(Face));
	if(f)
	{
		memset(f, 0, sizeof(Face));

		f->NumPoints=NumPnts;
		f->LightIntensity = FACE_DEFAULT_LIGHT;
		f->MipMapBias = FACE_DEFAULT_BIAS;
		f->Translucency = FACE_DEFAULT_TRANSLUCENCY;
		f->Reflectivity = FACE_DEFAULT_REFLECTIVITY;
		f->LightXScale = 1.0f;
		f->LightYScale = 1.0f;

		Face_SetVisible(f, GE_TRUE);

		f->Points	= (geVec3d*)geRam_Allocate(sizeof(geVec3d) * NumPnts);
		if(f->Points)
		{
			memcpy(f->Points, pnts, sizeof(geVec3d) * NumPnts);

			if(Face_SetPlaneFromFace(f))
			{
				Face_InitTexInfo(&f->Tex, &f->Face_Plane.Normal);
				Face_SetTextureDibId (f, DibId);
				Face_SetTexturePos (f);
			}
			else
			{
				geRam_Free (f->Points);
				geRam_Free (f);
				f	=NULL;
			}
		}
		else
		{
			geRam_Free (f);
			f	=NULL;
		}
	}
	return	f;
}

//builds a large face based on p
Face	*Face_CreateFromPlane(const Plane *p, geFloat Radius, int DibId)
{
	geFloat	v;
	geVec3d	vup, vright, org, pnts[4];
	
	assert(p != NULL);

	//find the major axis of p->Normal
	geVec3d_Set (&vup, 0.0f, 0.0f, 1.0f);
	if((fabs(p->Normal.Z) > fabs(p->Normal.X))
		&&(fabs(p->Normal.Z) > fabs(p->Normal.Y)))
	{
	    geVec3d_Set(&vup, 1.0f, 0.0f, 0.0f);
	}

	v	=geVec3d_DotProduct(&vup, &p->Normal);
	geVec3d_AddScaled (&vup, &p->Normal, -v, &vup);
	geVec3d_Normalize(&vup);
		
	geVec3d_AddScaled (&VecOrigin, &p->Normal, p->Dist, &org);
	geVec3d_CrossProduct(&vup, &p->Normal, &vright);

	geVec3d_Scale(&vup, Radius, &vup);
	geVec3d_Scale(&vright, Radius, &vright);

	geVec3d_Subtract(&org, &vright, &pnts[0]);
	geVec3d_Add(&pnts[0], &vup, &pnts[0]);

	geVec3d_Add(&org, &vright, &pnts[1]);
	geVec3d_Add(&pnts[1], &vup, &pnts[1]);

	geVec3d_Add(&org, &vright, &pnts[2]);
	geVec3d_Subtract(&pnts[2], &vup, &pnts[2]);

	geVec3d_Subtract(&org, &vright, &pnts[3]);
	geVec3d_Subtract(&pnts[3], &vup, &pnts[3]);

	return	Face_Create(4, pnts, DibId);
}

void	Face_Destroy(Face **f)
{
	assert(f != NULL);
	assert(*f != NULL);

	if((*f)->Points)
	{
		geRam_Free ((*f)->Points);
	}

	geRam_Free (*f);
	*f	=NULL;
}

Face	*Face_Clone(const Face *src)
{
	Face	*dst;

	assert(src != NULL);
	assert(src->NumPoints > 0);
	assert(src->Points != NULL);

	dst	=Face_Create(src->NumPoints, src->Points, Face_GetTextureDibId (src));
	if(dst)
	{
		Face_CopyFaceInfo(src, dst);
	}
	return	dst;
}

Face	*Face_CloneReverse(const Face *src)
{
	int		i;
	Face	*dst;
	geVec3d	pt;

	assert(src != NULL);
	assert(src->NumPoints >0);
	assert(src->Points != NULL);

	dst	=Face_Clone(src);
	if(dst)
	{
		dst->Face_Plane.Dist=-dst->Face_Plane.Dist;
		geVec3d_Inverse(&dst->Face_Plane.Normal);

		for(i=0;i < dst->NumPoints/2;i++)
		{
			pt								=dst->Points[i];
			dst->Points[i]					=dst->Points[dst->NumPoints-i-1];
			dst->Points[dst->NumPoints-i-1] =pt;
		}
		Face_SetPlaneFromFace(dst);
	}
	return dst;
}

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

	return	f->NumPoints;
}

const Plane	*Face_GetPlane(const Face *f)
{
	assert(f != NULL);

	return	&f->Face_Plane;
}

const geVec3d	*Face_GetPoints(const Face *f)
{
	assert(f != NULL);

	return	f->Points;
}

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

	return f->LightIntensity;
}

void Face_GetLightScale(const Face *f, geFloat *pxScale, geFloat *pyScale)
{
	assert(f != NULL);
	assert(pxScale != NULL);
	assert(pyScale != NULL);

	*pxScale = f->LightXScale;
	*pyScale = f->LightYScale;
}


void	Face_GetTextureScale(const Face *f, geFloat *pxScale, geFloat *pyScale)
{
	assert(f != NULL);
	assert(pxScale != NULL);
	assert(pyScale != NULL);

	*pxScale = f->Tex.xScale;
	*pyScale = f->Tex.yScale;
}

void	Face_GetTextureShift(const Face *f, int *pxShift, int *pyShift)
{
	assert(f != NULL);
	assert(pxShift != NULL);
	assert(pyShift != NULL);

	*pxShift = f->Tex.xShift;
	*pyShift = f->Tex.yShift;
}

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

	return	f->Tex.Rotate;
}


static void Face_UpdateLockedTextureVecs
	(
	  Face *f
	)
{
	geXForm3d XfmTexture;
	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;

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

	// Compute rotation
	geVec3d_Clear (&t->XfmFaceAngle.Translation);
//	g3dc tuning comment:	the old gedit line was causing texlocked faces to rotate
//							in the OPPOSITE direction... I'm not sure why.
//	geXForm3d_SetZRotation (&XfmTexture, Units_DegreesToRadians (-t->Rotate));	//	old gedit
//	geXForm3d_SetZRotation (&XfmTexture, Units_DegreesToRadians (t->Rotate));	//	new g3dc

	// new g3dc 
	//	This code implemented in order to increase the consistency of texture
	//	orientation when toggling a face between Locked and unlocked texture
	//	mode.The below code works best for cubes positined square along world
	//	xyz axes. But it fails when cubes are oriented otherwise. Also, more
	//	complex geomentric shapes receive almost no benefit from this code...

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

	switch (WhichAxis)
	{
		case 0:			//	sides
			geXForm3d_SetZRotation (&XfmTexture, Units_DegreesToRadians (t->Rotate));	//	new g3dc
			geXForm3d_Multiply (&t->XfmFaceAngle, &XfmTexture, &XfmTexture);	//	old gedit
			geVec3d_Set (&t->TVecs.uVec, XfmTexture.AX, -XfmTexture.BX, -XfmTexture.CX); // old gedit
			geVec3d_Set (&t->TVecs.vVec, XfmTexture.AY, -XfmTexture.BY, -XfmTexture.CY);	// old gedit

			break;
		case 1:			//	top / bottom
			geXForm3d_SetZRotation (&XfmTexture, Units_DegreesToRadians (-t->Rotate));	//	new g3dc
			geXForm3d_Multiply (&t->XfmFaceAngle, &XfmTexture, &XfmTexture);	//	old gedit
			geVec3d_Set (&t->TVecs.uVec, XfmTexture.AX, -XfmTexture.BX, -XfmTexture.CX); // old gedit
			geVec3d_Set (&t->TVecs.vVec, XfmTexture.AY, -XfmTexture.BY, -XfmTexture.CY);	// old gedit

			break;
		case 2:			// front / back
			geXForm3d_SetZRotation (&XfmTexture, Units_DegreesToRadians (t->Rotate));	//	new g3dc
			geXForm3d_Multiply (&t->XfmFaceAngle, &XfmTexture, &XfmTexture);	//	old gedit
			geVec3d_Set (&t->TVecs.uVec, XfmTexture.AX, XfmTexture.BX, XfmTexture.CX); // old gedit
			geVec3d_Set (&t->TVecs.vVec, XfmTexture.AY, XfmTexture.BY, XfmTexture.CY);	// old gedit

			break;
	}
	
	
//	geXForm3d_Multiply (&t->XfmFaceAngle, &XfmTexture, &XfmTexture);	//	old gedit
	// get info from transform into texture vectors.
//	geVec3d_Set (&t->TVecs.uVec, XfmTexture.AX, XfmTexture.BX, XfmTexture.CX); // old gedit
//	geVec3d_Set (&t->TVecs.vVec, XfmTexture.AY, XfmTexture.BY, XfmTexture.CY);	// old gedit

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

	// compute offsets...
	{
		geFloat uOffset, vOffset;

		uOffset = geVec3d_DotProduct (&t->TVecs.uVec, &f->Tex.Pos);
		vOffset = geVec3d_DotProduct (&t->TVecs.vVec, &f->Tex.Pos);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产91精品精华液一区二区三区| 亚洲女人的天堂| 国产一区在线观看视频| 国产欧美日韩另类一区| 成人一区二区视频| 亚洲三级在线观看| 精品久久五月天| av电影在线观看一区| 婷婷综合另类小说色区| 久久亚洲综合色| 91久久一区二区| 日本中文字幕一区二区视频 | 91福利小视频| 国产乱码精品一区二区三区av | 婷婷久久综合九色国产成人 | 亚洲人亚洲人成电影网站色| 欧美二区在线观看| 欧美制服丝袜第一页| 99久精品国产| 成人免费av在线| 久久97超碰色| 久久精品999| 五月激情综合网| 中文字幕一区二区5566日韩| 久久综合久久综合久久| 欧美一级在线观看| 日韩欧美国产系列| 久久美女高清视频| 国产日韩欧美制服另类| 国产精品久久久久久久第一福利| 欧美不卡一区二区三区| 制服丝袜亚洲色图| 欧美久久久影院| 欧美精品一区二区蜜臀亚洲| 精品国产乱码久久| 亚洲自拍偷拍综合| 亚洲va欧美va人人爽| 天堂在线亚洲视频| 亚洲人成亚洲人成在线观看图片| 国产精品久久久久久久久免费相片 | 欧美日韩一卡二卡三卡| 欧美成人性战久久| 亚洲视频你懂的| 精品一区二区三区免费视频| 99久久国产综合精品麻豆| 精品国产伦一区二区三区观看方式| 国产精品麻豆欧美日韩ww| 午夜精品一区在线观看| 国产精品一二一区| 欧美艳星brazzers| 国产精品网友自拍| 日韩电影在线免费看| 在线视频国产一区| 中文字幕精品在线不卡| 久久国产精品第一页| 欧美在线观看禁18| 亚洲久草在线视频| av影院午夜一区| 精品久久久久久最新网址| 国产精品初高中害羞小美女文| 日韩高清在线观看| 欧美日韩一区 二区 三区 久久精品| 亚洲国产高清在线观看视频| 麻豆成人免费电影| 日韩视频在线永久播放| 青青草97国产精品免费观看无弹窗版| 99九九99九九九视频精品| 国产免费成人在线视频| 成人亚洲精品久久久久软件| 久久久精品影视| av日韩在线网站| 奇米精品一区二区三区在线观看一| 日本高清免费不卡视频| 亚洲一区二区三区影院| 欧美日韩黄视频| 蜜桃久久精品一区二区| 精品久久久久久最新网址| 国产大片一区二区| 亚洲欧美偷拍另类a∨色屁股| 成人av在线电影| 国产一区欧美日韩| 欧美肥妇free| 激情欧美日韩一区二区| 国产三级精品在线| 日本韩国欧美国产| 国产一区三区三区| 亚洲精品你懂的| 欧美一区在线视频| 东方aⅴ免费观看久久av| 亚洲综合色在线| 日本一区二区三区dvd视频在线| 在线欧美一区二区| 国产大陆a不卡| 亚洲欧美日韩在线播放| 亚洲第四色夜色| 欧美经典三级视频一区二区三区| 欧美三级三级三级爽爽爽| 国产伦精品一区二区三区免费迷| 国产精品第13页| 日韩欧美中文一区| 欧美少妇一区二区| 欧美最猛黑人xxxxx猛交| 成人精品国产福利| 国产一区二区女| 精品在线免费视频| 日韩不卡一区二区| 日韩福利视频导航| 亚洲1区2区3区视频| 一区二区三区91| 欧美日韩一区二区三区免费看| 99久久精品国产毛片| 色狠狠一区二区三区香蕉| 色婷婷综合在线| 色94色欧美sute亚洲13| 91久久精品日日躁夜夜躁欧美| 色综合天天综合给合国产| 99久久免费国产| 在线亚洲人成电影网站色www| 日本高清无吗v一区| 日韩视频免费直播| ...xxx性欧美| 久久精品国产77777蜜臀| 日韩一区二区在线播放| 欧美美女网站色| 91精品久久久久久蜜臀| 成人av网址在线观看| 成人h动漫精品| 成人激情动漫在线观看| 一区二区在线看| 色综合天天狠狠| 国产精品剧情在线亚洲| 欧美日韩中文字幕一区二区| 经典三级视频一区| 精品一区二区影视| 国产视频不卡一区| 午夜私人影院久久久久| 成人性视频免费网站| 日韩精品一区二区三区在线播放| 国产日韩欧美一区二区三区综合| 亚洲一区二区三区影院| 成人av在线资源| 欧美激情中文字幕一区二区| 日本不卡一二三区黄网| 欧美性大战xxxxx久久久| 久久久精品人体av艺术| 国产一区免费电影| 精品国产1区二区| 免费成人结看片| 日韩一区二区免费高清| 日韩有码一区二区三区| 国产suv精品一区二区883| 精品捆绑美女sm三区| 麻豆精品视频在线观看免费| 欧美日韩大陆一区二区| 亚洲成a人在线观看| 欧美午夜电影网| 免费欧美高清视频| 精品国产乱码久久久久久1区2区| 精品亚洲国内自在自线福利| 久久综合久久99| 色8久久人人97超碰香蕉987| 26uuu欧美日本| 国产一区欧美日韩| 国产精品国产三级国产aⅴ中文 | 国产一区二区免费看| 国产精品网站一区| 91国产成人在线| 欧美国产精品一区二区三区| 日本成人在线看| 国产精品国产三级国产三级人妇| 欧洲一区二区三区免费视频| 日韩电影免费在线看| 久久久久99精品国产片| 91看片淫黄大片一级| 激情五月婷婷综合网| 亚洲欧美国产高清| 久久久久99精品一区| 日韩一区二区三区在线视频| 国产麻豆欧美日韩一区| 国产欧美综合在线| 欧美一级精品大片| 国产又黄又大久久| 老色鬼精品视频在线观看播放| 日韩美女精品在线| 亚洲欧洲av另类| 欧美激情在线免费观看| 久久综合色婷婷| 精品国产青草久久久久福利| 欧美一区二区美女| 欧美精品粉嫩高潮一区二区| 91色九色蝌蚪| 色香蕉成人二区免费| 91黄色小视频| 久久www免费人成看片高清| 久久蜜臀精品av| 奇米精品一区二区三区在线观看一 | 美国一区二区三区在线播放| 亚洲国产日日夜夜| 亚洲日本va午夜在线电影| 久久毛片高清国产|