青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Shuffy

不斷的學習,不斷的思考,才能不斷的進步.Let's do better together!
posts - 102, comments - 43, trackbacks - 0, articles - 19

《基于MFC的OpenGL編程》Part 17 Shadows

Posted on 2010-03-31 20:52 Shuffy 閱讀(437) 評論(0)  編輯 收藏 引用 所屬分類: MFC,OpenGL

Shadows

Conceptually drawing a shadow is quite simple. A shadow is produced when an object keeps light from a source from striking some object or surface behind the object, casting the shadow. The area on the shadowed object's surface outlined by the object casting the shadow appears dark. We can produce a shadow programatically by flattening the original object into the plane of the surface in which the object lies. The object is then drawn in black or some other color. This is a very simple method which works when casting shadows on a flat surface.

從這一篇開始將用到一個第三方庫PixieLib,本文先對這個庫的使用做簡單介紹,后續文章中將不再贅述。

Paul DiLascia是兼職軟件顧問和資深的 Web/UI 設計師。他是《Windows++: Writing Reusable Windows Code in C++》(Windows++:在 C++ 中編寫可重用 Windows 代碼)一書(Addison-Wesley1992)的作者。Paul 在其業余時間里開發出了 PixieLib,可通過他的網站 www.dilascia.com 來獲取該 MFC 類庫。

將下載下來的源代碼編譯后會生成Lib目錄,我們需要用到的就是IncludeLib這兩個目錄,當然你也可以看看它自帶的Samples。由于使用的是最新PixieLib7.1版,因此接下來幾篇文章都在VS2005下進行開發。

1,LibInclude目錄拷貝到新建的MFC 項目目錄下,配置如下:

1)c/c++à附加包含目錄,這里加入”."include”

2)鏈接器à附加庫目錄,這里加入”."lib”

3)輸入à附加依賴項,這里加入PixieLib71.lib

2,在stdafx.h中包含進PixieLib庫文件:

#include <PixieLib.h>         //Pixel Library

 

3,在CCY457OpenGLView類中加入下述變量:

  int m_PixelFormat;       //Pixel Format

      
//Position and Direction

      GLfloat m_PosX;

      GLfloat m_PosY;

      GLfloat m_PosZ;

      GLfloat m_DirX;

      GLfloat m_DirY;

      GLfloat m_DirZ;

      
//Rotation

      GLfloat m_xRot, m_yRot;
//繞x,y軸旋轉的角度,隨時間不斷變化

      
//Increment for Keyboard Control

      GLfloat m_PosIncr;       
//Positional Increment

      GLfloat m_AngIncr;      
//Angular Increment

      
//Angle of Camera With X Axis

      GLfloat m_AngleX;

      GLdouble m_texWrap, m_texFilter, m_texMode; 

      GLfloat m_ShadowMat[
4][4];

      
//All Texture Names

     GLuint m_Texture[
4];

并在構造函數中初始化如下:

CCY457OpenGLView::CCY457OpenGLView()

{

      
//Rotation

      m_xRot 
= 0.0f;

      m_yRot 
= 0.0f;

      
//Position Increment

      m_PosIncr 
= 0.25f;

      
//Angle Increment

      m_AngIncr 
= 5.0f;

      
//Set Initial Camera Position - looking down negative Z

      m_PosX 
= 0.0f;

      m_PosY 
= 0.5f;

      m_PosZ 
= 2.5f;     

      
//Set Initial Viewing Direction - Pointing Down the -ve Z Axis

      m_DirX 
= m_PosX;

      m_DirY 
= m_PosY;

      m_DirZ 
= m_PosZ-m_PosIncr;

      
//Angle of Camera with X Axis

      m_AngleX 
= 90.0f;

      m_texWrap 
= GL_CLAMP;

      m_texMode 
= GL_DECAL;

      m_texFilter 
= GL_NEAREST;

}

4InitializeOpenGL函數修改如下:

BOOL CCY457OpenGLView::InitializeOpenGL()

{

      
//Get a DC for the Client Area

      m_pDC 
= new CClientDC(this);

      
//Failure to Get DC

      
if(m_pDC == NULL)

      {

           MessageBox(
"Error Obtaining DC");

           
return FALSE;

      }

      
//Failure to set the pixel format

      
if(!SetupPixelFormat())

      {

           
return FALSE;

      }

      
//Create Rendering Context

      m_hRC 
= ::wglCreateContext (m_pDC->GetSafeHdc ());

      
//Failure to Create Rendering Context

      
if(m_hRC == 0)

      {

           MessageBox(
"Error Creating RC");

           
return FALSE;

      }

      
//Make the RC Current

      
if(::wglMakeCurrent (m_pDC->GetSafeHdc (), m_hRC)==FALSE)

      {

           MessageBox(
"Error making RC Current");

           
return FALSE;

      }

      
// specify black as clear color

      ::glClearColor(
0.0f0.0f0.0f0.0f);

      
// specify the back of the buffer as clear depth

      ::glClearDepth(
1.0f);

      
// enable depth testing

      ::glEnable(GL_DEPTH_TEST);

      
//Enable Color Tracking

      ::glEnable(GL_COLOR_MATERIAL);

      ::glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);

      ::glShadeModel(GL_SMOOTH);

      
//Setup Lighting Here

      SetupLighting();

      LoadGLTextures();

      
//Effects

      
//Shadow

      
//Calulate Shadow Matrix

      GLfloat lightPos[] 
= {1.0f,1.5f,-1.0f,0.0f};

      GLfloat points[][
3= {

           {
-2.0f,0.0f,0.0f},

           {
2.0f,0.0f,0.0f},

           {
2.0f,0.0f,-2.0f}

      };

      MakeShadowMatrix(points, lightPos, m_ShadowMat);

      
return TRUE;

}

5,設置燈光的代碼修改如下:

void CCY457OpenGLView::SetupLighting ()

{

      
//Enable Lighting

      glEnable(GL_LIGHTING);

      
//Set up the Light Model

      
//Infinite Viewer

      glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE);

      
//Single Sided Lighting

      glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE);

      
//Set up the lights

      
//Light 1

      
//Directional Light from Front

      GLfloat m_SceneAmbient1[] 
= {0.5f,0.5f,0.5f,1.0f};

      GLfloat m_SceneDiffuse1[] 
= {1.0f,1.0f,1.0f,1.0f};

      GLfloat m_SceneSpecular1[] 
= {1.0f,1.0f,1.0f,1.0f};

      GLfloat m_ScenePosition1[] 
= {1.0f,1.5f,-1.0f,1.0f};

      GLfloat m_SceneDirection1[]
= {0.0f,0.0f,-1.0f,1.0f};

      glLightfv(GL_LIGHT0,GL_AMBIENT,m_SceneAmbient1);

      glLightfv(GL_LIGHT0,GL_DIFFUSE,m_SceneDiffuse1);

      glLightfv(GL_LIGHT0,GL_SPECULAR,m_SceneSpecular1);

      glLightfv(GL_LIGHT0,GL_POSITION,m_ScenePosition1);

      glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,
75.0f);

      glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,m_SceneDirection1);

      glEnable(GL_LIGHT0);

}

6,繪制代碼修改如下:

void CCY457OpenGLView::RenderScene ()

{
//繪制函數

      
//Position Camera

      gluLookAt(m_PosX,m_PosY,m_PosZ,m_DirX,m_DirY,m_DirZ,
0.0f,1.0f,0.0f);

      
//Draw the Scene

      
//Draw the floor

      
// Draw the ground,

      glEnable(GL_TEXTURE_2D);

      glBindTexture(GL_TEXTURE_2D, m_Texture[
3]);

      glBegin(GL_POLYGON);

      glColor3ub(
0,255,0);

      glTexCoord2f(
0.0f0.0f);

      glVertex3f(
-2.0f0.0f0.0f);

      glTexCoord2f(
1.0f0.0f);

      glVertex3f(
2.0f,0.0f0.0f);

      glColor3ub(
0,100,0);   

      glTexCoord2f(
1.0f1.0f);

      glVertex3f(
2.0f0.0f-2.0f);

      glTexCoord2f(
0.0f1.0f);

      glVertex3f(
-2.0f,0.0f-2.0f);

      glEnd();

      glDisable(GL_TEXTURE_2D);

      
//Draw the Cube

      
// Save the matrix state and do the rotations

      glPushMatrix();

      glTranslatef(
-1.0f,0.6f,-1.0f);

      
// Draw jet at new orientation, put light in correct position

      
// before rotating the jet

      glRotatef(m_xRot,
1.0f,0.0f,0.0f);

      glRotatef(m_yRot,
0.0f,1.0f,0.0f);

      DrawCube(FALSE);

      
// Restore original matrix state

      glPopMatrix();  

      
// Get ready to draw the shadow and the ground

      
// First disable lighting and save the projection state

      glDisable(GL_DEPTH_TEST);

      glDisable(GL_LIGHTING);

      glPushMatrix();

      
// Multiply by shadow projection matrix

      glMultMatrixf((GLfloat 
*)m_ShadowMat);

      glTranslatef(
-1.0f,0.6f,-1.0f);

      glRotatef(m_xRot,
1.0f,0.0f,0.0f);

      glRotatef(m_yRot,
0.0f,1.0f,0.0f);

      
// Pass true to indicate drawing shadow

      DrawCube(TRUE); 

      
// Restore the projection to normal

      glPopMatrix();

      
// Restore lighting state variables

      glEnable(GL_DEPTH_TEST);

      glEnable(GL_LIGHTING);

      
// Draw the light source

      glPushMatrix();

      glTranslatef(
1.5f,1.5f,-1.0f);

      glColor3ub(
255,255,0);

      glutSolidSphere(
0.01f,10,10);

      glPopMatrix();

}

7,用來計算平面法向量,繪制物體,計算陰影矩陣的輔助函數:


void CCY457OpenGLView::ReduceToUnit(GLfloat vector[3])

{

      
float length;

      
// Calculate the length of the vector          

      length 
= (float)sqrt((vector[0]*vector[0]) +

           (vector[
1]*vector[1]) +

           (vector[
2]*vector[2]));

      
// Keep the program from blowing up by providing an exceptable

      
// value for vectors that may calculated too close to zero.

      
if(length == 0.0f)

           length 
= 1.0f;

      
// Dividing each element by the length will result in a

      
// unit normal vector.

      vector[
0/= length;

      vector[
1/= length;

      vector[
2/= length;

}

void CCY457OpenGLView::CalcNormal(GLfloat v[3][3],GLfloat out[3])

{

      
float v1[3],v2[3];

      
static const int x = 0;

      
static const int y = 1;

      
static const int z = 2;

      
// Calculate two vectors from the three points

      v1[x] 
= v[0][x] - v[1][x];

      v1[y] 
= v[0][y] - v[1][y];

      v1[z] 
= v[0][z] - v[1][z];

      v2[x] 
= v[1][x] - v[2][x];

      v2[y] 
= v[1][y] - v[2][y];

      v2[z] 
= v[1][z] - v[2][z];

      
// Take the cross product of the two vectors to get

      
// the normal vector which will be stored in out

      
out[x] = v1[y]*v2[z] - v1[z]*v2[y];

      
out[y] = v1[z]*v2[x] - v1[x]*v2[z];

      
out[z] = v1[x]*v2[y] - v1[y]*v2[x];

      
// Normalize the vector (shorten length to one)

      ReduceToUnit(
out);

}

//Effects

//Shadow

// Create shadow matrix from the plane equation coeff's and pos of light

void CCY457OpenGLView::MakeShadowMatrix(GLfloat points[3][3], GLfloat lightPos[4], GLfloat destMat[4][4])

{

      GLfloat planeCoeff[
4];

      GLfloat dot;

      
// Find the plane equation coefficients

      
// Find the first three coefficients the same way we

      
// find a normal.

      CalcNormal(points,planeCoeff);

      
// Find the last coefficient by back substitutions

      planeCoeff[
3= - (

           (planeCoeff[
0]*points[2][0]) + (planeCoeff[1]*points[2][1]) +

           (planeCoeff[
2]*points[2][2]));

      
// Dot product of plane and light position

      dot 
= planeCoeff[0* lightPos[0+

           planeCoeff[
1* lightPos[1+

           planeCoeff[
2* lightPos[2+

           planeCoeff[
3* lightPos[3];

      
// Now do the projection

      
// First column

      destMat[
0][0= dot - lightPos[0* planeCoeff[0];

      destMat[
1][0= 0.0f - lightPos[0* planeCoeff[1];

      destMat[
2][0= 0.0f - lightPos[0* planeCoeff[2];

      destMat[
3][0= 0.0f - lightPos[0* planeCoeff[3];

      
// Second column

      destMat[
0][1= 0.0f - lightPos[1* planeCoeff[0];

      destMat[
1][1= dot - lightPos[1* planeCoeff[1];

      destMat[
2][1= 0.0f - lightPos[1* planeCoeff[2];

      destMat[
3][1= 0.0f - lightPos[1* planeCoeff[3];

      
// Third Column

      destMat[
0][2= 0.0f - lightPos[2* planeCoeff[0];

      destMat[
1][2= 0.0f - lightPos[2* planeCoeff[1];

      destMat[
2][2= dot - lightPos[2* planeCoeff[2];

      destMat[
3][2= 0.0f - lightPos[2* planeCoeff[3];

// Fourth Column

      destMat[
0][3= 0.0f - lightPos[3* planeCoeff[0];

      destMat[
1][3= 0.0f - lightPos[3* planeCoeff[1];

      destMat[
2][3= 0.0f - lightPos[3* planeCoeff[2];

      destMat[
3][3= dot - lightPos[3* planeCoeff[3];

}

void CCY457OpenGLView::DrawCubeTex ()

{

      glScalef(
0.3f0.3f0.3f);              

      glEnable(GL_TEXTURE_2D);

      glBindTexture(GL_TEXTURE_2D,m_Texture[
0]);

      
//Front Face

      glBegin(GL_POLYGON);

      glTexCoord2f(
0,0);

      glVertex3f(
-1.0f,-1.0f,0.0f);

      glTexCoord2f(
1,0);

      glVertex3f( 
1.0f,-1.0f,0.0f);

      glTexCoord2f(
1,1);

      glVertex3f( 
1.0f1.0f,0.0f);

      glTexCoord2f(
0,1);

      glVertex3f(
-1.0f1.0f,0.0f);

      glEnd();

      
//Back Face

      glBegin(GL_POLYGON);

      glTexCoord2f(
1,0);

      glVertex3f(
-1.0f,-1.0f,-1.0f);

      glTexCoord2f(
1,1);

      glVertex3f(
-1.0f1.0f,-1.0f);

      glTexCoord2f(
0,1);

      glVertex3f( 
1.0f1.0f,-1.0f);

      glTexCoord2f(
0,0);

      glVertex3f( 
1.0f,-1.0f,-1.0f);

      glEnd();

      glBindTexture(GL_TEXTURE_2D,m_Texture[
1]);

      
//Left Face

      glBegin(GL_POLYGON);

      glTexCoord2f(
1,0);

      glVertex3f(
-1.0f,-1.0f0.0f);

      glTexCoord2f(
1,1);

      glVertex3f(
-1.0f1.0f0.0f);

      glTexCoord2f(
0,1);

      glVertex3f(
-1.0f1.0f,-1.0f);

      glTexCoord2f(
0,0);

      glVertex3f(
-1.0f,-1.0f,-1.0f);

      glEnd();

      
//Right Face

      glBegin(GL_POLYGON);

      glTexCoord2f(
0,0);

      glVertex3f(
1.0f,-1.0f0.0f);

      glTexCoord2f(
1,0);

      glVertex3f(
1.0f,-1.0f,-1.0f);

      glTexCoord2f(
1,1);

      glVertex3f(
1.0f1.0f,-1.0f);

      glTexCoord2f(
0,1);

      glVertex3f(
1.0f1.0f0.0f);

      glEnd();

      glBindTexture(GL_TEXTURE_2D,m_Texture[
2]);

      
//Top Face

      glBegin(GL_POLYGON);

      glTexCoord2f(
0,0);

      glVertex3f(
-1.0f1.0f0.0f);

      glTexCoord2f(
0,1);

      glVertex3f( 
1.0f1.0f0.0f);

      glTexCoord2f(
1,1);

      glVertex3f( 
1.0f1.0f-1.0f);

      glTexCoord2f(
1,0);

      glVertex3f(
-1.0f1.0f-1.0f);

      glEnd();

      
//Botton Face

      glBegin(GL_POLYGON);

      glTexCoord2f(
0,1);

      glVertex3f(
-1.0f-1.0f0.0f);

      glTexCoord2f(
0,0);

      glVertex3f(
-1.0f-1.0f-1.0f);

      glTexCoord2f(
1,0);

      glVertex3f( 
1.0f-1.0f-1.0f);

      glTexCoord2f(
1,1);

      glVertex3f( 
1.0f-1.0f0.0f);

      glEnd();

      glDisable(GL_TEXTURE_2D);

}

void CCY457OpenGLView::DrawCubeNoTex ()

{

      glScalef(
0.3f0.3f0.3f);              

      
//Front Face

      glBegin(GL_POLYGON);

      glVertex3f(
-1.0f,-1.0f,0.0f);

      glVertex3f( 
1.0f,-1.0f,0.0f);

      glVertex3f( 
1.0f1.0f,0.0f);

      glVertex3f(
-1.0f1.0f,0.0f);

      glEnd();

      
//Back Face

      glBegin(GL_POLYGON);

      glVertex3f(
-1.0f,-1.0f,-1.0f);

      glVertex3f(
-1.0f1.0f,-1.0f);

      glVertex3f( 
1.0f1.0f,-1.0f);

      glVertex3f( 
1.0f,-1.0f,-1.0f);

      glEnd();

      
//Left Face

      glBegin(GL_POLYGON);

      glVertex3f(
-1.0f,-1.0f0.0f);

      glVertex3f(
-1.0f1.0f0.0f);

      glVertex3f(
-1.0f1.0f,-1.0f);

      glVertex3f(
-1.0f,-1.0f,-1.0f);

      glEnd();

      
//Right Face

      glBegin(GL_POLYGON);

      glVertex3f(
1.0f,-1.0f0.0f);

      glVertex3f(
1.0f,-1.0f,-1.0f);

      glVertex3f(
1.0f1.0f,-1.0f);

      glVertex3f(
1.0f1.0f0.0f);

      glEnd();

      
//Top Face

      glBegin(GL_POLYGON);

      glVertex3f(
-1.0f1.0f0.0f);

      glVertex3f( 
1.0f1.0f0.0f);

      glVertex3f( 
1.0f1.0f-1.0f);

      glVertex3f(
-1.0f1.0f-1.0f);

      glEnd();

      
//Botton Face

      glBegin(GL_POLYGON);

      glVertex3f(
-1.0f-1.0f0.0f);

      glVertex3f(
-1.0f-1.0f-1.0f);

      glVertex3f( 
1.0f-1.0f-1.0f);

      glVertex3f( 
1.0f-1.0f0.0f);

      glEnd();

}

 

作者:洞庭散人

出處:http://phinecos.cnblogs.com/    

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
原文鏈接:
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产一区二区三区久久悠悠色av| 亚洲国产精品久久久| 久久精品女人| 国产精品99久久久久久白浆小说| 久久精品国内一区二区三区| 国产综合欧美在线看| 欧美视频国产精品| 欧美丝袜第一区| 欧美系列一区| 国产精品国产三级国产| 欧美日韩激情网| 欧美华人在线视频| 欧美午夜精品久久久久久超碰| 欧美成人国产| 欧美日韩高清区| 欧美日韩精品二区| 国产精自产拍久久久久久蜜| 欧美巨乳在线| 国产精品久久久久久亚洲调教| 欧美日韩你懂的| 国产精品毛片在线看| 国产精品人人爽人人做我的可爱 | 久久天天躁夜夜躁狠狠躁2022| 亚洲影院在线| 久久精品九九| 亚洲成人在线视频播放 | 亚洲私人影院| 亚洲桃色在线一区| 性欧美1819sex性高清| 久久视频这里只有精品| 欧美国产精品v| 99视频一区二区三区| 日韩一本二本av| 欧美日韩亚洲三区| 国产欧美日韩不卡免费| 国产亚洲欧美一区在线观看| 国产亚洲a∨片在线观看| 国产欧美一区二区视频| 国产免费成人| 国产精品亚洲成人| 亚洲电影免费观看高清完整版在线| 裸体歌舞表演一区二区| 欧美亚洲免费| 欧美一进一出视频| 欧美在线免费看| 久久精品国产99国产精品| 亚洲国产欧美一区二区三区久久 | 女女同性精品视频| 欧美激情第三页| 亚洲美女免费精品视频在线观看| 免费黄网站欧美| 亚洲国产精品一区二区尤物区| 欧美激情一区二区三区在线| 麻豆精品精华液| 亚洲精品日韩在线观看| 一本色道久久综合亚洲精品不卡 | 欧美一区二区视频网站| 午夜亚洲视频| 久久精品观看| 欧美久久久久久久久| 欧美日韩在线一区| 欧美日韩在线电影| 国产一区二区精品| 99av国产精品欲麻豆| 国产专区精品视频| 亚洲精品国产视频| 午夜老司机精品| 亚洲第一精品在线| 亚洲网友自拍| 免费视频久久| 亚洲黄色免费电影| 亚洲欧洲另类国产综合| 亚洲私人黄色宅男| 欧美国产日韩亚洲一区| 欧美系列一区| 亚洲精品国产视频| 欧美在线黄色| 亚洲精品日韩欧美| 久久av老司机精品网站导航| 狠狠久久亚洲欧美专区| 久久精品亚洲精品| 亚洲一区二区欧美| 久久久亚洲午夜电影| 欧美精品在线免费| 精久久久久久久久久久| 99亚洲一区二区| 久久久人成影片一区二区三区| 久久久噜噜噜久久中文字幕色伊伊| 久久综合影视| 一区二区三区日韩| 欧美激情精品久久久六区热门 | 国产精品自在欧美一区| 亚洲第一成人在线| 久久久激情视频| 亚洲五月婷婷| 欧美另类专区| 亚洲国产精品视频一区| 亚洲图片在线观看| 亚洲高清在线观看| 美日韩精品免费| 在线观看欧美日本| 久久久久久欧美| 亚洲综合清纯丝袜自拍| 欧美日本在线一区| 亚洲黄色一区| 亚洲第一色中文字幕| 午夜视频精品| 国产欧美精品国产国产专区| 亚洲区国产区| 亚洲高清不卡| 欧美激情网友自拍| 欧美亚韩一区| 亚洲人成久久| 99精品国产福利在线观看免费 | 亚洲精品欧美日韩专区| 免费成人网www| 久久亚洲一区| 亚洲国产精品毛片| 亚洲国产欧美在线人成| 亚洲欧美日韩在线一区| 国产老女人精品毛片久久| 香蕉国产精品偷在线观看不卡| 日韩亚洲欧美成人| 国产精品色婷婷久久58| 亚洲欧美在线一区| 午夜精品在线观看| 欧美国产一区二区三区激情无套| 欧美激情一区二区三区在线视频| 欧美sm重口味系列视频在线观看| 一区二区三区产品免费精品久久75| 午夜一区不卡| 亚洲欧美日韩另类| 欧美黄色视屏| 在线日本成人| 亚洲性色视频| 欧美色精品天天在线观看视频| 玖玖在线精品| 欧美日韩国产一区精品一区| 91久久夜色精品国产网站| 最近中文字幕mv在线一区二区三区四区| 欧美日韩美女一区二区| 国产精品99久久99久久久二8| 一本色道久久综合亚洲精品不卡| 欧美日韩国产成人在线| 亚洲专区免费| 久热精品视频在线| 欧美电影免费观看高清完整版| 欧美日韩三区| 美女任你摸久久| 国产精品久久久久999| 午夜国产精品视频免费体验区| 欧美一区二区三区喷汁尤物| 黑人中文字幕一区二区三区| 久久久人成影片一区二区三区观看| 免费亚洲一区| 久久久久国产成人精品亚洲午夜| 免费久久精品视频| 亚洲欧美日韩一区| 欧美福利视频网站| 老**午夜毛片一区二区三区| 久久综合给合久久狠狠色| 一区二区日韩| 老司机精品视频网站| 新67194成人永久网站| 六月婷婷一区| 久久久青草青青国产亚洲免观| 日韩一二三在线视频播| 欧美亚洲一级| 国产欧美日韩在线观看| 亚洲欧美日韩中文视频| 亚洲美女视频| 黑人巨大精品欧美一区二区小视频| 午夜激情久久久| 一区二区三区欧美在线| 国产精品亚洲产品| 亚洲福利在线看| 国产精品午夜视频| 久久久国产精品一区二区中文| 亚洲欧美经典视频| 亚洲二区视频在线| 亚洲专区国产精品| 欧美日韩国产色站一区二区三区| 亚洲一区欧美| 久久午夜精品| 99视频精品免费观看| 久久se精品一区二区| 亚洲一区在线视频| 欧美日韩国产成人精品| 亚洲第一中文字幕| 亚洲美女淫视频| 国产视频一区在线观看一区免费| 欧美在线视频导航| 欧美一区二区精品在线| 国产精品国产自产拍高清av| 久久免费视频网站| 国产视频久久久久久久| 99综合在线| 亚洲一级黄色av| 国产精品一区久久久| 午夜精品久久久久久久男人的天堂 |