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

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

?? obb.cpp

?? 小型的3D游戲引擎
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
     	  #include <windows.h>
#include <gl/gl.h>
#include "obb.h"
#include "../math/math.h"
#include "../math/plane.h"
#include "../math/triangle.h"
#include "../global.h"
#include <float.h>

GcOBB::GcOBB()
{
	m_orthogonal[0] = GcVector3(1, 0, 0);
	m_orthogonal[1] = GcVector3(0, 1, 0);
	m_orthogonal[2] = GcVector3(0, 0, 1);
}

GcOBB::GcOBB( GcVector3 & extents )
{
	m_extents = extents;
}

GcOBB::GcOBB( GcVector3 & extents, GcVector3 & position )
{
	m_extents = extents;
	SetTranslation(position);
}


void GcOBB::RenderOutlines()
{
	glPushMatrix();
		
		
		/*glTranslatef(	GetWorldTranslation().x ,
						GetWorldTranslation().y,
		
				GetWorldTranslation().z);*/
	
		Matrix4 tmp = GetWorldMatrix();
		//tmp.SetIdentity();
		//tmp.SetTranslation( GetWorldMatrix().GetTranslation() );
		glMultMatrixf(tmp);
		

		glLineWidth(2);
		glColor3f(0.5f, 0.0f, 0.0f);
		
		glBegin(GL_LINES);
			
			// Front top
			glVertex3f(-m_extents.x, m_extents.y, -m_extents.z);
			glVertex3f(m_extents.z, m_extents.y, -m_extents.z);
			
			// Back top
			glVertex3f(-m_extents.x, m_extents.y, m_extents.z );
			glVertex3f(m_extents.z, m_extents.y, m_extents.z);

			// Left top
			glVertex3f(-m_extents.x, m_extents.y, -m_extents.z);
			glVertex3f(-m_extents.x, m_extents.y, m_extents.z );

			// Right top
			glVertex3f(m_extents.x, m_extents.y, -m_extents.z);
			glVertex3f(m_extents.x, m_extents.y, m_extents.z );

			
			
			// Front bottom
			glVertex3f(-m_extents.x, -m_extents.y, -m_extents.z);
			glVertex3f(m_extents.z, -m_extents.y, -m_extents.z);
			
			// Back bottom
			glVertex3f(-m_extents.x, -m_extents.y, m_extents.z );
			glVertex3f(m_extents.z, -m_extents.y, m_extents.z);

			// Left bottom
			glVertex3f(-m_extents.x, -m_extents.y, -m_extents.z);
			glVertex3f(-m_extents.x, -m_extents.y, m_extents.z );

			// Right bottom
			glVertex3f(m_extents.x, -m_extents.y, -m_extents.z);
			glVertex3f(m_extents.x, -m_extents.y, m_extents.z );


			
			
			// Front left
			glVertex3f(-m_extents.x, m_extents.y, -m_extents.z);
			glVertex3f(-m_extents.x, -m_extents.y, -m_extents.z);

			// Front right
			glVertex3f(m_extents.z, m_extents.y, -m_extents.z);
			glVertex3f(m_extents.z, -m_extents.y, -m_extents.z);

			// Back left
			glVertex3f(-m_extents.x, m_extents.y, m_extents.z);
			glVertex3f(-m_extents.x, -m_extents.y, m_extents.z);

			// Back right
			glVertex3f(m_extents.z, m_extents.y, m_extents.z);
			glVertex3f(m_extents.z, -m_extents.y, m_extents.z);

		glEnd();

		glLineWidth(1);
	
	glPopMatrix();
}


const bool GcOBB::Intersects(const GcPlane & plane)
{
	glPushMatrix();
	
	GcVector3 point(400.0f, 520.0f, 500.0f);
	glTranslatef( point.x, point.y, point.z );

	glPointSize(5);
	
	glColor3f(0.5f, 0.0f, 0.0f);

	glBegin(GL_POINTS);
		//glVertex3fv( point );
		glVertex3f(0.0f, 0.0f, 0.0f);
		//glVertex3f(500.0f, 0.0f, 0.0f);
	glEnd();
	
	GcVector3 normal(0, 1, 0);
	normal *= 30;

	glColor3f(0.5f, 0.0f, 0.0f);
	glBegin(GL_LINES);
		//glVertex3fv( point );
		glVertex3f(0.0f, 0.0f, 0.0f);
		glVertex3fv(normal);
		//glVertex3f(500.0f, 0.0f, 0.0f);
	glEnd();
	
	glPopMatrix();


	GcVector3 & extents = m_extents;
	GcVector3 & xAxis = m_worldMatrix.Axis(0);
	GcVector3 & yAxis = m_worldMatrix.Axis(1);
	GcVector3 & zAxis = m_worldMatrix.Axis(2);

/*	float r = ( ( normal.DotProduct(xAxis) ) * extents.x ) + ( (normal.DotProduct(yAxis)) * extents.y ) + ( (normal.DotProduct(zAxis)) * extents.z );
	//GcVector3 PC = point - GetWorldTranslation();
	float distance = plane.Distance( GetWorldTranslation() );
	distance = fabs(distance);
	//float distance = plane.Distance( GcVector3(0, 0 ,0) );
*/
	
	

	
	
	GcVector3 distance;
	distance.x = extents.x * ( plane.m_normal * xAxis );
	distance.y = extents.y * ( plane.m_normal * yAxis );
	distance.z = extents.z * ( plane.m_normal * zAxis );

	float radius = fabs( distance.x ) + fabs( distance.y ) + fabs( distance.z );

	float distanceCenterToPlane = plane.Distance( GetWorldTranslation() );

	//dbgC.Write("Distance to plane: %f\n", distanceCenterToPlane);
	//dbgC.Write("radius: %f\n", radius);

	if( fabs(distanceCenterToPlane) <= radius )
		return true;
/*


	NeMatrix kRotMat = GetWorldRotation().ToMatrix();

	NeVector3d kDist( m_kDim.x * ( rkPlane.m_kNormal * kRotMat.GetColumn(0) ),
					  m_kDim.y * ( rkPlane.m_kNormal * kRotMat.GetColumn(1) ),
					  m_kDim.z * ( rkPlane.m_kNormal * kRotMat.GetColumn(2) ) );

	float fRadius = fabs( kDist.x ) + fabs( kDist.y ) + fabs( kDist.z );

	float fCenterDistToPlane = rkPlane.Distance( GetWorldPosition() );

	return( fabs( fCenterDistToPlane ) <= fRadius ); 
*/
	glPointSize(1);
	
	return false;
}

const bool GcOBB::Intersects(const GcTriangle & triangle)
{
	// A total 13 axes will be tested
	// 1) x1 The normal of the triangle
	// 2) x3 The faces of the OBB
	// 3) x9 The cross products of the triangle - box edges
	

	float triMin, triMax, boxMin, boxMax;
	GcVector3 A; // Will hold a given arbitrary axis
	GcVector3 triEdge[3];	// Will hold the edges of the triangle


	// Compute triangle edges
	triEdge[0] = triangle.b - triangle.a;
	triEdge[1] = triangle.c - triangle.a;
	

	// Test direction of triangle normal
	A = triangle.Normal();

	triMin = A.DotProduct( triangle.a );
	triMax = triMin;
	
	GcMath::ProjectOBB(A, *this, boxMin, boxMax);
	
	// The projected box and triangle do not overlap on the A axis, return negative
	if( boxMax < triMin || triMax < boxMin )
		return false;

	int i;
	
	GcVector3 center = GetWorldTranslation();

	// Test the directions of the faces
	for( i = 0; i < 3; i++ )
	{
		A = this->Axis(i);
		
		GcMath::ProjectTriangle( A, triangle, triMin, triMax );
		
		float centerOnA = A.DotProduct( center );
		boxMin = centerOnA - this->Extent(i);
		boxMax = centerOnA + this->Extent(i);
		
		if( boxMax < triMin || triMax < boxMin )
			return false;
	}

	// Test the cross products of the triangle - box edges
	triEdge[2] = triEdge[1] - triEdge[0];
	
	for( i = 0; i < 3; i++ )
	{
		for( int j = 0; j < 3; j++)
		{
			A = triEdge[i].CrossProduct( this->Axis(j) );

			GcMath::ProjectTriangle( A, triangle, triMin, triMax );
			GcMath::ProjectOBB( A, *this, boxMin, boxMax );
			
			if( boxMax < triMin || triMax < boxMin )
				return false;
		}
	}

	return true;
}

const bool GcOBB::Intersects( GcAABB & box )
{
	return Intersects( GcOBB( box.GetExtents(), box.GetWorldTranslation() ) );
}


const bool GcOBB::Intersects( GcOBB & box )
{
	float R[3][3];
	float ra, rb, t;
	long i, k;


	GcVector3 v = box.GetWorldTranslation() - GetWorldTranslation();

	// Translation to B with A as reference
	GcVector3 T( v.DotProduct( m_worldMatrix.Axis( 0 ) ), v.DotProduct( m_worldMatrix.Axis( 1 ) ), v.DotProduct( m_worldMatrix.Axis( 2 ) ) );

	//B's basis with respect to A's local frame

	GcVector3 & extentsA = m_extents;
	GcVector3 & extentsB = box.Extents();

	// Calculate rotation matrix
	/*for( i = 0; i < 3; ++i )
		for( k = 0; k < 3; ++k )
			R[i][k] = m_orthogonal[i].DotProduct(box->GetOrthogonal()[k]);*/
	
	for( i = 0; i < 3; ++i )
	{
		for( k = 0; k < 3; ++k )
		{
			GcVector3 & A = m_worldMatrix.Axis(i);
			GcVector3 & B = box.GetWorldMatrix().Axis(k);
				
			//g_Debug->Log("Axis %d %d - %f %f %f\n", i, k, A.x, A.y, A.z);
			//g_Debug->Log("Axis %d %d - %f %f %f\n", i, k, B.x, B.y, B.z);
			//A = m_worldMatrix.GetAxis(i);
			//B = box->GetWorldMatrix().GetAxis(k);

			R[i][k] = A.DotProduct( B );
			//g_Debug->Log("---------\n");
		}
		
		
	}

	Matrix3 mat, matA, matB;
	/*mat = box->GetWorldMatrix();*/
	matA = m_worldMatrix;
	matB = box.GetWorldMatrix();
	/*
	//mat.SetTranslation( GcVector3(0, 0, 0) );
	// It's a rotation matrix - no need do the whole matrix inverse calculations**/
	mat.Transpose();

	mat = matA * mat;



	for( i = 0; i < 3; i++ )
	{
		ra = m_extents.array[i];
		//rb = box->Extents().array[0] * fabs(R[i][0]) + box->Extents().array[1] * fabs(R[i][1]) + box->Extents().array[2] * fabs(R[i][2]);
		rb = box.Extent(0) * fabs(R[i][0]) + box.Extent(1) * fabs(R[i][1]) + box.Extent(2) * fabs(R[i][2]);
		
		t = fabs( T.array[i] );

		if( t > ra + rb )
		{
			return false;
		}
	}

	// Test using the other box's axes
	

	for( k = 0; k < 3; k++ )
	{
		ra = m_extents.array[0] * fabs(R[0][k]) + m_extents.array[1] * fabs(R[1][k]) + m_extents.array[2] * fabs(R[2][k]);
		rb = box.Extents().array[k];

		t =	fabs( T.array[0]*R[0][k] + T.array[1]*R[1][k] +	T.array[2]*R[2][k] );

		if( t > ra + rb )
		{
			return false;
		}
	}

	// L = A0 x B0
	ra = extentsA.y * mat.a20 + extentsA.z * mat.a10;
	rb = extentsB.y * mat.a02 + extentsB.z * mat.a01;

	t = fabs( T.z * mat.a10 - T.y * mat.a20 );

	if( t > ra + rb )
	{
		g_DebugConsole->Write("1\n");
		return false;
	}

	// L = A0 x B1
	ra = extentsA.y * mat.a21 + extentsA.z * mat.a11;
	rb = extentsB.x * mat.a02 + extentsB.z * mat.a00;

	t =	fabs( T.z * mat.a11 - T.y * mat.a21 );

	if( t > ra + rb )
	{
		g_DebugConsole->Write("2\n");
		return false;
	}

	// L = A0 x B2
	ra = extentsA.y * mat.a22 + extentsA.z * mat.a12;
	rb = extentsB.x * mat.a01 + extentsB.y * mat.a00;

	t = fabs( T.z * mat.a12 - T.y * mat.a22 );

	if( t > ra + rb )
	{
		g_DebugConsole->Write("3\n");
		return false;
	}

	// L = A1 x B0
	ra = extentsA.x * mat.a20 + extentsA.z * mat.a00;
	rb = extentsB.y * mat.a12 + extentsB.z * mat.a11;

	t = fabs( T.x * mat.a20 - T.z * mat.a00 );

	if( t > ra + rb )
	{
		g_DebugConsole->Write("4\n");
		return false;
	}

	// L = A1 x B1
	ra = extentsA.x * mat.a21 + extentsA.z * mat.a01;
	rb = extentsB.x * mat.a12 + extentsB.z * mat.a10;

	t = fabs( T.x * mat.a21 - T.z * mat.a01 );

	if( t > ra + rb )
	{
		g_DebugConsole->Write("5\n");
		return false;
	}

	// L = A1 x B2
	ra = extentsA.x * mat.a22 + extentsA.z * mat.a02;
	rb = extentsB.x * mat.a11 + extentsB.y * mat.a10;

	t = fabs( T.x * mat.a22 - T.z * mat.a02 );

	if( t > ra + rb )
	{
		g_DebugConsole->Write("6\n");
		return false;
	}

	// L = A2 x B0
	ra = extentsA.x * mat.a10 + extentsA.y * mat.a00;
	rb = extentsB.y * mat.a22 + extentsB.z * mat.a21;

	t = fabs( T.y * mat.a00 - T.x * mat.a10 );

	if( t > ra + rb )
	{
		g_DebugConsole->Write("7\n");
		return false;
	}

	// L = A2 x B1
	ra = extentsA.x * mat.a11 + extentsA.y * mat.a01;
	rb = extentsB.x * mat.a22 + extentsB.z * mat.a20;

	t = fabs( T.y * mat.a01 - T.x * mat.a11 );

	if( t > ra + rb )
	{
		g_DebugConsole->Write("8\n");
		return false;
	}

	// L = A2 x B2
	ra = extentsA.x * mat.a12 + extentsA.y * mat.a02;
	rb = extentsB.x * mat.a21 + extentsB.y * mat.a20;

	t = fabs( T.y * mat.a02 - T.x * mat.a12 );

	if( t > ra + rb )
	{
		g_DebugConsole->Write("9\n");
		return false;
	}
	















	/*// L = A0 x B0
	ra = m_extents.array[1] * fabs(R[2][0]) + m_extents.array[2] * fabs(R[1][0]);
	rb = box->Extents().array[1] * fabs(R[0][2]) + box->Extents().array[2] * fabs(R[0][1]);

	t = fabs( T.array[2] * R[1][0] - T.array[1] * R[2][0] );

	if( t > ra + rb )
	{
		dbgC.Write("1\n");
		return false;
	}

	// L = A0 x B1
	ra = m_extents.array[1] * fabs(R[2][1]) + m_extents.array[2] * fabs(R[1][1]);
	rb = box->Extents().array[0] * fabs(R[0][2]) + box->Extents().array[2] * fabs(R[0][0]);

	t =	fabs( T.array[2] * R[1][1] - T.array[1] * R[2][1] );

	if( t > ra + rb )
	{
		dbgC.Write("2\n");
		return false;
	}

	// L = A0 x B2
	ra = m_extents.array[1] * fabs(R[2][2]) + m_extents.array[2] * fabs(R[1][2]);
	rb = box->Extents().array[0] * fabs(R[0][1]) + box->Extents().array[1] * fabs(R[0][0]);

	t = fabs( T.array[2] * R[1][2] - T.array[1] * R[2][2] );

	if( t > ra + rb )
	{
		dbgC.Write("3\n");
		return false;
	}

	// L = A1 x B0
	ra = m_extents.array[0] * fabs(R[2][0]) + m_extents.array[2] * fabs(R[0][0]);

	rb = box->Extents().array[1] * fabs(R[1][2]) + box->Extents().array[2] * fabs(R[1][1]);

	t = fabs( T.array[0] * R[2][0] - T.array[2] * R[0][0] );

	if( t > ra + rb )
	{
		dbgC.Write("4\n");
		return false;
	}

	// L = A1 x B1
	ra = m_extents.array[0] * fabs(R[2][1]) + m_extents.array[2] * fabs(R[0][1]);
	rb = box->Extents().array[0] * fabs(R[1][2]) + box->Extents().array[2] * fabs(R[1][0]);

	t = fabs( T.array[0] * R[2][1] - T.array[2] * R[0][1] );

	if( t > ra + rb )
	{
		dbgC.Write("5\n");
		return false;
	}

	// L = A1 x B2
	ra = m_extents.array[0] * fabs(R[2][2]) + m_extents.array[2] * fabs(R[0][2]);
	rb = box->Extents().array[0] * fabs(R[1][1]) + box->Extents().array[1] * fabs(R[1][0]);

	t = fabs( T.array[0] * R[2][2] - T.array[2] * R[0][2] );

	if( t > ra + rb )
	{
		dbgC.Write("6\n");
		return false;
	}

	// L = A2 x B0
	ra = m_extents.array[0] * fabs(R[1][0]) + m_extents.array[1] * fabs(R[0][0]);
	rb = box->Extents().array[1] * fabs(R[2][2]) + box->Extents().array[2] * fabs(R[2][1]);

	t = fabs( T.array[1] * R[0][0] - T.array[0] * R[1][0] );

	if( t > ra + rb )
	{
		dbgC.Write("7\n");
		return false;
	}

	// L = A2 x B1
	ra = m_extents.array[0] * fabs(R[1][1]) + m_extents.array[1] * fabs(R[0][1]);
	rb = box->Extents().array[0] * fabs(R[2][2]) + box->Extents().array[2] * fabs(R[2][0]);

	t = fabs( T.array[1] * R[0][1] - T.array[0] * R[1][1] );

	if( t > ra + rb )
	{
		dbgC.Write("8\n");
		return false;
	}

	// L = A2 x B2
	ra = m_extents.array[0] * fabs(R[1][2]) + m_extents.array[1] * fabs(R[0][2]);
	rb = box->Extents().array[0] * fabs(R[2][1]) + box->Extents().array[1] * fabs(R[2][0]);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲男人的天堂网| 国产精品久久久久久妇女6080| 欧美丰满嫩嫩电影| 精品国产免费久久| 国产精品传媒视频| 日本午夜精品一区二区三区电影 | 色综合天天综合给合国产| 91成人网在线| 337p日本欧洲亚洲大胆精品| 亚洲女同ⅹxx女同tv| 丝袜美腿一区二区三区| 成人国产精品免费观看动漫| 欧美日韩国产精品自在自线| 欧美激情一区二区三区四区| 手机精品视频在线观看| 丁香婷婷综合网| 欧美一区二区三区公司| 136国产福利精品导航| 青青草成人在线观看| 91农村精品一区二区在线| 欧美va亚洲va香蕉在线| 一卡二卡三卡日韩欧美| 国产成人久久精品77777最新版本| 欧美优质美女网站| 亚洲国产精品v| 美女视频黄免费的久久| 在线观看亚洲a| 久久九九99视频| 日韩激情中文字幕| 一本大道久久a久久精二百| 精品播放一区二区| 五月天久久比比资源色| 99久久久精品免费观看国产蜜| 日韩精品中文字幕一区二区三区| 亚洲男人的天堂一区二区| 国产成人在线视频免费播放| 欧美一区二区三级| 亚洲一区二区三区爽爽爽爽爽| 成人美女视频在线观看18| 精品美女被调教视频大全网站| 亚洲sss视频在线视频| 一本色道综合亚洲| 国产精品久久久久久久裸模 | 国产午夜精品理论片a级大结局| 日本伊人色综合网| 在线国产电影不卡| 国产精品免费视频观看| 国产在线视频精品一区| 欧美精品三级在线观看| 亚洲精品你懂的| 成人高清免费在线播放| 久久精品人人爽人人爽| 免费成人在线播放| 制服.丝袜.亚洲.中文.综合| 亚洲一区二区在线观看视频| 99久久婷婷国产| 国产精品理伦片| 成人小视频在线| 日本一区二区视频在线观看| 国产经典欧美精品| 精品国产乱码久久久久久免费 | 精品成人一区二区三区| 蜜桃av一区二区在线观看| 欧美日韩黄色一区二区| 亚洲图片一区二区| 欧美日韩中文字幕精品| 亚洲成人免费视| 在线成人免费观看| 丝袜脚交一区二区| 欧美日韩成人综合天天影院 | 日韩欧美国产wwwww| 日本欧美肥老太交大片| 欧美一区二区在线看| 免费看黄色91| xf在线a精品一区二区视频网站| 狠狠色综合日日| 久久久久国产精品免费免费搜索| 国产在线不卡一卡二卡三卡四卡| 久久网站热最新地址| 国产suv精品一区二区6| 国产精品传媒在线| 在线观看日韩一区| 日日摸夜夜添夜夜添精品视频| 制服视频三区第一页精品| 久久精品国产精品亚洲红杏| 久久久美女毛片 | 亚洲一区二区五区| 在线播放国产精品二区一二区四区| 日韩国产欧美在线视频| 精品理论电影在线观看 | 国产女主播在线一区二区| 成人高清视频在线| 一区二区在线观看免费| 在线播放一区二区三区| 激情综合网av| 中文字幕巨乱亚洲| 欧美在线不卡一区| 免费成人av在线| 国产欧美va欧美不卡在线| 91久久精品日日躁夜夜躁欧美| 婷婷综合在线观看| 国产视频一区在线播放| 一道本成人在线| 蜜桃视频一区二区三区在线观看| 国产亚洲美州欧州综合国| 色综合视频一区二区三区高清| 亚洲一级二级在线| 2021国产精品久久精品| 色综合久久久久久久| 全国精品久久少妇| 国产精品美女久久久久久久久久久| 色久优优欧美色久优优| 久久国产福利国产秒拍| 日韩理论片网站| 欧美电影在线免费观看| 成人网在线播放| 日韩精品成人一区二区在线| 国产情人综合久久777777| 欧美肥妇毛茸茸| 国产69精品久久99不卡| 婷婷激情综合网| 国产欧美一区二区三区鸳鸯浴 | 日韩精彩视频在线观看| 国产农村妇女精品| 7777女厕盗摄久久久| 成人性视频网站| 天堂影院一区二区| 中文字幕一区不卡| 精品少妇一区二区三区免费观看| 色综合久久综合网欧美综合网| 久久精品久久精品| 亚洲资源中文字幕| 日本一区二区三区电影| 91精品国产丝袜白色高跟鞋| 成人av电影免费在线播放| 麻豆一区二区三区| 亚洲自拍偷拍网站| 国产精品人人做人人爽人人添 | 国内精品国产三级国产a久久| 亚洲一区在线观看视频| 日本一区二区电影| 日韩色视频在线观看| 在线观看免费一区| 99久久综合精品| 国产在线播放一区二区三区| 亚洲午夜久久久久久久久久久| 国产欧美视频在线观看| 欧美大片在线观看| 欧美老肥妇做.爰bbww视频| 中文字幕中文字幕一区| 欧美www视频| 欧美一区二区三区色| 欧美在线短视频| 色偷偷88欧美精品久久久| 国产成人精品影视| 极品尤物av久久免费看| 青青草原综合久久大伊人精品优势| 亚洲欧美另类久久久精品| 国产精品视频免费看| 日韩精品一区二区三区视频播放| 欧美私人免费视频| 欧美在线免费播放| 色哦色哦哦色天天综合| a美女胸又www黄视频久久| 国产风韵犹存在线视精品| 精品一二线国产| 久久国产生活片100| 免费人成黄页网站在线一区二区| 亚洲超丰满肉感bbw| 亚洲欧美一区二区久久| 国产精品人成在线观看免费| 国产欧美一区二区在线| 久久久精品综合| 久久午夜电影网| 久久色.com| 国产亚洲1区2区3区| 久久久99精品免费观看不卡| 久久欧美一区二区| 国产亚洲视频系列| 国产精品网站在线观看| 日韩一区日韩二区| 亚洲图片你懂的| 亚洲激情在线激情| 亚洲一区二区三区小说| 午夜视频在线观看一区二区| 亚洲成人精品一区二区| 天天综合色天天综合色h| 日韩精品一级二级| 精品综合久久久久久8888| 九一久久久久久| 国产精品自拍av| av激情综合网| 欧洲国内综合视频| 欧美一区二区视频观看视频| 欧美电影免费观看高清完整版在线观看 | 精品毛片乱码1区2区3区 | 国产欧美va欧美不卡在线| 中文字幕欧美一区| 一区二区三区在线影院| 午夜在线成人av|