久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何使用Three.js为3D模型构建Color Customizer应用

發布時間:2023/12/16 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何使用Three.js为3D模型构建Color Customizer应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
View demo 查看演示Download Source 下載源

In this tutorial you’ll learn how to create a customizer app that lets you change the colors of a 3D model of a chair using Three.js.

在本教程中,您將學習如何創建定制器應用程序,該應用程序可讓您使用Three.js更改椅子的3D模型的顏色。

See the demo in action: 3D Model Color Customizer App with Three.js

觀看實際的演示:具有Three.js的3D模型顏色定制程序

快速介紹(A quick introduction)

This tool is built inspired by the Vans shoe customizer, and uses the amazing JavaScript 3D library Three.js.

該工具的靈感來自Vans鞋子定制器,并使用了令人驚嘆JavaScript 3D庫Three.js 。

For this tutorial, I’ll assume you are comfortable with JavaScript, HTML and CSS.

對于本教程,我假設您對JavaScript,HTML和CSS感到滿意。

I’m going to do something a little bit different here in the interest of actually teaching you, and not making you copy/paste parts that aren’t all that relevant to this tutorial,?we’re going to start with all of the CSS in place. The CSS really is just for the dressing around the app, it focusses on the UI only. That being said, each time we paste some HTML, I’ll explain quickly what the CSS does. Let’s get started.

為了實際教您,我將在這里做一些不同的事情,而不是讓您復制/粘貼與本教程無關的部分,我們將從所有CSS開始到位。 CSS確實僅是圍繞應用程序的外觀,它僅關注UI。 話雖如此,每次我們粘貼一些HTML時,我都會快速解釋CSS的作用。 讓我們開始吧。

第1部分:3D模型 (Part 1: The 3D model)

If you want to skip this part entirely, feel free to do so, but it may pay to read it just so you have a deeper understanding of how everything works.

如果您想完全跳過這一部分,請隨時這樣做,但是閱讀它可能有好處,因為這樣您就可以更深入地了解一切。

This isn’t a 3D modelling tutorial, but I will explain how the model is set up in Blender, and if you’d like to create something of your own, change a free model you found somewhere online, or instruct someone you’re commissioning. Here’s some information about how our chairs 3D model is authored.

這不是3D建模教程,但是我將解釋如何在Blender中設置模型,如果您要創建自己的東西,請更改在網上某個地方找到的免費模型,或指示某人調試。 這是有關我們的椅子3D模型是如何創作的一些信息。

The 3D model for this tutorial is hosted and included within the JavaScript, so don’t worry about downloading or having to do any of this unless you’d like to look further into using Blender, and learning how to create your own model.

本教程的3D模型已托管并包含在JavaScript中,因此,除非您想進一步使用Blender并學習如何創建自己的模型,否則不必擔心下載或執行任何此類操作。

規模 (Scale)

The scale is set to approximately what it would be in the real world; I don’t know if this is important, but it feels like the right thing to do, so why not?

該比例設置為大約與現實世界中的比例相同。 我不知道這是否重要,但這聽起來像是對的事,那為什么不呢?

分層和命名約定 (Layering and naming conventions)

This part?is important: each element of the object you want to customize independently needs to be its own object in the 3D scene, and each item needs to have a unique name. Here we have back, base, cushions, legs and supports. Note that if you have say, three items all called supports, Blender is going to name them as supports,?supports.001, supports.002. That doesn’t matter, because in our JavaScript we’ll be using?includes(“supports”)?to find all of those objects that contain the string?supports in it.

這部分很重要:要獨立定制的對象的每個元素在3D場景中都必須是其自己的對象,并且每個項目都必須具有唯一的名稱。 在這里,我們有靠背,底座,靠墊,腿和支撐。 請注意,如果您說了三個項目,都稱為supports ,Blender會將其命名為supports , supports.001,supports.002 。 沒關系,因為在我們JavaScript中,我們將使用include(“ supports”)查找其中包含字符串支持的所有那些對象。

放置 (Placement)

The model should be placed at the world origin, ideally with its feet on the floor. It should ideally be facing the right way, but this can easily be rotated via JavaScript, no harm, no foul.

該模型應放置在世界原點,最好將其腳放在地板上。 理想情況下,它應該面向正確的方向,但是可以很容易地通過JavaScript進行旋轉,沒有危害,沒有犯規。

設置出口 (Setting up for export)

Before exporting, you want to use Blender’s Smart UV unwrap option. Without going too much into detail, this makes textures keep its aspect ratio in tact as it wraps around the different shapes in your model without stretching in weird ways (I’d advise reading up on this option only if you’re making your own model).

導出之前,您要使用Blender的Smart UV unwrap選項。 無需過多介紹細節,這可以使紋理保持縱橫比不變,因為它可以包裹模型中的不同形狀而不會怪異地伸展(建議您僅在制作自己的模型時閱讀此選項)。

You want to be sure to select all of your objects, and apply your transformations. For instance, if you changed the scale or transformed it in any way, you’re telling Blender that this is the new 100% scale, instead of it still being 32.445% scale if you scaled it down a bit.

您要確保選擇所有對象,然后應用轉換。 例如,如果您更改了縮放比例或以任何方式對其進行了轉換,就告訴Bl??ender這是新的100%縮放比例,而不是將其縮小一點仍為32.445%縮放比例。

文件格式 (File Format)

Apparently Three.js supports a bunch of 3D object file formats, but the one it recommends is glTF (.glb). Blender supports this format as an export option, so no worries there.

顯然Three.js支持多種3D對象文件格式,但它推薦的格式是glTF(.glb)。 Blender支持將此格式作為導出選項,因此不用擔心。

第2部分:設置環境 (Part 2: Setting up our environment)

Go ahead and fork this pen, or start your own one and copy the CSS from this pen. This is a blank pen with just the CSS we’re going to be using in this tutorial.

快來拿起這支筆,或者開始自己的一支并從這支筆復制CSS。 這只是一支空白筆,僅包含我們將在本教程中使用CSS。

See the Pen 3D Chair Customizer Tutorial – Blank by Kyle Wetton (@kylewetton) on CodePen.

請參閱CodePen上的Pen 3D Chair Customizer教程–由Kyle Wetton( @kylewetton )撰寫的空白。

If you don’t choose to fork this, grab the HTML as well; it has the responsive meta tags and Google fonts included.

如果您不選擇分叉,也請獲取HTML; 它具有響應性元標記和Google字體。

We’re going to use three dependencies for this tutorial. I’ve included comments above each that describe what they do. Copy these into your HTML, right at the bottom:

在本教程中,我們將使用三個依賴項。 我在每個評論的上方都包含了描述其功能的評論。 將這些內容復制到HTML中的底部:

<!-- The main Three.js file --> <script src='https://cdnjs.cloudflare.com/ajax/libs/three.js/108/three.min.js'></script><!-- This brings in the ability to load custom 3D objects in the .gltf file format. Blender allows the ability to export to this format out the box --> <script src='https://cdn.jsdelivr.net/gh/mrdoob/Three.js@r92/examples/js/loaders/GLTFLoader.js'></script><!-- This is a simple to use extension for Three.js that activates all the rotating, dragging and zooming controls we need for both mouse and touch, there isn't a clear CDN for this that I can find --> <script src='https://threejs.org/examples/js/controls/OrbitControls.js'></script>

Let’s include the canvas element. The entire 3D experience gets rendered into this element, all other HTML will be UI around this. Place the canvas at the bottom of your HTML, above your dependencies.

讓我們包括canvas元素。 整個3D體驗都將渲染到此元素中,所有其他HTML都將是與此相關的UI。 將畫布放在您的依賴項上方HTML底部。

<!-- The canvas element is used to draw the 3D scene --> <canvas id="c"></canvas>

Now, we’re going to create a new Scene for Three.js. In your JavaScript, lets make a reference to this scene like so:

現在,我們將為Three.js創建一個新的場景。 在您JavaScript中,讓我們像這樣對這個場景進行引用:

// Init the scene const scene = new THREE.Scene();

Below this, we’re going to reference our canvas element

在此之下,我們將引用我們的canvas元素

const canvas = document.querySelector('#c');

Three.js requires a few things to run, and we will get to all of them. The first was scene, the second is a renderer. Let’s add this below our canvas reference. This creates a new WebGLRenderer, we’re passing our canvas to it, and we’ve opted in for antialiasing, this creates smoother edges around our 3D model.

Three.js需要一些操作才能運行,我們將全部完成。 第一個是場景,第二個是渲染器。 讓我們將其添加到我們的畫布參考下面。 這將創建一個新的WebGLRenderer,我們將畫布傳遞給它,并且我們選擇了抗鋸齒,這將在3D模型周圍創建更平滑的邊緣。

// Init the renderer const renderer = new THREE.WebGLRenderer({canvas, antialias: true});

And now we’re going to append the renderer to the document body

現在,我們將渲染器附加到文檔主體

document.body.appendChild(renderer.domElement);

The CSS for the canvas element is just stretching it to 100% height and width of the body, so your entire page has now turned black, because the entire canvas is now black!

canvas元素CSS只是將其拉伸到主體的高度和寬度的100%,因此您的整個頁面現在都變成了黑色,因為整個畫布現在都變成了黑色!

Our scene is black, we’re on the right track here.

我們的場景是黑色的,我們在正確的軌道上。

The next thing Three.js needs is an update loop, basically this is a function that runs on each frame draw and is really important to the way our app will work. We’ve called our update function animate(). Let’s add it below everything else in our JavaScript.

Three.js接下來需要做的是一個更新循環,基本上這是一個在每次繪制框架時都運行的函數,對于我們的應用程序的工作方式確實非常重要。 我們已將更新函數稱為animate() 。 讓我們將其添加到JavaScript的其他所有內容之下。

function animate() {renderer.render(scene, camera);requestAnimationFrame(animate); }animate();

Note that we’re referencing a camera here, but we haven’t set one up yet. Let’s add one now.

請注意,我們此處引用的是攝像機,但尚未設置。 現在添加一個。

At the top of your JavaScript, we’ll add a variable called cameraFar. When we add our camera to our scene, it’s going to be added at position 0,0,0. Which is where our chair is sitting! so cameraFar is the variable that tells our camera how far off this mark to move, so that we can see our chair.

在您JavaScript的頂部,我們將添加一個名為cameraFar的變量。 當我們將攝像機添加到場景中時,它將被添加到位置0,0,0。 我們的椅子坐在哪兒! 所以cameraFar是一個變量,它告訴我們的相機該標記移動了多遠,以便我們可以看到椅子。

var cameraFar = 5;

Now, above our function animate() {….} lets add a camera.

現在,在我們的函數animate(){…。}上方,添加一個攝像機。

// Add a camera var camera = new THREE.PerspectiveCamera( 50, window.innerWidth / window.innerHeight, 0.1, 1000); camera.position.z = cameraFar; camera.position.x = 0;

This is a perspective camera, with the field of view of 50, the size of the whole window/canvas, and some default clipping planes. The planes determine how near or far the camera should be before the object isn’t rendered. It’s not something we need to pay attention to in our app.

這是一臺透視相機,視野為50,整個窗口/畫布的大小以及一些默認的裁剪平面。 這些平面確定了在不渲染對象之前相機應該接近或遠近。 這不是我們在應用程序中需要注意的事情。

Our scene is still black, let’s set a background color.

我們的場景仍然是黑色的,讓我們設置背景色。

At the top, above our scene reference, add a background color variable called BACKGROUND_COLOR.

在場景引用上方的頂部,添加一個名為Background_COLOR的背景顏色變量。

const BACKGROUND_COLOR = 0xf1f1f1;

Notice how we used 0x instead of # in our hex? These are hexadecimal numbers, and the only thing you need to remember about that is that its not a string the way you’d handle a standard #hex variable in JavaScript. It’s an integer and it starts with 0x.

注意我們在十六進制中如何使用0x而不是#? 這些是十六進制數字,關于此,您唯一需要記住的是它不是字符串,而不是您在JavaScript中處理標準#hex變量的方式。 這是一個整數,以0x開頭。

Below our scene reference, let’s update the scenes background color, and add some fog of the same color off in the distance, this is going to help hide the edges of the floor once we add that in.

在場景參考下方,讓我們更新場景的背景色,并在遠處添加一些相同顏色的霧,這將有助于在添加后隱藏地板的邊緣。

const BACKGROUND_COLOR = 0xf1f1f1;// Init the scene const scene = new THREE.Scene();// Set background scene.background = new THREE.Color(BACKGROUND_COLOR ); scene.fog = new THREE.Fog(BACKGROUND_COLOR, 20, 100);

Now it’s an empty world. It’s hard to tell that though, because there’s nothing in there, nothing casting shadows. We have a blank scene. Now it’s time to load in our model.

現在是一個空的世界。 但是,很難說出來,因為那里什么也沒有,也沒有投下陰影。 我們有一個空白的場景。 現在是時候加載我們的模型了。

第3部分:加載模型 (Part 3: Loading the model)

We’re going to add the function that loads in models, this is provided by our second dependency we added in our HTML.

我們將添加在模型中加載的函數,這是由我們在HTML中添加的第二個依賴項提供的。

Before we do that though, let’s reference the model, we’ll be using this variable quite a bit. Add this at the top of your JavaScript, above your BACKGROUND_COLOR. Let’s also add a path to the model. I’ve hosted it for us, it’s about 1Mb in size.

在進行此操作之前,讓我們先參考模型,我們將大量使用此變量。 將此添加到您JavaScript頂部,BACKGROUND_COLOR上方。 我們還為模型添加路徑。 我已經為我們托管了它,它的大小約為1Mb。

var theModel; const MODEL_PATH = "https://s3-us-west-2.amazonaws.com/s.cdpn.io/1376484/chair.glb";

Now we can create a new loader, and use the load method. This sets theModel as our 3D models entire scene. We’re also going to set the size for this app, the right size seems to be about twice as big as it’s loaded. Thirdly, we’re going to offset the y position by -1 to bring it down a little bit, and finally we’re going to add the model to the scene.

現在,我們可以創建一個新的loader ,并使用load方法。 這theModel設置為我們整個場景的3D模型。 我們還將設置該應用程序的大小,正確的大小似乎是已加載大小的兩倍。 第三,我們將y位置偏移-1以將其降低一點,最后我們將模型添加到場景中。

The first parameter is the model’s filepath, the second is a function that runs once the resource is loaded, the third is undefined for now but can be used for a second function that runs while the resource is loading, and the final parameter handles errors.

第一個參數是模型的文件路徑,第二個參數是在加載資源后運行的函數,第三個參數目前尚未定義,但可用于第二個在資源加載時運行的函數,最后一個參數用于處理錯誤。

Add this below our camera.

將此添加到我們的相機下方。

// Init the object loader var loader = new THREE.GLTFLoader();loader.load(MODEL_PATH, function(gltf) {theModel = gltf.scene;// Set the models initial scale theModel.scale.set(2,2,2);// Offset the y position a bittheModel.position.y = -1;// Add the model to the scenescene.add(theModel);}, undefined, function(error) {console.error(error) });

At this point you should be seeing a stretched, black, pixelated chair. As awful as it looks, this is right so far. So don’t worry!

此時,您應該看到一張拉伸的黑色像素化椅子。 看起來很糟糕,到目前為止,這是正確的。 所以不用擔心!

Along with a camera, we need lights. The background isn’t affected by lights, but if we added a floor right now, it would also be black (dark). There are a number of lights available for Three.js, and a number of options to tweak all of them. We’re going to add two: a hemisphere light, and a directional light. The settings are also sorted for our app, and they include position and intensity. This is something to play around with if you ever adopt these methods in your own app, but for now, lets use the ones I’ve included. Add these lights below your loader.

除了相機,我們還需要燈光。 背景不受燈光的影響,但是如果我們現在添加一個地板,它也將是黑色(深色)。 Three.js有許多可用的燈,還有許多選項可以對其進行調整。 我們將添加兩個:半球燈和定向燈。 設置也針對我們的應用進行了排序,其中包括位置和強度。 如果您曾經在自己的應用程序中采用這些方法,則可以嘗試使用這些方法,但是現在,讓我們使用我包含的方法。 將這些燈添加到裝載機下方。

// Add lights var hemiLight = new THREE.HemisphereLight( 0xffffff, 0xffffff, 0.61 );hemiLight.position.set( 0, 50, 0 ); // Add hemisphere light to scene scene.add( hemiLight );var dirLight = new THREE.DirectionalLight( 0xffffff, 0.54 );dirLight.position.set( -8, 12, 8 );dirLight.castShadow = true;dirLight.shadow.mapSize = new THREE.Vector2(1024, 1024); // Add directional Light to scene scene.add( dirLight );

Your chair looks marginally better! Before we continue, here’s our JavaScript so far:

您的椅子看起來稍微好一點! 在繼續之前,這里是到目前為止JavaScript:

var cameraFar = 5; var theModel;const MODEL_PATH = "https://s3-us-west-2.amazonaws.com/s.cdpn.io/1376484/chair.glb";const BACKGROUND_COLOR = 0xf1f1f1; // Init the scene const scene = new THREE.Scene(); // Set background scene.background = new THREE.Color(BACKGROUND_COLOR ); scene.fog = new THREE.Fog(BACKGROUND_COLOR, 20, 100);const canvas = document.querySelector('#c');// Init the renderer const renderer = new THREE.WebGLRenderer({canvas, antialias: true});document.body.appendChild(renderer.domElement);// Add a camerra var camera = new THREE.PerspectiveCamera( 50, window.innerWidth / window.innerHeight, 0.1, 1000); camera.position.z = cameraFar; camera.position.x = 0;// Init the object loader var loader = new THREE.GLTFLoader();loader.load(MODEL_PATH, function(gltf) {theModel = gltf.scene;// Set the models initial scale theModel.scale.set(2,2,2);// Offset the y position a bittheModel.position.y = -1;// Add the model to the scenescene.add(theModel);}, undefined, function(error) {console.error(error) });// Add lights var hemiLight = new THREE.HemisphereLight( 0xffffff, 0xffffff, 0.61 );hemiLight.position.set( 0, 50, 0 ); // Add hemisphere light to scene scene.add( hemiLight );var dirLight = new THREE.DirectionalLight( 0xffffff, 0.54 );dirLight.position.set( -8, 12, 8 );dirLight.castShadow = true;dirLight.shadow.mapSize = new THREE.Vector2(1024, 1024); // Add directional Light to scene scene.add( dirLight );function animate() {renderer.render(scene, camera);requestAnimationFrame(animate); }animate();

Here’s what we should be looking at right now:

這是我們現在應該查看的內容:

Let’s fix the pixelation and the stretching. Three.js needs to update the canvas size when it shifts, and it needs to set its internal resolution not only to the dimensions of the canvas, but also the device pixel ratio of the screen (which is much higher on phones).

讓我們修復像素化和拉伸。 Three.js需要在移動時更新畫布的大小,并且不僅需要將其內部分辨率設置為畫布的尺寸,還需要設置屏幕的設備像素比率(在手機上要高得多)。

Lets head to the bottom of our JavaScript, below where we call animate(), and add this function. This function basically listens to both, the canvas size and the window size, and returns a boolean depending on whether the two sizes are the same or not. We will use that function inside the animate function to determine whether to re-render the scene. This function is also going to take into account the device pixel ratio to be sure that the canvas is sharp on mobile phones too.

讓我們進入JavaScript的底部,在此處調用animate() ,并添加此函數。 此函數基本上偵聽畫布大小和窗口大小,并根據兩個大小是否相同返回布爾值。 我們將在animate函數中使用該函數來確定是否重新渲染場景。 此功能還將考慮設備像素比率,以確保畫布在手機上也很清晰。

Add this function at the bottom of your JavaScript.

在JavaScript底部添加此函數。

function resizeRendererToDisplaySize(renderer) {const canvas = renderer.domElement;var width = window.innerWidth;var height = window.innerHeight;var canvasPixelWidth = canvas.width / window.devicePixelRatio;var canvasPixelHeight = canvas.height / window.devicePixelRatio;const needResize = canvasPixelWidth !== width || canvasPixelHeight !== height;if (needResize) {renderer.setSize(width, height, false);}return needResize; }

Now update your animate function to look like this:

現在更新您的動畫函數,如下所示:

function animate() {renderer.render(scene, camera);requestAnimationFrame(animate);if (resizeRendererToDisplaySize(renderer)) {const canvas = renderer.domElement;camera.aspect = canvas.clientWidth / canvas.clientHeight;camera.updateProjectionMatrix();} }

Instantly, our chair is looking so much better!

立刻,我們的椅子看起來好多了!

I need to mention a couple things before we continue:

在繼續之前,我需要提及幾件事:

  • The chair is backwards, this is my bad. We’re going to simply rotate the model on its Y position

    椅子向后,這是我的壞事。 我們將簡單地將模型旋轉到其Y位置
  • The supports are black? but the rest is white? This is because the model has some material information that has been imported with it that I had set up in Blender. This doesn’t matter, because we’re going to add a function that lets us define textures in our app, and add them to different areas of the chair when the model loads. So, if you have a wood texture and a denim texture (spoiler: we will), we will have the ability to set these on load without the user having to choose them. So the materials on the chair right now don’t matter all that much.

    支架是黑色的? 但是剩下的是白色的? 這是因為模型具有一些我在Blender中設置的材料信息。 沒關系,因為我們要添加一個函數,使我們可以在應用程序中定義紋理,并在加載模型時將其添加到椅子的不同區域。 因此,如果您有木質紋理和牛仔布紋理(擾流板:我們會),我們將能夠在負載下設置它們,而無需用戶選擇。 因此,現在椅子上的材料并不重要。

Humour me quickly, head to the loader function, and remember where we set the scale to (2,2,2)? Lets add this under it:

Swift為我幽默,使用加載程序功能,還記得我們將比例尺設置為(2,2,2)的位置嗎? 讓我們在下面添加它:

// Set the models initial scale theModel.scale.set(2,2,2);theModel.rotation.y = Math.PI;

Yeah, much better, sorry about that. One more thing: Three.js doesn’t have support for degrees as far as I know (?), everyone appears to be using Math.PI. This equals 180 degrees, so if you want something angled at a 45 degree angle, you’d use Math.PI / 4.

是的,更好,對此感到抱歉。 還有一件事:就我所知(?)而言,Three.js不支持學位,每個人似乎都在使用Math.PI。 這等于180度,因此,如果您想要以45度角傾斜的物體,則可以使用Math.PI / 4。

Okay, we’re getting there! We need a floor though, without a floor there can’t really be any shadows right?

好的,我們到了! 但是,我們需要一個地板,沒有地板,就不可能有陰影嗎?

Add a floor, what we’re doing here is creating a new plane (a two-dimensional shape, or a three-dimensional shape with no height).

添加一個地板,我們在這里要做的是創建一個新的平面(一個二維形狀,或者一個沒有高度的三維形狀)。

Add this below our lights…

將此添加到我們的燈光下...

// Floor var floorGeometry = new THREE.PlaneGeometry(5000, 5000, 1, 1); var floorMaterial = new THREE.MeshPhongMaterial({color: 0xff0000,shininess: 0 });var floor = new THREE.Mesh(floorGeometry, floorMaterial); floor.rotation.x = -0.5 * Math.PI; floor.receiveShadow = true; floor.position.y = -1; scene.add(floor);

Let’s take a look at whats happening here.

讓我們看看這里發生了什么。

First, we made a geometry, we won’t be needing to make another geometry in Three.js in this tutorial, but you can make all sorts.

首先,我們制作了一個幾何圖形,在本教程中,我們不需要在Three.js中制作另一個幾何圖形,但是您可以進行各種修改。

Secondly, notice how we also made a new MeshPhongMaterial and set a couple options. It’s color, and it’s shininess. Check out some of Three.js other materials later on. Phong is great because you can adjust its reflectiveness and specular highlights. There is also MeshStandardMaterial which has support for more advanced texture aspects such as metallic and ambient occlusion, and there is also the MeshBasicMaterial, which doesn’t support shadows. We will just be creating Phong materials in this tutorial.

其次,請注意我們如何制作新的MeshPhongMaterial并設置幾個選項。 它是顏色,它是發光的。 稍后再查看Three.js其他材料。 Phong非常好,因為您可以調整其反射率和鏡面高光。 另外還有MeshStandardMaterial ,它支持更高級的紋理方面,例如金屬和環境光遮擋,還有MeshBasicMaterial ,它不支持陰影。 在本教程中,我們將僅創建Phong材料。

We created a variable called floor and merged the geometry and material into a Mesh.

我們創建了一個名為floor的變量,并將幾何圖形和材質合并為一個Mesh。

We set the floor’s rotation to be flat, opted in for the ability to receive shadows, moved it down the same way we moved the chair down, and then added it to the scene.

我們將地板的旋轉設置為平坦,選擇接收陰影的功能,將其向下移動的方式與將椅子向下移動的方式相同,然后將其添加到場景中。

We should now be looking at this:

現在,我們應該看一下:

We will leave it red for now, but, where are the shadows? There’s a couple of things we need to do for that. First, under our const renderer, lets include a couple of options:

我們暫時將其保留為紅色,但是陰影在哪里? 為此,我們需要做幾件事。 首先,在我們的const renderer下,讓我們包括幾個選項:

// Init the renderer const renderer = new THREE.WebGLRenderer({canvas, antialias: true});renderer.shadowMap.enabled = true; renderer.setPixelRatio(window.devicePixelRatio);

We’ve set the pixel ratio to whatever the device’s pixel ratio is, not relevant to shadows, but while we’re there, let’s do that. We’ve also enabled shadowMap, but there are still no shadows? That’s because the materials we have on our chair are the ones brought in from Blender, and we want to author some of them in our app.

我們已經將像素比率設置為設備的像素比率,與陰影無關,但是在此期間,讓我們開始吧。 我們還啟用了shadowMap ,但是仍然沒有陰影嗎? 這是因為我們在椅子上使用的材料是Blender帶來的,因此我們想在我們的應用程序中編寫其中的一些內容。

Our loader function includes the ability to traverse the 3D model. So, head to our loader function and add this in below the theModel = gltf.scene; line. For each object in our 3D model (legs, cushions, etc), we’re going to to enable to option to cast shadows, and to receive shadows. This traverse method will be used again later on.

我們的加載器功能包括遍歷3D模型的功能。 因此,轉到我們的加載器函數,并將其添加到theModel = gltf.scene;下面; 線。 對于3D模型中的每個對象(腿,墊子等),我們將啟用選項以投射陰影并接收陰影。 此遍歷方法將在以后再次使用。

Add this line below theModel = gltf.scene;

將此行添加到theModel = gltf.scene下;

theModel.traverse((o) => {if (o.isMesh) {o.castShadow = true;o.receiveShadow = true;}});

It looks arguably worse than it did before, but at least theres a shadow on the floor! This is because our model still has materials brought in from Blender. We’re going to replace all of these materials with a basic, white PhongMaterial.

它看起來可能比以前更糟,但至少地板上有陰影! 這是因為我們的模型仍然具有從Blender引入的材料。 我們將用基本的白色PhongMaterial材料替換所有這些材料。

Lets create another PhongMaterial and add it above our loader function:

讓我們創建另一個PhongMaterial并將其添加到我們的加載器函數上方:

// Initial material const INITIAL_MTL = new THREE.MeshPhongMaterial( { color: 0xf1f1f1, shininess: 10 } );

This is a great starting material, it’s a slight off-white, and it’s only a little bit shiny. Cool!

這是很好的起始材料,略帶灰白色,只有一點點光澤。 涼!

We could just add this to our chair and be done with it, but some objects may need a specific color or texture on load, and we can’t just blanket the whole thing with the same base color, the way we’re going to do this is to add this array of objects under our initial material.

我們可以將其添加到椅子上并完成它,但是某些對象在加載時可能需要特定的顏色或紋理,并且我們不能只用相同的基色覆蓋整個對象,我們將采用這種方法這樣做是在我們的初始材質下添加此對象數組。

// Initial material const INITIAL_MTL = new THREE.MeshPhongMaterial( { color: 0xf1f1f1, shininess: 10 } );const INITIAL_MAP = [{childID: "back", mtl: INITIAL_MTL},{childID: "base", mtl: INITIAL_MTL},{childID: "cushions", mtl: INITIAL_MTL},{childID: "legs", mtl: INITIAL_MTL},{childID: "supports", mtl: INITIAL_MTL}, ];

We’re going to traverse through our 3D model again and use the childID to find different parts of the chair, and apply the material to it (set in the mtl property). These childID’s match the names we gave each object in Blender, if you read that section, consider yourself informed!

我們將再次遍歷3D模型,并使用childID查找椅子的不同部分,然后將材料應用到該椅子上(在mtl屬性中設置)。 這些childID與我們在Blender中為每個對象指定的名稱相匹配,如果您閱讀了該部分,請認為您已被告知!

Below our loader function, let’s add a function that takes the the model, the part of the object (type), and the material, and sets the material. We’re also going to add a new property to this part called nameID so that we can reference it later.

在我們的加載器函數下方,讓我們添加一個函數,該函數采用模型,對象的一部分(類型)和材質,并設置材質。 我們還將向此部分添加一個名為nameID的新屬性,以便稍后引用。

// Function - Add the textures to the models function initColor(parent, type, mtl) {parent.traverse((o) => {if (o.isMesh) {if (o.name.includes(type)) {o.material = mtl;o.nameID = type; // Set a new property to identify this object}}}); }

Now, inside our loader function, just before we add our model to the scene (scene.add(theModel);)

現在,在我們的加載器函數內部,就在將模型添加到場景之前( scene.add(theModel); )

Let’s run that function for each object in our INITIAL_MAP array:

讓我們為INITIAL_MAP數組中的每個對象運行該函數:

// Set initial texturesfor (let object of INITIAL_MAP) {initColor(theModel, object.childID, object.mtl);}

Finally, head back to our floor, and change the color from red (0xff0000) to a light grey(0xeeeeee).

最后,回到地板,將顏色從紅色(0xff0000)更改為淺灰色(0xeeeeee)。

// Floor var floorGeometry = new THREE.PlaneGeometry(5000, 5000, 1, 1); var floorMaterial = new THREE.MeshPhongMaterial({color: 0xeeeeee, // <------- Hereshininess: 0 });

It’s worth mentioning here that 0xeeeeee is different to our background color. I manually dialed this in until the floor with the lights shining on it matched the lighter background color. We’re now looking at this:

這里值得一提的是0xeeeeee與我們的背景色不同。 我手動撥入,直到地板上的燈光與較淺的背景色匹配為止。 我們現在在看這個:

See the Pen 3D Chair Customizer Tutorial – Part 1 by Kyle Wetton (@kylewetton) on CodePen.

請參閱CodePen上的Kyle Wetton( @kylewetton )編寫的Pen 3D Chair Customizer教程–第1部分。

Congratulations, we’ve got this far! If you got stuck anywhere, fork this pen or investigate it until you find the issue.

恭喜,我們已經做到了! 如果您在任何地方都被卡住,請叉這支筆或對其進行調查,直到發現問題為止。

第4部分:添加控件 (Part 4: Adding controls)

For real though this is a very small part, and is super easy thanks to our third dependency OrbitControls.js.

實際上,這只是很小的一部分,并且由于我們的第三個依賴OrbitControls.js而非常容易。

Above our animate function, we add this in our controls:

在動畫功能之上,我們將其添加到控件中:

// Add controls var controls = new THREE.OrbitControls( camera, renderer.domElement ); controls.maxPolarAngle = Math.PI / 2; controls.minPolarAngle = Math.PI / 3; controls.enableDamping = true; controls.enablePan = false; controls.dampingFactor = 0.1; controls.autoRotate = false; // Toggle this if you'd like the chair to automatically rotate controls.autoRotateSpeed = 0.2; // 30

Inside the animate function, at the top, add:

在動畫功能的頂部,添加:

controls.update();

So our controls variable is a new OrbitControls class. We’ve set a few options that you can change here if you’d like. These include the range in which the user is allowed to rotate around the chair (above and below). We’ve disabled panning to keep the chair centered, enabled dampening to give it weight, and included auto rotate ability if you choose to use them. This is currently set to false.

因此,我們的控件變量是一個新的OrbitControls類。 我們設置了一些選項,您可以根據需要在此處進行更改。 這些范圍包括允許用戶圍繞椅子(上方和下方)旋轉的范圍。 我們禁用了平移功能以保持椅子居中,啟用了減震功能使其具有重量,并且如果您選擇使用自動旋轉功能,則還具有自動旋轉功能。 當前設置為false。

Try click and drag your chair, you should be able to explore the model with full mouse and touch functionality!

嘗試單擊并拖動椅子,您應該能夠使用完整的鼠標和觸摸功能探索模型!

See the Pen Scrollable by Kyle Wetton (@kylewetton) on CodePen.

見筆滾動凱爾Wetton( @kylewetton上) CodePen 。

第5部分:更改顏色 (Part 5: Changing colors)

Our app currently doesn’t do anything, so this next part will focus on changing our colors. We’re going to add a bit more HTML. Afterwards, I’ll explain a bit about what the CSS is doing.

我們的應用程序當前不執行任何操作,因此下一部分將重點介紹更改顏色。 我們將添加更多HTML。 然后,我將解釋一下CSS的功能。

Add this below your canvas element:

將其添加到您的canvas元素下面:

<div class="controls"> <!-- This tray will be filled with colors via JS, and the ability to slide this panel will be added in with a lightweight slider script (no dependency used for this) --><div id="js-tray" class="tray"><div id="js-tray-slide" class="tray__slide"></div></div> </div>

Basically, the .controls DIV is stuck to the bottom of the screen, the .tray is set to be 100% width of the body, but its child, .tray__slide is going to fill with swatches and can be as wide as it needs. We’re going to add the ability to slide this child to explore colors as one of the final steps of this tutorial.

基本上, .controls DIV粘貼在屏幕的底部, .tray設置為主體寬度的100%,但其子級.tray__slide將填充色板,并且可以根據需要的寬度來設置。 作為本教程的最后步驟,我們將添加使這個孩子滑動以探索顏色的功能。

Let’s start by adding in a couple colors. At the top of our JavaScript, lets add an array of five objects, each with a color property.

讓我們從添加幾種顏色開始。 在我們JavaScript頂部,讓我們添加五個對象的數組,每個對象都有一個color屬性。

const colors = [ {color: '66533C' }, {color: '173A2F' }, {color: '153944' }, {color: '27548D' }, {color: '438AAC' } ]

Note that these neither have # or 0x to represent the hex. We will use these colors for both in functions. Also, it’s an object because we will be able to add other properties to this color, like shininess, or even a texture image (spoiler: we will, and we will).

請注意,這些都沒有#或0x代表十六進制。 我們將在函數中同時使用這些顏色。 同樣,它也是一個對象,因為我們將能夠為該顏色添加其他屬性,例如光澤度,甚至是紋理圖像(破壞者:我們會,而且將會)。

Lets make swatches out of these colors!

讓我們用這些顏色制作色板!

First, let’s reference our tray slider at the top of our JavaScript:

首先,讓我們在JavaScript頂部引用托盤滑塊:

const TRAY = document.getElementById('js-tray-slide');

Right at the bottom of our JavaScript, lets add a new function called buildColors and immediately call it.

在我們JavaScript底部,讓我們添加一個名為buildColors的新函數,然后立即調用它。

// Function - Build Colors function buildColors(colors) {for (let [i, color] of colors.entries()) {let swatch = document.createElement('div');swatch.classList.add('tray__swatch');swatch.style.background = "#" + color.color;swatch.setAttribute('data-key', i);TRAY.append(swatch);} }buildColors(colors);

We’re now creating swatches out of our colors array! Note that we set the data-key attribute to the swatch, we’re going to use this to look up our color and make them into materials.

我們現在要從顏色陣列中創建色板! 請注意,我們將data-key屬性設置為樣本,我們將使用它來查找顏色并將它們變成材質。

Below our new buildColors function, let’s add an event handler to our swatches:

在新的buildColors函數下方,讓我們向樣本添加事件處理程序:

// Swatches const swatches = document.querySelectorAll(".tray__swatch");for (const swatch of swatches) {swatch.addEventListener('click', selectSwatch); }

Our click handler calls a function called selectSwatch. This function is going to build a new PhongMaterial out of the color and call another function to traverse through our 3d model, find the part it’s meant to change, and update it!

我們的點擊處理程序調用了一個名為selectSwatch的函數。 該函數將用顏色構建新的PhongMaterial,并調用另一個函數來遍歷我們的3d模型,找到要更改的部分并進行更新!

Below the event handlers we just added, add the selectSwatch function:

在我們剛剛添加的事件處理程序下方,添加selectSwatch函數:

function selectSwatch(e) {let color = colors[parseInt(e.target.dataset.key)];let new_mtl;new_mtl = new THREE.MeshPhongMaterial({color: parseInt('0x' + color.color),shininess: color.shininess ? color.shininess : 10});setMaterial(theModel, 'legs', new_mtl); }

This function looks up our color by its data-key attribute, and creates a new material out of it.

此函數通過其data-key屬性查找我們的顏色,并以此創建新的材質。

This won’t work yet, we need to add the setMaterial function, (see the final line of the function we just added).

這還行不通,我們需要添加setMaterial函數(請參閱剛剛添加的函數的最后一行)。

Take note of this line: setMaterial(theModel, ‘legs’, new_mtl);. Currently we’re just passing ‘legs’ to this function, soon we will add the ability to change out the different sections we want to update. But first, lets add the zcode>setMaterial

注意這一行: setMaterial(theModel,'legs',new_mtl); 。 當前,我們只是將“腿”傳遞給此功能,不久我們將添加更改要更新的不同部分的功能。 但首先,讓我們添加zcode> setMaterial

function.

功能。

Below this function, add the setMaterial function:

在此函數下面,添加setMaterial函數:

function setMaterial(parent, type, mtl) {parent.traverse((o) => {if (o.isMesh && o.nameID != null) {if (o.nameID == type) {o.material = mtl;}}}); }

This function is similar to our initColor function, but with a few differences. It checks for the nameID we added in the initColor, and if its the same as the parameter type, it adds the material to it.

此函數類似于我們的initColor函數,但有一些區別。 它檢查我們在initColor中添加的initColor ,如果它與參數類型相同,則向其中添加材質。

Our swatches can now create a new material, and change the color of the legs, give it a go! Here’s everything we have so far in a pen. Investigate it if you’re lost.

我們的色板現在可以創建新的材料,并改變腿的顏色,快去嘗試吧! 到目前為止,這是我們筆所能擁有的一切。 如果您迷路了,請進行調查。

See the Pen Swatches change the legs color! by Kyle Wetton (@kylewetton) on CodePen.

看到筆色板改變腿的顏色! 由Kyle Wetton( @kylewetton )在CodePen上編寫。

第6部分:選擇要更改的部分 (Part 6: Selecting the parts to change)

We can now change the color of the legs, which is awesome, but let’s add the ability to select the part our swatch should add its material to. Include this HTML just below the opening body tag, I’ll explain the CSS below.

現在,我們可以更改腿的顏色,這太棒了,但是讓我們添加選擇樣本應為其材料添加零件的功能。 將HTML包含在開始body標簽下面,我將在下面解釋CSS。

<!-- These toggle the the different parts of the chair that can be edited, note data-option is the key that links to the name of the part in the 3D file --> <div class="options"><div class="option --is-active" data-option="legs"><img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/1376484/legs.svg" alt=""/></div><div class="option" data-option="cushions"><img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/1376484/cushions.svg" alt=""/></div><div class="option" data-option="base"><img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/1376484/base.svg" alt=""/></div><div class="option" data-option="supports"><img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/1376484/supports.svg" alt=""/></div><div class="option" data-option="back"><img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/1376484/back.svg" alt=""/></div> </div>

This is just a collection of buttons with custom icons in each. The .options DIV is stuck to the side of the screen via CSS (and shifts a bit with media queries). Each .option DIV is just a white square, that has a red border on it when a –is-active class is added to it. It also includes a data-option attribute that matches our nameID, so we can identify it. Lastly, the image element has a CSS property called pointer-events: none so that the event stays on the parent even if you click the image.

這只是每個按鈕中帶有自定義圖標的集合。 .options DIV通過CSS固定在屏幕的一側(并隨媒體查詢而移動一點)。 每個.option DIV只是一個白色正方形,當添加–is-active類時,上面帶有紅色邊框。 它還包括一個與我們的nameID匹配的data-option屬性,因此我們可以對其進行識別。 最后,image元素具有一個稱為pointer-eventsCSS屬性:none,因此即使您單擊該圖像,該事件也將保留在父級上。

Lets add another variable at the top of our JavaScript called activeOptions and by default let’s set it to ‘legs’:

讓我們在JavaScript的頂部添加另一個名為activeOptions的變量,默認情況下將其設置為'legs':

var activeOption = 'legs';

Now head back to our selectSwatch function and update that hard-coded ‘legs’ parameter to activeOption

現在回到我們的selectSwatch函數,并將該硬編碼的“ legs”參數更新為activeOption

setMaterial(theModel, activeOption, new_mtl);

Now all we need to do is create a event handler to change out activeOption when an option is clicked!

現在,我們需要做的就是創建一個事件處理程序,以在單擊選項時更改activeOption !

Let’s add this above our const swatches and selectSwatch function.

讓我們將其添加到const色板和selectSwatch函數之上。

// Select Option const options = document.querySelectorAll(".option");for (const option of options) {option.addEventListener('click',selectOption); }function selectOption(e) {let option = e.target;activeOption = e.target.dataset.option;for (const otherOption of options) {otherOption.classList.remove('--is-active');}option.classList.add('--is-active'); }

We’ve added the selectOption function, which sets the activeOption to our event targets data-option value, and toggles the –is-active class. Thats it!

我們添加了selectOption函數,該函數將selectOption設置為事件目標數據選項值,并切換–is-active類。 而已!

Try it out

試試看

See the Pen Changing options by Kyle Wetton (@kylewetton) on CodePen.

見筆更改選項凱爾Wetton( @kylewetton )上CodePen 。

But why stop here? An object could look like anything, it can’t all be the same material. A chair with no wood or fabric? Lets expand our color selection a little bit. Update your color array to this:

但是為什么在這里停下來? 一個對象可能看起來像任何東西,它不可能都是相同的材料。 沒有木頭或織物的椅子? 讓我們擴展一下顏色選擇。 將顏色數組更新為:

const colors = [ {texture: 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/1376484/wood.jpg',size: [2,2,2],shininess: 60 }, {texture: 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/1376484/denim.jpg',size: [3, 3, 3],shininess: 0 }, {color: '66533C' }, {color: '173A2F' }, {color: '153944' }, {color: '27548D' }, {color: '438AAC' } ]

The top two are now textures. We’ve got wood and denim. We also have two new properties, size and shininess. Size is how often to repeat a pattern, so the larger the number, the more dense the pattern is, or more simply put – the more it repeats.

現在,前兩個是紋理。 我們有木頭和牛仔布。 我們還有兩個新屬性,大小和光澤。 大小是重復圖案的頻率,因此數字越大,圖案越密集,或更簡單地放置-重復越多。

There are two function we need to update to add this ability. Firstly, lets head to the buildColors function and update to this

我們需要更新兩個功能以添加此功能。 首先,讓我們轉到buildColors函數并對此進行更新

// Function - Build Colorsfunction buildColors(colors) {for (let [i, color] of colors.entries()) {let swatch = document.createElement('div');swatch.classList.add('tray__swatch');if (color.texture){swatch.style.backgroundImage = "url(" + color.texture + ")"; } else{swatch.style.background = "#" + color.color;}swatch.setAttribute('data-key', i);TRAY.append(swatch);} }

Now its checking to see if its a texture, if it is, it’s going to set the swatches background to be that texture, neat!

現在,它會檢查其紋理是否存在(如果有的話),它將色板背景設置為該紋理整齊!

Notice the gap between the 5th and 6th swatch? The final batch of colors, which I will provide, is grouped into color schemes of 5 colors per scheme. So each scheme will have that small divider in it, this is set in the CSS and will make more sense in the final product.注意到第5個和第6個樣本之間的差距了嗎? 我將提供的最后一批顏色分為每種方案5種顏色的配色方案。 因此,每個方案中都會有一個小的分隔符,它在CSS中設置,并且在最終產品中更有意義。

The second function we’re going to update is the selectSwatch function. Update it to this:

我們要更新的第二個函數是selectSwatch函數。 將其更新為:

function selectSwatch(e) {let color = colors[parseInt(e.target.dataset.key)];let new_mtl;if (color.texture) {let txt = new THREE.TextureLoader().load(color.texture);txt.repeat.set( color.size[0], color.size[1], color.size[2]);txt.wrapS = THREE.RepeatWrapping;txt.wrapT = THREE.RepeatWrapping;new_mtl = new THREE.MeshPhongMaterial( {map: txt,shininess: color.shininess ? color.shininess : 10}); } else{new_mtl = new THREE.MeshPhongMaterial({color: parseInt('0x' + color.color),shininess: color.shininess ? color.shininess : 10});}setMaterial(theModel, activeOption, new_mtl); }

To explain what’s going on here, this function will now check if it’s a texture. If it is, it’s going to create a new texture using the Three.js TextureLoader method, it’s going to set the texture repeat using our size values, and set the wrapping of it (this wrapping option seems to work best, I’ve tried the others, so lets go with it), then its going to set the PhongMaterials map property to the texture, and finally use the shininess value.

為了解釋這里發生了什么,該函數現在將檢查它是否是紋理。 如果是這樣,它將使用Three.js TextureLoader方法創建一個新紋理,它將使用我們的大小值設置紋理重復,并設置其包裹(此包裹選項似乎效果最好,我已經嘗試過其他,所以讓我們繼續吧),然后將PhongMaterials貼圖屬性設置為紋理,最后使用光澤值。

If it’s not a texture, it uses our older method. Note that you can set a shininess property to any of our original colors!

如果不是紋理,則使用我們的舊方法。 請注意,您可以為我們的任何原始顏色設置光澤屬性!

Important: if your textures just remain black when you try add them. Check your console. Are you getting cross domain CORS errors? This is a CodePen bug and I’ve done my best to try fix it. These assets are hosted directly in CodePen via a Pro feature so its unfortunate to have to battle with this. Apparently, the best bet here is to not visit those image URLs directly, otherwise I recommend signing up to Cloudinary and using their free tier, you may have better luck pointing your textures there.

重要提示:如果您嘗試添加紋理時仍保持黑色。 檢查您的控制臺。 您是否收到跨域CORS錯誤? 這是一個CodePen錯誤,我已盡力嘗試修復它。 這些資產通過Pro功能直接托管在CodePen中,因此不幸的是必須與之抗衡。 顯然,這里最好的選擇是不要直接訪問這些圖像URL,否則我建議注冊Cloudinary并使用其免費套餐,這樣可能更好地將紋理指向那里。

Here’s a pen with the textures working on my end at least:

這是一支至少具有紋理效果的筆:

See the Pen Texture support by Kyle Wetton (@kylewetton) on CodePen.

見筆紋理支持由凱爾Wetton( @kylewetton )上CodePen 。

第七部分:畫龍點睛 (Part 7: Finishing touches)

I’ve had projects get run passed clients with a big button that is begging to be pressed, positively glistening with temptation to even just hover over it, and them and their co-workers (Dave from accounts) come back with feedback about how they didn’t know there was anything to be pressed (screw you, Dave).

我曾經讓項目通過一個很大的按鈕來傳遞給客戶,這個按鈕希望被按下,即使只是將鼠標懸停在這個按鈕上,他們也會積極地閃閃發光,他們和他們的同事(來自帳戶的Dave)回來時會收到有關他們如何反饋的反饋不知道有什么要緊迫的(戴夫,打給你)。

So let’s add some calls to action. First, let’s chuck in a patch of HTML above the canvas element:

因此,讓我們添加一些號召性用語。 首先,讓我們在canvas元素上方插入HTML補丁:

<!-- Just a quick notice to the user that it can be interacted with --> <span class="drag-notice" id="js-drag-notice">Drag to rotate 360&#176;</span>

The CSS places this call-to-action above the chair, it’s a nice big button that instructs the user to drag to rotate the chair. It just stays there though? We will get to that.

CSS將號召性用語放置在椅子上方,這是一個不錯的大按鈕,它指示用戶拖動以旋轉椅子。 它只是留在那里嗎? 我們將做到這一點。

Let’s spin the chair once it’s loaded first, then, once the spin is done, let’s hide that call-to-action.

首先加載椅子,然后旋轉,然后旋轉完成,然后隱藏號召性用語。

First, lets add a loaded variable to the top of our JavaScript and set it to false:

首先,讓我們在JavaScript的頂部添加一個已加載的變量,并將其設置為false:

var loaded = false;

Right at the bottom of your JavaScript, add this function

在您JavaScript底部,添加此函數

// Function - Opening rotate let initRotate = 0;function initialRotation() {initRotate++; if (initRotate <= 120) {theModel.rotation.y += Math.PI / 60;} else {loaded = true;} }

This simply rotates the the model 360 degrees within the span of 120 frames (around 2 seconds at 60fps), and we’re going to run this in the animate function to call it for 120 frames, once its done, it’s going to set loaded to true in our animate function. Here’s how it will look in its entirely with the new code at the end there:

只需在120幀的范圍內(360 fps時約2秒)將模型旋轉360度,我們將在animate函數中運行此模型以調用120幀,一旦完成,將設置加載在我們的animate功能中為真。 下面是新代碼的整體外觀:

function animate() {controls.update();renderer.render(scene, camera);requestAnimationFrame(animate);if (resizeRendererToDisplaySize(renderer)) {const canvas = renderer.domElement;camera.aspect = canvas.clientWidth / canvas.clientHeight;camera.updateProjectionMatrix();}if (theModel != null && loaded == false) {initialRotation();} }animate();

We check that theModel doesn’t equal null, and that the variable loaded is false, and we run that function for 120 frames, at which point the function switches to loaded = true, and our animate function ignores it.

我們檢查theModel不等于null ,并且加載的變量為false,然后將該函數運行120幀,這時該函數切換為load = true ,而我們的動畫函數會忽略它。

You should have a nice spinning chair. When that chair stops is a great time to remove our call-to-action.

您應該有一把漂亮的旋轉椅。 當椅子停下來時,是刪除我們的號召性用語的好時機。

In the CSS, there’s a class that can be added to that call-to-action that will hide it with an animation, this animation has a delay of 3 seconds, so let’s add that class at the same time the rotation starts.

在CSS中,可以在該號召性用語中添加一個類,該類將通過動畫進行隱藏,該動畫的延遲時間為3秒,因此讓我們在旋轉開始的同時添加該類。

At the top of your JavaScript we will reference it:

在您JavaScript頂部,我們將引用它:

const DRAG_NOTICE = document.getElementById('js-drag-notice');

and update your animate function like so

并像這樣更新您的動畫功能

if (theModel != null && loaded == false) {initialRotation();DRAG_NOTICE.classList.add('start');}

Great! Okay, here’s some more colors, update your color array, I’ve give a lightweight sliding function below it:

大! 好的,這里有更多顏色,更新您的顏色陣列,我在其下方提供了輕量級的滑動功能:

const colors = [ {texture: 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/1376484/wood_.jpg',size: [2,2,2],shininess: 60 }, {texture: 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/1376484/fabric_.jpg',size: [4, 4, 4],shininess: 0 }, {texture: 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/1376484/pattern_.jpg',size: [8, 8, 8],shininess: 10 }, {texture: 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/1376484/denim_.jpg',size: [3, 3, 3],shininess: 0 }, {texture: 'https://s3-us-west-2.amazonaws.com/s.cdpn.io/1376484/quilt_.jpg',size: [6, 6, 6],shininess: 0 }, {color: '131417' }, {color: '374047' }, {color: '5f6e78' }, {color: '7f8a93' }, {color: '97a1a7' }, {color: 'acb4b9' }, {color: 'DF9998', }, {color: '7C6862' }, {color: 'A3AB84' }, {color: 'D6CCB1' }, {color: 'F8D5C4' }, {color: 'A3AE99' }, {color: 'EFF2F2' }, {color: 'B0C5C1' }, {color: '8B8C8C' }, {color: '565F59' }, {color: 'CB304A' }, {color: 'FED7C8' }, {color: 'C7BDBD' }, {color: '3DCBBE' }, {color: '264B4F' }, {color: '389389' }, {color: '85BEAE' }, {color: 'F2DABA' }, {color: 'F2A97F' }, {color: 'D85F52' }, {color: 'D92E37' }, {color: 'FC9736' }, {color: 'F7BD69' }, {color: 'A4D09C' }, {color: '4C8A67' }, {color: '25608A' }, {color: '75C8C6' }, {color: 'F5E4B7' }, {color: 'E69041' }, {color: 'E56013' }, {color: '11101D' }, {color: '630609' }, {color: 'C9240E' }, {color: 'EC4B17' }, {color: '281A1C' }, {color: '4F556F' }, {color: '64739B' }, {color: 'CDBAC7' }, {color: '946F43' }, {color: '66533C' }, {color: '173A2F' }, {color: '153944' }, {color: '27548D' }, {color: '438AAC' } ]

Awesome! These hang off the page though, right at the bottom of your JavaScript, add this function, it will allow you to drag the swatches panel with mouse and touch. For the interest of keeping on topic, I won’t delve too much into how it works.

太棒了! 盡管這些掛起在頁面的右側,但是就在JavaScript底部,添加了此功能,它將使您能夠使用鼠標和觸摸來拖動色板。 為了保持話題的興趣,我不會過多地研究它的工作原理。

var slider = document.getElementById('js-tray'), sliderItems = document.getElementById('js-tray-slide'), difference;function slide(wrapper, items) {var posX1 = 0,posX2 = 0,posInitial,threshold = 20,posFinal,slides = items.getElementsByClassName('tray__swatch');// Mouse eventsitems.onmousedown = dragStart;// Touch eventsitems.addEventListener('touchstart', dragStart);items.addEventListener('touchend', dragEnd);items.addEventListener('touchmove', dragAction);function dragStart (e) {e = e || window.event;posInitial = items.offsetLeft;difference = sliderItems.offsetWidth - slider.offsetWidth;difference = difference * -1;if (e.type == 'touchstart') {posX1 = e.touches[0].clientX;} else {posX1 = e.clientX;document.onmouseup = dragEnd;document.onmousemove = dragAction;}}function dragAction (e) {e = e || window.event;if (e.type == 'touchmove') {posX2 = posX1 - e.touches[0].clientX;posX1 = e.touches[0].clientX;} else {posX2 = posX1 - e.clientX;posX1 = e.clientX;}if (items.offsetLeft - posX2 <= 0 && items.offsetLeft - posX2 >= difference) {items.style.left = (items.offsetLeft - posX2) + "px";}}function dragEnd (e) {posFinal = items.offsetLeft;if (posFinal - posInitial < -threshold) { } else if (posFinal - posInitial > threshold) {} else {items.style.left = (posInitial) + "px";}document.onmouseup = null;document.onmousemove = null;}}slide(slider, sliderItems);

Now, head to your CSS and under .tray__slider, uncomment this small animation

現在,轉到CSS并在.tray__slider下,取消注釋此小動畫

/* transform: translateX(-50%);animation: wheelin 1s 2s ease-in-out forwards; */

Okay, let’s finish it off with a the final two touches, and we’re done!

好的,讓我們完成最后的兩次接觸,就可以完成了!

Let’s update our .controls div to include this extra call-to-action:

讓我們更新.controls div以包括以下額外的號召性用語:

<div class="controls"> <div class="info"><div class="info__message"><p><strong>&nbsp;Grab&nbsp;</strong> to rotate chair. <strong>&nbsp;Scroll&nbsp;</strong> to zoom. <strong>&nbsp;Drag&nbsp;</strong> swatches to view more.</p></div> </div><!-- This tray will be filled with colors via JS, and the ability to slide this panel will be added in with a lightweight slider script (no dependency used for this) --><div id="js-tray" class="tray"><div id="js-tray-slide" class="tray__slide"></div></div> </div>

Note that we have a new info section that includes some instructions on how to control the app.

請注意,我們有一個新的信息部分,其中包含有關如何控制應用程序的一些說明。

Finally, let’s add a loading overlay so that our app is clean while everything loads, and we will remove it once the model is loaded.

最后,讓我們添加一個加載疊加層,以便在加載所有內容時我們的應用程序保持干凈,并且在加載模型后將其刪除。

Add this to the top of our HTML, below the body tag.

將此添加到我們HTML頂部,在body標記下方。

<!-- The loading element overlays all else until the model is loaded, at which point we remove this element from the DOM --> <div class="loading" id="js-loader"><div class="loader"></div></div>

Here’s the thing about our loader, in order for it to load first, we’re going to add the CSS to the head tag instead of being included in the CSS. So simply add this CSS just above the closing head tag.

這是關于我們的加載器的事情,為了使其首先加載,我們將CSS添加到head標簽中,而不是包含在CSS中。 因此,只需在封閉的head標簽上方添加此CSS。

Almost there! Let’s remove it once the model is loaded.

差不多好了! 加載模型后,將其刪除。

At the top of our JavaScript, lets reference it:

讓我們在JavaScript的頂部引用它:

const LOADER = document.getElementById('js-loader');

Then in our loader function, after scene.add(theModel), include this line

然后在我們的加載器函數中,位于scene.add(theModel)之后,包括以下行

// Remove the loaderLOADER.remove();

Now our app loads behind this DIV, polishing it off:

現在,我們的應用程序將在此DIV后面加載,并對其進行完善:

And that’s it! Here’s the completed pen for reference.

就是這樣! 這是完成的筆供參考。

See the Pen 3D Chair Customizer Tutorial – Part 4 by Kyle Wetton (@kylewetton) on CodePen.

請參閱CodePen上的Kyle Wetton( @kylewetton )編寫的Pen 3D Chair Customizer教程–第4部分。

You can also check out the demo hosted here on Codrops.

您也可以查看Codrops上托管的演示。

謝謝您的支持! (Thank you for sticking with me!)

This is a big tutorial. If you feel I made a mistake somewhere, please let me know in the comments, and thanks again for following with me as we create this absolute unit.

這是一個很大的教程。 如果您覺得我在某個地方犯了一個錯誤,請在評論中讓我知道,并再次感謝您在我們創建此絕對單位時關注我。

翻譯自: https://tympanus.net/codrops/2019/09/17/how-to-build-a-color-customizer-app-for-a-3d-model-with-three-js/

總結

以上是生活随笔為你收集整理的如何使用Three.js为3D模型构建Color Customizer应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产精品无码一区二区桃花视频 | 色综合视频一区二区三区 | www成人国产高清内射 | 国产午夜精品一区二区三区嫩草 | 欧美刺激性大交 | 精品国产aⅴ无码一区二区 | 国产成人综合在线女婷五月99播放 | 大色综合色综合网站 | 亚洲精品国产第一综合99久久 | 97久久超碰中文字幕 | 色窝窝无码一区二区三区色欲 | 中文无码成人免费视频在线观看 | 乱中年女人伦av三区 | 一个人看的视频www在线 | 国产明星裸体无码xxxx视频 | 久久久久久av无码免费看大片 | 乱人伦人妻中文字幕无码 | 中文字幕色婷婷在线视频 | 色欲av亚洲一区无码少妇 | 露脸叫床粗话东北少妇 | 国产超碰人人爽人人做人人添 | 精品国产一区av天美传媒 | 亚洲中文字幕乱码av波多ji | 亚洲成在人网站无码天堂 | 人人妻人人澡人人爽人人精品浪潮 | 中文字幕无码av波多野吉衣 | 中国大陆精品视频xxxx | www国产亚洲精品久久网站 | 国产一区二区不卡老阿姨 | av香港经典三级级 在线 | 午夜理论片yy44880影院 | 国产手机在线αⅴ片无码观看 | 欧美成人高清在线播放 | 清纯唯美经典一区二区 | 国产av无码专区亚洲awww | 国产精品爱久久久久久久 | 久久人人爽人人爽人人片av高清 | 伊人久久大香线蕉亚洲 | 老司机亚洲精品影院无码 | 老头边吃奶边弄进去呻吟 | 午夜成人1000部免费视频 | 久久精品国产99精品亚洲 | 无码人妻av免费一区二区三区 | 亚洲 a v无 码免 费 成 人 a v | 欧洲熟妇精品视频 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 蜜桃av抽搐高潮一区二区 | 成年美女黄网站色大免费全看 | 中文字幕 人妻熟女 | 精品夜夜澡人妻无码av蜜桃 | 久久精品中文字幕大胸 | 性欧美videos高清精品 | 少妇邻居内射在线 | 丰满妇女强制高潮18xxxx | 性生交大片免费看女人按摩摩 | 少妇邻居内射在线 | 无码帝国www无码专区色综合 | 一本久道久久综合狠狠爱 | 国产激情一区二区三区 | 亚洲一区二区三区四区 | 一本久久伊人热热精品中文字幕 | 日日麻批免费40分钟无码 | 亚洲精品一区三区三区在线观看 | 国产综合久久久久鬼色 | 亚洲国产精品一区二区美利坚 | 色窝窝无码一区二区三区色欲 | 免费看男女做好爽好硬视频 | 一本一道久久综合久久 | 欧美性生交活xxxxxdddd | 日日摸夜夜摸狠狠摸婷婷 | 在线播放免费人成毛片乱码 | 夜夜夜高潮夜夜爽夜夜爰爰 | 熟女少妇人妻中文字幕 | 人妻互换免费中文字幕 | 日韩亚洲欧美精品综合 | 欧美freesex黑人又粗又大 | 在线播放无码字幕亚洲 | 亚洲人成人无码网www国产 | 帮老师解开蕾丝奶罩吸乳网站 | 日韩精品久久久肉伦网站 | 女人被男人躁得好爽免费视频 | 成人影院yy111111在线观看 | 少妇厨房愉情理9仑片视频 | 久久国产精品偷任你爽任你 | 亚洲呦女专区 | 国产乡下妇女做爰 | 成人性做爰aaa片免费看不忠 | 精品人妻人人做人人爽夜夜爽 | 色综合视频一区二区三区 | 精品成人av一区二区三区 | 色综合久久久无码中文字幕 | 55夜色66夜色国产精品视频 | 荫蒂被男人添的好舒服爽免费视频 | 国产偷国产偷精品高清尤物 | 久久精品国产日本波多野结衣 | 99精品无人区乱码1区2区3区 | 久久久成人毛片无码 | 人人妻人人藻人人爽欧美一区 | 99久久久无码国产aaa精品 | 欧美亚洲国产一区二区三区 | 国产精品a成v人在线播放 | 麻豆果冻传媒2021精品传媒一区下载 | 国产精品人人妻人人爽 | 丝袜美腿亚洲一区二区 | 自拍偷自拍亚洲精品被多人伦好爽 | 日本乱偷人妻中文字幕 | 精品久久久无码中文字幕 | 波多野结衣 黑人 | 又粗又大又硬又长又爽 | 精品无人区无码乱码毛片国产 | 一本久道高清无码视频 | 波多野结衣av在线观看 | 性色欲网站人妻丰满中文久久不卡 | 亚洲色大成网站www | 国模大胆一区二区三区 | 无码吃奶揉捏奶头高潮视频 | 无码午夜成人1000部免费视频 | 国产亚洲欧美日韩亚洲中文色 | 未满成年国产在线观看 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 人人爽人人澡人人人妻 | 日韩少妇内射免费播放 | 色欲综合久久中文字幕网 | 免费网站看v片在线18禁无码 | 久久久久久久女国产乱让韩 | 国产精品99久久精品爆乳 | 欧美性猛交xxxx富婆 | 日韩精品a片一区二区三区妖精 | 午夜熟女插插xx免费视频 | 人妻天天爽夜夜爽一区二区 | 水蜜桃亚洲一二三四在线 | 午夜成人1000部免费视频 | 日本护士毛茸茸高潮 | 亚洲国精产品一二二线 | 国产成人无码av在线影院 | 久久国语露脸国产精品电影 | a在线观看免费网站大全 | 国产免费久久精品国产传媒 | 九九热爱视频精品 | 国产精品对白交换视频 | 午夜无码人妻av大片色欲 | 日本www一道久久久免费榴莲 | 午夜福利电影 | 色噜噜亚洲男人的天堂 | 婷婷五月综合激情中文字幕 | 99久久精品国产一区二区蜜芽 | 亚欧洲精品在线视频免费观看 | 全球成人中文在线 | 久久精品国产日本波多野结衣 | 精品乱子伦一区二区三区 | 久久综合九色综合97网 | 国产亚洲精品精品国产亚洲综合 | 色老头在线一区二区三区 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | yw尤物av无码国产在线观看 | 国产熟女一区二区三区四区五区 | 无套内谢老熟女 | 亚洲国产成人a精品不卡在线 | 国产亚洲日韩欧美另类第八页 | 国产精品久久国产精品99 | 无套内谢的新婚少妇国语播放 | 377p欧洲日本亚洲大胆 | 曰本女人与公拘交酡免费视频 | 学生妹亚洲一区二区 | 亚洲人交乣女bbw | 亚洲 a v无 码免 费 成 人 a v | 久久精品国产一区二区三区肥胖 | 99久久亚洲精品无码毛片 | 国产69精品久久久久app下载 | 无码乱肉视频免费大全合集 | 亚拍精品一区二区三区探花 | 久精品国产欧美亚洲色aⅴ大片 | 亚洲日韩av一区二区三区中文 | 日本丰满护士爆乳xxxx | 男女超爽视频免费播放 | 亚洲经典千人经典日产 | 国产精品无码mv在线观看 | 午夜成人1000部免费视频 | 久久久久99精品成人片 | 精品成在人线av无码免费看 | 一本久道久久综合婷婷五月 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 中文字幕+乱码+中文字幕一区 | 色爱情人网站 | 狂野欧美性猛xxxx乱大交 | 男女猛烈xx00免费视频试看 | 波多野结衣一区二区三区av免费 | 精品偷自拍另类在线观看 | 无码任你躁久久久久久久 | 亚洲人成影院在线无码按摩店 | 无码任你躁久久久久久久 | 图片区 小说区 区 亚洲五月 | 国产精品永久免费视频 | 无码午夜成人1000部免费视频 | 人人爽人人爽人人片av亚洲 | 亚洲中文字幕无码中文字在线 | 国产亚洲人成在线播放 | 亚洲自偷自偷在线制服 | 亚洲熟熟妇xxxx | 国产精品无码永久免费888 | 老熟女重囗味hdxx69 | 无码av免费一区二区三区试看 | 国产偷抇久久精品a片69 | 国产精品爱久久久久久久 | 精品无码成人片一区二区98 | 亚洲精品国偷拍自产在线观看蜜桃 | 动漫av网站免费观看 | 中文字幕无码日韩欧毛 | 日产精品99久久久久久 | 成年美女黄网站色大免费视频 | 国产激情无码一区二区 | 99久久精品国产一区二区蜜芽 | 欧美变态另类xxxx | 亚洲成av人在线观看网址 | 麻豆国产丝袜白领秘书在线观看 | 2019午夜福利不卡片在线 | 男人扒开女人内裤强吻桶进去 | 国产精品香蕉在线观看 | 亚洲成a人一区二区三区 | 无码人妻丰满熟妇区毛片18 | 大胆欧美熟妇xx | 久久久久久九九精品久 | 亚洲精品鲁一鲁一区二区三区 | 亚洲综合色区中文字幕 | 婷婷色婷婷开心五月四房播播 | 亚洲精品综合五月久久小说 | 麻豆av传媒蜜桃天美传媒 | 亚洲 激情 小说 另类 欧美 | 奇米影视888欧美在线观看 | 在线а√天堂中文官网 | 午夜精品久久久内射近拍高清 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 高清国产亚洲精品自在久久 | 国产激情一区二区三区 | 国产精品18久久久久久麻辣 | 亚洲精品午夜国产va久久成人 | 伊人久久大香线蕉午夜 | 亚洲aⅴ无码成人网站国产app | 粉嫩少妇内射浓精videos | 综合人妻久久一区二区精品 | 无码人妻av免费一区二区三区 | 色综合久久久无码网中文 | 色婷婷香蕉在线一区二区 | 日韩av无码一区二区三区不卡 | 亚洲欧洲日本无在线码 | 女高中生第一次破苞av | 色婷婷av一区二区三区之红樱桃 | 日本精品高清一区二区 | 九九热爱视频精品 | 成人毛片一区二区 | 亚洲精品成人福利网站 | 人妻体内射精一区二区三四 | 波多野结衣乳巨码无在线观看 | 老熟妇乱子伦牲交视频 | 无码人妻丰满熟妇区毛片18 | 麻豆md0077饥渴少妇 | 欧美人与物videos另类 | 中文字幕精品av一区二区五区 | 亚洲精品久久久久久久久久久 | 国产sm调教视频在线观看 | 中文字幕人成乱码熟女app | 亚洲爆乳精品无码一区二区三区 | 又大又黄又粗又爽的免费视频 | 中文字幕乱码中文乱码51精品 | 爆乳一区二区三区无码 | 无码福利日韩神码福利片 | 亚洲色无码一区二区三区 | 日韩 欧美 动漫 国产 制服 | 亚洲成色在线综合网站 | 日本在线高清不卡免费播放 | 又色又爽又黄的美女裸体网站 | 国产成人无码区免费内射一片色欲 | 亚洲男人av天堂午夜在 | 红桃av一区二区三区在线无码av | 欧美日韩视频无码一区二区三 | 天天拍夜夜添久久精品大 | 国产xxx69麻豆国语对白 | 成人欧美一区二区三区黑人免费 | 奇米影视7777久久精品 | 色综合久久中文娱乐网 | 国产手机在线αⅴ片无码观看 | 亚洲乱亚洲乱妇50p | 美女黄网站人色视频免费国产 | 午夜精品久久久久久久久 | 国产情侣作爱视频免费观看 | 强伦人妻一区二区三区视频18 | 亚洲乱码日产精品bd | 中文字幕无码免费久久9一区9 | 夜夜高潮次次欢爽av女 | 中文毛片无遮挡高清免费 | 日本熟妇乱子伦xxxx | 国产午夜视频在线观看 | 欧美怡红院免费全部视频 | 成人欧美一区二区三区黑人 | 欧美丰满熟妇xxxx性ppx人交 | 俺去俺来也在线www色官网 | 最近免费中文字幕中文高清百度 | 欧美真人作爱免费视频 | 欧美野外疯狂做受xxxx高潮 | 午夜熟女插插xx免费视频 | 无码一区二区三区在线观看 | 欧美亚洲国产一区二区三区 | 国产口爆吞精在线视频 | 久久精品人妻少妇一区二区三区 | 无码av免费一区二区三区试看 | 99re在线播放 | 午夜无码区在线观看 | 国产精品久久久久无码av色戒 | 久久综合九色综合欧美狠狠 | 精品久久久久香蕉网 | 人人爽人人澡人人人妻 | 激情国产av做激情国产爱 | 无码人妻精品一区二区三区不卡 | 久久99精品国产.久久久久 | 亚洲成av人影院在线观看 | 成人精品视频一区二区 | 国产精品理论片在线观看 | 日日天干夜夜狠狠爱 | 乌克兰少妇性做爰 | 国产亚洲精品久久久久久 | 无码国内精品人妻少妇 | 日韩欧美中文字幕在线三区 | 亚洲天堂2017无码中文 | 免费人成网站视频在线观看 | 欧美喷潮久久久xxxxx | 国产亚洲精品久久久久久久 | 狂野欧美性猛交免费视频 | 欧美丰满少妇xxxx性 | 男女性色大片免费网站 | 久久久久免费看成人影片 | 色老头在线一区二区三区 | 高中生自慰www网站 | 国产成人无码a区在线观看视频app | 色一情一乱一伦一区二区三欧美 | 欧美精品无码一区二区三区 | 亚洲熟妇色xxxxx亚洲 | 久久精品视频在线看15 | 色老头在线一区二区三区 | 免费国产成人高清在线观看网站 | 玩弄少妇高潮ⅹxxxyw | 牲交欧美兽交欧美 | 丰满肥臀大屁股熟妇激情视频 | 狂野欧美性猛交免费视频 | 人人妻人人澡人人爽欧美精品 | 久久 国产 尿 小便 嘘嘘 | 久久精品人妻少妇一区二区三区 | 一本无码人妻在中文字幕免费 | 欧美性猛交xxxx富婆 | 亚洲欧美精品aaaaaa片 | 在线a亚洲视频播放在线观看 | 三级4级全黄60分钟 | 人人澡人人妻人人爽人人蜜桃 | 国产精品久久久av久久久 | 成人免费视频视频在线观看 免费 | 最新国产麻豆aⅴ精品无码 | 国产综合在线观看 | 欧美人与物videos另类 | 骚片av蜜桃精品一区 | 午夜免费福利小电影 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 老太婆性杂交欧美肥老太 | 国产女主播喷水视频在线观看 | 少妇高潮喷潮久久久影院 | 国产深夜福利视频在线 | 国产莉萝无码av在线播放 | 亚洲一区二区三区四区 | 国产欧美精品一区二区三区 | 青青青手机频在线观看 | 亚洲熟妇色xxxxx亚洲 | 国语自产偷拍精品视频偷 | 国产精品久久久av久久久 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 呦交小u女精品视频 | a片免费视频在线观看 | 久久久久成人片免费观看蜜芽 | 色综合久久久久综合一本到桃花网 | 日本精品少妇一区二区三区 | 在线精品亚洲一区二区 | 97久久超碰中文字幕 | 欧美日韩亚洲国产精品 | 国产精品va在线观看无码 | 精品乱码久久久久久久 | 欧美兽交xxxx×视频 | 精品人妻人人做人人爽夜夜爽 | 俺去俺来也www色官网 | 国产成人综合在线女婷五月99播放 | 亚洲乱码中文字幕在线 | 少妇性俱乐部纵欲狂欢电影 | 少妇太爽了在线观看 | 亚洲精品一区二区三区在线 | 亚洲精品国产精品乱码不卡 | 久久精品国产日本波多野结衣 | 中文字幕无码免费久久99 | 亚洲伊人久久精品影院 | 无套内谢的新婚少妇国语播放 | 国产高清av在线播放 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 成人亚洲精品久久久久软件 | 少妇人妻av毛片在线看 | 日韩精品a片一区二区三区妖精 | 丁香花在线影院观看在线播放 | 人妻无码αv中文字幕久久琪琪布 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 无码精品人妻一区二区三区av | a在线亚洲男人的天堂 | 美女毛片一区二区三区四区 | 亚洲成a人片在线观看无码3d | 亚洲午夜福利在线观看 | a在线亚洲男人的天堂 | 久青草影院在线观看国产 | 国产舌乚八伦偷品w中 | 东京热一精品无码av | 又紧又大又爽精品一区二区 | 国产精品办公室沙发 | 内射后入在线观看一区 | 亚洲另类伦春色综合小说 | 日韩无套无码精品 | 亚洲精品欧美二区三区中文字幕 | 国产成人无码av在线影院 | 丰满少妇熟乱xxxxx视频 | 色婷婷久久一区二区三区麻豆 | 日韩av无码一区二区三区不卡 | 1000部夫妻午夜免费 | 中文字幕色婷婷在线视频 | 大乳丰满人妻中文字幕日本 | 久久久亚洲欧洲日产国码αv | 国产成人精品必看 | 捆绑白丝粉色jk震动捧喷白浆 | 99久久无码一区人妻 | 国产av久久久久精东av | 国产精品免费大片 | 伦伦影院午夜理论片 | 日欧一片内射va在线影院 | 精品无码成人片一区二区98 | 又紧又大又爽精品一区二区 | 欧美丰满熟妇xxxx | 日本肉体xxxx裸交 | 色欲久久久天天天综合网精品 | 婷婷五月综合激情中文字幕 | 国产乱人伦偷精品视频 | 曰本女人与公拘交酡免费视频 | 中文字幕人成乱码熟女app | 国産精品久久久久久久 | 男人的天堂av网站 | 2019nv天堂香蕉在线观看 | 欧美亚洲日韩国产人成在线播放 | 成年美女黄网站色大免费视频 | 亚洲综合精品香蕉久久网 | а√天堂www在线天堂小说 | 人妻少妇精品久久 | 欧美日韩人成综合在线播放 | 未满成年国产在线观看 | 无码人妻精品一区二区三区不卡 | 国产两女互慰高潮视频在线观看 | 久久久成人毛片无码 | 久久精品人人做人人综合 | 澳门永久av免费网站 | 成人无码精品一区二区三区 | 精品一区二区三区波多野结衣 | 久久精品一区二区三区四区 | 日日摸天天摸爽爽狠狠97 | 天天躁夜夜躁狠狠是什么心态 | 亚洲人亚洲人成电影网站色 | 在线观看欧美一区二区三区 | 国产在线aaa片一区二区99 | 精品乱码久久久久久久 | 中文字幕av伊人av无码av | 国内精品一区二区三区不卡 | 日日橹狠狠爱欧美视频 | 午夜福利电影 | 亚洲自偷自偷在线制服 | 日韩欧美群交p片內射中文 | 久久久中文字幕日本无吗 | 国产超级va在线观看视频 | 久久久www成人免费毛片 | 99久久久无码国产aaa精品 | 狠狠色欧美亚洲狠狠色www | 色一情一乱一伦一视频免费看 | 国产人妻大战黑人第1集 | 欧美xxxx黑人又粗又长 | 午夜无码区在线观看 | 99re在线播放 | 在线亚洲高清揄拍自拍一品区 | 99久久久无码国产精品免费 | 夜先锋av资源网站 | 麻豆精品国产精华精华液好用吗 | 在线观看国产一区二区三区 | 牲欲强的熟妇农村老妇女视频 | 欧美熟妇另类久久久久久不卡 | 综合人妻久久一区二区精品 | 99久久婷婷国产综合精品青草免费 | 无遮无挡爽爽免费视频 | 天天综合网天天综合色 | 欧美freesex黑人又粗又大 | 亚洲国产av美女网站 | 国产无av码在线观看 | 亚洲熟熟妇xxxx | 色噜噜亚洲男人的天堂 | 中文字幕人妻丝袜二区 | 蜜臀av无码人妻精品 | 色综合久久中文娱乐网 | 精品无人国产偷自产在线 | 麻豆人妻少妇精品无码专区 | 中文字幕日韩精品一区二区三区 | 牲交欧美兽交欧美 | 欧美人与牲动交xxxx | 影音先锋中文字幕无码 | 久久五月精品中文字幕 | 精品乱子伦一区二区三区 | 精品一区二区不卡无码av | 国产艳妇av在线观看果冻传媒 | 图片小说视频一区二区 | 午夜精品一区二区三区的区别 | 天天躁夜夜躁狠狠是什么心态 | 精品无码av一区二区三区 | 中文字幕无码日韩欧毛 | а√天堂www在线天堂小说 | 国产极品美女高潮无套在线观看 | 国产69精品久久久久app下载 | 强奷人妻日本中文字幕 | 亚洲精品国产精品乱码不卡 | 欧美精品无码一区二区三区 | 日韩亚洲欧美精品综合 | 台湾无码一区二区 | 亚洲人成网站在线播放942 | 国产精品久久久久久亚洲毛片 | 高中生自慰www网站 | 国产欧美熟妇另类久久久 | 欧美变态另类xxxx | 对白脏话肉麻粗话av | 亚洲а∨天堂久久精品2021 | 亚洲大尺度无码无码专区 | 水蜜桃亚洲一二三四在线 | 妺妺窝人体色www婷婷 | 色综合天天综合狠狠爱 | 亚洲中文字幕久久无码 | 欧美性生交活xxxxxdddd | 亚洲小说图区综合在线 | 亚洲中文字幕久久无码 | 成 人 网 站国产免费观看 | 蜜臀aⅴ国产精品久久久国产老师 | 人人妻人人澡人人爽欧美精品 | av小次郎收藏 | 国产精品手机免费 | 爆乳一区二区三区无码 | 久久国产精品偷任你爽任你 | 男女猛烈xx00免费视频试看 | 免费中文字幕日韩欧美 | 台湾无码一区二区 | 国产精品美女久久久久av爽李琼 | 日韩精品久久久肉伦网站 | 国产午夜无码视频在线观看 | 人妻互换免费中文字幕 | 少妇一晚三次一区二区三区 | 欧美xxxx黑人又粗又长 | 人人妻人人藻人人爽欧美一区 | 久久精品99久久香蕉国产色戒 | 日日橹狠狠爱欧美视频 | 国产av剧情md精品麻豆 | 中文字幕人妻无码一区二区三区 | 国产精品久久久 | 国产婷婷色一区二区三区在线 | 国产精品视频免费播放 | 国产无av码在线观看 | 亚洲国产一区二区三区在线观看 | 亚洲乱码国产乱码精品精 | 欧美激情内射喷水高潮 | 欧美丰满熟妇xxxx性ppx人交 | 日本丰满护士爆乳xxxx | 国产成人精品久久亚洲高清不卡 | 国产午夜福利100集发布 | 樱花草在线播放免费中文 | 国产情侣作爱视频免费观看 | 亚洲国产av精品一区二区蜜芽 | 欧美肥老太牲交大战 | 麻豆国产人妻欲求不满 | 国产又爽又黄又刺激的视频 | 正在播放老肥熟妇露脸 | 中文字幕无码日韩专区 | 成人免费视频视频在线观看 免费 | 人妻少妇精品无码专区二区 | 国产精品高潮呻吟av久久 | 十八禁真人啪啪免费网站 | 好爽又高潮了毛片免费下载 | 精品国产av色一区二区深夜久久 | 亚洲综合另类小说色区 | 纯爱无遮挡h肉动漫在线播放 | 中文字幕无码日韩欧毛 | 午夜嘿嘿嘿影院 | 国产激情无码一区二区 | 玩弄人妻少妇500系列视频 | 无码纯肉视频在线观看 | 亚洲毛片av日韩av无码 | 亚洲欧洲中文日韩av乱码 | 日本欧美一区二区三区乱码 | 狠狠躁日日躁夜夜躁2020 | 中文字幕无码视频专区 | 国产精品久久久午夜夜伦鲁鲁 | 欧美三级不卡在线观看 | 粉嫩少妇内射浓精videos | 国产农村乱对白刺激视频 | 久久精品丝袜高跟鞋 | 日本爽爽爽爽爽爽在线观看免 | 2020最新国产自产精品 | 亚洲综合无码一区二区三区 | 窝窝午夜理论片影院 | 国产av无码专区亚洲a∨毛片 | 精品国产麻豆免费人成网站 | 国产绳艺sm调教室论坛 | 51国偷自产一区二区三区 | 日韩av激情在线观看 | 一本色道久久综合亚洲精品不卡 | 中文字幕无码乱人伦 | 午夜精品一区二区三区在线观看 | 久久久av男人的天堂 | 久久婷婷五月综合色国产香蕉 | 97资源共享在线视频 | 天天爽夜夜爽夜夜爽 | 精品国产一区二区三区av 性色 | 国产欧美亚洲精品a | 丰满妇女强制高潮18xxxx | 无码人妻出轨黑人中文字幕 | 日本一区二区三区免费播放 | 国产亚洲精品久久久久久国模美 | 女人被爽到呻吟gif动态图视看 | 亚洲va中文字幕无码久久不卡 | 激情国产av做激情国产爱 | 久久精品女人的天堂av | 亚洲综合久久一区二区 | 国产网红无码精品视频 | 久久亚洲日韩精品一区二区三区 | 国产av无码专区亚洲awww | 国产精品美女久久久久av爽李琼 | 丰满人妻精品国产99aⅴ | 在线播放免费人成毛片乱码 | √8天堂资源地址中文在线 | 精品国产一区二区三区四区 | 人妻少妇精品无码专区二区 | 国产网红无码精品视频 | 性欧美牲交xxxxx视频 | 国产超级va在线观看视频 | 国产午夜手机精彩视频 | 久青草影院在线观看国产 | 在线精品国产一区二区三区 | 亚洲爆乳精品无码一区二区三区 | 久久婷婷五月综合色国产香蕉 | 久久亚洲中文字幕无码 | 丝袜人妻一区二区三区 | 成人亚洲精品久久久久 | 内射白嫩少妇超碰 | 午夜嘿嘿嘿影院 | 美女扒开屁股让男人桶 | 久久久精品国产sm最大网站 | 中文久久乱码一区二区 | 久久精品女人天堂av免费观看 | 亚洲人成影院在线观看 | 国内精品人妻无码久久久影院 | 久久99精品国产麻豆蜜芽 | 日日摸天天摸爽爽狠狠97 | 亚洲精品国产精品乱码不卡 | 99久久精品国产一区二区蜜芽 | 天堂久久天堂av色综合 | 欧美人与牲动交xxxx | 久久精品国产大片免费观看 | 67194成是人免费无码 | 98国产精品综合一区二区三区 | 性欧美疯狂xxxxbbbb | 国产亚洲精品久久久久久国模美 | 香港三级日本三级妇三级 | 午夜时刻免费入口 | 国产精品国产自线拍免费软件 | 嫩b人妻精品一区二区三区 | 在线成人www免费观看视频 | 亚洲小说图区综合在线 | 亚洲国产精品美女久久久久 | 又紧又大又爽精品一区二区 | 性色av无码免费一区二区三区 | 在线a亚洲视频播放在线观看 | 在线天堂新版最新版在线8 | 色一情一乱一伦 | 无码国产乱人伦偷精品视频 | 精品国产av色一区二区深夜久久 | 性做久久久久久久久 | 亚洲欧洲中文日韩av乱码 | 久久久久成人片免费观看蜜芽 | 扒开双腿吃奶呻吟做受视频 | 亚洲精品无码国产 | 又大又硬又爽免费视频 | 99国产欧美久久久精品 | 久久午夜夜伦鲁鲁片无码免费 | 99久久精品国产一区二区蜜芽 | 日韩 欧美 动漫 国产 制服 | 午夜精品久久久久久久久 | 人妻中文无码久热丝袜 | 男女猛烈xx00免费视频试看 | 无码av免费一区二区三区试看 | 天堂亚洲2017在线观看 | 成人精品一区二区三区中文字幕 | 国产一区二区三区日韩精品 | 丰满少妇熟乱xxxxx视频 | 中文字幕精品av一区二区五区 | 国产三级精品三级男人的天堂 | 性欧美牲交在线视频 | 一本一道久久综合久久 | 日韩精品无码免费一区二区三区 | 久久国内精品自在自线 | 国产精品亚洲综合色区韩国 | 午夜无码人妻av大片色欲 | 日日碰狠狠躁久久躁蜜桃 | 午夜无码区在线观看 | 国产黄在线观看免费观看不卡 | 无码福利日韩神码福利片 | 5858s亚洲色大成网站www | 99久久精品无码一区二区毛片 | 欧美刺激性大交 | 九九久久精品国产免费看小说 | 亚洲色偷偷偷综合网 | 野外少妇愉情中文字幕 | 内射巨臀欧美在线视频 | 九九热爱视频精品 | 成人试看120秒体验区 | 国产精品久久久午夜夜伦鲁鲁 | 国产精品99久久精品爆乳 | 中文字幕亚洲情99在线 | 黑人巨大精品欧美一区二区 | 成人精品视频一区二区 | 丝袜美腿亚洲一区二区 | 久久久精品人妻久久影视 | 国精产品一品二品国精品69xx | 美女毛片一区二区三区四区 | 亚洲日韩乱码中文无码蜜桃臀网站 | 老熟女乱子伦 | 少妇被粗大的猛进出69影院 | 人人爽人人爽人人片av亚洲 | 内射后入在线观看一区 | 久久午夜无码鲁丝片午夜精品 | 国产成人无码av一区二区 | 国产又粗又硬又大爽黄老大爷视 | 无码精品国产va在线观看dvd | 4hu四虎永久在线观看 | 国产人妻精品一区二区三区 | 99精品视频在线观看免费 | 99久久久无码国产精品免费 | 国产午夜手机精彩视频 | 午夜精品一区二区三区的区别 | 18精品久久久无码午夜福利 | 成人三级无码视频在线观看 | 国产后入清纯学生妹 | 亚洲欧美日韩成人高清在线一区 | 国内丰满熟女出轨videos | 天天摸天天碰天天添 | 欧美变态另类xxxx | 亚洲人成无码网www | 亚洲国产精品毛片av不卡在线 | 最近的中文字幕在线看视频 | 欧美国产日产一区二区 | 男女猛烈xx00免费视频试看 | 色欲人妻aaaaaaa无码 | 欧美喷潮久久久xxxxx | 国产成人精品优优av | 国产精品无套呻吟在线 | 美女黄网站人色视频免费国产 | 日本欧美一区二区三区乱码 | 日本在线高清不卡免费播放 | 乱人伦人妻中文字幕无码 | 亚洲中文字幕无码一久久区 | 久久久成人毛片无码 | 日本欧美一区二区三区乱码 | 少妇无套内谢久久久久 | 青青草原综合久久大伊人精品 | 精品国偷自产在线视频 | 3d动漫精品啪啪一区二区中 | 日韩成人一区二区三区在线观看 | 爽爽影院免费观看 | 2019nv天堂香蕉在线观看 | 无码人妻精品一区二区三区不卡 | 中文字幕乱码人妻二区三区 | 久久久久久av无码免费看大片 | 精品偷自拍另类在线观看 | 国产亚洲精品久久久久久久久动漫 | 久久久久久久久888 | 人妻夜夜爽天天爽三区 | 亚洲综合在线一区二区三区 | 精品人妻中文字幕有码在线 | 亚洲熟女一区二区三区 | 中文字幕av无码一区二区三区电影 | 国产成人精品视频ⅴa片软件竹菊 | 奇米影视888欧美在线观看 | 国产精华av午夜在线观看 | 国产午夜福利100集发布 | 国产真实乱对白精彩久久 | 久久亚洲中文字幕精品一区 | 日日摸日日碰夜夜爽av | 久久久久久久女国产乱让韩 | 国产午夜福利100集发布 | 国产极品美女高潮无套在线观看 | 无码av最新清无码专区吞精 | 伊人久久大香线蕉午夜 | 樱花草在线播放免费中文 | 欧美老妇交乱视频在线观看 | 中文字幕乱码中文乱码51精品 | 精品国产一区二区三区四区 | a片免费视频在线观看 | 青青青手机频在线观看 | 蜜臀aⅴ国产精品久久久国产老师 | 日韩在线不卡免费视频一区 | 欧美成人家庭影院 | 日韩av无码一区二区三区不卡 | 精品久久久久久亚洲精品 | 日韩亚洲欧美精品综合 | 精品国产一区二区三区av 性色 | 欧美精品在线观看 | 成人片黄网站色大片免费观看 | 国产成人久久精品流白浆 | 亚洲成av人影院在线观看 | 日韩少妇白浆无码系列 | 国产色xx群视频射精 | 国产精品成人av在线观看 | 国产网红无码精品视频 | 美女极度色诱视频国产 | 在线看片无码永久免费视频 | 日本肉体xxxx裸交 | 日韩人妻少妇一区二区三区 | 国产精品久久精品三级 | 午夜无码人妻av大片色欲 | 亚洲天堂2017无码中文 | 麻豆国产丝袜白领秘书在线观看 | 理论片87福利理论电影 | 久久久久久a亚洲欧洲av冫 | 国产亚av手机在线观看 | 娇妻被黑人粗大高潮白浆 | 超碰97人人射妻 | 色综合视频一区二区三区 | 久久国产自偷自偷免费一区调 | 麻豆国产人妻欲求不满谁演的 | 国产艳妇av在线观看果冻传媒 | 精品一区二区三区无码免费视频 | 人人澡人摸人人添 | 久激情内射婷内射蜜桃人妖 | 亚洲国精产品一二二线 | 国内精品人妻无码久久久影院 | 中文字幕色婷婷在线视频 | 国产精品人人妻人人爽 | 国产精品久久久 | 女人和拘做爰正片视频 | 国产成人无码午夜视频在线观看 | 人人妻人人澡人人爽精品欧美 | 久久久久99精品国产片 | 人人妻人人澡人人爽欧美精品 | 人妻人人添人妻人人爱 | 中文字幕无码日韩专区 | 国产高清不卡无码视频 | 亚洲 欧美 激情 小说 另类 | 久久99精品久久久久婷婷 | 玩弄人妻少妇500系列视频 | 亚洲综合在线一区二区三区 | 大肉大捧一进一出视频出来呀 | 无码人妻丰满熟妇区五十路百度 | 无码任你躁久久久久久久 | 2019nv天堂香蕉在线观看 | 精品久久久久久人妻无码中文字幕 | 欧洲欧美人成视频在线 | 色欲久久久天天天综合网精品 | 国产精品成人av在线观看 | 粗大的内捧猛烈进出视频 | 狠狠躁日日躁夜夜躁2020 | 国产无遮挡又黄又爽又色 | 国精产品一品二品国精品69xx | 俺去俺来也在线www色官网 | 久9re热视频这里只有精品 | 欧美日本精品一区二区三区 | 欧美性猛交内射兽交老熟妇 | 日韩少妇白浆无码系列 | 国产在线精品一区二区高清不卡 | 国产三级精品三级男人的天堂 | 老熟妇乱子伦牲交视频 | 国产精品亚洲五月天高清 | 欧美国产日韩久久mv | 亚洲精品国偷拍自产在线观看蜜桃 | 亚洲精品久久久久久一区二区 | 麻豆蜜桃av蜜臀av色欲av | 国产精品内射视频免费 | 免费网站看v片在线18禁无码 | 国产内射爽爽大片视频社区在线 | 97夜夜澡人人双人人人喊 | 亚洲日韩av片在线观看 | 少妇性l交大片 | 久久综合网欧美色妞网 | 无码福利日韩神码福利片 | 男女作爱免费网站 | 双乳奶水饱满少妇呻吟 | 国产成人综合在线女婷五月99播放 | 扒开双腿吃奶呻吟做受视频 | 欧洲美熟女乱又伦 | 精品国产成人一区二区三区 | 麻豆蜜桃av蜜臀av色欲av | 99久久99久久免费精品蜜桃 | 成人无码精品1区2区3区免费看 | 老头边吃奶边弄进去呻吟 | 成人欧美一区二区三区黑人免费 | 国产办公室秘书无码精品99 | 欧美黑人巨大xxxxx | 漂亮人妻洗澡被公强 日日躁 | 撕开奶罩揉吮奶头视频 | 国产在线精品一区二区高清不卡 | 亚洲s色大片在线观看 | 性欧美牲交在线视频 | 日本饥渴人妻欲求不满 | 青青草原综合久久大伊人精品 | 亚洲成色www久久网站 | 强开小婷嫩苞又嫩又紧视频 | www成人国产高清内射 | 亚洲熟女一区二区三区 | 东京热无码av男人的天堂 | 免费国产黄网站在线观看 | 亚洲 激情 小说 另类 欧美 | 免费国产成人高清在线观看网站 | 人人超人人超碰超国产 | 欧美国产日韩亚洲中文 | 欧洲欧美人成视频在线 | 一区二区三区乱码在线 | 欧洲 | 午夜无码区在线观看 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 丰满少妇人妻久久久久久 | 99久久婷婷国产综合精品青草免费 | 国产三级久久久精品麻豆三级 | 久久久无码中文字幕久... | 欧美日韩在线亚洲综合国产人 | 未满小14洗澡无码视频网站 | 波多野结衣高清一区二区三区 | 午夜成人1000部免费视频 | 大肉大捧一进一出好爽视频 | 国产成人综合色在线观看网站 | 窝窝午夜理论片影院 | 国产日产欧产精品精品app | 久久亚洲中文字幕精品一区 | 风流少妇按摩来高潮 | 国产成人精品一区二区在线小狼 | 欧美午夜特黄aaaaaa片 | 日日摸日日碰夜夜爽av | 国产精华av午夜在线观看 | 国产激情无码一区二区 | 日本爽爽爽爽爽爽在线观看免 | 亚洲精品久久久久久久久久久 | 少妇无码av无码专区在线观看 | 中文字幕乱码人妻二区三区 | 日韩成人一区二区三区在线观看 | 久激情内射婷内射蜜桃人妖 | 给我免费的视频在线观看 | 伊人久久大香线焦av综合影院 | 欧美zoozzooz性欧美 | 久久天天躁夜夜躁狠狠 | 好屌草这里只有精品 | 成人无码精品一区二区三区 | 熟女俱乐部五十路六十路av | 精品无码国产一区二区三区av | 兔费看少妇性l交大片免费 | 女人被爽到呻吟gif动态图视看 | 亚洲va中文字幕无码久久不卡 | 成人精品视频一区二区三区尤物 | 天堂а√在线中文在线 | 日本精品人妻无码免费大全 | 成人精品视频一区二区三区尤物 | 男女作爱免费网站 | 国产午夜精品一区二区三区嫩草 | 亚洲色成人中文字幕网站 | 国产又爽又猛又粗的视频a片 | 欧美精品在线观看 | 国产成人无码a区在线观看视频app | 性做久久久久久久久 | 久久久婷婷五月亚洲97号色 | 欧美日韩一区二区免费视频 | 国产真实乱对白精彩久久 | 国产又爽又黄又刺激的视频 | 久久久久亚洲精品男人的天堂 | 精品国产一区av天美传媒 | 国产明星裸体无码xxxx视频 | 图片小说视频一区二区 | 亚洲男女内射在线播放 | 午夜理论片yy44880影院 | 又大又硬又爽免费视频 | 色综合久久88色综合天天 | 国产精品手机免费 | 又粗又大又硬又长又爽 | 熟女体下毛毛黑森林 | 国产精品99爱免费视频 | 成人免费视频在线观看 | 日本饥渴人妻欲求不满 | 又紧又大又爽精品一区二区 | 青青草原综合久久大伊人精品 | 中文字幕日韩精品一区二区三区 | 99re在线播放 | 综合激情五月综合激情五月激情1 | 亚洲中文字幕在线无码一区二区 | 亚洲日韩乱码中文无码蜜桃臀网站 | 在线天堂新版最新版在线8 | 少妇愉情理伦片bd | 牲交欧美兽交欧美 | 搡女人真爽免费视频大全 | 人妻少妇精品无码专区动漫 | 亚洲国产精品久久人人爱 | 性色欲网站人妻丰满中文久久不卡 | 色综合视频一区二区三区 | 乱人伦中文视频在线观看 | 77777熟女视频在线观看 а天堂中文在线官网 | aa片在线观看视频在线播放 | 撕开奶罩揉吮奶头视频 | 国产真人无遮挡作爱免费视频 | 97se亚洲精品一区 | 中文字幕精品av一区二区五区 | 初尝人妻少妇中文字幕 | 图片小说视频一区二区 | 在线观看国产午夜福利片 | 国产午夜福利100集发布 | 精品人妻人人做人人爽 | 清纯唯美经典一区二区 | 婷婷五月综合激情中文字幕 | 久久亚洲国产成人精品性色 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 中文毛片无遮挡高清免费 | 欧美精品一区二区精品久久 | 无码人妻少妇伦在线电影 | 色欲久久久天天天综合网精品 | www国产亚洲精品久久网站 | 亚洲一区二区三区含羞草 | 亚洲精品国偷拍自产在线麻豆 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 久久精品99久久香蕉国产色戒 | 蜜桃av抽搐高潮一区二区 | 强辱丰满人妻hd中文字幕 | 波多野结衣av一区二区全免费观看 | 久久国内精品自在自线 | 亚洲爆乳大丰满无码专区 | 亚洲欧美综合区丁香五月小说 | 少妇激情av一区二区 | 亚洲一区二区三区四区 | 麻豆蜜桃av蜜臀av色欲av | 久激情内射婷内射蜜桃人妖 | 亚洲爆乳大丰满无码专区 | 亚洲乱码中文字幕在线 | 97人妻精品一区二区三区 | 国产午夜精品一区二区三区嫩草 | 无遮挡啪啪摇乳动态图 | 97久久国产亚洲精品超碰热 | 97色伦图片97综合影院 | 精品午夜福利在线观看 | 国产精品亚洲五月天高清 | 午夜福利试看120秒体验区 | 国产精品久久久 | 日本va欧美va欧美va精品 | 亚洲欧美中文字幕5发布 | 一本色道久久综合亚洲精品不卡 | 日本一卡二卡不卡视频查询 | 欧美大屁股xxxxhd黑色 | 亚洲国产综合无码一区 | 亚洲午夜久久久影院 | a片在线免费观看 | 久久熟妇人妻午夜寂寞影院 | 亚洲精品久久久久久一区二区 | 久久久精品456亚洲影院 | 久久精品国产精品国产精品污 | 女人被男人躁得好爽免费视频 | 少妇的肉体aa片免费 | 成熟人妻av无码专区 | 色婷婷久久一区二区三区麻豆 | 无码人妻出轨黑人中文字幕 | 国产亚洲精品久久久久久 | 九九久久精品国产免费看小说 | 麻豆国产丝袜白领秘书在线观看 | 久久亚洲精品中文字幕无男同 | 国产精品丝袜黑色高跟鞋 | 一本久久伊人热热精品中文字幕 | 免费无码一区二区三区蜜桃大 | 在线播放免费人成毛片乱码 | 丁香啪啪综合成人亚洲 | 高潮毛片无遮挡高清免费 | 久久久精品成人免费观看 | 久久国产36精品色熟妇 | 97色伦图片97综合影院 | 水蜜桃亚洲一二三四在线 | 午夜精品久久久久久久久 | 中文字幕无码人妻少妇免费 | 少妇被粗大的猛进出69影院 | 18黄暴禁片在线观看 | 日日摸夜夜摸狠狠摸婷婷 | 久久精品国产99久久6动漫 | 日本熟妇人妻xxxxx人hd | 日日摸夜夜摸狠狠摸婷婷 | 97久久精品无码一区二区 | 久久综合给合久久狠狠狠97色 | 国产97人人超碰caoprom | 国产av一区二区三区最新精品 | 国产无av码在线观看 | 1000部啪啪未满十八勿入下载 | 亚洲va中文字幕无码久久不卡 | 国内揄拍国内精品少妇国语 | 成人精品视频一区二区三区尤物 | 人妻少妇精品无码专区二区 | 天天爽夜夜爽夜夜爽 | 亚洲国产精华液网站w | 欧美性生交活xxxxxdddd | 国内揄拍国内精品人妻 | 国内精品久久毛片一区二区 | 国产精品丝袜黑色高跟鞋 | 性欧美牲交xxxxx视频 | 国色天香社区在线视频 | 欧美色就是色 | 玩弄中年熟妇正在播放 | 99国产欧美久久久精品 | 在线 国产 欧美 亚洲 天堂 | 强开小婷嫩苞又嫩又紧视频 | 欧美老妇交乱视频在线观看 | 欧美日韩综合一区二区三区 | 高潮毛片无遮挡高清免费视频 | 免费观看激色视频网站 | 国产精品久久精品三级 | 国产精品.xx视频.xxtv | 免费视频欧美无人区码 | 99精品无人区乱码1区2区3区 | 国产乱人偷精品人妻a片 | 少妇性l交大片欧洲热妇乱xxx | 国产电影无码午夜在线播放 | 亚洲精品国产第一综合99久久 | 人妻天天爽夜夜爽一区二区 | 久久99热只有频精品8 | 成人亚洲精品久久久久 | 国产av久久久久精东av | 中文字幕 亚洲精品 第1页 | 美女扒开屁股让男人桶 | 精品国产一区av天美传媒 | 日日天干夜夜狠狠爱 | 国产av一区二区精品久久凹凸 | 亚洲一区二区三区无码久久 | 久久伊人色av天堂九九小黄鸭 | 亚洲精品成a人在线观看 | 国产精品嫩草久久久久 | 午夜男女很黄的视频 | 全黄性性激高免费视频 | 丰满妇女强制高潮18xxxx | 四十如虎的丰满熟妇啪啪 | 国产极品视觉盛宴 | 亚洲成av人综合在线观看 | 老司机亚洲精品影院 | 国产激情精品一区二区三区 | 亚洲另类伦春色综合小说 | 十八禁真人啪啪免费网站 | 久久久国产精品无码免费专区 | 色诱久久久久综合网ywww | 久久国产36精品色熟妇 | 久久午夜无码鲁丝片秋霞 | 亚洲精品国产a久久久久久 | 亚洲aⅴ无码成人网站国产app | 激情亚洲一区国产精品 | 欧美精品一区二区精品久久 | 亚洲va欧美va天堂v国产综合 | 精品偷拍一区二区三区在线看 | 精品久久久无码中文字幕 | 高潮毛片无遮挡高清免费 | 日本熟妇人妻xxxxx人hd | 一本色道婷婷久久欧美 | 76少妇精品导航 | 精品国产一区二区三区四区 | 在线播放免费人成毛片乱码 | 免费人成在线观看网站 | 精品 日韩 国产 欧美 视频 | 久久久www成人免费毛片 | 成人性做爰aaa片免费看不忠 | 国产 精品 自在自线 | 亚洲精品一区二区三区婷婷月 | 熟女少妇在线视频播放 | 亚洲精品鲁一鲁一区二区三区 | 久久五月精品中文字幕 | 亚拍精品一区二区三区探花 | 精品日本一区二区三区在线观看 | 少妇无套内谢久久久久 | 国产亚洲人成在线播放 | 熟妇人妻无乱码中文字幕 | 午夜嘿嘿嘿影院 | 国产在线aaa片一区二区99 | 少妇人妻大乳在线视频 | 日日躁夜夜躁狠狠躁 | 国产99久久精品一区二区 | 亚洲自偷精品视频自拍 | 国产suv精品一区二区五 | 成人精品视频一区二区三区尤物 | 少妇愉情理伦片bd | 76少妇精品导航 | 久久亚洲中文字幕无码 | 中文字幕av日韩精品一区二区 | 国产高清av在线播放 | 波多野42部无码喷潮在线 | 波多野结衣av在线观看 | 日本www一道久久久免费榴莲 | 无遮挡国产高潮视频免费观看 | 成年美女黄网站色大免费视频 | 老熟女乱子伦 | 国产黄在线观看免费观看不卡 | 97久久精品无码一区二区 | 东京热无码av男人的天堂 | 欧美日韩一区二区综合 | 国产熟女一区二区三区四区五区 | 国产精品高潮呻吟av久久 | 成 人 免费观看网站 | 国产精品久久久久久久9999 | 国产午夜福利100集发布 | 大肉大捧一进一出好爽视频 | 高清国产亚洲精品自在久久 | 纯爱无遮挡h肉动漫在线播放 | 97久久超碰中文字幕 | 亚洲 激情 小说 另类 欧美 | 国产激情艳情在线看视频 | 人人爽人人澡人人高潮 | 中文字幕无码免费久久9一区9 | 国产乱人偷精品人妻a片 | 欧美激情内射喷水高潮 | 国产精品.xx视频.xxtv | 久久精品丝袜高跟鞋 | 亚洲国产精品无码一区二区三区 | 激情亚洲一区国产精品 | 亚洲精品综合一区二区三区在线 | 丝袜美腿亚洲一区二区 | 捆绑白丝粉色jk震动捧喷白浆 | 亚洲欧美色中文字幕在线 | 色一情一乱一伦 | 国产成人无码av一区二区 | 沈阳熟女露脸对白视频 | 少妇性俱乐部纵欲狂欢电影 | 亚洲精品中文字幕乱码 | 中文字幕久久久久人妻 | 又大又紧又粉嫩18p少妇 | 色欲综合久久中文字幕网 | 国产乱人无码伦av在线a | 少妇被粗大的猛进出69影院 | 亚洲精品中文字幕 | 丝袜人妻一区二区三区 | 亚洲中文无码av永久不收费 | 正在播放老肥熟妇露脸 | 国产黄在线观看免费观看不卡 | 成熟人妻av无码专区 | 无码国产激情在线观看 | 狂野欧美性猛xxxx乱大交 | 久久久久久亚洲精品a片成人 | 强奷人妻日本中文字幕 | 亚洲中文字幕va福利 | 好屌草这里只有精品 | 午夜福利试看120秒体验区 | 377p欧洲日本亚洲大胆 | 国产精品久久久一区二区三区 | 欧美人与动性行为视频 | 人妻中文无码久热丝袜 | 2019午夜福利不卡片在线 | 老熟女乱子伦 | 色一情一乱一伦一区二区三欧美 | 日本丰满护士爆乳xxxx | 无码人妻av免费一区二区三区 | 99国产欧美久久久精品 | 精品成在人线av无码免费看 | 好爽又高潮了毛片免费下载 | 一本无码人妻在中文字幕免费 | 亚洲а∨天堂久久精品2021 | 无遮无挡爽爽免费视频 | 日韩无套无码精品 | 日本精品人妻无码免费大全 | 人妻无码久久精品人妻 | 亚洲s码欧洲m码国产av | 亚洲日韩一区二区三区 | 久久久久久亚洲精品a片成人 | 成年美女黄网站色大免费全看 | 欧美日韩久久久精品a片 | 国产 精品 自在自线 | 性欧美熟妇videofreesex | 欧美丰满少妇xxxx性 | 国产综合久久久久鬼色 | 少女韩国电视剧在线观看完整 | 久久久av男人的天堂 | 影音先锋中文字幕无码 | 国产人妻精品一区二区三区不卡 | 亚洲精品国产a久久久久久 | 99久久精品无码一区二区毛片 | 亚洲人成网站在线播放942 | 天堂亚洲2017在线观看 | 免费播放一区二区三区 | 伊人久久大香线蕉午夜 | 久久精品人人做人人综合试看 | 人人妻人人澡人人爽人人精品浪潮 | 国产无遮挡又黄又爽免费视频 | 精品久久久久香蕉网 | 日本又色又爽又黄的a片18禁 | 奇米影视7777久久精品 | 日日鲁鲁鲁夜夜爽爽狠狠 | 妺妺窝人体色www婷婷 | 欧美熟妇另类久久久久久多毛 | 大胆欧美熟妇xx | 成人精品天堂一区二区三区 | 国产性生大片免费观看性 | 亚洲精品综合五月久久小说 | 色 综合 欧美 亚洲 国产 | 久久久www成人免费毛片 | 疯狂三人交性欧美 | 国产人妻人伦精品 | 久久人人爽人人人人片 | 欧美三级a做爰在线观看 | 欧美性猛交内射兽交老熟妇 | 秋霞特色aa大片 | 国产精品无码mv在线观看 | 亚洲精品美女久久久久久久 | 伦伦影院午夜理论片 | 国产人成高清在线视频99最全资源 | 久在线观看福利视频 | 亚洲中文字幕无码中字 | 强开小婷嫩苞又嫩又紧视频 | 欧洲精品码一区二区三区免费看 | 麻豆国产人妻欲求不满谁演的 | 国产亚洲欧美在线专区 | 色一情一乱一伦一区二区三欧美 | 老子影院午夜伦不卡 | 少妇高潮喷潮久久久影院 | 国产乱人偷精品人妻a片 | www国产亚洲精品久久久日本 | 在线播放免费人成毛片乱码 | 亚洲高清偷拍一区二区三区 | 亚洲gv猛男gv无码男同 | 精品人妻中文字幕有码在线 | 蜜桃av抽搐高潮一区二区 | 国内综合精品午夜久久资源 | 欧美第一黄网免费网站 | 丝袜美腿亚洲一区二区 | 亚洲人成网站在线播放942 | 国产精品久久久久9999小说 | 亚洲精品国产精品乱码视色 | 97精品人妻一区二区三区香蕉 | 日韩无套无码精品 | 中文字幕乱码人妻无码久久 | 人人妻人人澡人人爽人人精品 | 久激情内射婷内射蜜桃人妖 | 亚洲国产高清在线观看视频 | 一本久道高清无码视频 | 一本久道久久综合婷婷五月 | 国产香蕉尹人视频在线 | 欧美人与禽猛交狂配 | 亚洲中文字幕在线观看 | 88国产精品欧美一区二区三区 | 久久久久se色偷偷亚洲精品av | 国产人妻人伦精品 | 四虎4hu永久免费 | 极品尤物被啪到呻吟喷水 | 疯狂三人交性欧美 | 国产农村乱对白刺激视频 | 欧美精品一区二区精品久久 | 久在线观看福利视频 | 全球成人中文在线 | 免费观看又污又黄的网站 | а√天堂www在线天堂小说 | 无码人妻久久一区二区三区不卡 | 男女猛烈xx00免费视频试看 | 国产超碰人人爽人人做人人添 | 国内精品人妻无码久久久影院 | 久精品国产欧美亚洲色aⅴ大片 | 自拍偷自拍亚洲精品10p | 国产日产欧产精品精品app | 97久久国产亚洲精品超碰热 | 在线精品国产一区二区三区 | 色窝窝无码一区二区三区色欲 | 蜜桃无码一区二区三区 | 骚片av蜜桃精品一区 | 少妇高潮喷潮久久久影院 | 中文字幕 亚洲精品 第1页 | 99国产欧美久久久精品 | 欧美变态另类xxxx | 欧美喷潮久久久xxxxx | 天天躁夜夜躁狠狠是什么心态 | 亚洲精品一区二区三区在线 | 久久综合网欧美色妞网 | 水蜜桃色314在线观看 | 大地资源中文第3页 | 精品一区二区三区波多野结衣 | 乱人伦人妻中文字幕无码久久网 | 中文无码成人免费视频在线观看 | 亚洲成在人网站无码天堂 | 久久午夜无码鲁丝片 | 国产精品美女久久久网av | 狠狠色噜噜狠狠狠7777奇米 | 老头边吃奶边弄进去呻吟 | 国产69精品久久久久app下载 | 亚洲一区二区三区香蕉 | 未满小14洗澡无码视频网站 | 亚洲欧美中文字幕5发布 | 在线观看免费人成视频 | 红桃av一区二区三区在线无码av | 色妞www精品免费视频 | 国产极品美女高潮无套在线观看 | 国产午夜精品一区二区三区嫩草 | 久久久久成人精品免费播放动漫 | 久久综合久久自在自线精品自 | 在线观看国产一区二区三区 | 成人三级无码视频在线观看 | 国产办公室秘书无码精品99 | 免费无码一区二区三区蜜桃大 | 国产成人无码专区 | 樱花草在线社区www | 亚洲综合久久一区二区 | 国产在线一区二区三区四区五区 | 网友自拍区视频精品 | 国产suv精品一区二区五 | 樱花草在线播放免费中文 | 国产黄在线观看免费观看不卡 | 色综合天天综合狠狠爱 | 国产成人精品三级麻豆 | 天干天干啦夜天干天2017 | 扒开双腿疯狂进出爽爽爽视频 | 国产精品第一国产精品 | 乱码av麻豆丝袜熟女系列 | 国产亚洲人成a在线v网站 | 国产精品永久免费视频 | 久久99精品国产麻豆 | 欧美熟妇另类久久久久久不卡 | 日本熟妇大屁股人妻 | 成人片黄网站色大片免费观看 | 国产午夜亚洲精品不卡 | 国产av无码专区亚洲a∨毛片 | 女人被男人爽到呻吟的视频 | 久久久久亚洲精品男人的天堂 | 人妻有码中文字幕在线 | 亚洲人成影院在线无码按摩店 | 欧美人与动性行为视频 | 中文字幕无码视频专区 | 漂亮人妻洗澡被公强 日日躁 | 久久久久成人片免费观看蜜芽 | 日本一区二区更新不卡 | 国产香蕉97碰碰久久人人 | 色综合久久中文娱乐网 | 国产精品毛片一区二区 | 国产亚洲精品久久久ai换 | 成人免费视频一区二区 | 国产做国产爱免费视频 | 国产无套粉嫩白浆在线 | 天天躁夜夜躁狠狠是什么心态 | 在线精品亚洲一区二区 | 亚洲 激情 小说 另类 欧美 | 日韩精品a片一区二区三区妖精 | 日本高清一区免费中文视频 | 欧美 亚洲 国产 另类 | 久久综合香蕉国产蜜臀av | 曰本女人与公拘交酡免费视频 | 少妇无码吹潮 | 激情国产av做激情国产爱 | 国产在线无码精品电影网 | 精品久久久中文字幕人妻 | 午夜理论片yy44880影院 | 亚洲男人av天堂午夜在 | 成人试看120秒体验区 | 少妇被粗大的猛进出69影院 | 波多野结衣乳巨码无在线观看 | 俄罗斯老熟妇色xxxx | 亚洲啪av永久无码精品放毛片 | 少妇高潮喷潮久久久影院 | 国产成人无码午夜视频在线观看 | 久久精品人妻少妇一区二区三区 | 色综合久久久久综合一本到桃花网 | 精品国精品国产自在久国产87 | 国产精品国产三级国产专播 | 亚洲一区二区三区在线观看网站 | 国产精品久久久一区二区三区 | 国产97在线 | 亚洲 | 国产福利视频一区二区 | av香港经典三级级 在线 | 无码人妻黑人中文字幕 | 国产人妻精品一区二区三区不卡 | 国产午夜视频在线观看 | 亚洲 欧美 激情 小说 另类 | 亚洲成a人片在线观看无码3d | 美女扒开屁股让男人桶 | 日韩人妻无码一区二区三区久久99 | 啦啦啦www在线观看免费视频 | 在线天堂新版最新版在线8 | 日韩视频 中文字幕 视频一区 | 国产精品高潮呻吟av久久 | 国内丰满熟女出轨videos | 亚洲精品国产品国语在线观看 | 又粗又大又硬又长又爽 | 欧美国产日韩亚洲中文 | 欧洲熟妇精品视频 | 久久精品人人做人人综合试看 | 午夜福利不卡在线视频 | 亚洲乱码中文字幕在线 | 亚洲精品午夜无码电影网 | 中文无码成人免费视频在线观看 | 色综合久久久久综合一本到桃花网 | 人妻少妇精品无码专区二区 | 纯爱无遮挡h肉动漫在线播放 | 久久久中文久久久无码 | 亚洲国产精品一区二区第一页 | 伊人久久婷婷五月综合97色 | 一本大道久久东京热无码av | 强辱丰满人妻hd中文字幕 | 精品国产青草久久久久福利 | 无码一区二区三区在线 | 无码人妻av免费一区二区三区 | 国产成人无码专区 | 蜜臀av无码人妻精品 | 国产美女极度色诱视频www | 亚洲s色大片在线观看 | 国产黑色丝袜在线播放 | 欧美熟妇另类久久久久久多毛 | 熟妇女人妻丰满少妇中文字幕 | 人妻有码中文字幕在线 | 男女超爽视频免费播放 | 在线看片无码永久免费视频 | 成 人 网 站国产免费观看 | 国产成人无码区免费内射一片色欲 | 亚洲 a v无 码免 费 成 人 a v | 精品厕所偷拍各类美女tp嘘嘘 | 人人妻人人澡人人爽欧美一区 | 久久99精品国产.久久久久 | 无码中文字幕色专区 | 无码人妻出轨黑人中文字幕 | 国产综合色产在线精品 | 亚洲日韩av片在线观看 | 国产成人精品久久亚洲高清不卡 | 思思久久99热只有频精品66 | 国产明星裸体无码xxxx视频 | 国产免费观看黄av片 | 天堂无码人妻精品一区二区三区 | 丰满妇女强制高潮18xxxx | 亚洲经典千人经典日产 | 人妻少妇被猛烈进入中文字幕 | 97精品国产97久久久久久免费 | 国产精品爱久久久久久久 | 精品人妻av区 | 亚洲人成无码网www | 亚洲国产精品无码久久久久高潮 | 动漫av一区二区在线观看 | 55夜色66夜色国产精品视频 | 久久精品女人天堂av免费观看 | v一区无码内射国产 | 久久精品国产99精品亚洲 | 精品国产一区二区三区av 性色 | 中文精品久久久久人妻不卡 | 久久精品国产99久久6动漫 | 少妇愉情理伦片bd | 久久久中文久久久无码 | 国产乱人偷精品人妻a片 | 男女猛烈xx00免费视频试看 | 天海翼激烈高潮到腰振不止 | 国产精品久久久久久无码 | 久在线观看福利视频 | 极品嫩模高潮叫床 | 日本丰满熟妇videos | 国产午夜无码视频在线观看 | 久久久久久久女国产乱让韩 | 国产成人无码一二三区视频 | 色妞www精品免费视频 | 综合激情五月综合激情五月激情1 | 精品国产av色一区二区深夜久久 | yw尤物av无码国产在线观看 | 2020久久超碰国产精品最新 | 国产另类ts人妖一区二区 | 国产舌乚八伦偷品w中 | 成人精品视频一区二区三区尤物 | 蜜桃视频插满18在线观看 | 久久久久免费精品国产 | 久久综合九色综合欧美狠狠 | 秋霞成人午夜鲁丝一区二区三区 | 无码精品国产va在线观看dvd | 无码毛片视频一区二区本码 | 鲁一鲁av2019在线 | 亚洲国产精品久久久天堂 | 四虎国产精品免费久久 | 久久国产精品_国产精品 | 樱花草在线社区www | 国产尤物精品视频 | 狂野欧美性猛交免费视频 | 精品成人av一区二区三区 | 久久精品国产99精品亚洲 | 玩弄人妻少妇500系列视频 | 色婷婷综合激情综在线播放 | 无码中文字幕色专区 | 久久亚洲国产成人精品性色 | 欧美一区二区三区视频在线观看 | 日日天日日夜日日摸 | 乌克兰少妇性做爰 | 日本熟妇大屁股人妻 | 午夜理论片yy44880影院 | 97夜夜澡人人爽人人喊中国片 | 欧美老妇与禽交 | 秋霞成人午夜鲁丝一区二区三区 | 色一情一乱一伦 | 无遮挡国产高潮视频免费观看 | 三上悠亚人妻中文字幕在线 | 中文字幕av无码一区二区三区电影 | 野狼第一精品社区 | 麻豆人妻少妇精品无码专区 | 成人精品天堂一区二区三区 | 精品无码国产一区二区三区av | 激情爆乳一区二区三区 | 免费国产黄网站在线观看 | 人妻少妇精品无码专区动漫 | 精品国精品国产自在久国产87 | 麻豆md0077饥渴少妇 | 对白脏话肉麻粗话av | 人妻人人添人妻人人爱 | 全黄性性激高免费视频 | 中文字幕 亚洲精品 第1页 | 欧美日本精品一区二区三区 | 牲欲强的熟妇农村老妇女视频 | 激情五月综合色婷婷一区二区 | 国产无av码在线观看 | 欧美日韩久久久精品a片 | 久久精品无码一区二区三区 | 国产69精品久久久久app下载 | 国产在线精品一区二区高清不卡 | 日韩人妻无码中文字幕视频 | 国产精品亚洲а∨无码播放麻豆 | 亚洲国产精品一区二区第一页 | 色 综合 欧美 亚洲 国产 | 影音先锋中文字幕无码 | 成人毛片一区二区 | 久久久成人毛片无码 | 欧洲美熟女乱又伦 | 免费无码一区二区三区蜜桃大 | 大乳丰满人妻中文字幕日本 | 国产人妖乱国产精品人妖 | 久久综合久久自在自线精品自 | 性欧美牲交xxxxx视频 | 无码人妻出轨黑人中文字幕 | 88国产精品欧美一区二区三区 | 中文字幕色婷婷在线视频 | 日本免费一区二区三区最新 | 桃花色综合影院 | 久久国产精品_国产精品 | 午夜精品一区二区三区的区别 | 曰本女人与公拘交酡免费视频 | 九九久久精品国产免费看小说 | 国产精品爱久久久久久久 | 成人无码视频在线观看网站 | 曰本女人与公拘交酡免费视频 | 人妻尝试又大又粗久久 | 国语自产偷拍精品视频偷 | 高潮毛片无遮挡高清免费视频 | 天天拍夜夜添久久精品大 | 中文字幕乱码亚洲无线三区 | 亚洲最大成人网站 | 美女毛片一区二区三区四区 | 亚洲欧洲中文日韩av乱码 | 国产成人无码a区在线观看视频app | 午夜肉伦伦影院 | 妺妺窝人体色www在线小说 | 一二三四社区在线中文视频 | 中文字幕无码乱人伦 | 精品人妻av区 | 人妻aⅴ无码一区二区三区 | 久久aⅴ免费观看 | 全黄性性激高免费视频 | 成人性做爰aaa片免费看不忠 | 亚洲精品国产品国语在线观看 | 久久精品丝袜高跟鞋 | 在线播放免费人成毛片乱码 | 女人被爽到呻吟gif动态图视看 | 好爽又高潮了毛片免费下载 | 久久久久99精品成人片 | 玩弄人妻少妇500系列视频 | 伊人色综合久久天天小片 | 日产国产精品亚洲系列 | 日韩精品一区二区av在线 | 成人亚洲精品久久久久 | 国产精华av午夜在线观看 | 成人无码精品一区二区三区 | 日日碰狠狠躁久久躁蜜桃 | 樱花草在线社区www | 乱码av麻豆丝袜熟女系列 | 四十如虎的丰满熟妇啪啪 | 国产精品无码一区二区三区不卡 | 成人免费无码大片a毛片 | 中文字幕乱妇无码av在线 | 日韩 欧美 动漫 国产 制服 | 国产尤物精品视频 |