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

  C++博客 :: 首頁 :: 聯(lián)系 ::  :: 管理
  163 Posts :: 4 Stories :: 350 Comments :: 0 Trackbacks

常用鏈接

留言簿(48)

我參與的團隊

搜索

  •  

積分與排名

  • 積分 - 402530
  • 排名 - 59

最新評論

閱讀排行榜

評論排行榜

學習Texture Map紋理映射(貼圖)有很多好處。比方說您想讓一顆導彈飛過屏幕。根據(jù)前幾課的知識,我們最可行的辦法可能是很多個多邊形來構建導彈的輪廓并加上有趣的顏色。使用紋理映射,您可以使用真實的導彈圖像并讓它飛過屏幕。您覺得哪個更好看?照片還是一大堆三角形和四邊形?使用紋理映射的好處還不止是更好看,而且您的程序運行會更快。導彈貼圖可能只是一個飛過窗口的四邊形。一個由多邊形構建而來的導彈卻很可能包括成百上千的多邊形。很顯然,貼圖極大的節(jié)省了CPU時間。
   現(xiàn)在我們在第一課的代碼開始處增加五行新代碼。新增的第一行是#include <stdio.h>。它允許我們對文件進行操作,為了在后面的代碼中使用fopen(),我們增加了這一行。然后我們增加了三個新的浮點變量...xrotyrotzrot。這些變量用來使立方體繞X、Y、Z軸旋轉。最后一行GLuint texture[1]為一個紋理分配存儲空間。如果您需要不止一個的紋理,應該將數(shù)字1改成您所需要的數(shù)字。

  #include <windows.h>                    // Windows的頭文件
  #include <stdio.h>                     // 標準輸入/輸出庫的頭文件 (新增)
  #include <gl\\gl.h>                     // OpenGL32庫的頭文件
  #include <gl\\glu.h>                    // GLu32庫的頭文件
  #include <gl\\glaux.h>                   // GLaux庫的頭文件

  HGLRC hRC=NULL;                      // 永久著色描述表
  HDC hDC=NULL;                       // 私有GDI設備描述表
  HWND hWnd=NULL;                      // 保存我們的窗口句柄
  HINSTANCE hInstance;                    // 保存程序的實例

  bool keys[256];                      // 用于鍵盤例程的數(shù)組
  bool active=TRUE;                     // 窗口的活動標志,缺省為TRUE
  bool fullscreen=TRUE;                   // 全屏標志缺省設定成全屏模式

  GLfloat xrot;                       // X 旋轉量 (新增)
  GLfloat yrot;                       // Y 旋轉量 (新增)
  GLfloat zrot;                       // Z 旋轉量 (新增)

  GLuint texture[1];                     // 存儲一個紋理 (新增)

  LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);   // WndProc的定義

緊跟上面的代碼在ReSizeGLScene()之前,我們增加了下面這一段代碼。這段代碼用來加載位圖文件。如果文件不存在,返回NULL告知程序無法 加載位圖。在我開始解釋這段代碼之前,關于用作紋理的圖像我想有幾點十分重要,并且您必須明白。此圖像的寬和高必須是2的n次方;寬度和高度最小必須是 64象素;并且出于兼容性的原因,圖像的寬度和高度不應超過256象素。如果您的原始素材的寬度和高度不是64,128,256象素的話,使用圖像處理軟 件重新改變圖像的大小。可以肯定有辦法能繞過這些限制,但現(xiàn)在我們只需要用標準的紋理尺寸。
   首先,我們創(chuàng)建一個文件句柄。句柄是個用來鑒別資源的數(shù)值,它使程序能夠訪問此資源。我們開始先將句柄設為NULL 。

  AUX_RGBImageRec *LoadBMP(char *Filename)          // 載入位圖圖象
  {
       FILE *File=NULL;
                  // 文件句柄

   接下來檢查文件名是否已提供。因為LoadBMP()可以無參數(shù)調用,所以我們不得不檢查一下。您可不想什么都沒載入吧......。

      if (!Filename)                   // 確保文件名已提供。
      {
          return NULL;               // 如果沒提供,返回 NULL
      }

   接著檢查文件是否存在。下面這一行嘗試打開文件。

      File=fopen(Filename,"r");              // 嘗試打開文件

   如果我們能打開文件的話,很顯然文件是存在的。使用fclose(File) 關閉文件。auxDIBImageLoad(Filename) 讀取圖象數(shù)據(jù)并將其返回。

      if (File)                      // 文件存在么?
      {
         fclose(File);
                 // 關閉句柄
        return auxDIBImageLoad(Filename);       // 載入位圖并返回指針
      }

   如果我們不能打開文件,我們將返回NULL。這意味著文件無法載入。程序在后面將檢查文件是否已載入。如果沒有,我們將退出程序并彈出錯誤消息。

      return NULL;                    // 如果載入失敗,返回 NULL
  }

   下一部分代碼載入位圖(調用上面的代碼)并轉換成紋理。

  int LoadGLTextures()                  // 載入位圖(調用上面的代碼)并轉換成紋理
  {

   然后設置一個叫做Status的變量。我們使用它來跟蹤是否能夠載入位圖以及能否創(chuàng)建紋理。Status缺省設為 FALSE(表示沒有載入或創(chuàng)建任何東東)。

      int Status=FALSE;                 // Status 狀態(tài)指示器

   現(xiàn)在我們創(chuàng)建存儲位圖的圖像記錄。次記錄包含位圖的寬度、高度和數(shù)據(jù)。

      AUX_RGBImageRec *TextureImage[1];          // 創(chuàng)建紋理的存儲空間

   清除圖像記錄,確保其內容為空。

      memset(TextureImage,0,sizeof(void *) *1);     // 將指針設為 NULL

現(xiàn)在載入位圖,并將其轉換為紋理。TextureImage[0]=LoadBMP("Data/NeHe.bmp")調用LoadBMP()的代碼。載 入 Data目錄下的“NeHe.bmp”位圖文件。如果一切正常,圖像數(shù)據(jù)將存放在TextureImage[0] 中,Status被設為TRUE,然后我們開始創(chuàng)建紋理。

      // 載入位圖,檢查有無錯誤,如果位圖沒找到則退出。
      if (TextureImage[0]=LoadBMP("Data/NeHe.bmp"))
       {
           Status=TRUE;
               // 將 Status 設為 TRUE

   現(xiàn)在使用中TextureImage[0]的數(shù)據(jù)創(chuàng)建紋理。第一行glGenTextures(1, &texture[0])告訴OpenGL我們想生成一個紋理名字(如果您想載入多個紋理,加大數(shù)字)。值得注意的是,開始我們使用GLuinttexture[1]來創(chuàng)建一個紋理的存儲空間,您也許會認為第一個紋理就是存放在&texture[1]中的,但這是錯的。正確的地址應該是 &texture[0]。同樣如果使用GLuint texture[2]的話,第二個紋理存放在texture[1]中。(譯者學C的,在這里應該沒有障礙,數(shù)組就是從零開始的呀。) 第二行glBindTexture(GL_TEXTURE_2D, texture[0])告訴OpenGL將紋理名字texture[0]綁定到紋理目標上。2D紋理只有高度(在Y軸上)和寬度(在X軸上)。主函數(shù)將紋 理名字指派給紋理數(shù)據(jù)。本例中我們告知OpenGL,&texture[0]處的內存已經可用。我們創(chuàng)建的紋理將存儲在&texture [0]的指向的內存區(qū)域。

          glGenTextures(1, &texture[0]);     // 創(chuàng)建紋理
           // 使用來自位圖數(shù)據(jù)生成的典型紋理
          glBindTexture(GL_TEXTURE_2D, texture[0]);

下來我們創(chuàng)建真正的紋理。下面一行告訴OpenGL此紋理是一個2D紋理(GL_TEXTURE_2D)。數(shù)字零代表圖像的詳細程度,通常就由它為零去 了。數(shù)字三是數(shù)據(jù)的成分數(shù)。因為圖像是由紅色數(shù)據(jù),綠色數(shù)據(jù),藍色數(shù)據(jù)三種組分組成。TextureImage[0]->sizeX是紋理的寬度。 如果您知道寬度,您可以在這里填入,但計算機可以很容易的為您指出此值。TextureImage[0]->sizey是紋理的高度。數(shù)字零是邊框 的值,一般就是零。GL_RGB告訴OpenGL圖像數(shù)據(jù)由紅、綠、藍三色數(shù)據(jù)組成。
   GL_UNSIGNED_BYTE意味著組成圖像的數(shù)據(jù)是無符號字節(jié)類型的。最后...TextureImage[0]->data告訴OpenGL紋理數(shù)據(jù)的來源。此例中指向存放在TextureImage[0]記錄中的數(shù)據(jù)。

          // 生成紋理
          glTexImage2D(GL_TEXTURE_2D, 0, 3,
               TextureImage[0]->sizeX, TextureImage[0]->sizeY,
               0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);

下面的兩行告訴OpenGL在顯示圖像時,當它比放大得原始的紋理大(GL_TEXTURE_MAG_FILTER)或縮小得比原始得紋理小 (GL_TEXTURE_MIN_FILTER)時OpenGL采用的濾波方式。通常這兩種情況下我都采用GL_LINEAR。這使得紋理從很遠處到離屏 幕很近時都平滑顯示。使用GL_LINEAR需要CPU和顯卡做更多的運算。如果您的機器很慢,您也許應該采用GL_NEAREST。過濾的紋理在放大的 時候,看起來斑駁的很(譯者就是馬賽克)。您也可以結合這兩種濾波方式。在近處時使用GL_LINEAR,遠處時GL_NEAREST。

          glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);// 線形濾波
          glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);// 線形濾波
      }

   現(xiàn)在我們釋放前面用來存放位圖數(shù)據(jù)的內存。我們先查看位圖數(shù)據(jù)是否存放在處。如果是的話,再查看數(shù)據(jù)是否已經存儲。如果已經存儲的話,刪了它。接著再釋放TextureImage[0]圖像結構以保證所有的內存都能釋放。

      if (TextureImage[0])                // 紋理是否存在
      {
           if (TextureImage[0]->data)
         // 紋理圖像是否存在
          {
               free(TextureImage[0]->data);
    // 釋放紋理圖像占用的內存
          }
           free(TextureImage[0]);
           // 釋放圖像結構
      }

   最后返回狀態(tài)變量。如果一切OK,變量Status的值為TRUE。否則為FALSE

      return Status;                  // 返回 Status
  }

我只在 InitGL 中增加很少的幾行代碼。但為了方便您查看增加了哪幾行,我這段代碼全部重貼一遍。if (!LoadGLTextures())這行代碼調用上面講的子例程載入位圖并生成紋理。如果因為任何原因LoadGLTextures()調用失敗,接 著的一行返回FALSE。如果一切OK,并且紋理創(chuàng)建好了,我們啟用2D紋理映射。如果您忘記啟用的話,您的對象看起來永遠都是純白色,這一定不是什么好 事。

  int InitGL(GLvoid)                     // 此處開始對OpenGL進行所有設置
  {
        if (!LoadGLTextures())
               // 調用紋理載入子例程(新增)
      {
           return FALSE;
               // 如果未能載入,返回FALSE(新增)
      }

       glEnable(GL_TEXTURE_2D);
              // 啟用紋理映射(新增)
      glShadeModel(GL_SMOOTH);              // 啟用陰影平滑
      glClearColor(0.0f, 0.0f, 0.0f, 0.5f);       // 黑色背景
      glClearDepth(1.0f);                // 設置深度緩存
      glEnable(GL_DEPTH_TEST);              // 啟用深度測試
      glDepthFunc(GL_LEQUAL);              // 所作深度測試的類型
      glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // 真正精細的透視修正
      return TRUE;                    // 初始化 OK
  }

現(xiàn)在我們繪制貼圖(紋理映射)過的立方體。這段代碼被狂注釋了一把,應該很好懂。開始兩行代碼 glClear() 和 glLoadIdentity() 是第一課中就有的代碼。 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 清除屏幕并設為我們在 InitGL() 中選定的顏色,本例中是黑色。深度緩存也被清除。模型觀察矩陣也使用glLoadIdentity()重置。

  int DrawGLScene(GLvoid)                  // 從這里開始進行所有的繪制
  {
       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// 清除屏幕和深度緩存
      glLoadIdentity();                 // 重置當前的模型觀察矩陣
      glTranslatef(0.0f,0.0f,-5.0f);           // 移入屏幕 5 個單位

   下面三行使立方體繞X、Y、Z軸旋轉。旋轉多少依賴于變量 xrot, yrot 和 zrot 的值。

      glRotatef(xrot,1.0f,0.0f,0.0f);          // 繞X軸旋轉
      glRotatef(yrot,0.0f,1.0f,0.0f);          // 繞Y軸旋轉
      glRotatef(zrot,0.0f,0.0f,1.0f);          // 繞Z軸旋轉

下一行代碼選擇我們使用的紋理。如果您在您的場景中使用多個紋理,您應該使用來 glBindTexture(GL_TEXTURE_2D, texture[ 所使用紋理對應的數(shù)字 ]) 選擇要綁定的紋理。當您想改變紋理時,應該綁定新的紋理。有一點值得指出的是,您不能在glBegin()和glEnd()之間綁定紋理,必須在 glBegin()之前或 glEnd()之后綁定。注意我們在后面是如何使用glBindTexture來指定和綁定紋理的。

      glBindTexture(GL_TEXTURE_2D, texture[0]);     // 選擇紋理

  為了將紋理正確的映射到四邊形上,您必須將紋理的右上角映射到四邊形的右上角,紋理的左上角映射到四邊形的左上角,紋理的右下角映射到四邊形的右下角,紋理的左下角映射到四邊形的左下角。如果映射錯誤的話,圖像顯示時可能上下顛倒,側向一邊或者什么都不是。
   glTexCoord2f的第一個參數(shù)是X坐標。0.0f是紋理的左側。0.5f是紋理的中點,1.0f是紋理的右側。glTexCoord2f的第二個參數(shù)是Y坐標。0.0f是紋理的底部。0.5f是紋理的中點,1.0f是紋理的頂部。
   所以紋理的左上坐標是X:0.0f,Y:1.0f,四邊形的左上頂點是X:-1.0f,Y:1.0f。其余三點依此類推。
   試著玩玩glTexCoord2f的X,Y坐標參數(shù)。把1.0f改為0.5f 將只顯示紋理的左半部分,把0.0f改為0.5f將只顯示紋理的右半部分。

      glBegin(GL_QUADS);
          // 前面
          glTexCoord2f(0.0f, 0.0f);glVertex3f(-1.0f, -1.0f, 1.0f); // 紋理和四邊形的左下
          glTexCoord2f(1.0f, 0.0f);glVertex3f( 1.0f, -1.0f, 1.0f); // 紋理和四邊形的右下
          glTexCoord2f(1.0f, 1.0f);glVertex3f( 1.0f, 1.0f, 1.0f); // 紋理和四邊形的右上
          glTexCoord2f(0.0f, 1.0f);glVertex3f(-1.0f, 1.0f, 1.0f); // 紋理和四邊形的左上

          // 后面
          glTexCoord2f(1.0f, 0.0f);glVertex3f(-1.0f, -1.0f, -1.0f);// 紋理和四邊形的右下
          glTexCoord2f(1.0f, 1.0f);glVertex3f(-1.0f, 1.0f, -1.0f); // 紋理和四邊形的右上
          glTexCoord2f(0.0f, 1.0f);glVertex3f( 1.0f, 1.0f, -1.0f); // 紋理和四邊形的左上
          glTexCoord2f(0.0f, 0.0f);glVertex3f( 1.0f, -1.0f, -1.0f);// 紋理和四邊形的左下

          // 頂面
          glTexCoord2f(0.0f, 1.0f);glVertex3f(-1.0f, 1.0f, -1.0f); // 紋理和四邊形的左上
          glTexCoord2f(0.0f, 0.0f);glVertex3f(-1.0f, 1.0f, 1.0f); // 紋理和四邊形的左下
          glTexCoord2f(1.0f, 0.0f);glVertex3f( 1.0f, 1.0f, 1.0f); // 紋理和四邊形的右下
          glTexCoord2f(1.0f, 1.0f);glVertex3f( 1.0f, 1.0f, -1.0f); // 紋理和四邊形的右上

          // 底面
          glTexCoord2f(1.0f, 1.0f);glVertex3f(-1.0f, -1.0f, -1.0f);// 紋理和四邊形的右上
          glTexCoord2f(0.0f, 1.0f);glVertex3f( 1.0f, -1.0f, -1.0f);// 紋理和四邊形的左上
          glTexCoord2f(0.0f, 0.0f);glVertex3f( 1.0f, -1.0f, 1.0f); // 紋理和四邊形的左下
          glTexCoord2f(1.0f, 0.0f);glVertex3f(-1.0f, -1.0f, 1.0f); // 紋理和四邊形的右下

          // 右面
          glTexCoord2f(1.0f, 0.0f);glVertex3f( 1.0f, -1.0f, -1.0f);// 紋理和四邊形的右下
          glTexCoord2f(1.0f, 1.0f);glVertex3f( 1.0f, 1.0f, -1.0f); // 紋理和四邊形的右上
          glTexCoord2f(0.0f, 1.0f);glVertex3f( 1.0f, 1.0f, 1.0f); // 紋理和四邊形的左上
          glTexCoord2f(0.0f, 0.0f);glVertex3f( 1.0f, -1.0f, 1.0f); // 紋理和四邊形的左下

          // 左面
          glTexCoord2f(0.0f, 0.0f);glVertex3f(-1.0f, -1.0f, -1.0f);// 紋理和四邊形的左下
          glTexCoord2f(1.0f, 0.0f);glVertex3f(-1.0f, -1.0f, 1.0f); // 紋理和四邊形的右下
          glTexCoord2f(1.0f, 1.0f);glVertex3f(-1.0f, 1.0f, 1.0f); // 紋理和四邊形的右上
          glTexCoord2f(0.0f, 1.0f);glVertex3f(-1.0f, 1.0f, -1.0f); // 紋理和四邊形的左上
      glEnd();

   現(xiàn)在增加xrot、yrot及zrot的值。嘗試變化每次各變量的改變值來及調節(jié)立方體的旋轉速度,或改變+/-號來調節(jié)立方體的旋轉方向。

      xrot+=0.3f;                    // X 軸旋轉
      yrot+=0.2f;                    // Y 軸旋轉
      zrot+=0.4f;                    // Z 軸旋轉
      return true;                    // 繼續(xù)運行
  }
posted on 2007-12-10 11:39 sdfasdf 閱讀(1122) 評論(0)  編輯 收藏 引用 所屬分類: OPENGL
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美r片在线| 国产三区二区一区久久| 亚洲午夜久久久久久久久电影网| 久久国产精品72免费观看| 欧美一区=区| 久久女同精品一区二区| 国产欧美一级| 久久九九精品| 韩日午夜在线资源一区二区| 亚洲线精品一区二区三区八戒| 亚洲美女免费精品视频在线观看| 欧美在线视频全部完| 又紧又大又爽精品一区二区| 亚洲国产精品一区二区www| 一区二区电影免费观看| 亚洲香蕉视频| 好吊日精品视频| 麻豆九一精品爱看视频在线观看免费| 女同性一区二区三区人了人一| 国产亚洲一区在线| 亚洲国产高清自拍| 99在线精品视频在线观看| 国产精品都在这里| 国产精品一区三区| 欧美精品一卡二卡| 亚洲电影免费观看高清| 亚洲婷婷综合久久一本伊一区| 日韩一区二区精品葵司在线| 亚洲高清在线观看| 亚洲蜜桃精久久久久久久| 欧美精品一区二区在线播放| 亚洲欧美在线一区二区| 男女视频一区二区| 亚洲六月丁香色婷婷综合久久| 午夜国产精品影院在线观看| 国产精品视频免费| 亚洲国产精品一区二区三区| 亚洲女同同性videoxma| 亚洲精品黄色| 亚洲图片在区色| 亚洲高清二区| 欧美成人午夜77777| 久久亚洲精品一区二区| 性一交一乱一区二区洋洋av| 欧美日韩一区在线观看视频| 欧美偷拍另类| 老司机一区二区三区| 久久久国产精彩视频美女艺术照福利| 99在线|亚洲一区二区| 99精品视频免费全部在线| 亚洲一级在线观看| 久久综合狠狠综合久久激情| 久久国产直播| 免费不卡在线观看| 欧美激情精品久久久久| 亚洲国产综合在线看不卡| 亚洲第一毛片| 亚洲精品一二三区| 日韩亚洲精品在线| 亚洲在线一区| 久久综合一区| 亚洲国产三级网| 日韩网站在线| 亚洲日韩欧美视频| 亚洲女ⅴideoshd黑人| 亚洲一区二区三区777| 欧美亚洲一区| 欧美亚洲日本一区| 欧美主播一区二区三区| 亚洲国产电影| 久久国产夜色精品鲁鲁99| 欧美激情精品久久久久久免费印度| 欧美日韩一区二区三区视频| 国产一区日韩二区欧美三区| 亚洲日本成人| 久久综合九色综合欧美就去吻| 最新日韩中文字幕| 亚洲盗摄视频| 亚洲欧美日韩国产综合精品二区| 久久夜精品va视频免费观看| 亚洲神马久久| 亚洲另类在线视频| 国产亚洲午夜| 欧美在线在线| 国产午夜精品久久| 国产精品自拍在线| 欧美一区二区三区在线视频 | 亚洲伊人久久综合| 欧美成人一区二免费视频软件| 午夜在线视频观看日韩17c| 国产精品高潮呻吟| 在线播放一区| 欧美在线观看你懂的| 99国产精品私拍| 欧美中文字幕在线| 国产免费亚洲高清| 午夜久久美女| 久久久久www| 亚洲线精品一区二区三区八戒| 欧美在线观看天堂一区二区三区 | 久久黄金**| 亚洲大胆av| 夜夜夜久久久| 国产亚洲午夜高清国产拍精品| 免费黄网站欧美| 欧美日韩国产精品一卡| 欧美一区激情视频在线观看| 裸体女人亚洲精品一区| 久久综合久久久久88| 亚洲一区二区三区高清| 欧美一区二区三区四区夜夜大片| 亚洲国产精品第一区二区三区| 亚洲黄色免费网站| 国产亚洲精品bt天堂精选| 久久综合色88| 亚洲私人黄色宅男| 亚洲精品社区| 欧美中文在线观看| 欧美日韩1区| 亚洲高清免费视频| 伊人狠狠色j香婷婷综合| 宅男精品视频| 一区二区激情| 欧美国产一区在线| 欧美激情视频一区二区三区不卡| 欧美中文在线观看| 久久精品夜色噜噜亚洲a∨| 欧美日韩在线不卡| 亚洲精品一区二区三区av| 亚洲成人影音| 乱人伦精品视频在线观看| 久久婷婷色综合| 永久免费视频成人| 亚洲欧美久久久久一区二区三区| 日韩午夜三级在线| 欧美福利视频| 尤物在线精品| 亚洲激情社区| 亚洲三级免费| 亚洲精品在线免费| 美女精品在线观看| 美女日韩欧美| 影音先锋日韩资源| 久久精品视频在线看| 久久国产精品久久w女人spa| 一本色道久久综合亚洲二区三区| 一区二区高清视频| 欧美日韩中字| 一本色道久久综合亚洲精品不| 日韩一级片网址| 欧美日韩国产二区| 一区二区毛片| 尤物精品国产第一福利三区| 午夜免费日韩视频| 久久人人九九| 亚洲黄网站在线观看| 亚洲图色在线| 亚洲制服av| 亚洲天堂网站在线观看视频| 亚洲一区二区三区久久| 国产欧美一二三区| 欧美成人一品| 亚洲在线免费视频| 欧美大片免费观看| 久久黄色小说| 久久久激情视频| 日韩一二在线观看| 国产精品女人毛片| 欧美精品色一区二区三区| 亚洲欧美日韩久久精品 | 在线视频一区二区| 美女精品自拍一二三四| 一片黄亚洲嫩模| 亚洲精选视频免费看| 99综合在线| 在线观看国产成人av片| 欧美婷婷在线| 欧美精品网站| 欧美日韩国产欧美日美国产精品| 欧美一区2区三区4区公司二百| 亚洲国产成人精品视频| 亚洲综合欧美日韩| 精品成人久久| 1000部精品久久久久久久久| 国产日韩欧美中文在线播放| 99国产精品视频免费观看一公开| 久久久久青草大香线综合精品| 欧美在线国产精品| 艳女tv在线观看国产一区| 亚洲乱码日产精品bd| 在线免费观看视频一区| 激情国产一区二区| 欧美三级韩国三级日本三斤| 裸体丰满少妇做受久久99精品| 亚洲毛片在线免费观看| 国内精品久久久久影院色| 欧美日韩国产一区精品一区| 国产精品久久久久久影视| 国产精品久久久久av| 国产伦精品一区二区三区在线观看 |