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

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

?? landscape.cpp

?? 是3D游戲一書中所講的游戲引擎fly3D 包括fly3D引擎的源碼及應用此引擎開發出來的游戲實例 有fly3D引擎的教程,易于step by step跟學
?? CPP
字號:
#include "landscape.h"

ClassDesc* GetlandscapeDesc();

HINSTANCE hInstance;
int controlsInit = FALSE;

BOOL WINAPI DllMain(HINSTANCE hinstDLL,ULONG fdwReason,LPVOID lpvReserved)
{
	hInstance = hinstDLL;				// Hang on to this DLL's instance handle.

	if (!controlsInit) {
		controlsInit = TRUE;
		InitCustomControls(hInstance);	// Initialize MAX's custom controls
		InitCommonControls();			// Initialize Win95 controls
	}
			
	return (TRUE);
}

__declspec( dllexport ) const TCHAR* LibDescription()
{
	return GetString(IDS_LIBDESCRIPTION);
}

//TODO: Must change this number when adding a new class
__declspec( dllexport ) int LibNumberClasses()
{
	return 1;
}

__declspec( dllexport ) ClassDesc* LibClassDesc(int i)
{
	switch(i) {
		case 0: return GetlandscapeDesc();
		default: return 0;
	}
}

__declspec( dllexport ) ULONG LibVersion()
{
	return VERSION_3DSMAX;
}

TCHAR *GetString(int id)
{
	static TCHAR buf[256];
	if (hInstance)
		return LoadString(hInstance, id, buf, sizeof(buf)) ? buf : NULL;
	return NULL;
}

class landscapeClassDesc:public ClassDesc {
	public:
	int 			IsPublic() {return 1;}
	void *			Create(BOOL loading = FALSE) {return new landscape();}
	const TCHAR *	ClassName() {return GetString(IDS_CLASS_NAME);}
	SClass_ID		SuperClassID() {return GEOMOBJECT_CLASS_ID;}
	Class_ID		ClassID() {return LANDSCAPE_CLASS_ID;}
	const TCHAR* 	Category() {return GetString(IDS_CATEGORY);}
	void			ResetClassParams (BOOL fileReset);
};

static landscapeClassDesc landscapeDesc;
ClassDesc* GetlandscapeDesc() {return &landscapeDesc;}

void landscapeClassDesc::ResetClassParams (BOOL fileReset) 
{
}

//TODO: Add Parameter block indices for various parameters
#define PB_SIZE				0
#define PB_SEGX				1
#define PB_SEGY				2
#define PB_DISPLACEVALUE	3
#define PB_MAPCOORD			4
#define PB_MAPCOORDTILE		5
#define PB_COLORZGRAD		6

//TODO: Add ParamUIDesc's for the various parameters
static ParamUIDesc descParam[] = {
	ParamUIDesc(
		PB_SIZE,
		EDITTYPE_FLOAT,
		IDC_SIZE0,IDC_SIZE0SPIN,
		1.0f,100000.0f,
		1.0f),	
	ParamUIDesc(
		PB_SEGX,
		EDITTYPE_INT,
		IDC_SEGX,IDC_SEGXSPIN,
		1,100000,
		1),	
	ParamUIDesc(
		PB_SEGY,
		EDITTYPE_INT,
		IDC_SEGY,IDC_SEGYSPIN,
		1,100000,
		1),	
	ParamUIDesc(
		PB_DISPLACEVALUE,
		EDITTYPE_FLOAT,
		IDC_DISPLACEVALUE,IDC_DISPLACEVALUESPIN,
		1.0f,10000.0f,
		1.0f),	
	ParamUIDesc(
		PB_MAPCOORD,
		TYPE_SINGLECHEKBOX,
		IDC_MAPCOORD),	
	ParamUIDesc(
		PB_MAPCOORDTILE,
		EDITTYPE_FLOAT,
		IDC_MAPPINGTILE,IDC_MAPPINGTILESPIN,
		1.0f,100.0f,
		1.0f),	
	ParamUIDesc(
		PB_COLORZGRAD,
		TYPE_SINGLECHEKBOX,
		IDC_COLORZGRAD),	
	}; 	

//TODO: Parameter descriptor length
#define PARAMDESC_LENGTH 7

//TODO: Add ParamBlockDescID's for the various parameters
static ParamBlockDescID descVer1[] = {
	{ TYPE_FLOAT, NULL, TRUE, 0 },
	{ TYPE_INT, NULL, TRUE, 0 },
	{ TYPE_INT, NULL, TRUE, 0 },
	{ TYPE_FLOAT, NULL, TRUE, 0 },
	{ TYPE_BOOL, NULL, TRUE, 0 },
	{ TYPE_FLOAT, NULL, TRUE, 0 },
	{ TYPE_BOOL, NULL, TRUE, 0 },
	};

#define CURRENT_DESCRIPTOR descVer1

#define PBLOCK_LENGTH	7

#define CURRENT_VERSION	1

IObjParam *landscape::ip			= NULL;
IParamMap *landscape::pmapParam	= NULL;

//--- landscape -------------------------------------------------------

landscape::landscape()
{
	strcpy(displacename,"None");
	strcpy(colorname,"None");

	displacebmp=0;
	colorbmp=0;

	pblock = CreateParameterBlock(
				CURRENT_DESCRIPTOR, 
				PBLOCK_LENGTH, 
				CURRENT_VERSION);
	assert(pblock);
	MakeRefByID(FOREVER, 0, pblock);
	
	pblock->SetValue(PB_SIZE,0, 0.0f);
	pblock->SetValue(PB_SEGX,0, 16);
	pblock->SetValue(PB_SEGY,0, 16);
	pblock->SetValue(PB_DISPLACEVALUE,0, 10.0f);
	pblock->SetValue(PB_MAPCOORD,0, 0);
	pblock->SetValue(PB_MAPCOORDTILE,0, 4.0f);
	pblock->SetValue(PB_COLORZGRAD,0, 0);
}

landscape::~landscape()
{
	if (displacebmp)
		displacebmp->DeleteThis();
	if (colorbmp)
		colorbmp->DeleteThis();
	displacebmp=0;
	colorbmp=0;
	displacename[0]=0;
	colorname[0]=0;
}

#define DISPLACE_IMAGE_CHUNK 9110
#define COLOR_IMAGE_CHUNK  9120

IOResult landscape::Load(ILoad *iload)
{
	ULONG nb;
	IOResult res;
	while (IO_OK==(res=iload->OpenChunk())) 
	{
		switch(iload->CurChunkID())  
		{
			case DISPLACE_IMAGE_CHUNK:
				res=iload->Read(displacename, iload->CurChunkLength(), &nb);
				break;
			case COLOR_IMAGE_CHUNK:
				res=iload->Read(colorname, iload->CurChunkLength(), &nb);
				break;
		}
		iload->CloseChunk();
		if (res!=IO_OK)
			return res;
	}
	if (displacename[0])
	{
		BitmapInfo bi(displacename);
		BMMRES status;
		displacebmp=TheManager->Load(&bi,&status);
		if (status!=BMMRES_SUCCESS)
			displacename[0]=0;
	}
	if (colorname[0])
	{
		BitmapInfo bi(colorname);
		BMMRES status;
		colorbmp=TheManager->Load(&bi,&status);
		if (status!=BMMRES_SUCCESS)
			colorname[0]=0;
	}
	return IO_OK;
}

IOResult landscape::Save(ISave *isave)
{
	ULONG nb;
	
	isave->BeginChunk(DISPLACE_IMAGE_CHUNK);
	isave->Write(displacename, strlen(displacename)+1, &nb);
	isave->EndChunk();

	isave->BeginChunk(COLOR_IMAGE_CHUNK);
	isave->Write(colorname, strlen(colorname)+1, &nb);
	isave->EndChunk();

	return IO_OK;
}

class landscapeDlgProc : public ParamMapUserDlgProc {
	public:
		landscape *ls;
		BOOL DlgProc(TimeValue t,IParamMap *map,HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam);
		void DeleteThis() {}
	};

static landscapeDlgProc landscapeProc;

BOOL landscapeDlgProc::DlgProc(
		TimeValue t,IParamMap *map,
		HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
	switch(msg)
	{
	case WM_COMMAND:
		if (wParam==IDC_DISPLACEIMAGEBUT)
		{
			BitmapInfo bi;
			if (ls->displacebmp)
				ls->displacebmp->DeleteThis();
			ls->displacebmp=0;
			strcpy(ls->displacename,"None");
			if (TheManager->SelectFileInput(&bi,hWnd,"Select displace image"))
				{
				BMMRES status;
				ls->displacebmp=TheManager->Load(&bi,&status);
				if (status==BMMRES_SUCCESS)
					strcpy(ls->displacename,bi.Filename());
				}
			SetDlgItemText(hWnd,IDC_DISPLACEIMAGEBUT,ls->displacename);
			float size;
			ls->pblock->GetValue(PB_SIZE,ls->ip->GetTime(),size,FOREVER);
			ls->pblock->SetValue(PB_SIZE,0, size);
		}
		else if (wParam==IDC_TEXTUREIMAGEBUT)
		{
			BitmapInfo bi;
			if (ls->colorbmp)
				ls->colorbmp->DeleteThis();
			ls->colorbmp=0;
			strcpy(ls->colorname,"None");
			if (TheManager->SelectFileInput(&bi,hWnd,"Select texture image"))
				{
				BMMRES status;
				ls->colorbmp=TheManager->Load(&bi,&status);
				if (status==BMMRES_SUCCESS)
					strcpy(ls->colorname,bi.Filename());
				}
			SetDlgItemText(hWnd,IDC_TEXTUREIMAGEBUT,ls->colorname);
			float size;
			ls->pblock->GetValue(PB_SIZE,ls->ip->GetTime(),size,FOREVER);
			ls->pblock->SetValue(PB_SIZE,0, size);
		}
		break;
	}
	return FALSE;
}

void landscape::BeginEditParams(IObjParam *ip,ULONG flags,Animatable *prev)
{
	this->ip = ip;
	landscapeProc.ls=this;
	SimpleObject::BeginEditParams(ip,flags,prev);

	if(pmapParam) {
		pmapParam->SetParamBlock(pblock);
	} else {
		pmapParam = CreateCPParamMap(
			descParam, PARAMDESC_LENGTH,
			pblock, 
			ip, 
			hInstance, 
			MAKEINTRESOURCE(IDD_PANEL),
			GetString(IDS_PARAMS), 
			0);
	}
	pmapParam->SetUserDlgProc(&landscapeProc);
	
	HWND hWnd=pmapParam->GetHWnd();
	SetDlgItemText(hWnd,IDC_DISPLACEIMAGEBUT,displacename);
	SetDlgItemText(hWnd,IDC_TEXTUREIMAGEBUT,colorname);
}

void landscape::EndEditParams( IObjParam *ip, ULONG flags,Animatable *next )
{
	SimpleObject::EndEditParams(ip,flags,next);
	if (flags&END_EDIT_REMOVEUI ) {
		DestroyCPParamMap(pmapParam);
		pmapParam  = NULL;
	}
	this->ip = NULL;
}

BOOL landscape::HasUVW() 
{ 
	BOOL mapcoord;
	pblock->GetValue(PB_MAPCOORD,0,mapcoord,FOREVER);
	return mapcoord; 
}

void landscape::SetGenUVW(BOOL sw) 
{  
	if (sw==HasUVW()) return;
	pblock->SetValue(PB_MAPCOORD,0, sw);
}

class landscapeCreateCallBack : public CreateMouseCallBack {
	IPoint2 sp0;		//First point in screen coordinates
	landscape *ob;		//Pointer to the object 
	Point3 p0;			//First point in world coordinates
public:	
	int proc( ViewExp *vpt,int msg, int point, int flags, IPoint2 m, Matrix3& mat);
	void SetObj(landscape *obj) {ob = obj;}
};

int landscapeCreateCallBack::proc(ViewExp *vpt,int msg, int point, int flags, IPoint2 m, Matrix3& mat )
{
	if (msg == MOUSE_FREEMOVE)
		vpt->SnapPreview(m,m,NULL, SNAP_IN_3D);
	else
	if (msg==MOUSE_POINT)
		{
		if (point==0)
			{
			ob->suspendSnap = TRUE;
			sp0 = m;
			p0 = vpt->SnapPoint(m,m,NULL,SNAP_IN_PLANE);
			mat.SetTrans(p0);
			}
		else 
			{
			ob->suspendSnap = FALSE;
			return Length(sp0 - m)<3?CREATE_ABORT:CREATE_STOP;
			}
		}
	else if (msg==MOUSE_MOVE) 
		{
		float size=Length(p0 - vpt->SnapPoint(m,m,NULL,SNAP_IN_PLANE));
		ob->pblock->SetValue(PB_SIZE,0, size);
		ob->pmapParam->Invalidate();
		} 
	else 
		if (msg == MOUSE_ABORT) 
			return CREATE_ABORT;

	return CREATE_CONTINUE;
}

static landscapeCreateCallBack landscapeCreateCB;

CreateMouseCallBack* landscape::GetCreateMouseCallBack() 
{
	landscapeCreateCB.SetObj(this);
	return(&landscapeCreateCB);
}

void landscape::BuildMesh(TimeValue t)
{
	int nv,nf,ncvx,ncvy,x,y,i,segx,segy;
	Point3 p;
	float dx,dy,size,displacevalue,tile,maxdz=0;
	BOOL mapcoord;
	BOOL colorzgrad;
	
	ivalid = FOREVER;
	pblock->GetValue(PB_SIZE,t,size,FOREVER);
	pblock->GetValue(PB_SEGX,t,segx,FOREVER);
	pblock->GetValue(PB_SEGY,t,segy,FOREVER);
	pblock->GetValue(PB_DISPLACEVALUE,t,displacevalue,FOREVER);
	pblock->GetValue(PB_MAPCOORD,t,mapcoord,FOREVER);
	pblock->GetValue(PB_MAPCOORDTILE,t,tile,FOREVER);
	pblock->GetValue(PB_COLORZGRAD,t,colorzgrad,FOREVER);
	
	ncvx=segx+1;
	ncvy=segy+1;
	nv=ncvx*ncvy;
	nf=segx*2*segy;

	dx=size/(segx/2.0f);
	dy=size/(segy/2.0f);

	mesh.setNumVerts(nv);
	mesh.setNumFaces(nf);

	for( i=0,y=0;y<ncvy;y++ )
		for( x=0;x<ncvx;x++,i++ )
		{
		p.x=-size+dx*x;
		p.y=-size+dy*y;
		p.z=0;
		mesh.setVert(i,p);
		}
	for( i=0,y=0;y<segy;y++ )
		for( x=0;x<segx;x++ )
		{
			mesh.faces[i].v[0]=y*ncvx+x;
			mesh.faces[i].v[1]=y*ncvx+x+1;
			mesh.faces[i].v[2]=(y+1)*ncvx+x;
			mesh.faces[i].flags=EDGE_A|EDGE_C;
			mesh.faces[i].smGroup=1;
			i++;

			mesh.faces[i].v[0]=y*ncvx+x+1;
			mesh.faces[i].v[1]=(y+1)*ncvx+x+1;
			mesh.faces[i].v[2]=(y+1)*ncvx+x;
			mesh.faces[i].flags=EDGE_A|EDGE_B;
			mesh.faces[i].smGroup=1;
			i++;
		}
	
	if (displacebmp)
	{
	int wd,hd,c;
	float dz;
	wd=displacebmp->Width();
	hd=displacebmp->Height();
	BMM_Color_64 *ptr=new BMM_Color_64[wd]; 

	for( i=0,y=0;y<ncvy;y++ )
		{
		displacebmp->GetLinearPixels(0,y*(hd-1)/(ncvy-1),wd,ptr);
		for( x=0;x<ncvx;x++,i++ )
			{
			c=  (int)ptr[x*(wd-1)/(ncvx-1)].r+
				(int)ptr[x*(wd-1)/(ncvx-1)].g+
				(int)ptr[x*(wd-1)/(ncvx-1)].b;
			dz= displacevalue*(c/(float)0xffff);
			mesh.verts[i].z+=dz;
			if (dz>maxdz)
				maxdz=dz;
			}
		}

	delete ptr;
	}

	if (colorbmp)
	{
	int wt,ht,c;
	BMM_Color_64 *ptr=0;
	wt=colorbmp->Width();
	ht=colorbmp->Height();
	ptr=new BMM_Color_64[wt];
	
	mesh.setNumVertCol(nv);
	mesh.setNumVCFaces(nf);

	for( i=0;i<nf;i++ )
		for( c=0;c<3;c++ )
			mesh.vcFace[i].t[c]=mesh.faces[i].v[c];

	if (colorzgrad)
		{
			if (maxdz>0)
			{
			colorbmp->GetLinearPixels(0,0,wt,ptr);
			for( i=0,y=0;y<ncvy;y++ )
				{
				for( x=0;x<ncvx;x++,i++ )
					{
					c=(int)(mesh.verts[i].z/maxdz*(ht-1));
					mesh.vertCol[i].x=(ptr[c].r/(float)0xffff);
					mesh.vertCol[i].y=(ptr[c].g/(float)0xffff);
					mesh.vertCol[i].z=(ptr[c].b/(float)0xffff);
					}
				}
			}
		}
	else 
		for( i=0,y=0;y<ncvy;y++ )
			{
			colorbmp->GetLinearPixels(0,y*(ht-1)/(ncvy-1),wt,ptr);
			for( x=0;x<ncvx;x++,i++ )
				{
				mesh.vertCol[i].x=(ptr[x*(wt-1)/(ncvx-1)].r/(float)0xffff);
				mesh.vertCol[i].y=(ptr[x*(wt-1)/(ncvx-1)].g/(float)0xffff);
				mesh.vertCol[i].z=(ptr[x*(wt-1)/(ncvx-1)].b/(float)0xffff);
				}
			}

	delete ptr;
	}
	else 
	{
	mesh.setNumVertCol(nv);
	mesh.setNumVCFaces(nf);
	int c;
	for( i=0;i<nf;i++ )
		for( c=0;c<3;c++ )
			mesh.vcFace[i].t[c]=mesh.faces[i].v[c];
	for( i=0;i<nv;i++ )
		{
		mesh.vertCol[i].x=1.0f;
		mesh.vertCol[i].y=1.0f;
		mesh.vertCol[i].z=1.0f;
		}
	}

	if (mapcoord)
	{
	mesh.setNumTVerts(nv);
	mesh.setNumTVFaces(nf);
	for( i=0,y=0;y<ncvy;y++ )
		for( x=0;x<ncvx;x++,i++ )
			mesh.setTVert(i,(float)x/ncvx*tile,(float)y/ncvy*tile,0);
	for( i=0;i<nf;i++ )
		for( x=0;x<3;x++ )
			mesh.tvFace[i].t[x]=mesh.faces[i].v[x];
	}

	mesh.InvalidateGeomCache();
	mesh.InvalidateTopologyCache();
	mesh.BuildStripsAndEdges();
}

BOOL landscape::OKtoDisplay(TimeValue t) 
{
	float size;
	pblock->GetValue(PB_SIZE,t,size,FOREVER);
	if (size==0.0f) return FALSE;
	else return TRUE;
}

void landscape::InvalidateUI() 
{
	if (pmapParam) pmapParam->Invalidate();
}

ParamDimension *landscape::GetParameterDim(int pbIndex) 
{
	return defaultDim;
}

TSTR landscape::GetParameterName(int pbIndex) 
{
	return GetString(IDS_PARAMS);
}

BOOL landscape::SetValue(int i, TimeValue t, int v) 
{
	return TRUE;
}

BOOL landscape::SetValue(int i, TimeValue t, float v)
{
	return TRUE;
}

BOOL landscape::SetValue(int i, TimeValue t, Point3 &v) 
{
	return TRUE;
}

BOOL landscape::GetValue(int i, TimeValue t, int &v, Interval &ivalid) 
{
	return TRUE;
}

BOOL landscape::GetValue(int i, TimeValue t, float &v, Interval &ivalid) 
{
	return TRUE;
}

BOOL landscape::GetValue(int i, TimeValue t, Point3 &v, Interval &ivalid) 
{	
	return TRUE;
}

Object* landscape::ConvertToType(TimeValue t, Class_ID obtype)
{
	return SimpleObject::ConvertToType(t,obtype);
}

int landscape::CanConvertToType(Class_ID obtype)
{
	if (obtype==defObjectClassID ||
		obtype==triObjectClassID) {
		return 1;
	} else {		
	return SimpleObject::CanConvertToType(obtype);
		}
}

int landscape::IntersectRay(
		TimeValue t, Ray& ray, float& at, Point3& norm)
{
	return SimpleObject::IntersectRay(t,ray,at,norm);
}

void landscape::GetCollapseTypes(Tab<Class_ID> &clist,Tab<TSTR*> &nlist)
{
    Object::GetCollapseTypes(clist, nlist);
}

RefTargetHandle landscape::Clone(RemapDir& remap) 
{
	landscape* newob = new landscape();	
	newob->ReplaceReference(0,pblock->Clone(remap));
	newob->ivalid.SetEmpty();
	return(newob);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本大道久久a久久精二百| 婷婷夜色潮精品综合在线| 国产福利一区二区三区视频在线| 日韩一区二区电影| 久久精品国产**网站演员| 精品国产亚洲在线| 国产一区二区三区免费看 | 69堂成人精品免费视频| 日韩av成人高清| 精品久久久久久综合日本欧美| 国产精品一级黄| 国产精品福利一区| 精品视频一区二区三区免费| 日韩精品电影一区亚洲| 久久亚洲综合av| 91亚洲国产成人精品一区二区三| 亚洲精品久久久蜜桃| 欧美三级韩国三级日本三斤| 久热成人在线视频| 国产精品久久久久久久久动漫 | 成人午夜电影久久影院| 国产精品美女www爽爽爽| 91丨porny丨最新| 日韩国产欧美视频| 国产三级一区二区三区| 欧洲国内综合视频| 国产毛片精品一区| 一个色妞综合视频在线观看| 欧美一区二区三区视频| 成人va在线观看| 视频一区在线播放| 国产精品久久久久久妇女6080| 欧美日韩高清影院| 成人午夜精品在线| 日本vs亚洲vs韩国一区三区二区| 中文字幕精品在线不卡| 91麻豆精品国产自产在线| 成人午夜视频在线| 免费日本视频一区| 亚洲美女精品一区| 国产亚洲欧美在线| 日韩欧美激情四射| 欧美在线看片a免费观看| 国产成人av自拍| 奇米色一区二区三区四区| 日韩一区中文字幕| 久久精品在线免费观看| 欧美丰满少妇xxxxx高潮对白| voyeur盗摄精品| 国产一区二区电影| 日本视频一区二区| 亚洲综合在线免费观看| 中文字幕精品一区二区精品绿巨人 | 亚洲123区在线观看| 国产精品盗摄一区二区三区| 精品久久久久久综合日本欧美| 欧美午夜电影网| 91蝌蚪porny| 99国产精品久久久久久久久久| 国产在线播放一区三区四| 男女男精品视频网| 国产精品福利av| 久久久久国产精品厨房| 日韩美女一区二区三区四区| 5858s免费视频成人| 欧美日免费三级在线| 91美女在线观看| av成人免费在线| 成人蜜臀av电影| 丁香五精品蜜臀久久久久99网站| 精品亚洲免费视频| 久久 天天综合| 国产精品主播直播| 国产一区二区伦理片| 国产一区二区三区日韩| 国产精品一二三区在线| 国产成人一区在线| 福利一区在线观看| 成人黄色免费短视频| av亚洲精华国产精华| av在线不卡免费看| 一本大道久久精品懂色aⅴ | 国产成人精品一区二区三区四区| 国产成人免费网站| 国产黑丝在线一区二区三区| 国产精品一区在线| 成人免费毛片片v| av在线播放不卡| 在线观看视频欧美| 欧美高清dvd| 久久综合久久99| 国产精品国产三级国产普通话99| 1024亚洲合集| 亚洲午夜久久久| 免费成人在线播放| 国产成人av福利| 91啪在线观看| 制服视频三区第一页精品| 精品免费99久久| 中文字幕永久在线不卡| 一区2区3区在线看| 激情综合五月婷婷| 99久久777色| 91精品欧美久久久久久动漫| 久久久综合网站| 亚洲激情网站免费观看| 奇米777欧美一区二区| 国产精品一区不卡| 欧美亚洲一区二区在线| 日韩欧美成人激情| 最近中文字幕一区二区三区| 午夜欧美电影在线观看| 国产精品白丝av| 欧美性淫爽ww久久久久无| 日韩视频在线一区二区| 中文字幕不卡在线观看| 亚洲国产视频直播| 国产精品一区二区在线观看不卡| jiyouzz国产精品久久| 欧美一级日韩免费不卡| 国产精品国产三级国产| 视频一区中文字幕| 91免费观看在线| 欧美大黄免费观看| 亚洲综合丝袜美腿| 国产成人精品www牛牛影视| 欧美精品丝袜久久久中文字幕| 欧美经典一区二区| 蜜臀av一区二区三区| youjizz国产精品| 精品久久99ma| 亚洲国产精品自拍| av亚洲精华国产精华精| 日韩精品一区二区三区在线观看 | 久久久不卡影院| 亚洲一区在线观看免费观看电影高清| 国产美女精品一区二区三区| 欧美日韩视频在线观看一区二区三区 | 亚洲国产精品久久久男人的天堂| 国产精品综合二区| 欧美一区二区三区小说| 一区二区三区中文字幕在线观看| 国产一区不卡视频| 日韩精品中文字幕一区二区三区 | 色噜噜狠狠成人中文综合 | 日韩欧美国产1| 亚洲成人综合在线| 日本精品裸体写真集在线观看| 久久久久久久久岛国免费| 日本欧美肥老太交大片| 精品婷婷伊人一区三区三| √…a在线天堂一区| 成人手机电影网| 亚洲国产精品高清| 国产精品一级片在线观看| 久久―日本道色综合久久| 久久99精品久久久久久动态图| 777午夜精品免费视频| 亚洲无线码一区二区三区| 色诱亚洲精品久久久久久| 亚洲情趣在线观看| 色国产综合视频| 亚洲综合一区在线| 欧美日韩成人综合在线一区二区 | 8x福利精品第一导航| 日韩一区精品字幕| 日韩一二三四区| 久久99精品久久久| 久久精品欧美日韩精品| 国产成人精品三级麻豆| 亚洲国产精华液网站w| 丰满放荡岳乱妇91ww| 中文字幕在线不卡国产视频| a4yy欧美一区二区三区| 亚洲女与黑人做爰| 欧美三级资源在线| 日本中文字幕一区二区有限公司| 7777精品伊人久久久大香线蕉| 老司机精品视频在线| 久久久久国产免费免费| 成人a区在线观看| 亚洲黄色免费电影| 欧美日韩国产三级| 精品一区二区免费| 欧美国产日韩a欧美在线观看| 99精品欧美一区二区蜜桃免费| 一区二区激情视频| 日韩一区二区三| 国产精品亚洲午夜一区二区三区| 中文字幕一区二区三区在线不卡 | 成人一区二区三区在线观看| 最新国产精品久久精品| 欧美日韩一区久久| 国产制服丝袜一区| 亚洲精品免费电影| 日韩欧美久久久| 一本高清dvd不卡在线观看| 午夜精品久久一牛影视| 久久久久久久久岛国免费| 色94色欧美sute亚洲线路一ni|