精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一起學 WebGL:圖形變形以及矩陣變換

開發 前端
WebGL 用的是按列主序(column major order)規則,即按列填充矩陣,從左往右,屬于主流。

之前繪制了三角形,我們現在給它做一個變形操作。

對一個三角形進行變形,其實就是重新這個三角形的三個頂點的位置,計算完后再繪制出來,相比原來就發生了變形。

變形常見的有位移、選擇、縮放。位移,其實就是給每個頂點的各個坐標值加上偏移量 dx、dy、dz。旋轉稍微復雜些,用到了三角函數。最后是縮放,就是簡單地各個分量乘以縮放比例系數。

這些變換可以抽象簡化成對應的變換矩陣,方便我們用統一的方式作表達,并配合矩陣乘法的結合律,將多個變形矩陣合并成一個復合矩陣,減少計算量。

直接進入正題,看看怎么用 WebGL 實現矩陣變換。

繪制三角形

我們先繪制一個普通的沒做過變形的三角形。

demo 地址:

https://codesandbox.io/s/gbh1xf。

代碼:

/** @type {HTMLCanvasElement} */
const canvas = document.querySelector("canvas");
const gl = canvas.getContext("webgl");

const vertexShaderSrc = `
attribute vec4 a_Position;
void main() {
 gl_Position = a_Position;
 gl_PointSize = 10.0;
}
`;

const fragmentShaderSrc = `
void main() {
  gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
`;

/**** 渲染器生成處理 ****/
// 創建頂點渲染器
const vertexShader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vertexShader, vertexShaderSrc);
gl.compileShader(vertexShader);
// 創建片元渲染器
const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(fragmentShader, fragmentShaderSrc);
gl.compileShader(fragmentShader);
// 程序對象
const program = gl.createProgram();
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);
gl.linkProgram(program);
gl.useProgram(program);
gl.program = program;

// 頂點數據
const vertices = new Float32Array([
  // 第一個點
  0,
  0.5,
  // 第二個點
  -0.5,
  -0.5,
  // 第三個點
  0.5,
  -0.5
]);

// 創建緩存對象
const vertexBuffer = gl.createBuffer();
// 綁定緩存對象到上下文
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
// 向緩存區寫入數據
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);

// 獲取 a_Position 變量地址
const a_Position = gl.getAttribLocation(gl.program, "a_Position");
// 將緩沖區對象分配給 a_Position 變量
gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 0, 0);

// 允許訪問緩存區
gl.enableVertexAttribArray(a_Position);

/*** 繪制 ***/
// 清空畫布,并指定顏色
gl.clearColor(0, 0, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT);
// 繪制三角形
gl.drawArrays(gl.TRIANGLES, 0, 3);

渲染效果:

圖片

位移

位移,最簡單的方式是再聲明一個 u_Translation 向量,和 a_Position 相加就完事了:

但還是矩陣比較方便,具有可以統一格式,計算復合矩陣等優勢。通常變形都是復雜的,旋轉后平移然后再縮放一套下來,矩陣還是很重要的。

頂點著色器的代碼修改為:

const vertexShaderSrc = `
attribute vec4 a_Position;
uniform mat4 u_xformMatrix;
void main() {
 gl_Position = u_xformMatrix * a_Position;
}
`;

西瓜哥在這里加多了一個 u_xformMatrix 變量。

首先用了 uniform 類型修飾符,表示這個變量不會逐頂點發生變化,是固定的。mat4 表示一個 4x4 矩陣,一個有 16 個浮點數的一維數組。

來看看通過矩陣進行位移的實現。位移矩陣如下:

對應的 Float32Array 數組為:

/****** 位移矩陣 ****/
const dx = 0.5; // 向右移動
const dy = -0.3; // 向下移動
// z 先不管,沒用到透視矩陣,設置值也看不到效果

const xformMatrix = new Float32Array([
  1, 0, 0, 0,

  0, 1, 0, 0,

  0, 0, 1, 0,

  dx, dy, 0, 1
]);

WebGL 用的是按列主序(column major order)規則,即按列填充矩陣,從左往右,屬于主流。

還有一種是按行主序(row major order)的,也就是將遍歷數組一行行填充到矩陣,從上往下。比較少見。

接著把這個數組懟到前面頂點著色器聲明的 u_xformMatrix 變量中。

const u_xformMatrix = gl.getUniformLocation(gl.program, "u_xformMatrix");
gl.uniformMatrix4fv(u_xformMatrix, false, xformMatrix);

這里是用 gl.uniformMatrix4fv 來設置 4x4 矩陣的值。

完整代碼:

/** @type {HTMLCanvasElement} */
const canvas = document.querySelector("canvas");
const gl = canvas.getContext("webgl");

const vertexShaderSrc = `
attribute vec4 a_Position;
uniform mat4 u_xformMatrix;
void main() {
 gl_Position = u_xformMatrix * a_Position;
}
`;

const fragmentShaderSrc = `
void main() {
  gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
`;

/**** 渲染器生成處理 ****/
// 創建頂點渲染器
const vertexShader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vertexShader, vertexShaderSrc);
gl.compileShader(vertexShader);
// 創建片元渲染器
const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(fragmentShader, fragmentShaderSrc);
gl.compileShader(fragmentShader);
// 程序對象
const program = gl.createProgram();
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);
gl.linkProgram(program);
gl.useProgram(program);
gl.program = program;

// 頂點數據
const vertices = new Float32Array([
  // 第一個點
  0,
  0.5,
  // 第二個點
  -0.5,
  -0.5,
  // 第三個點
  0.5,
  -0.5
]);

// 創建緩存對象
const vertexBuffer = gl.createBuffer();
// 綁定緩存對象到上下文
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
// 向緩存區寫入數據
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);

// 獲取 a_Position 變量地址
const a_Position = gl.getAttribLocation(gl.program, "a_Position");
// 將緩沖區對象分配給 a_Position 變量
gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 0, 0);

// 允許訪問緩存區
gl.enableVertexAttribArray(a_Position);

/****** 位移矩陣 ****/
const dx = 0.5; // 向右移動
const dy = -0.3; // 向下移動
// z 先不管,沒用到透視矩陣,設置值也看不到效果

const xformMatrix = new Float32Array([
  1,
  0,
  0,
  0,

  0,
  1,
  0,
  0,

  0,
  0,
  1,
  0,

  dx,
  dy,
  0,
  1
]);
const u_xformMatrix = gl.getUniformLocation(gl.program, "u_xformMatrix");
gl.uniformMatrix4fv(u_xformMatrix, false, xformMatrix);

/*** 繪制 ***/
// 清空畫布,并指定顏色
gl.clearColor(0, 0, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT);
// 繪制三角形
gl.drawArrays(gl.TRIANGLES, 0, 3);

demo 地址:

https://codesandbox.io/s/09ujp5?file=/index.js。

看看效果:

圖片

成功向右并向下移動了一段距離。

旋轉

頂點著色器的代碼不用改,這次我們傳一個旋轉矩陣進去,就逆時針旋轉 90 度吧,沿著 z 軸作旋轉。

公式為:

這個公示是幾何數學推導出來的。

數組數據為:

/****** 旋轉矩陣 ****/
const angle = 90;
const radian = (angle * Math.PI) / 180;
const cos = Math.cos(radian);
const sin = Math.sin(radian);

const xformMatrix = new Float32Array([
  cos, sin, 0, 0,

  -sin, cos, 0, 0,

  0, 0, 1, 0,

  0, 0, 0, 1
]);

因為很多 API 只支持弧度制,所以我們需要將角度轉弧度。

然后是旋轉方向,提供一個正數,WebGL 是沿著逆時針旋轉的。順帶一提, Canvas 2D 是順時針旋轉的。

完整代碼:

/** @type {HTMLCanvasElement} */
const canvas = document.querySelector("canvas");
const gl = canvas.getContext("webgl");

const vertexShaderSrc = `
attribute vec4 a_Position;
uniform mat4 u_xformMatrix;
void main() {
 gl_Position = u_xformMatrix * a_Position;
}
`;

const fragmentShaderSrc = `
void main() {
  gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
`;

/**** 渲染器生成處理 ****/
// 創建頂點渲染器
const vertexShader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vertexShader, vertexShaderSrc);
gl.compileShader(vertexShader);
// 創建片元渲染器
const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(fragmentShader, fragmentShaderSrc);
gl.compileShader(fragmentShader);
// 程序對象
const program = gl.createProgram();
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);
gl.linkProgram(program);
gl.useProgram(program);
gl.program = program;

// 頂點數據
const vertices = new Float32Array([
  // 第一個點
  0,
  0.5,
  // 第二個點
  -0.5,
  -0.5,
  // 第三個點
  0.5,
  -0.5
]);

// 創建緩存對象
const vertexBuffer = gl.createBuffer();
// 綁定緩存對象到上下文
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
// 向緩存區寫入數據
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);

// 獲取 a_Position 變量地址
const a_Position = gl.getAttribLocation(gl.program, "a_Position");
// 將緩沖區對象分配給 a_Position 變量
gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 0, 0);

// 允許訪問緩存區
gl.enableVertexAttribArray(a_Position);

/****** 旋轉矩陣 ****/
const angle = 90;
const radian = (angle * Math.PI) / 180;
const cos = Math.cos(radian);
const sin = Math.sin(radian);

const xformMatrix = new Float32Array([
  cos,
  sin,
  0,
  0,

  -sin,
  cos,
  0,
  0,

  0,
  0,
  1,
  0,

  0,
  0,
  0,
  1
]);
const u_xformMatrix = gl.getUniformLocation(gl.program, "u_xformMatrix");
gl.uniformMatrix4fv(u_xformMatrix, false, xformMatrix);

/*** 繪制 ***/
// 清空畫布,并指定顏色
gl.clearColor(0, 0, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT);
// 繪制三角形
gl.drawArrays(gl.TRIANGLES, 0, 3);

demo 地址:

https://codesandbox.io/s/wx44l0?file=/index.js。

渲染效果:

圖片

縮放

縮放公式為:

數組為:

/****** 縮放矩陣 ****/
const sx = 2;
const sy = 2;
const sz = 1;
// sz 先不管,沒用到透視矩陣,設置了值也看不到效果

const xformMatrix = new Float32Array([
  sx, 0, 0, 0,

  0, sy, 0, 0,

  0, 0, sz, 0,

  0, 0, 0, 1
]);

完整代碼:

/** @type {HTMLCanvasElement} */
const canvas = document.querySelector("canvas");
const gl = canvas.getContext("webgl");

const vertexShaderSrc = `
attribute vec4 a_Position;
uniform mat4 u_xformMatrix;
void main() {
 gl_Position = u_xformMatrix * a_Position;
}
`;

const fragmentShaderSrc = `
void main() {
  gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
`;

/**** 渲染器生成處理 ****/
// 創建頂點渲染器
const vertexShader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vertexShader, vertexShaderSrc);
gl.compileShader(vertexShader);
// 創建片元渲染器
const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(fragmentShader, fragmentShaderSrc);
gl.compileShader(fragmentShader);
// 程序對象
const program = gl.createProgram();
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);
gl.linkProgram(program);
gl.useProgram(program);
gl.program = program;

// 頂點數據
const vertices = new Float32Array([
  // 第一個點
  0,
  0.5,
  // 第二個點
  -0.5,
  -0.5,
  // 第三個點
  0.5,
  -0.5
]);

// 創建緩存對象
const vertexBuffer = gl.createBuffer();
// 綁定緩存對象到上下文
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
// 向緩存區寫入數據
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);

// 獲取 a_Position 變量地址
const a_Position = gl.getAttribLocation(gl.program, "a_Position");
// 將緩沖區對象分配給 a_Position 變量
gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 0, 0);

// 允許訪問緩存區
gl.enableVertexAttribArray(a_Position);

/****** 縮放矩陣 ****/
const sx = 2;
const sy = 2;
const sz = 2;
// z 先不管,沒用到透視矩陣,設置了值也看不到效果

const xformMatrix = new Float32Array([
  sx,
  0,
  0,
  0,

  0,
  sy,
  0,
  0,

  0,
  0,
  sz,
  0,

  0,
  0,
  0,
  1
]);
const u_xformMatrix = gl.getUniformLocation(gl.program, "u_xformMatrix");
gl.uniformMatrix4fv(u_xformMatrix, false, xformMatrix);

/*** 繪制 ***/
// 清空畫布,并指定顏色
gl.clearColor(0, 0, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT);
// 繪制三角形
gl.drawArrays(gl.TRIANGLES, 0, 3);

demo 地址:

https://codesandbox.io/s/jsfdtr?file=/index.js。

繪制效果:

圖片

結尾

矩陣變換是 WebGL 非常重要的一部分。

本節介紹了三種常見的變形矩陣,并展示了各自的效果,下節我們講多個矩陣的組合,復合矩陣。

責任編輯:姜華 來源: 前端西瓜哥
相關推薦

2023-05-04 08:48:42

WebGL復合矩陣

2023-04-26 07:42:16

WebGL圖元的類型

2023-06-26 15:14:19

WebGL紋理對象學習

2023-04-12 07:46:24

JavaScriptWebGL

2023-03-29 07:31:09

WebGL坐標系

2023-05-08 07:29:48

WebGL視圖矩陣

2023-04-13 07:45:15

WebGL片元著色器

2023-05-16 07:44:03

紋理映射WebGL

2023-05-31 20:10:03

WebGL繪制立方體

2023-04-11 07:48:32

WebGLCanvas

2023-05-17 08:28:55

2023-04-17 09:01:01

WebGL繪制三角形

2023-02-23 08:40:09

Pixijs修改圖形屬性

2023-02-22 09:27:31

CanvasWebGL

2022-11-29 16:35:02

Tetris鴻蒙

2022-12-02 14:20:09

Tetris鴻蒙

2023-03-30 09:32:27

2022-11-14 17:01:34

游戲開發畫布功能

2023-05-06 07:23:57

2023-11-13 22:27:53

Mapping數據庫
點贊
收藏

51CTO技術棧公眾號

免费一二一二在线视频| 一区二区乱子伦在线播放| 北条麻妃一区二区三区在线观看| 一区二区三区在线观看网站| 春色成人在线视频| 久久艹精品视频| 亚洲欧洲av| 91麻豆精品国产91久久久久久久久 | 一起操在线播放| 香蕉成人app| 一本久久a久久免费精品不卡| 亚洲国产婷婷香蕉久久久久久99| 99久久精品国产一区色 | 国产欧美在线一区| 一级日本在线| 成人综合在线网站| 国产精品久久久91| 精品视频在线观看免费| 精品美女久久| 精品国产免费久久| 亚洲欧美久久久久| 国产高潮在线| 亚洲欧美综合在线精品| 国产日韩精品一区观看| 亚洲一级av毛片| 亚洲狼人精品一区二区三区| 日韩中文字幕在线观看| aa一级黄色片| jizz性欧美23| 91精品国产综合久久香蕉的特点| 免费日韩视频在线观看| 国内老司机av在线| 亚洲欧洲成人精品av97| 日韩中文字幕一区二区| 天天操天天操天天| 国产精品1024| 成人免费视频a| 99成人精品视频| 夜夜嗨一区二区三区| 欧美成人精品三级在线观看| 91精品久久久久久久久久久久| 成人午夜大片| 日韩欧美区一区二| 一级日本黄色片| 国产亚洲人成a在线v网站 | 一级做a爰片久久| 九色在线视频| 91视频精品在这里| 精品1区2区| 欧美 日韩 国产 精品| 国产一区久久久| 成人h猎奇视频网站| 亚洲午夜在线播放| 日韩不卡免费视频| 国产精国产精品| 6080午夜伦理| 美女黄色成人网| 欧美亚洲第一区| 97免费在线观看视频| 亚洲区欧美区| 91精品国产成人| 国产精品免费av一区二区| 1024日韩| 91av网站在线播放| 久久久久久久久久久久久av| 亚洲欧洲一区二区天堂久久| 国内精品久久久久久影视8| 免费一级片视频| 激情久久一区| 国产91精品视频在线观看| 一级片中文字幕| 另类激情亚洲| 国产精品久久二区| 国产免费黄色网址| 高清国产一区二区三区| 国产欧美亚洲日本| 瑟瑟在线观看| 中文子幕无线码一区tr | 国产精品久久久久久久久久10秀| xvideos亚洲| 欧美国产在线看| 亚洲人成免费| 国产精品国产三级国产aⅴ9色| 日韩av免费播放| 激情综合亚洲精品| 99re国产| 香蕉视频911| 91麻豆免费看| 亚洲视频电影| 久草在线资源站资源站| 欧美性猛交xxx| 中日韩av在线播放| 91精品啪在线观看国产手机| 日韩精品极品视频免费观看| 中文字幕人妻一区二区三区在线视频| 欧美激情另类| 亚洲91精品在线| 波多野结衣黄色| 国产精品88av| 欧美日韩另类丝袜其他| 男女啪啪在线观看| 亚洲成人自拍网| 国产天堂在线播放| 一区二区三区视频免费视频观看网站| 国产丝袜视频一区| 欧美偷拍第一页| 午夜亚洲影视| 亚洲最大av在线| 日韩一区av| 一区二区三区四区在线免费观看| 男人揉女人奶房视频60分| 色综合视频一区二区三区日韩| 欧美精品一区二区三区四区| 99在线视频免费| 亚洲精品孕妇| 91亚洲精品久久久| 黄网站在线观看| 亚洲国产一区二区三区 | 国产一区二区三区在线观看精品 | 亚洲黄色在线观看视频| 国产人妖乱国产精品人妖| 91视频 - 88av| 国产美女久久| 国产亚洲综合久久| 国产乱码久久久久久| 精品中文字幕一区二区| 青青成人在线| 欧产日产国产精品视频| 日韩一区二区在线播放| 毛片久久久久久| 午夜综合激情| 国产精品一区在线播放| 久操免费在线| 欧美日韩视频不卡| 中文字幕av久久爽一区| 国产精品久久久久毛片大屁完整版| 成人做爽爽免费视频| www.久久热.com| 色偷偷88欧美精品久久久| 91视频在线免费| 一区久久精品| 成人欧美一区二区| 日本在线观看高清完整版| 欧美日本在线看| 亚洲色图第四色| 日本一区中文字幕| 欧美极品色图| 成人影院大全| 亚洲欧美制服中文字幕| 免费黄色网址在线| www国产精品av| 丝袜老师办公室里做好紧好爽| 久久99国产精品久久99大师| 久久久亚洲网站| 人妻少妇一区二区三区| 亚洲第一主播视频| 亚洲图片综合网| 香蕉久久国产| 欧美污视频久久久| 免费观看成人性生生活片| 亚洲乱码一区av黑人高潮| 国产情侣在线视频| 国产亚洲自拍一区| 国产九九热视频| 午夜av一区| 99re在线播放| 欧美精品videossex少妇| 精品国产免费视频| 国产无遮挡呻吟娇喘视频| 91啪亚洲精品| 韩国中文字幕av| 久久久精品久久久久久96| 91免费综合在线| 欧美xxxbbb| 日韩毛片中文字幕| 最近中文字幕av| 亚洲柠檬福利资源导航| 久久久久亚洲av成人网人人软件| 亚洲激情女人| 日韩欧美一区二区视频在线播放 | 久久久久久久久免费看无码 | 亚洲AV午夜精品| 图片区小说区国产精品视频| 波多野结衣办公室33分钟| 免费黄网站欧美| 在线观看17c| 午夜精品福利影院| 国产九九精品视频| 欧美aaa免费| www日本高清视频| 日韩欧美亚洲一二三区| 国精品人伦一区二区三区蜜桃| 国产激情偷乱视频一区二区三区| 91九色丨porny丨国产jk| 国模精品一区| 97超碰在线播放| 电影一区二区三| 欧美久久久精品| 四虎影视精品成人| 欧美精品第1页| 青青国产在线观看| 亚洲日本乱码在线观看| 波多野结衣办公室33分钟| 韩国一区二区在线观看| 国产淫片av片久久久久久| 99久久精品网| 欧美日韩亚洲一区二区三区在线观看 | 教室别恋欧美无删减版| 亚洲sss综合天堂久久| 成人性生活视频| 久久久久久久久国产精品| www.黄在线观看| 精品调教chinesegay| av中文字幕免费在线观看| 色综合天天综合狠狠| 欧美精品成人久久| 中文字幕中文字幕在线一区| 久久国产精品无码一级毛片 | 色素色在线综合| 精品无码m3u8在线观看| 国产精品久久久久久久久搜平片| 在线免费观看a级片| 国产电影精品久久禁18| 亚洲国产精品三区| 国产精品婷婷| 国产www免费| 欧美一区在线看| 亚洲欧洲精品一区二区三区波多野1战4| 久久资源综合| 国产精品v欧美精品v日韩精品 | 国产欧美另类| 欧美国产日韩激情| 欧美精品激情| 国产日韩欧美大片| 久久久久久久久久久久久久| 日本在线观看一区二区| 伊人久久大香线蕉| 久久久一本精品99久久精品| 99香蕉久久| eeuss一区二区三区| 一区二区在线免费播放| 5566中文字幕一区二区| 国产成人久久精品一区二区三区| 国产精品久久久久久亚洲调教| 亚洲午夜天堂| 欧美性视频在线| 欧美电影网址| 国产精品mp4| 97精品国产综合久久久动漫日韩 | 成人avav影音| 91丨porny丨对白| 99久久久久免费精品国产 | 日本一区二区在线不卡| 中国毛片在线观看| 久久精品视频一区二区| 一级黄色性视频| 国产欧美日产一区| 成人精品一二三区| 1000部国产精品成人观看| 爱爱视频免费在线观看| 一区二区三区自拍| 国产精品 欧美 日韩| 精品av在线播放| 99精品人妻国产毛片| 欧美在线综合视频| 国产又爽又黄免费软件| 欧美一区二区黄| 亚洲国产福利视频| 国产视频亚洲视频| 日本在线免费网| 欧美人在线视频| 免费h在线看| 国产女人18毛片水18精品| 激情久久免费视频| 国产美女精品在线观看| 色爱av综合网| 亚洲蜜桃av| 欧美激情成人在线| 男人添女人下面高潮视频| 久久久久久9| 欧美男女交配视频| 国产精品一卡二卡在线观看| 在线精品一区二区三区| 国产日韩视频一区二区三区| 在线观看亚洲网站| 性做久久久久久久免费看| 国内自拍视频在线播放| 欧美欧美欧美欧美首页| 亚洲精品久久久狠狠狠爱| 亚洲日本成人女熟在线观看| 久草资源在线观看| 4p变态网欧美系列| 欧美天堂一区| 国产一级特黄a大片99| 不卡中文字幕| 国产二区视频在线| 久久精品二区亚洲w码| 久久久久亚洲AV成人无码国产| 国产精品亲子乱子伦xxxx裸| 久久精品亚洲无码| 欧美色综合天天久久综合精品| 韩国av在线免费观看| 中文字幕精品网| 激情黄产视频在线免费观看| 国产精品美腿一区在线看| 91蝌蚪精品视频| 日韩欧美在线一区二区| 在线精品小视频| wwww.国产| 99re热这里只有精品视频| 日韩欧美123区| 欧洲一区在线观看| 日韩在线视频免费| 久久精品国产一区| 亚洲一区二区三区四区| 国产精品一区二区三区在线 | 色视频www在线播放国产成人 | 国产精品久久电影观看| 麻豆一区一区三区四区| 神马午夜伦理影院| 蜜乳av一区二区| 久久精品国产亚洲av久| 亚洲成在人线在线播放| 国产福利资源在线| 日韩在线观看av| 欧美精选视频一区二区| 精品国产一区二区三区麻豆免费观看完整版 | 日韩不卡av在线| 色综合天天综合狠狠| 无码精品人妻一区二区三区影院| 久99九色视频在线观看| 高清一区二区三区av| 在线看成人av电影| 秋霞电影网一区二区| 妺妺窝人体色WWW精品| 精品成人在线视频| 日本免费不卡视频| 欧美激情免费观看| 日韩欧美中文字幕一区二区三区| 欧美性视频在线播放| 久久99精品国产麻豆婷婷洗澡| 青娱乐国产视频| 欧美图区在线视频| 在线激情小视频| 国产精品视频白浆免费视频| 国产成人短视频在线观看| 人妻有码中文字幕| 久久麻豆一区二区| 天天综合网久久综合网| 精品香蕉在线观看视频一| 中文字幕在线高清| 欧美在线一二三区| 欧美a一区二区| 丁香六月激情综合| 69精品人人人人| 91最新在线视频| 国产成人精品一区二区三区福利 | 国产精品欧美一区喷水| 一卡二卡三卡在线观看| 久热在线中文字幕色999舞| 久久丁香四色| av在线免费观看国产| 成人精品亚洲人成在线| 日韩欧美三级在线观看| 精品一区电影国产| www.成人在线视频| www.午夜色| 丰满少妇久久久久久久| 欧美一二三区视频| 伊人久久精品视频| 四虎影视精品永久在线观看| 欧美精品久久96人妻无码| 成人视屏免费看| 国产婷婷色一区二区在线观看| 中国日韩欧美久久久久久久久| 96sao精品免费视频观看| 日韩成人手机在线| 91视频在线观看免费| 中文字幕1区2区3区| 久久av在线播放| 美女午夜精品| 8x8x最新地址| 亚洲曰韩产成在线| 免费在线视频一级不卡| 91精品久久久久久久久久入口 | 国产精品自拍片| 国产调教视频一区| 国产毛片毛片毛片毛片毛片| 68精品久久久久久欧美 | 色吧影院999| 成人激情自拍| 爱情岛论坛亚洲首页入口章节| 亚洲另类一区二区| 天堂在线资源8| 国产日韩欧美中文在线播放| 亚洲黄色免费| 亚洲天堂黄色片| 亚洲欧美国产视频| 秋霞一区二区| 中文字幕视频在线免费观看|