久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

畫一個(gè)三角形,徹底理解固定功能渲染管線

畫一個(gè)三角形,徹底理解固定功能渲染管線 1. 為什么要從“畫一個(gè)三角形”開始理解固定功能管線在圖形學(xué)里三角形的地位相當(dāng)于編程里的Hello World——但它遠(yuǎn)比Hello World更接近真實(shí)原理。我第一次在CPU上手動(dòng)實(shí)現(xiàn)固定功能管線Fixed Function Pipeline時(shí)才真正明白顯卡拿到一堆頂點(diǎn)之后到底干了多少活。很多人一開始就被Shader帶走急著去調(diào)“頂點(diǎn)著色器”和“片元著色器”卻對整條渲染流程只有一個(gè)模糊概念數(shù)據(jù)進(jìn)去像素出來。中間那些階段——坐標(biāo)變換、裁剪、光柵化、深度測試、混合——到底是誰在什么時(shí)間點(diǎn)做了什么反而一知半解。固定功能管線恰恰是理解這一切最好的教材。所謂“固定功能”指的是早期GPU把渲染流程拆成一系列處理階段這些階段在硬件上已經(jīng)“焊死”了開發(fā)者能通過設(shè)置參數(shù)調(diào)節(jié)行為但不能改變處理邏輯本身。比如OpenGL 1.x時(shí)代你調(diào)用glRotatef、glLightfv、glTexEnvi去配置矩陣、光照和紋理驅(qū)動(dòng)把這些狀態(tài)翻譯成硬件的固定指令頂點(diǎn)進(jìn)去、像素出來中間你的自由度非常有限。但正因?yàn)闆]得選你反而會被迫看清“管線到底長什么樣”。為什么偏偏拿三角形舉例這不是隨便選的。三角形是光柵化硬件的基本處理單元理由至少有兩條。第一三角形是最簡單的平面多邊形三個(gè)點(diǎn)一定共面這保證了后續(xù)插值和裁剪在數(shù)學(xué)上干凈利落四邊形在透視投影下可能被掰成兩個(gè)不共面的半片而三角形不會。第二三角形內(nèi)部任意一點(diǎn)都能用重心坐標(biāo)barycentric coordinates唯一表示這個(gè)坐標(biāo)天然適合做顏色、紋理、深度等屬性的插值。實(shí)際渲染里一個(gè)復(fù)雜的角色模型動(dòng)輒幾十上百萬個(gè)三角形GPU干的核心活就是“把三角形的頂點(diǎn)變成一組覆蓋屏幕的像素”然后再?zèng)Q定這些像素以什么顏色寫進(jìn)畫面。這篇文章不打算帶你深入某個(gè)現(xiàn)代圖形API的Demo而是想完整拆解“畫一個(gè)三角形”這條鏈路上每一步的原理和隱藏細(xì)節(jié)固定功能管線在頂點(diǎn)階段做了什么在光柵化階段做了什么在逐片元階段又做了什么。你可能是剛接觸圖形學(xué)的新手也可能寫了一陣Shader但總覺得哪里隔著一層紙這篇文章都適合你。我會把每一步背后的數(shù)學(xué)邏輯和實(shí)際踩坑經(jīng)驗(yàn)都攤開講最后還會給你一個(gè)可以在CPU上運(yùn)行的極簡“固定功能版”渲染器框架讓你親手看到那條流水線是怎么運(yùn)轉(zhuǎn)的。2. 固定功能管線究竟做了哪幾件事從頂點(diǎn)到像素的流水線拆解2.1 頂點(diǎn)坐標(biāo)的變形記本地坐標(biāo)到屏幕坐標(biāo)的五次變換你傳入GPU的第一個(gè)數(shù)據(jù)通常是一個(gè)頂點(diǎn)數(shù)組里面至少包含位置坐標(biāo)可能還有顏色、法線、紋理坐標(biāo)等屬性。固定功能管線的Vertex階段頂點(diǎn)處理階段要做的第一件事就是把頂點(diǎn)從“模型自己的本地坐標(biāo)系”搬到“屏幕像素坐標(biāo)系”。這段路程大致要經(jīng)歷五個(gè)小站任何一站出問題三角形要么不顯示要么顯示在錯(cuò)誤位置。第一站是模型變換Model Transform。物體在美術(shù)手里是在本地坐標(biāo)系里建模的一個(gè)角色模型的“原點(diǎn)”可能在肚臍位置手臂頂點(diǎn)坐標(biāo)是相對于這個(gè)原點(diǎn)的。模型變換矩陣M負(fù)責(zé)把它放到世界坐標(biāo)系里完成平移、旋轉(zhuǎn)、縮放這些擺位操作。第二站是視圖變換View Transform矩陣V把世界坐標(biāo)轉(zhuǎn)換成以相機(jī)為中心、以相機(jī)朝向?yàn)榛A(chǔ)的觀察坐標(biāo)相機(jī)位置變成原點(diǎn)相機(jī)正前方變成-z軸OpenGL約定。第三站是投影變換Projection Transform矩陣P把觀察坐標(biāo)的視錐體裁剪成標(biāo)準(zhǔn)立方體這一步同時(shí)決定了你能看到多大范圍、近遠(yuǎn)裁剪面在哪以及透視還是正交。第四站關(guān)鍵且容易被忽略透視除法。矩陣P的輸出是齊次裁剪坐標(biāo)clip coordinates這個(gè)坐標(biāo)帶有一個(gè)w分量而真正的歸一化坐標(biāo)NDC要求x、y、z都除以w。這一步才是“近大遠(yuǎn)小”的真正來源離相機(jī)近的頂點(diǎn)w小除以w之后坐標(biāo)變化幅度大離相機(jī)遠(yuǎn)的頂點(diǎn)w大坐標(biāo)被壓縮得厲害。最后一次變換是視口變換Viewport Transform把NDC里的[-1, 1]映射到實(shí)際的窗口像素坐標(biāo)比如1920x1080的屏幕x從-1映射到01920y從1映射到01080注意y軸方向是上下翻轉(zhuǎn)的。這五個(gè)步驟在固定功能管線上自動(dòng)發(fā)生開發(fā)者只需要通過矩陣狀態(tài)告訴驅(qū)動(dòng)“用哪組參數(shù)”。我當(dāng)時(shí)學(xué)的時(shí)候總覺得這一步太抽象后來用了個(gè)土辦法理解想象你手里拿著一張照片第一步?jīng)Q定照片里的人在房間的哪個(gè)位置第二步?jīng)Q定用什么角度拍第三步?jīng)Q定用廣角還是長焦第四步?jīng)Q定照片的立體感第五步?jīng)Q定把照片洗成多大尺寸。五種變換對應(yīng)著同一套數(shù)學(xué)邏輯一連串矩陣乘法。2.2 光柵化三角形覆蓋了哪些像素頂點(diǎn)處理完后三角形已經(jīng)變成了屏幕坐標(biāo)系下的三個(gè)二維點(diǎn)同時(shí)每個(gè)頂點(diǎn)身上掛著一堆屬性深度值、顏色、紋理坐標(biāo)。接下來登場的是光柵化Rasterization階段任務(wù)是找出“這個(gè)三角形覆蓋了哪些像素中心點(diǎn)”并為每一個(gè)被覆蓋的像素生成一個(gè)片元fragment。固定功能時(shí)代的光柵化硬件主要用的是掃描轉(zhuǎn)換scan conversion的思路現(xiàn)代GPU則更偏向基于包圍盒的并行測試。無論哪種實(shí)現(xiàn)核心數(shù)學(xué)都是同一個(gè)給定三角形三個(gè)頂點(diǎn)v0、v1、v2和像素點(diǎn)p判斷p是否落在三角形內(nèi)部。最常用的方法是叉積符號測試或者用重心坐標(biāo)判斷把p表示成v0、v1、v2的加權(quán)平均p λ0 * v0 λ1 * v1 λ2 * v2要求λ0 λ1 λ2 1且三個(gè)λ都大于等于0p就在三角形內(nèi)部。這三個(gè)λ值同時(shí)就是插值系數(shù)頂點(diǎn)顏色乘以各自權(quán)重再相加就是片元的顏色。聽起來不復(fù)雜但光柵化有兩個(gè)地方值得注意。第一像素中心點(diǎn)通常取整數(shù)坐標(biāo)三角形的邊卻是連續(xù)的浮點(diǎn)坐標(biāo)所以邊緣會出現(xiàn)鋸齒。固定功能管線的年代硬件里會提供多重采樣MSAA或者紋理鋸齒消除方案但最樸素的做法就是不處理這也是為什么老游戲的畫面邊緣總是“狗牙”明顯。第二三角形覆蓋像素時(shí)兩個(gè)三角形共享的邊必須只被計(jì)入一次否則同一像素會被寫入兩次產(chǎn)生閃爍和臟邊這在光柵化里叫“top-left rule”之類的一致性規(guī)則屬于硬件層面的細(xì)節(jié)應(yīng)用層一般不關(guān)心。光柵化完成之后每個(gè)像素位置上產(chǎn)生了一個(gè)或若干個(gè)片元。片元可以理解成“候選像素”它帶有從頂點(diǎn)插值得到的所有屬性但還不能直接上屏后面還有一道關(guān)卡。2.3 逐片元操作像素最終能不能畫上去片元從光柵化出來后進(jìn)入逐片元操作per-fragment operations階段。這一步在現(xiàn)代圖形API里很多仍然保留為固定功能硬件單元——它沒有變成可編程的shader因?yàn)檫@些東西本質(zhì)上是硬件回答“這個(gè)像素能不能寫、怎么寫”的判斷題。固定功能管線里這一串操作通常包括裁剪測試scissor test、Alpha測試、模板測試stencil test、深度測試depth test、混合blending、抖動(dòng)dithering和邏輯操作。其中對“畫三角形”這件事最重要的兩個(gè)是深度測試和混合。深度測試的邏輯一句話就能說清每個(gè)片元帶有一個(gè)深度值z它代表這個(gè)像素點(diǎn)在相機(jī)空間里離相機(jī)的遠(yuǎn)近幀緩沖區(qū)外還掛著一張深度緩沖區(qū)記錄著當(dāng)前已經(jīng)寫入的最近片元的深度。新片元到來時(shí)先拿它的z值和深度緩沖里對應(yīng)位置的值比一比默認(rèn)模式是“小于等于就通過”通過后再用新z覆蓋舊z顏色也覆蓋。這意味著即使兩個(gè)三角形在代碼層面一先一后遞交最終誰顯示在前面取決于誰離相機(jī)更近而不是誰后畫。固定功能管線里深度測試和深度寫入是可以分別開關(guān)的這個(gè)組合在透明物體渲染時(shí)非常重要透明物體通常要關(guān)掉深度寫入、保留深度測試否則后面的半透明層會擋住前面的?;旌蟗lending則負(fù)責(zé)解決“半透明顏色怎么合成”的問題。固定功能管線提供一套固定的混合模式比如src alpha、one、one minus src alpha這幾種因子組合用來計(jì)算新片元顏色和幀緩沖里已有顏色的加權(quán)和。OpenGL里的glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)就是最標(biāo)準(zhǔn)的標(biāo)準(zhǔn)alpha混合。到這里一個(gè)片元才真正獲得“上屏資格”被寫進(jìn)顏色緩沖。3. 畫三角形時(shí)最容易翻車的幾個(gè)細(xì)節(jié)以及背后的數(shù)學(xué)原理3.1 矩陣乘法順序左乘還是右乘結(jié)果天差地別固定功能管線時(shí)代你在OpenGL里要設(shè)置三組矩陣GL_MODELVIEW和GL_PROJECTION然后代碼大致長這樣glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f, aspect, 0.1f, 100.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(eye, center, up);看起來沒問題但很多人剛開始都會犯一個(gè)錯(cuò)把M、V、P的乘法順序?qū)懗蓀_local * M * V * P而不是P * V * M * p_local。區(qū)別在于矩陣乘法不滿足交換律而這個(gè)順序恰恰是初學(xué)者最大的坑之一。如果你把第一個(gè)三角形放在原點(diǎn)乘以一個(gè)“看起來正確”的MVP矩陣但順序反了結(jié)果就是三角形在屏幕上的位置和預(yù)期完全對不上甚至直接落在裁剪范圍外畫面白屏一片。我當(dāng)時(shí)排查過這類問題最后發(fā)現(xiàn)就是矩陣順序。為什么順序必須是“先M再V再P”因?yàn)槊恳徊阶儞Q的輸入是前一步的輸出模型矩陣把本地坐標(biāo)變到世界視圖矩陣把世界坐標(biāo)變到相機(jī)空間投影矩陣把相機(jī)空間變到裁剪空間。寫完整就是// 列向量約定頂點(diǎn)寫在右邊 vec4 clipPos projectionMatrix * viewMatrix * modelMatrix * localPos;如果你用的是行向量約定比如某些數(shù)學(xué)庫自帶轉(zhuǎn)置存儲那就全反過來。團(tuán)隊(duì)協(xié)作時(shí)這個(gè)約定必須統(tǒng)一不然今天你的三角形在左邊他改了一行代碼之后跑右邊去了。固定功能管線的好處是矩陣狀態(tài)由驅(qū)動(dòng)管理但壞處是你很難直接看到中間數(shù)據(jù)?,F(xiàn)代可編程管線里你在Shader里手動(dòng)算反而容易調(diào)試。3.2 裁剪必須在透視除法之前做一個(gè)三角形經(jīng)過透視投影之后可能一部分在視錐體內(nèi)、一部分在視錐體外。比如一個(gè)很大的三角形某個(gè)頂點(diǎn)跑到相機(jī)背后去了。這時(shí)候如果直接做透視除法那個(gè)位于相機(jī)后面的頂點(diǎn)的坐標(biāo)會被翻轉(zhuǎn)三角形形狀徹底亂掉。所以硬件必須在透視除法之前完成視錐裁剪。裁剪空間clip space里判斷頂點(diǎn)是否在可見區(qū)域用的是一組簡單不等式-w x w-w y w-w z w。任何不滿足條件的頂點(diǎn)都要被裁剪而一條邊穿過裁剪面時(shí)三角形需要被切成一個(gè)或多個(gè)新三角形。固定功能管線里的硬件裁剪器clip unit干的就是這活而且它對每個(gè)三角形的輸出可能是零個(gè)、一個(gè)、兩個(gè)甚至更多個(gè)三角形。想一想就知道這跟“畫單個(gè)三角形”的直覺很不一樣你以為只需要填充三個(gè)頂點(diǎn)圍成的區(qū)域?qū)嶋H上GPU內(nèi)部可能先做了幾何分裂。新手在軟件光柵化器里最常偷懶的做法是“先透視除法再判斷NDC是否越界”這幾乎一定會出現(xiàn)三角形在地平線附近撕裂、翻轉(zhuǎn)的現(xiàn)象。正確做法是計(jì)算裁剪坐標(biāo) clip P * V * M * localPos檢查clip的x、y、z是否都在[-w, w]內(nèi)都合格才做透視除法不合格做裁剪或丟棄。3.3 深度測試不是“按畫家算法”而是“按深度緩沖”很多剛接觸3D的人腦子里的遮擋模型是“誰后畫誰在上面”這其實(shí)更像畫家算法painters algorithm先畫遠(yuǎn)處的山再畫近處的樹后面的覆蓋前面的。畫家算法在深度排序完全正確時(shí)能工作但三角形互相穿插、或者運(yùn)動(dòng)物體快速交換前后關(guān)系時(shí)排序成本高且結(jié)果不穩(wěn)定。深度緩沖區(qū)z-buffer徹底解決了這個(gè)問題它為每個(gè)像素存一個(gè)深度值片元能不能寫顏色取決于它帶過來的深度值是否比緩沖里的更小離相機(jī)更近。固定功能管線的深度測試單元就是干這個(gè)的。這里有一個(gè)實(shí)際中頻繁踩的坑深度緩沖的精度和數(shù)值范圍。OpenGL的NDC z范圍是[-1, 1]DirectX是[0, 1]而深度緩沖通常把z映射到[0, 1]存儲。透視投影的z經(jīng)過除法后不是線性分布的離相機(jī)近的部分精度高、遠(yuǎn)的部分精度低。所以近裁剪面和遠(yuǎn)裁剪面如果比值特別懸殊地平線附近就會出現(xiàn)深度沖突z-fighting表現(xiàn)為模型表面上閃爍的碎花——兩個(gè)幾乎共面的表面在遠(yuǎn)處互相爭奪像素。我當(dāng)時(shí)調(diào)一個(gè)地形項(xiàng)目時(shí)地面和道路鋪層出現(xiàn)大面積閃爍調(diào)了半天就是遠(yuǎn)處深度精度不夠。解決辦法是壓縮近遠(yuǎn)裁剪面的距離或者在shader里用反深度緩沖而不是盲目調(diào)偏移量。3.4 屏幕空間的線性插值藏著透視校正的坑三角形光柵化時(shí)頂點(diǎn)屬性顏色、紋理坐標(biāo)、法線都是靠重心坐標(biāo)插值到每個(gè)片元上的。但直接在每個(gè)片元上對屏幕空間坐標(biāo)做線性插值得到的結(jié)果是不符合透視規(guī)律的。舉個(gè)例子一個(gè)由近到遠(yuǎn)延伸的地面紋理如果簡單地在屏幕空間里對紋理坐標(biāo)做線性插值遠(yuǎn)處的紋理線會被拉伸得奇寬無比近處的卻擠在一起產(chǎn)生一種“紋理在甩動(dòng)”的不真實(shí)感。正確做法是透視校正插值perspective-correct interpolation屏幕空間里真正線性插值的對象不是屬性本身而是屬性除以w后的值以及1/w。最后把兩個(gè)插值結(jié)果相除才得到正確的屬性。固定功能管線內(nèi)部自動(dòng)做了這一層校正所以你直接用固定管線貼紋理通常不會遇到這個(gè)問題。但一旦你開始自己寫軟件光柵化器、或者在現(xiàn)代Shader里手動(dòng)計(jì)算插值這個(gè)坑就立刻暴露。判斷方法很簡單看紋理在地平線附近有沒有不該有的波浪形扭曲。如果有八成是插值沒做透視校正。4. 今天寫Shader的人為什么還離不開固定功能的底層邏輯很多人會有個(gè)疑問現(xiàn)在誰還在用固定功能管線OpenGL 3.2之后核心profile直接移除了固定功能WebGL 2.0時(shí)代大家寫的是GLSL ShaderVulkan和Metal更是一上來就要你手寫全套渲染狀態(tài)。那這篇文章講這些“老古董”是不是過時(shí)了恰恰相反。固定功能管線不是被淘汰了而是被拆開了——它把一條完整流水線里需要邏輯判斷的部分做成可編程單元把那些不需要邏輯判斷的硬件操作繼續(xù)固化下來。你今天寫的頂點(diǎn)著色器取代的正是固定功能里“頂點(diǎn)變換和光照”那一段你寫的片元著色器取代的正是固定功能里“紋理采樣、霧計(jì)算、alpha測試”那一段。但深度測試、模板測試、混合、光柵化這些環(huán)節(jié)在現(xiàn)代渲染管線上依然由固定硬件完成你只能配置參數(shù)不能改寫邏輯。這張對應(yīng)關(guān)系在任何入門教材里都成立但真正讓我意識到它價(jià)值的是調(diào)試Shader的時(shí)候。有一次我寫一個(gè)粒子效果的片元著色器畫面粒子總是被場景里的墻體擋得嚴(yán)嚴(yán)實(shí)實(shí)。我開始以為是混合模式配錯(cuò)了查了半天最后發(fā)現(xiàn)是深度寫入沒關(guān)。如果我對“固定功能管線哪些環(huán)節(jié)由硬件接管”沒有概念一定會像無頭蒼蠅一樣在Shader代碼里翻。但因?yàn)槲夷X子里有那套流水線圖瞬間就能定位片元著色器輸出顏色之后后面還有一層深度測試單元在等著我。固定功能時(shí)期還有個(gè)經(jīng)常被老教程一筆帶過的坑就是法線變換。在固定功能管線的頂點(diǎn)變換階段如果你開啟了光照硬件會自動(dòng)把法線從模型空間變換到世界空間或視圖空間。但一個(gè)關(guān)鍵規(guī)則是遇到非均勻縮放時(shí)法線不能直接用模型矩陣變換否則法線和表面的垂直關(guān)系會被破壞。正確做法是使用模型矩陣的逆轉(zhuǎn)置矩陣。在固定功能管線上驅(qū)動(dòng)默默幫你處理了這個(gè)細(xì)節(jié)到了可編程著色器時(shí)代這個(gè)任務(wù)落到你頭上但你如果沒學(xué)過固定功能的“標(biāo)準(zhǔn)行為”甚至不知道有這個(gè)坑存在。這就是為什么我依然建議新人先理解固定功能管線再學(xué)Shader它告訴你哪些事是硬件默默替你做的這些事也正是你在寫Shader時(shí)最容易忘記親自去做的。5. 親手在CPU上寫一個(gè)“固定功能管線版”三角形渲染器理解了原理不動(dòng)手做一遍總覺得缺了點(diǎn)東西。我建議你親手在CPU上實(shí)現(xiàn)一個(gè)極簡的軟件固定功能渲染器目標(biāo)只有一個(gè)把一個(gè)彩色三角形正確顯示在屏幕上。這個(gè)練習(xí)會強(qiáng)迫你走一遍完整的變換→光柵化→深度測試流程做完之后你對管線的理解會扎實(shí)很多。以下代碼是C風(fēng)格偽代碼聚焦核心邏輯完整工程留作練習(xí)5.1 數(shù)據(jù)結(jié)構(gòu)與變換函數(shù)首先定義頂點(diǎn)、三角形和幀緩沖struct Vertex { float x, y, z, w; // 本地坐標(biāo)w初始為1 float r, g, b; // 頂點(diǎn)顏色 }; struct Triangle { Vertex v[3]; }; struct Framebuffer { int width, height; float* depth; // 深度緩沖 unsigned char* color; // 顏色緩沖RGB各8bit };接下來實(shí)現(xiàn)MVP矩陣和變換函數(shù)。為了簡單這里直接預(yù)設(shè)一個(gè)透視投影矩陣和一組視圖矩陣你不需要自己推導(dǎo)但必須知道每個(gè)矩陣的職責(zé)// 先把整個(gè)窗口的像素填成背景色 void clear(Framebuffer fb, float r, float g, float b) { for (int i 0; i fb.width * fb.height; i) { fb.color[i * 3 0] (unsigned char)(r * 255); fb.color[i * 3 1] (unsigned char)(g * 255); fb.color[i * 3 2] (unsigned char)(b * 255); fb.depth[i] 1e30f; // 初始深度設(shè)為無窮遠(yuǎn) } } // 頂點(diǎn)變換本地坐標(biāo) - 屏幕坐標(biāo) 深度 bool transformVertex(const Vertex in, const Matrix4 mvp, int fbWidth, int fbHeight, /* out */ Vertex out) { // 矩陣乘法clip mvp * local float cx mvp.m[0] * in.x mvp.m[4] * in.y mvp.m[8] * in.z mvp.m[12] * in.w; float cy mvp.m[1] * in.x mvp.m[5] * in.y mvp.m[9] * in.z mvp.m[13] * in.w; float cz mvp.m[2] * in.x mvp.m[6] * in.y mvp.m[10] * in.z mvp.m[14] * in.w; float cw mvp.m[3] * in.x mvp.m[7] * in.y mvp.m[11] * in.z mvp.m[15] * in.w; // 裁剪測試x/y/z 是否都在 [-w, w] 內(nèi)不在就丟棄 if (fabs(cx) cw || fabs(cy) cw || fabs(cz) cw) return false; // 透視除法 float invW 1.0f / cw; float nx cx * invW; // NDC范圍約[-1,1] float ny cy * invW; float nz cz * invW; // 視口變換NDC - 屏幕像素 out.x (nx 1.0f) * 0.5f * fbWidth; out.y (1.0f - ny) * 0.5f * fbHeight; // y翻轉(zhuǎn) out.z nz; // z保留給深度測試 out.w in.w; // 順便存一下原始w用于透視校正 out.r in.r; out.g in.g; out.b in.b; return true; }注意這個(gè)裁剪測試極其簡化了真正的裁剪器要做三角形切分這里直接丟棄不合格三角形——對于“屏幕中央放一個(gè)三角形”的場景完全夠用。如果你想支持部分頂點(diǎn)在屏幕外就需要寫真正的多邊形裁剪算法這是后話。5.2 光柵化主循環(huán)光柵化的目標(biāo)是遍歷三角形屏幕包圍盒內(nèi)的每個(gè)像素用重心坐標(biāo)判斷像素中心是否在三角形內(nèi)部然后插值顏色和深度執(zhí)行深度測試最后寫顏色緩沖。void drawTriangle(Framebuffer fb, const Triangle tri, const Matrix4 mvp) { Vertex sv[3]; for (int i 0; i 3; i) { if (!transformVertex(tri.v[i], mvp, fb.width, fb.height, sv[i])) return; } // 計(jì)算屏幕空間包圍盒 int minX (int)floor(fminf(sv[0].x, fminf(sv[1].x, sv[2].x))); int maxX (int)ceil(fmaxf(sv[0].x, fmaxf(sv[1].x, sv[2].x))); int minY (int)floor(fminf(sv[0].y, fminf(sv[1].y, sv[2].y))); int maxY (int)ceil(fmaxf(sv[0].y, fmaxf(sv[1].y, sv[2].y))); minX max(minX, 0); maxX min(maxX, fb.width - 1); minY max(minY, 0); maxY min(maxY, fb.height - 1); for (int y minY; y maxY; y) { for (int x minX; x maxX; x) { // 用重心坐標(biāo)判斷像素中心 (x0.5, y0.5) 是否在三角形內(nèi) float px x 0.5f, py y 0.5f; float area edgeFunction(sv[0], sv[1], sv[2]); if (area 0.0f) continue; float w0 edgeFunction(sv[1], sv[2], Vertex{px, py}); float w1 edgeFunction(sv[2], sv[0], Vertex{px, py}); float w2 edgeFunction(sv[0], sv[1], Vertex{px, py}); // 歸一化重心坐標(biāo) w0 / area; w1 / area; w2 / area; // 所有系數(shù) 0像素在三角形內(nèi) if (w0 0 w1 0 w2 0) { // 插值深度簡單場景頂點(diǎn)z已經(jīng)算好 float depth sv[0].z * w0 sv[1].z * w1 sv[2].z * w2; // 深度測試通過才寫顏色 if (depth fb.depth[y * fb.width x]) { fb.depth[y * fb.width x] depth; float r sv[0].r * w0 sv[1].r * w1 sv[2].r * w2; float g sv[0].g * w0 sv[1].g * w1 sv[2].g * w2; float b sv[0].b * w0 sv[1].b * w1 sv[2].b * w2; fb.color[(y * fb.width x) * 3 0] (unsigned char)(r * 255); fb.color[(y * fb.width x) * 3 1] (unsigned char)(g * 255); fb.color[(y * fb.width x) * 3 2] (unsigned char)(b * 255); } } } } } // 邊緣函數(shù)判斷(p,q,r)逆時(shí)針/順時(shí)針方向 float edgeFunction(const Vertex a, const Vertex b, const Vertex c) { return (c.x - a.x) * (b.y - a.y) - (c.y - a.y) * (b.x - a.x); }這套代碼雖然簡單但它完整復(fù)現(xiàn)了固定功能管線的關(guān)鍵環(huán)節(jié)頂點(diǎn)經(jīng)過MVP變換、透視除法、視口變換光柵化階段用重心坐標(biāo)判斷覆蓋并插值逐片元階段執(zhí)行深度測試再寫入顏色緩沖。運(yùn)行時(shí)你會發(fā)現(xiàn)把兩個(gè)不同深度、不同顏色的三角形丟進(jìn)去顯示結(jié)果完全由深度關(guān)系決定而不是繪制順序這正是你理解固定功能管線后應(yīng)得的“直覺”。5.3 輸出與后續(xù)你可以擴(kuò)展什么寫完幀緩沖之后如何看結(jié)果最簡單的辦法是輸出PPM圖像文件。PPM是一種極其簡單的文本圖像格式你只需要寫文件頭“P3\n寬 高\(yùn)n255\n”然后逐行輸出RGB數(shù)值就能用看圖軟件打開。零依賴兩分鐘搞定。如果你想做實(shí)時(shí)窗口再去接SDL或GLFW這類庫但練習(xí)階段沒必要——能看見一個(gè)正確處理遮擋的彩色三角形你已經(jīng)走通了整個(gè)管線。這個(gè)極簡渲染器非常簡陋但它就是一張完整的“圖紙”。后續(xù)擴(kuò)展方向很多給光柵化加上透視校正插值插值屬性時(shí)帶上1/w最后還原三角形邊緣的抗鋸齒對覆蓋面積做加權(quán)采樣紋理映射在片元階段采樣一張貼圖逐頂點(diǎn)光照在頂點(diǎn)階段算好顏色再插值。每加一個(gè)功能你都會更清楚它應(yīng)該出現(xiàn)在管線的哪個(gè)位置、由哪個(gè)階段負(fù)責(zé)。我自己做完這個(gè)練習(xí)最大的感受是很多在現(xiàn)代API里被抽象掉的復(fù)雜度并不是不存在了而是被驅(qū)動(dòng)和硬件藏起來了。固定功能管線的價(jià)值就是替你把蓋子掀開讓你看見流水線內(nèi)部的每個(gè)齒輪都在轉(zhuǎn)。畫一個(gè)三角形不難難的是清楚知道這個(gè)三角形在屏幕上出現(xiàn)的每一步都被誰做了什么——這份清楚會陪你走完之后所有圖形學(xué)相關(guān)的路。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
麻豆乱码久久精| 99精品综合久久久久五月天| 人妻在线臀日韩| 97视频在线观看免费高清| 亚洲成熟国产精品美女| 天操天操夜操夜月操月年年操操| 操逼网免费无码视频| 极品少妇久久久久| 2025亚洲男人天堂| 99国产精品视频尤物| 中文字幕乱碼在线| 国产69精品久久久久99尤物| 夜夜嗨一区二区三区三州加勒比 | 中文字幕久热视频在线| 日本精品一区二区不卡| 日本黄色精品| 人妻啊啊人妻啊啊| 日本熟女中文字幕一区| 中文字幕熟女人妻丝袜丝| 97人人中文网| 成人综合色网| 五月天激情小说| 国产色产精品在线观看| 高跟丝袜AV专区国产| 亚洲欧美不卡线| 久久国产99精品72福利| 日本肏逼视频在线观看| 人妻99p| 性爱免费视频成人| 伊人网综合在线视频| 高精欧美色| 爱射综合| 亚洲熟女av日韩熟女| 色噜噜人妻av中文字幕| 国产精品乱码久久久久久| 日韩人妻资源网| 久久天天艹| 色悠悠伊人网五月天| 九九九九精品一区| 蜜色网色哟哟| 亚洲欧美日韩综合在线尤物| 国产丝袜欧美在线视频| 日韩综合无码一区久久92| 丰满搜索结果 -第18页- 久久高清无码| 黄色性爱网网| 97人妻免费中文字幕| 亚洲精品自拍| 97伊人网| 超碰欧美COM| 蜜臀亚洲中文| 一本久久久精品| 国产精品对白自产拍| 941超碰| 黑丝制服中文字幕| 91人妻在线视频| 亚洲久久久久| 婷婷在线精品| 性爱av网站| 欧美亚洲91| 久久透逼视频| 美女尤物人人操| 欧美丝袜制服久久| 青草香蕉网| 亚洲国产福利视频| av在线观看不卡网站| 日韩精品亚洲专区在线影视| 天美一二三在线观看Av| 91亚洲欧美色图| 午夜精品人妻二区三区| 久日综合网| 欧美人妖内射| 1人人看人人摸人人操| 欧美日韩午夜精品一区二区三区 | 日韩av不卡在线观看| 色yeye成人免费视频| 伊人五月天婷婷| 欧美亚洲日本视频久久久| 丁香五月性| 青草青青久久久久久国产| 久久欧洲| 老熟女网站| 91精品91久久久中77777| 成人九九| 久久xxxx| 激情四射婷婷六月天| 欧美色图亚洲色| 在线观看亚洲专区| 91撸色网 玖玖网 欧美| 91色婷婷综合久久中文字幕二区| 思思热免费视频观看| 丰满欧美少妇| 国产精品白丝www| 亚洲图片激情综合另类| 欧美操逼一二三区| 91嫩草欧美| 美女性91| 热久久九九热| 久久久月天| 最新日本中文字幕| 99视频只有精品| 亚洲男人的天堂V| 午夜在线播放| 激情五月综合| 美女诱惑在线一区| 极品出轨视频网站| 综合自拍| 日韩无码第3页| 国产欧美精选激情视频| 中文字幕日韩精品一区二区三区| 亚州男人天堂| 日本天堂网| 98久久超碰| 久久久久久久免费A片国产成a人亚洲精∨品无码| 日韩人成网站在线播放| 97超视频在线观看| 999999精品| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 久久久国产av美女私房| 色五月婷婷在线| 神马九九九| 国产精品自在自拍视频| 91老司机精品| 麻豆国产96在线| 精品中文日韩字幕视频| 日韩久久.一级黄色片| 午夜免费视频1000| 中国熟女老妇仑乱一区二区三区| 亚洲中文字幕av| 欧美色日| 亚洲第一在线视频| 欧美自拍网| 99操逼| 国产女人视频三四五区| 欧美黑人精品一区二区| 99福利社| 天天影视网综合少妇| 日韩中文字幕国产| 色老久久| 亚欧成人综合影院| 日本 情色 1区2区3区| 欧美成人性活片| 欧美性爱另类综合| 亚洲欧美不卡线| 爽爽淫人网| 丝袜av一区二区三区| av爱爱爱| 激情综合网五月婷婷五月天| 粉嫩久久久极品| 久久区| 日本熟妇一区二区三区| 狠久久| 国产精品无码久久久久2028| 亚洲欧美另类小说| 天美一二三在线观看Av| 91爆操视频| 日韩资源网| 另类TS人妖一区二区三区| 国产日韩欧美三级片| 亚洲色电影在线| 欧美黑人与女人91~| 亚洲色图尤物视频| 中文字幕88av在线| www.99中文字幕| 国产传媒1234区| 老司机天天操| 成人资源中文字幕在线观看| 无码色| 香蕉久久AⅤ...| 亚洲女人毛茸茸91| 五月天婷婷影院| 怡红院成人视频| 在现视频女上位好爽| 天天日天天干少妇日| 国产伦精品一区二区三区在线观| 99热这里都是精品| 一区二区日韩欧美久久| 超碰色97| 欧美精品欧美精品系列| 亚洲无码一区二区三区三州| 91高清欧美| 中文高清一区二区的| a片自拍直播视频| 日欧操屄视频| 日韩福利电影网| 国产午夜在线观看| 久久精品日韩专区免费观看| 色色色欧美| 一二三卡欧美日韩人妻免费精品| 婷婷激情五月| 天天看,天天做| 69视频入口| 久久粉色| 嗯嗯啊啊视频一区二区三区| 亚拍在线| 嗯嗯啊啊操死我| 殴美大黄片| 日韩欧美操逼xxx| 国产精品另类一区大香蕉| 老熟女中文字幕高清| 操少妞在线视频| 91爰爱欧美| 久久熟妇五十路一区| 在线精品福利免费播放| 亚洲AO在线| 91天天爱| 嗯嗯不要视频| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 无码人妻精品一区二区三区九九| 96精品一区| 欧美性Fer办公室秘书| 色欧美色交综合| 992视频一区| 啪啪视频免费在线观看| 在线A日本| 婷婷丁香五月天综合东京热| 97午夜剧场日韩| 精品国产99| 超碰97伊人| 无码免费精品高清| nuu12国产麻豆精品| 国产成人无码a| 色综合91| 色官网在线| 国产后入式在线观看| 天天性射网| 精品人妻1区| 大稥蕉免费视频这里只有精品| www.91久久| 99久久婷婷国产综合精品草原| 日本午夜福利影院| 九色PORNY9l原创自拍| 最新国产精品久久精品| 天美传媒国产原创中文字幕亚洲欧美另类 | 超碰日本97美女人妻人人玩人人爱 | 国产精品经典一卡久久久| WWW4虎| 天色综合网| 99热在线播放| 久久透逼视频| 亚洲国产一区二区三区四区国产| 久久怡红院| 暖暖精品二区三区观看| 亚瑟国产精品久久无码| 国产精品无码久久久久2028| 亚洲精品三| 国产精品乱人伊人网| 加勒比AV网| 日本天天干天天日一区| 久久午夜色播影院免费高清| 久久久久久国产精品免费网站| 亚洲经典啪啪| 老司机免费视频在线91| 999999精品| 国产日产精品久久快鸭的功能介绍| 美女裸体无遮挡永久免费观看网站| 欧美色www亚洲国产阿娇要播| 熟妇的味道HD中文字幕| 人妻激情偷乱视频一区二区三区| 综合97亚洲| 久草资源在线| 亚洲精品天堂久久A∨51成人漫| 337p大胆噜噜噜噜噜91Av| 色第一页| 综合久久9| 郑州宾馆老熟女露脸啪啪| 夜夜嗨AV一区天天| 精品无人区麻豆乱码1区2区图片| 久久久久久69国产一区二区| 久久久96| 尹人大香蕉视频在线| 亚洲综合图片在线| 黑人免费福利视频| 嗯啊不要啊在线 | 欧美色综合网| 国产午夜激片Av毛片不卡| 天天亚洲综合| 日本性感人妻91| 91丨九色丨43老版熟女| 亚洲情色综合网| 欧美大香蕉久| 久久这里精品国产99丫e6| 97在线视频免费看| 久久精品国产亚洲AV成人直播| 欧美精品91| 99999久久精| 五月色网| 男人的天堂com| 唐山老熟妇露脸啪啪叫| www被窝色com| 亚洲av综合色区图片亚洲| 久久一二区四| JIZZJIZZ亚洲女人被躁| 看看小穴| 国产福利一区二| 久久一二三四五六七八九区区区| 香蕉精品二区二区| 9久久精品| 欧美第五页| 精品久久人妻成人网| 亚洲成A∨人影院在线欢看| 日韩精品99久久久久久中文字幕| 精品女同一区| 亚洲砖码砖专无区2023| 久操视频这里只有精品| 国产夜夜艹| 色在线综合| 妇女视频网站| 亚洲操逼无码| 热热色中文无码| 又黄又爽在线观看视频| 亚洲av青草久久一区二区| 色色色色日本| 久久激情四射婷婷丁香五月天| 日韩欧美俄罗斯A片| 久久久三区二区一区| 日本福利二区视频| 男人天堂东京热| 97亚洲国产影视| 久久成人国产精品| 九九九九九九免费视频| 五月天久久久| 色色色日本| julia中文字幕在线观看| 人人做人人妻人人夜视频| 日本高清视频在线观看黄已三辽| 色婷婷亚洲婷婷| 韩美日操逼| 精品中文日韩字幕视频| 97超碰国产亚洲精品资源| 国产一区二区免费福利片| 久久久免费懂色| 人人看黄色视频| 人妻熟妇久草在线| 日韩一级二级| 无码人妻丰满热妇又大又粗| 热99这里有精品综合久久| 999综合色| 色99视频| a v网站在线播放| 青草精品视频日本久久久久网站在线| 激情文学欧美| 大稥蕉免费视频这里只有精品| 操B视频日韩无码| 日韩精品影视| 最新一二三区视频| 99色婷婷| 日本一级性爱| 亚洲第一免费视频| 亚洲欧洲无码bt精品合集| 久久久天堂| 亚洲天堂自拍| 91色女| 国产精品香蕉热久久新品| 亚洲中文字幕熟女| 国产农村妇女毛片精品久久| 亚洲淫色网中文| 屌逼麻豆| 第一高清av中文字幕| 亚洲无码超碰免费| 黄片www视频免费| 久久久久久人| 肉丝中文无码高清| 97情超碰色| A啊啊在线观看| 亚洲精品一区中文字幕乱码| 亚洲欧洲日韩国产自在线| 91精品人妻偷情| 中文字幕一区二区无码成人| 久久精品91| 国产精品色哟哟| 91色艳| 东京热免费视频| 中日高清无码操逼视频| 97任你吞精| 久久亚洲AV无码专区国产精品| www.99色| 人妻二区| 国产最新小视频在线播放下载| 男女无套 免费网站| 特色a在线上| 无码人妻一区二区三区四区老鸭窝| 超碰伊人在线| 亚洲欧美校园| 欧美激情 亚洲色图| 欧美偷偷网| 91女优在线观看 | 日韩啪啪视频| 97手机日韩| 东京热双插| 射久久| 大学生美女口爆| 欧美97在线欧| 亚洲精品国产专区在线观看| 岛国大片在线观看网站入口| 顶级丝袜熟女一区二区三区 | 久久熟女精品不卡一区| 天天色欧美| 日韩一级欧美一级国产一级台湾| 久久精品国产亚洲妲己影视| 在线观看AV片| 狠狠干狠狠色| 1024亚洲中文字幕久在线看片你懂的| 花野真衣| 好舒服视频| 无码九九| 国产女人视频三四五区| 午夜福利一区二区影院| 欧美成人性爱视频免费观看| 激情五月丁香五月| 按摩中文字幕| 韩日精品福利视频一区不卡在线免 | 久久久久久久97| 日本伦乱九九九综合| 香蕉热人人精品| 免费a在线播放v| 中文字幕黑人大片| 热久久99999| 欧美体内射精| 欧美第二页| 久久久久久亚洲中文| 天天躁日日躁XXXXYY| 欧日韩不卡视.频| 精品免费国产二区三区| 欧美色老汉| a片在线播放| 精品九九国产无码| 混色激情av| 精品国产国产AV| 国产91 丝袜在线播放 | 少妇 综合| 亚洲色图欧美另类在线| 99精品九九九九九九| 2023天天操夜夜操| 国产免费一区在线观看| 欧美综合在线91| K8久久久久| 午夜.DJ高清在线观看免费7| 五月天综合网| 一区二区不卡免费| 成年人网站在线免费观看| www色日本| 亚洲激情色片| 91激情| 中文字幕三四五区| 99久国产精品午夜性色福利| 婷婷久草一区二区三区| 中文字幕第7页| ji熟女.com| 蜜桃视频精品一区二区| 亚洲丰满很很操| av网站免费看| 五月丁香色婷婷| 97视频在线视频| 91精品国产91久久福利| 欧美精品四区| 98超碰欧美| 中文字幕aⅴ在线视频| 嗯阿好爽好紧| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 日逼视频日本| 麻豆一区在线| 国产无码精品久久久久久| 99在线观看无大码| 2024黄色视频| 成人午夜无码视频| 夜色97| 欧美午夜视频免费观看| 夜夜操夜夜爽夜夜高潮| 中文字幕精品探花视频| 嗯啊不要在线观看嗯啊| 亲子敌伦对白在线播放| 超碰久久性爱| 色在线视频导航| 天美av在线观看| www亚洲欧美| 婷婷激情四射| 高清孕妇孕交 交| 国产精品成人在线| 偷拍视频青青草在线视频| 婷婷综合五月| 97综合在线| 野狼激情网| 国产又黄又爽| 91色人妻| 麻豆一区在线| 围产精品一区二区三区视频播放| 欧美日韩美女精品久草一区二区三区 | 国产成人主播| 人人做人人妻人人夜视频| 久草久日| 综合熟女| 五码视频在线观看| 极品AV网站在线观看| 亚洲成a人在线观看久| 亚洲欧美综合网站| 91精品啪在线观看国产城中村| 久干网| 小情侣高清国产在线视频| 97操碰| 亚洲精品 大香蕉| 高清有码一区二区| 人妻天天爽| 亚洲九区| 日韩成人私密一级精品av| 欧美日本天堂| 婷婷丁香成人| 乱伦一二三| 中文字幕伊人| 欧美性爱精品一区二区| 日日骚av| 大香蕉99热| 国产久久久久久久久一区二区| 久9九综合在线| 97网址www| 奇米狠999| 丁香九月婷婷| 日本黄色XXX| 男人天堂2019亚洲| 国产精品久久久久中文字幕| 好色综合| 91模特在线观看| 午夜精品久久一区二区| 60秒免费视频| 国产嫩草精品A88AV在线| 1024人妻熟女一区二区三区| 亚洲欧洲av影音| 99热线麻豆| 啊啊啊在线观看免费视频| 日韩在线观看中文字幕视频| 91伊人久| 97亚洲综合| 久久99久久99精品天美传媒棢·纸:. | 十八禁视频网站| 韩三级a视频在线观看| 91欧美www| 国产地址二三| 91高跟美女在线播放| 国产一区96在线| 国产高清成人传媒影视| 26uuu性物| 日韩欧美大片免费高清啪啪| 久久久夜夜夜| 久久久久久久| 91无码人妻精品一区二区三区蜜桃| 亚洲永久永久永久永久一级一级一级精品| 七久久久| 五月激情小说| 久久亚洲婷婷| 婷婷五月天色| 丁香六月综合激情| 国产超碰人人操| 日韩探花精品在线视频| 精品国产一区二区三区香蕉欧美| 日本熟妇浓毛hdsex| 国产综合久久久麻桃个| 久久久久久久97| 亚洲欧美日韩不卡人妻| 人妻精品一区二区三区| 亚洲丝袜二区在线| 天天射天天色成人| 久久精品区| 久久久一区二区三区四曲免费听| 一区二区三区机械有限公司| 亚洲av强奸乱伦| 成人黑料社久久| 一区二区三区欧美激情| 国产亚洲99久久精品| 久久曰曰| 黄色网址久久精品欧美喷水| 人妻天天操天天爽视频免费| 操我啊啊啊啊啊| 中美日韩毛片| 欧美一级专区免费大片| 亚洲欧洲激情| 99热这里都是精品| 精品视频在线观看| 翔田千里一区二区三区奶水| 五月丁香拍拍激情综合三级| 亚洲AV成人无码一区二区三区在线观看| 91精品人妻电影| www.yw尤物| 啊啊啊啊视频免费| 欧美色图 人妻| 日韩成人人妻网站| 干超碰碰熟女| 26uuu性| 国产又色又爽又舒服的三级视频 | 9 1果冻精品视频| 亚洲欧美另类激情小说| 97在线观看播放视频| 亚洲日韩国产欧美综合v| 色色色综合网| 亚洲色性情三级| 亚洲久久东京热一二三四五区视频| 91欧| 国产一区二区a毛片| 日韩免费看黄片| 亚洲精品久久久久久久久豆丁网| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 亚洲av无码国产精品字幕| AAAAAAAAA黄片| 九九色色| 99re6国产精品99re| 色香av| 久久精品国产99精品亚洲蜜... | 欧美色图91| 新久久AV| 丰满人妻一区二区三区四| 色综合20p| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 激情五月天丁香社区| 亚洲免费精品一区| 中文字幕av片| 天天做日日做| 亚洲一区二区三区久久 亚洲一区二区| 白 大 人妻 区 在线| 97国产精品一区| 温婉少妇玩3p| www.高清无码诱惑一区.com | 国产欧美精品日韩区二区麻豆天美| 夜夜福利| 国产精品一区二区手机看片| 久草婷婷| yazhououmeizongya| 男人的天堂午夜av| 熟女在线视频| 精品无吗m| 一区二区三区激情在线观看| 日本新免费二区三区| 青娱乐国产剧情av一区| 丁香五月婷婷五月| 激情文学亚洲| 久久无码电影| 少妇内射视频| 亚洲中文一区二区三区| 99热在线不卡| 强奸乱伦 亚洲一区| 久久国产三区| 青娱乐妇女性生活| 99精品在线播放| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 香蕉一区二区三区在线视频| 国产视频第二页| 99久久99九九99九九九| 国产精品一区二区麻豆| 成人性爱高清视频免费看| 天美传媒av在线| 亚洲一区二区三区播放在线| 超碰久久草| 免费精品中文字幕| 学生妹天天看| 在线观看综合精品亚洲| 青青操日韩| 欧美精品999| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 国产精品久久久久久亚洲色欲| 奸色色 男人天堂 天天射| 78久久| 亚洲国产综合久久久性感熟妇| 蜜臀一区二区三区在线 | 欧美91在线| 超碰国产情侣自拍网| 日韩操啪| 亚洲色91C| 久久AV无码网址| a啊啊啊啊啊啊啊啊一区二区| 国产激情视频在线观看| 久久久久久久9| 中文字幕视频一区视频二区| 精品国产91av一区二区三区 | 日本精品网站在线中文| 东京热大香焦| 久久久久久久人妻| 国产呦精品系列在线观看| 天天日天天射天天干| AAAAAAAAA黄片| 97在线观看视频| 99热超碰| 亚洲欧综合另类无码一区| 情色图区| 99啪啪视频| 日韩午夜精品一区二区三区电影| 97精品人妻一二三四| 91麻豆天美国产欧美| 亚洲男人久久综合天堂| 日韩毛片9| 极品色社| 色色色天美视频| 亚洲色阁| 操淫穴亚洲五月丁香| 91九色网| 亚洲国产成人福利在线观看| 怡红院成人视频| 求求你操操我| 婷婷五月天伊人| 国产高清精品一区二区三区毛片| 91在线丝袜| 亚洲官网在线| 日本99久久| 免费?级毛片无码?∨蜜芽试看| 欧美日韩国产精品久久色婷婷| 人妻天天操天天爽视频免费| 国产女生在线| 牛牛操视频逼| 欧美天天干| 学生妹天天看| 青青草手机在线免费观看| 日韩操人| 午夜爽爽爽在线观看永久入口姬片| 日韩情色一区二区| 91狠狠狠| av东京热男人的天堂| 91久久久久久久久久久| 美女被艹尤物视频| 欧美老妇曰批的视频| 国产操逼网站亚洲一级黄色| 美女9118禁| 欧美日韩人妻少妇 一区二区三区| 蜜色网色哟哟| 六月丁香五月婷婷| 国内毛片免费h片在线| 国产51色综合久久免费| 欧美传媒| 一级片视频啪啪| 美女91在线| 情色大香蕉| 干美女人妻| 国产精品乱码久久久久久| 清清草影| 北京美女一区二区| 久久久久久中文版| 国产不良强奸视频免费看| 色欧洲| 欧美翘臀视频网站一区二区三区| 欧美另类丝袜熟女| 九九九九精品在线| 亚洲激情深爱文学小说网站| 亚洲影视高清第一页| 呦女网站| 亚洲好色人妻| 国产午夜福利合集| 91欧洲入口| 亚洲美女高潮喷水视频| 東南亚性呦成人伦理资源在线视频| 欧美亚洲高清晰| 羞答答AV中文字| 久久精品一区一起草| 91精品婷婷国产综合久久| 免费99精品国产自在在线| 日韩人人精品| 韩日欧亚a级| 天天综合官网| 成人性爱免费播放| 久热精品在线国产| 免费伦费视频在线观看| 日韩免费看黄片| 激情婷婷五月天| 亚洲男人bt天堂| 青青青国产| 午夜精品久久久久| 久久精品高清无码一区| 就去色综合| 好属操| 国产精品4p在线观看| 成人性爱av.com| 国产成人无码久久精品| 鲁鲁色综合网| 蜜臀AV成人精品蜜臀| 久久精品人妻一区二区| 亚洲做性| 2020久久免费视频| 岛国网址国产 | 美女大乳久久久久久久女人18| 精品小视频在线| 97射欧美| 热99这里有精品综合久久 | 男人 天堂 日 亚洲| 伊人久久亚洲色欲综合网站 | 国产成人网站在线观看| 国产欧美美女免费观看视频| 亚洲AV不卡在线观看尤物| 懂色av中文字幕| 九九综合九九综合| 国产一| 欧美亚洲系列| 9丨亚洲一区二区在线| 人人射人人操人人摸| 97午夜剧场日韩| 2019午夜福利视频| 啊啊啊啊网站| 激情视屏国产乱伦强奸| 天天综合精品| 99热线麻豆| 国内毛片欧美香蕉精品| 综合欧美日本三级| 一道本东京热加勒比一区二区三区| 区自美91| 日本三级A片网站com| 色综合99| 久久久久国产精品人妻aⅴ天堂| 伊人操| 国产小u女在线观看| 亚洲狼狼干综合1| 美女十八禁| 思思热久久成人| 爆乳免费黄网站| 国产怡红院在线| 亚洲囯产精品女人久久久| 青草视频在线看看看看看看看看看| 天天干人妻| 激情黄色片在线观看| 久久久久久欧美精品se一二三四| 97在线青| 91久久免费视频互動交流| 激情久久久| 超碰综合97在线| 噜噜噜在线视频| 黄色小说亚洲| 97超碰欧美中文字幕| 91干熟女| 尤物视频偷拍免费| 温婉少妇玩3p| 中文字幕女同在线| 国产午夜福利电影免费在线观看| 久久麻豆一区二区| 熟妇人妻精品一区二区| 一区三区啪啪| 亭亭在线资源| 亚洲成a人片在线观看中文!!!| 欧美视频第二页| 日本αv| 一区二区三区国产精产| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 麻豆久久一区二区三区| 99精品视频在线观看| 久操免费电影| 色激情五月天| 97在线免费视频观看| 日韩欧视频| 婷婷丁香成人| 变态综合色| 日韩精品一区二区三区四虎影视| 亚洲欧美骚| 男人兔费天堂| 人妻少妇久久中文字幕一区二区 麻豆 | 岛国小电影| 五月天婷婷在线看| 色情亚洲日本成人| 密乳无码| 亚洲情色 无码专区| 综合久久中文字幕综合日韩精品| 超碰久久.com| 欧州色图区| 国产精品4p在线观看| 啊啊啊不要好爽日韩无码一区| 特级特黄一级毛片免费| 人妻少妇精品久久久| 日本一区二区成人在线| 9久9久9久9久视频网站| 欧美图片偷拍| 欧美Aⅴ| 九九九热精品| 久久精品人体AV| 亚洲国产一级黄色视频| 情侣操 逼视频99| www.色操逼| 网友自拍第一页| 麻豆激情综合| 久/久精品99看9| 黄色大片视频在线免费看| 男生女生啊啊啊啊| 精品国产一级久久| 欧美v日韩v亚洲v最新在线| 91欧美美女日韩国产婷婷| 黄片无码在线制服| 日韩大香蕉| 人人搡人人肉久久精品| 国产欧美一区激情交| 欧美人黑A片无码免视费| 久久久久久久久久久久久久久久9| 亚洲乱码尤物193YW| 国产400孕妇孕交群| 日欧毛片久久| 色欧美天天| 欧美另类精品xxxx| 九九九九精| 久久少妇人妻| 天堂蜜桃无码视频一区二区| 天天操天天射天天日| 亚洲资源站| 亚洲综合贴图91 | 操操吧亚洲乱伦视频| 亚洲精品 欧美97色色| 综合网~91综合网| 日本99久久| 欧美极品性爱天天射| 久久精品熟妇丰满人妻99| 十八禁一区二区无码观看| 999狠狠综合| 影音先锋中文字幕日本好一区二区| 亚洲情色婷婷五月天| 综合久久久久久久久91| 亚洲玖玖爱| 97一区二压| 日韩影片中文字幕一区二区三区| 99热这里只有精品地址| 熟妇的味道HD中文字幕| 久久久精品网站| 亚洲AV不卡在线观看| 久久久婷婷| 91 在线亚洲| 超碰av在线| 色一色综合网| 激情无码日韩| 性饥渴少妇av无码毛片| 试看60秒 爽| 国产尤物在线三区| 超碰在线1234区| 亚洲色丰满少妇高潮| 殴美日韩m| 青青草九九九九九| 久久人妻视频| 涩五月婷婷| 青青草天天亲夜夜操网| 秋霞影音一区二区三区| 免费的很黄很污的全部视频| 乱伦熟妇一区二区| 日韩性爱啪啪视频| 我要色综合网| 久久日本熟妇熟色一区| 欧洲精品一级二级精品综合视频综合| 欧美色图自拍| 91蜜桃传媒精品久久久一区二区| 嫩草黄页| 丝袜狂射91| 亚洲鸥美色图| 91激情综合| 午夜AV污污污| 欧美日韩国产色五月综合在线| 精品中文一区二区| 少妇丝袜在线观看AV| 色网综合网| 久久精品电影| 精品无人区麻豆乱码1区2区图片| 干美女人妻| 欧美综合1性辶| 亚洲风情在线观看| 欧美极品| 国产无吗在线播放| 免费一级a毛片久久久久久鸭绿欲 国产精品亚洲天堂网址 | 在线国产一区二区av| 人妻乱仑一区二区三区| 国产做?爰片久久毛片?片美国| 看一级黄色视频| 红杏大香蕉| 亚洲成人一二三区| 亚洲中文电影| 97国产精品久久久久| 久久久亚洲熟妇资源| 欧美色图电影| 日韩欧洲操屄视频| 国产精品制服丝袜清纯唯美 | 少妇无码999| 日韩性爱小视频| 熟妇的味道HD中文字幕| 国产1769在线| 亚洲麻豆精品二区三区| 97人亚洲综合字幕| 999熟女精品| 欧美色图第一页| 久久精品国产亚洲妲己影视| 亚乱色| 99无码| 日本最新免费韩国1区2区视频播放| 99久在线精品99re8热视频在线| 国产精品禁久久久精品| 试看日韩黄片| 99精品久久久久久久婷婷| 99热这里只有精| 日本一片一区| 91制服丝袜| 一级成人性爱| 婷婷伊人| 欧洲与亚洲欧美精品中文字幕| 东京热99999| 91色图| 久久精品国产亚洲AV片多多| 屌色在线97视频| 超碰碰激情97+久| 美女高潮国产高清| 手机在线中文字幕国产| 日日夜夜干| 在线综合色| 久久人妻办公室视频| 玖玖爱一区在线| 96精品久久| 国产强奸超碰AV| 用力操死我| 东京太热男人的天堂久久久| 亚洲图片日本AⅤ欧美在线| 日本天天操| 国产热av| 免费?级毛片无码?∨蜜芽试看| 九九这里只有精品| 色悠久久久av| 国产无码三级视频在线观看| 久久久com| 97频视在线| 91久久九九精品国产综合| 大香蕉婷婷| 久久久久深夜无码| 久草免费福利在线播放| 不卡人妻少妇精品毛片一区23区视频| 怡红院久久老司机| 国人欧美精品一区二区| AV丝袜少妇| 国产偷人伦激情在线观看| 美女被艹尤物视频| 美美91成人国产精品欧美精品久久久久久久| 超碰人人干天天射| 国内自拍 日韩激情 99| 亚洲Av噜噜一区二区三区妖精| 在线日韩精品一区二区三区| 26uuu国产| av2014 日韩在线中文字幕| 老司机老司机午夜影院| 欧美亚洲AN| 91香蕉视频在线观看免费| 欧美激情 日韩精品| 久久91| 激情四射婷婷四五月天| 96麻豆精品一区二区三区| 久操婷婷| 国产精品乱码久久久久久久久| 国产福利影视| 欧美淫乱视频| 国内三级自拍小视频在线观看| 欧美高清在线| 日本熟女中文| 综合亚洲网| 操人91| 91少妇人妻| 黄页大片在线观看| 精品国产一区探花在线观看| 神马久久久久眼| dy888午夜老子影视达达兔| 久久色人体| 国产成人91一区二区三区| 嗯~啊~快点 死我视频| 日韩免费在线观看不卡| 亚洲A色| 国产高清精品一区二区三区毛片| 欧美性爱一区二区三区四区 | 婷婷九月国产| 久久东京国产精品视频| 久久久久久久久9| 国产精品麻豆成人AV艾秋| 日本天天干天天操一区| 伊人大香蕉在线| 黄片视频,下载| 职场同事知名国产国产精品久久欧美日韩| 天天干天天狼在线视频| 俞拍久久国应视频| 亚洲AV乱码专区国产噜噜亚洲 | 插入综合网| 熟妇的味道HD中文字幕| 青青草色插素人| 破苞ⅩXXX性无码动漫无码| 日韩欧美中文字幕搭讪巨乳美人妻视频| 99操99| 操一操摸一摸| av东京热男人的天堂| 亚洲无线码一区国产欧美国| 欧美se综合| 有码人妻系列| 日韩人妻 中文字幕| 久久久啊啊啊| 免费看污网站| 欧亚乱色熟女一区二区| 欧美在线啊啊| 一本一首道人妻少妇免费久久| 女同性恋久久| 伊人天天久久动态图| 都市激情人妻一区二区青青操视频 | 国产精品在线网站| 精品久久九| 国产 v乱码一区二| 特色a在线上| 欧美A√综合网| 色婷久久| 成人免费视瓶| 亚洲91射| 午夜啊啊啊| AV九九| 日韩色欲久久一二三四区| 97这里有精品| 69久久久久久久久久久久久| 蜜臀av一区二区三区免费观看| 久久青青草原免费视频| 麻豆成人影音在线| 日韩一级二级三级免费看完整版国语版| 婷婷综合久久| 思思热影视| 日本人妻伦在线中文字幕| 哈哈操 大香蕉| 新视频sss国产| 97视频网站在线观看| 国产懂色精品国产av| 亚洲国产精品成人久久蜜臀| 精人妻无码一区二区三区伊人直播| 久久久久骚| 色婷婷网| 一级久久久久久久久久久| 国产精品白丝在线播放| 久久久久久999| 91天天美女| 96久久久精品| 东北女人的毛片| 欧美专区第一页| 久久久com| 日本韩欧美在线播放a| 性久久| 欧美伊人久久综合网| 免费a v| 校园春色 欧美| 精品天堂| 欧美操逼录像国产黄色国产| 4虎在线视频| 狠狠躁日日躁夜夜躁A| 国产污视频麻豆传媒一区二区 | 在线无码网站| 一级黄色性爱裸体视频| 人妻久久一区二区三区 | 亚洲精品国产日韩无码AV永久免| 天天噜| 东北熟女91| 男同专区一区二区三区在线| 激情另类激情| 97在线播放| 4tube欧美女厕所| 色亚洲欧美| 国语精品av| 春色综合网| 外国91| 99色网| 亚洲熟伦熟妇AV无码春色| 欧美成人免费在线观看| 天天综合网91| 2024黄色视频| 俺去啦俺来也久久综合| 超碰97人人cao| 亚洲色图尤物视频 | julia中文字幕在线观看| 欧美色图 人妻| 玖玖爱伊人玖玖爱| 中文字幕国产| 精品天堂| 69视频入口| 天堂а√在线最新版在线| 一牛影视成人片免费|