免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

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)著色器”和“片元著色器”卻對(duì)整條渲染流程只有一個(gè)模糊概念數(shù)據(jù)進(jìn)去像素出來。中間那些階段——坐標(biāo)變換、裁剪、光柵化、深度測(cè)試、混合——到底是誰在什么時(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)闆]得選你反而會(huì)被迫看清“管線到底長什么樣”。為什么偏偏拿三角形舉例這不是隨便選的。三角形是光柵化硬件的基本處理單元理由至少有兩條。第一三角形是最簡單的平面多邊形三個(gè)點(diǎn)一定共面這保證了后續(xù)插值和裁剪在數(shù)學(xué)上干凈利落四邊形在透視投影下可能被掰成兩個(gè)不共面的半片而三角形不會(huì)。第二三角形內(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但總覺得哪里隔著一層紙這篇文章都適合你。我會(huì)把每一步背后的數(shù)學(xué)邏輯和實(shí)際踩坑經(jīng)驗(yàn)都攤開講最后還會(huì)給你一個(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)是相對(duì)于這個(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定把照片洗成多大尺寸。五種變換對(duì)應(yīng)著同一套數(shù)學(xué)邏輯一連串矩陣乘法。2.2 光柵化三角形覆蓋了哪些像素頂點(diǎn)處理完后三角形已經(jīng)變成了屏幕坐標(biāo)系下的三個(gè)二維點(diǎn)同時(shí)每個(gè)頂點(diǎn)身上掛著一堆屬性深度值、顏色、紋理坐標(biāo)。接下來登場(chǎng)的是光柵化Rasterization階段任務(wù)是找出“這個(gè)三角形覆蓋了哪些像素中心點(diǎn)”并為每一個(gè)被覆蓋的像素生成一個(gè)片元fragment。固定功能時(shí)代的光柵化硬件主要用的是掃描轉(zhuǎn)換scan conversion的思路現(xiàn)代GPU則更偏向基于包圍盒的并行測(cè)試。無論哪種實(shí)現(xiàn)核心數(shù)學(xué)都是同一個(gè)給定三角形三個(gè)頂點(diǎn)v0、v1、v2和像素點(diǎn)p判斷p是否落在三角形內(nèi)部。最常用的方法是叉積符號(hào)測(cè)試或者用重心坐標(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)所以邊緣會(huì)出現(xiàn)鋸齒。固定功能管線的年代硬件里會(huì)提供多重采樣MSAA或者紋理鋸齒消除方案但最樸素的做法就是不處理這也是為什么老游戲的畫面邊緣總是“狗牙”明顯。第二三角形覆蓋像素時(shí)兩個(gè)三角形共享的邊必須只被計(jì)入一次否則同一像素會(huì)被寫入兩次產(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è)像素能不能寫、怎么寫”的判斷題。固定功能管線里這一串操作通常包括裁剪測(cè)試scissor test、Alpha測(cè)試、模板測(cè)試stencil test、深度測(cè)試depth test、混合blending、抖動(dòng)dithering和邏輯操作。其中對(duì)“畫三角形”這件事最重要的兩個(gè)是深度測(cè)試和混合。深度測(cè)試的邏輯一句話就能說清每個(gè)片元帶有一個(gè)深度值z(mì)它代表這個(gè)像素點(diǎn)在相機(jī)空間里離相機(jī)的遠(yuǎn)近幀緩沖區(qū)外還掛著一張深度緩沖區(qū)記錄著當(dāng)前已經(jīng)寫入的最近片元的深度。新片元到來時(shí)先拿它的z值和深度緩沖里對(duì)應(yīng)位置的值比一比默認(rèn)模式是“小于等于就通過”通過后再用新z覆蓋舊z顏色也覆蓋。這意味著即使兩個(gè)三角形在代碼層面一先一后遞交最終誰顯示在前面取決于誰離相機(jī)更近而不是誰后畫。固定功能管線里深度測(cè)試和深度寫入是可以分別開關(guān)的這個(gè)組合在透明物體渲染時(shí)非常重要透明物體通常要關(guān)掉深度寫入、保留深度測(cè)試否則后面的半透明層會(huì)擋住前面的?;旌蟗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);看起來沒問題但很多人剛開始都會(huì)犯一個(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ù)期完全對(duì)不上甚至直接落在裁剪范圍外畫面白屏一片。我當(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)置存儲(chǔ)那就全反過來。團(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)會(huì)被翻轉(zhuǎn)三角形形狀徹底亂掉。所以硬件必須在透視除法之前完成視錐裁剪。裁剪空間clip space里判斷頂點(diǎn)是否在可見區(qū)域用的是一組簡單不等式-w x w-w y w-w z w。任何不滿足條件的頂點(diǎn)都要被裁剪而一條邊穿過裁剪面時(shí)三角形需要被切成一個(gè)或多個(gè)新三角形。固定功能管線里的硬件裁剪器clip unit干的就是這活而且它對(duì)每個(gè)三角形的輸出可能是零個(gè)、一個(gè)、兩個(gè)甚至更多個(gè)三角形。想一想就知道這跟“畫單個(gè)三角形”的直覺很不一樣你以為只需要填充三個(gè)頂點(diǎn)圍成的區(qū)域?qū)嶋H上GPU內(nèi)部可能先做了幾何分裂。新手在軟件光柵化器里最常偷懶的做法是“先透視除法再判斷NDC是否越界”這幾乎一定會(huì)出現(xiàn)三角形在地平線附近撕裂、翻轉(zhuǎn)的現(xiàn)象。正確做法是計(jì)算裁剪坐標(biāo) clip P * V * M * localPos檢查clip的x、y、z是否都在[-w, w]內(nèi)都合格才做透視除法不合格做裁剪或丟棄。3.3 深度測(cè)試不是“按畫家算法”而是“按深度緩沖”很多剛接觸3D的人腦子里的遮擋模型是“誰后畫誰在上面”這其實(shí)更像畫家算法painters algorithm先畫遠(yuǎn)處的山再畫近處的樹后面的覆蓋前面的。畫家算法在深度排序完全正確時(shí)能工作但三角形互相穿插、或者運(yùn)動(dòng)物體快速交換前后關(guān)系時(shí)排序成本高且結(jié)果不穩(wěn)定。深度緩沖區(qū)z-buffer徹底解決了這個(gè)問題它為每個(gè)像素存一個(gè)深度值片元能不能寫顏色取決于它帶過來的深度值是否比緩沖里的更小離相機(jī)更近。固定功能管線的深度測(cè)試單元就是干這個(gè)的。這里有一個(gè)實(shí)際中頻繁踩的坑深度緩沖的精度和數(shù)值范圍。OpenGL的NDC z范圍是[-1, 1]DirectX是[0, 1]而深度緩沖通常把z映射到[0, 1]存儲(chǔ)。透視投影的z經(jīng)過除法后不是線性分布的離相機(jī)近的部分精度高、遠(yuǎn)的部分精度低。所以近裁剪面和遠(yuǎn)裁剪面如果比值特別懸殊地平線附近就會(huì)出現(xiàn)深度沖突z-fighting表現(xiàn)為模型表面上閃爍的碎花——兩個(gè)幾乎共面的表面在遠(yuǎn)處互相爭(zhēng)奪像素。我當(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è)片元上對(duì)屏幕空間坐標(biāo)做線性插值得到的結(jié)果是不符合透視規(guī)律的。舉個(gè)例子一個(gè)由近到遠(yuǎn)延伸的地面紋理如果簡單地在屏幕空間里對(duì)紋理坐標(biāo)做線性插值遠(yuǎn)處的紋理線會(huì)被拉伸得奇寬無比近處的卻擠在一起產(chǎn)生一種“紋理在甩動(dòng)”的不真實(shí)感。正確做法是透視校正插值perspective-correct interpolation屏幕空間里真正線性插值的對(duì)象不是屬性本身而是屬性除以w后的值以及1/w。最后把兩個(gè)插值結(jié)果相除才得到正確的屬性。固定功能管線內(nèi)部自動(dòng)做了這一層校正所以你直接用固定管線貼紋理通常不會(huì)遇到這個(gè)問題。但一旦你開始自己寫軟件光柵化器、或者在現(xiàn)代Shader里手動(dòng)計(jì)算插值這個(gè)坑就立刻暴露。判斷方法很簡單看紋理在地平線附近有沒有不該有的波浪形扭曲。如果有八成是插值沒做透視校正。4. 今天寫Shader的人為什么還離不開固定功能的底層邏輯很多人會(huì)有個(gè)疑問現(xiàn)在誰還在用固定功能管線OpenGL 3.2之后核心profile直接移除了固定功能WebGL 2.0時(shí)代大家寫的是GLSL ShaderVulkan和Metal更是一上來就要你手寫全套渲染狀態(tài)。那這篇文章講這些“老古董”是不是過時(shí)了恰恰相反。固定功能管線不是被淘汰了而是被拆開了——它把一條完整流水線里需要邏輯判斷的部分做成可編程單元把那些不需要邏輯判斷的硬件操作繼續(xù)固化下來。你今天寫的頂點(diǎn)著色器取代的正是固定功能里“頂點(diǎn)變換和光照”那一段你寫的片元著色器取代的正是固定功能里“紋理采樣、霧計(jì)算、alpha測(cè)試”那一段。但深度測(cè)試、模板測(cè)試、混合、光柵化這些環(huán)節(jié)在現(xiàn)代渲染管線上依然由固定硬件完成你只能配置參數(shù)不能改寫邏輯。這張對(duì)應(yīng)關(guān)系在任何入門教材里都成立但真正讓我意識(shí)到它價(jià)值的是調(diào)試Shader的時(shí)候。有一次我寫一個(gè)粒子效果的片元著色器畫面粒子總是被場(chǎng)景里的墻體擋得嚴(yán)嚴(yán)實(shí)實(shí)。我開始以為是混合模式配錯(cuò)了查了半天最后發(fā)現(xiàn)是深度寫入沒關(guān)。如果我對(duì)“固定功能管線哪些環(huán)節(jié)由硬件接管”沒有概念一定會(huì)像無頭蒼蠅一樣在Shader代碼里翻。但因?yàn)槲夷X子里有那套流水線圖瞬間就能定位片元著色器輸出顏色之后后面還有一層深度測(cè)試單元在等著我。固定功能時(shí)期還有個(gè)經(jīng)常被老教程一筆帶過的坑就是法線變換。在固定功能管線的頂點(diǎn)變換階段如果你開啟了光照硬件會(huì)自動(dòng)把法線從模型空間變換到世界空間或視圖空間。但一個(gè)關(guān)鍵規(guī)則是遇到非均勻縮放時(shí)法線不能直接用模型矩陣變換否則法線和表面的垂直關(guān)系會(huì)被破壞。正確做法是使用模型矩陣的逆轉(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í)會(huì)強(qiáng)迫你走一遍完整的變換→光柵化→深度測(cè)試流程做完之后你對(duì)管線的理解會(huì)扎實(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; // 裁剪測(cè)試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保留給深度測(cè)試 out.w in.w; // 順便存一下原始w用于透視校正 out.r in.r; out.g in.g; out.b in.b; return true; }注意這個(gè)裁剪測(cè)試極其簡化了真正的裁剪器要做三角形切分這里直接丟棄不合格三角形——對(duì)于“屏幕中央放一個(gè)三角形”的場(chǎng)景完全夠用。如果你想支持部分頂點(diǎn)在屏幕外就需要寫真正的多邊形裁剪算法這是后話。5.2 光柵化主循環(huán)光柵化的目標(biāo)是遍歷三角形屏幕包圍盒內(nèi)的每個(gè)像素用重心坐標(biāo)判斷像素中心是否在三角形內(nèi)部然后插值顏色和深度執(zhí)行深度測(cè)試最后寫顏色緩沖。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) { // 插值深度簡單場(chǎng)景頂點(diǎn)z已經(jīng)算好 float depth sv[0].z * w0 sv[1].z * w1 sv[2].z * w2; // 深度測(cè)試通過才寫顏色 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í)行深度測(cè)試再寫入顏色緩沖。運(yùn)行時(shí)你會(huì)發(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最后還原三角形邊緣的抗鋸齒對(duì)覆蓋面積做加權(quán)采樣紋理映射在片元階段采樣一張貼圖逐頂點(diǎn)光照在頂點(diǎn)階段算好顏色再插值。每加一個(gè)功能你都會(huì)更清楚它應(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)的每一步都被誰做了什么——這份清楚會(huì)陪你走完之后所有圖形學(xué)相關(guān)的路。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久a热| 色综合大香蕉| 婷婷综合色| 婷婷久久五月| 日韩无码专区| 欧美成人精品老美女噜噜噜| 77799热| 91久久网站| 激情久久五月天| 求可以看的AV网址| 69凹凸成人综合网| 五月成人网站| 亚洲第一黄网| 五月六月婷| 丁香五月影院| 中文字幕天天干| 天天日天天爽| 99视频只有精品| 精品色情一区二区三区四区| 丁香五月综合| 久艹大香蕉| 色九九综合色| 操操操97| 国产亚洲精品久久久久苍井松| 欧美日韩AAAA| 很很干五月天| 激情合网婷婷| 五月婷婷成人w| 欧美日朝成人| 91超碰人人操| 五月婷婷久久久| 久草视频大香蕉99| 天天干天天av天天射| 先锋av性爱成人电影| 亚洲成人在线免费| 国产激情久久久| 色色色色色色色色色色色色色五月天| 欧美精品XXXXBBBB| WWW.国产| 99热在线观看| 日本欧美成人片AAAA| 色婷久久| AAA久久| 亚洲激情综合| 99在线视频精品| 黄页大全十八禁| 色热久资源| 亚洲视频五区| 欧美婷婷六月丁香综合色| 丁香五月婷婷综合精品素人| 综合久久综合久久| 亚洲国产精品成人免费一区久久久在线观看AAAA| 伊人狠狠色婷婷综合丁香一区| 婷婷九月丁香中文| 日本123区日韩欧美不卡在线看| 一级黄在线| 婷婷激情综合网| 激情丁香五月天综合| 久久久久久99精品无码| 久久婷婷色情7777网站| 成人在线日韩| 亚洲看av的网站| 亚洲色婷婷网站| 精品人妻伦| 丁香五月天偷拍| 色噜噜狠狠色综合无码久久欧美| xxxx五月| 精品色色色| 99热12| 99热这里只有精品50| 色婷婷五月基地在线| 99er6| 久鲁鲁色网| 激情网五夜婷婷| 异能之下短剧免费观看全集| 一本久久亚洲五月婷婷| 丁香五月综合在线视频| 色啪影院| 激情综合色五月丁香| 色五月丁香激情| 欧美综合在线五月天色婷婷| 九九精品热| 色情五月综合婷婷| 激情深爱五月天| 九色视频91| 国产精品色色| 六月丁香成人| 色噜噜狠狠色综| 七七九九色色| 人妻精品一区二区三区| 天天操加勒比| 日韩无码专区| 国产在线视频1234| aaa丁香五月天| 日韩好吊操| 五月情四婷婷| www.99热| 激情小说婷婷| 久久国产AV| 夜夜躁婷婷AV| 伊人狠狠干| 五月激情在线| 亚洲深喉AV| 97久久久| 丁香婷婷五月天成人| 午夜爱插插| 婷婷五月天影视网址| 亚洲天码视频www蛋播视频| 岛国av网站| 开心激情婷婷| 天天色中文字幕女优AV| 亚洲中文字幕AV| 99er国产| 五月天婷婷基地综合网| 亚洲无AV在线中文字幕| 色婷婷综合综合网| 无码色色| 乱精品一区字幕二区| 无语停婷丁香网| 丁香婷婷大香蕉| 久久综合九九| 人人视频人人干人人做| 777米奇影视第四色| 九九人人看| 综合丁香婷婷五月天| 人妻内射麻豆视频| 大香蕉综合在线| 五月丁香在线婷婷美女| 狠狠色综合网| 99热99| 丁香五月天信号| 99热这里只有精品首页| 97超级碰| 五月丁香在线精品| 九九人人操| 日韩色色一区| 亚洲色爱综合| 超碰婷婷色| 乱码操操| 五月天婷婷基地综合网| 五月天婷婷久草丁香| 爱草视频在线观看| 91性高潮久久久久久久久| 丁香五月九九| 六月丁香影院| 婷婷视频在线碰| 深爱婷婷基地| 激情综合网五月| 五月婷婷狠狠久久| 第五色婷婷| 婷婷色色综合| 天天狠狠色噜噜| 五月激情小说网| 97婷婷丁香五月天激情图片| 99精品免费欧美小视频| 亚洲五月天色色| 五月天性色| 这里只有精品免费| 久久视屏这里只有久久| 色情五月婷婷| 色网站99| 538在线精品| 婷婷午夜| 深爱五月激情| 人人操Av| 成人做爰A片免费看网站找不到了| 国产精品久久..4399| 天天插天天日| 五月婷婷深深爱| 少妇激情五月天| 天天色中文字幕女优AV| 婷婷五月天综合小说网| 99热在线爱| 婷婷五月天激情丁香| 亚洲第一成人无码A片| 综合激情伊人影视在线| 99亚洲精品| 超碰成人电影| 婷婷五月天基地| 国产精品久久久99视频| 丰满少妇猛烈A片免费看观看| 色五月涩涩婷婷蜜桃| 色综合色色| 天天日天天狠狠操| 五月Huangsewang| 5月婷婷六月丁香| 99ER热精品视频| 欧美久久五月婷婷| 伦乱人妻| 色婷婷狠狠爱| 99在线免费视| 丁香花五月天婷婷成人社区| 99热97| 日韩久综合| 涩综合婷婷| 超碰网站在线观看| 激情无码网| 久久婷婷色综合| 九色PORNY自拍成人精彩视频| 色婷婷19| 青草视频在线观看视频 | 国产成人AV在线播放| 99热九九热| WWW免费视频碰碰碰碰| 久久99久久99精品免观看粉嫩| 午夜丁香六月婷| 亚洲av成人在线| 婷婷五月天美女| 久久精品99国产精品日本 | 香蕉AV777XXX色综合一区| 婷婷综合国产| 丁香五月五月婷婷| 五月丁香欧美在线| 亚洲色碰| 婷婷五月综合国产精品| 人妻久热| 五月婷婷开心爱| 五月激情综合网婷婷| 五月天激情www| 97干视频在线| 精国产品一区二区三区A片| 99区视频| 色综合中文色综合网| 亚洲色另类| 伊人国产婷婷五月天| 果冻传媒A片一二三区| 丁香五月婷婷视频| 色婷婷丁香五月天在线视频 | 91热在线| 丁香五月激情综合久久| 婷婷色色五月| 丁香五月香蕉| 激情五月天开心网丁香无码| 丁香婷婷老司机久操| 五月天激情小说| 五月丁香啪啪激情| 久婷久婷| 99天堂在线观看免费视频| 色激情五月| 思思视频这里是精品| 久久久久久久久久久jjjj| 久久婷婷五月综合色丁香| 五月天天丁香婷婷在线中| 婷婷五月天最新网址| 538在线精品| 色综合色综合网| 亚洲成人网在线观看| 亚洲性爱AV在线| 欧美天堂久久| 久久少妇视频| 六月丁香射婷婷欧美色图片| 国产 亚洲 在线| 丁香五月狠狠在线观看| www.婷婷| 五月丁香777| 婷婷.com| 五月丁香婷婷啪啪综合网| 全高清无码视頻| 六六久久黄色| 丰满老熟妇BBBBB搡BBB | 久久人人人人妻| 91九色国产| 1024AV视频| 五月丁香激情综合| 亚洲日日日| 丁香午夜天| 五月青青草综合| 成人人操| av第一二区| 99在线精品免费视频| 五月丁香久久网| 可以看的AV| www.伊人天堂偷偷婷婷| 亚洲久久视频| www色婷婷久久综合久色| 超碰电影在线播放| www.久久99热地址发布| 1024亚洲| 婷婷丁香社区| 九色91国产| 十区av| www...com黄在线观看| 99热在线观看| 婷婷五月花| 97干在线| av色色国产| 永久免费视频| 91色逼| 可以直接看的av| 这里只有精品视频一区| www.99热. com这里只有精品| 综合AV在线| 丁香六月色婷婷| 色九月婷婷丁香| A1片久久| 91玖玖| 婷婷爱爱蜜臀天天操| 超碰爱爱爱| 色欲久久久久久综合网综合网| 99无码黄色视频| 26uuu亚洲精品国产| 婷婷丁香亚洲五月天| 伊人天天色| 99久热这里只有精品视频删减版| 婷婷丁香成人在线视频| Www.婷婷五月| 青青草激情网| 婷婷射丁香| 综合激情在线| 久久综合激情| 五月婷婷操操| 激情婷婷网| 狠狠爱婷婷丁香| 99激情视频| 中文AV在线观看| 欧美日本黄色| 久热免费视频| 久久婷婷网址| 色碰干| 激情综合网五月丁香| 色热久| 丁香五月天导航| www.五月激情.com| 五月天涩涩| 五月婷婷激情五月| A久久| 五月丁香综合| 婷婷色网址| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 超碰1999| 99精色| 99国产精品久久久久久久久久久 | 久久综合中文| 99这里只有免费的小视频在线观看| 色婷婷五月综合在线| 九九精品在线网| 99色视频| 熟女人妻一区二区三区免费看 | 婷婷综合色五月天| 婷婷久久综合久| 五月天婷婷影院| 亚洲av电影在线| 久久九九99桃花视频| 六月丁香婷婷色狠狠久久| 天天日夜夜夜操操操操| AV在线观看网站| 精品无码久久久久久久久| 五月天激情色色| www.久久爱.com| 亚洲热综合| 老师的粉嫩小又紧水又多A片视频| 大香蕉丁香婷婷| 色v综合网| 婷婷六月综合在线| 久99在线视频| 九九久久9 9在线观看| 色婷天天| 香蕉AV777XXX色综合一区| 99在线69| 涩丁香| 色啪影院| 精品丁香五月天在线播放| 婷婷狠狠操| 中文字幕91,综合| 久草五月天电影网| 婷婷永久在线| 国产a视频| 亚洲va日| 噜噜噜狠狠色综| 最新无毒无码AV| 99色综合| 人人97碰| 五月综合激情图片| 日韩激情人伦人| 99九九视频精彩在线| 国产婷婷色综合AV蜜臀AV | 五月婷婷色播| 午夜天堂一区人妻| 精品五月视频婷婷在线观看| 五月天婷婷丁香导航| 欧美大片| 夜夜爽天天| 天天肏高清在线| 丁香五月影院| av亚洲国产小电影| 婷婷开心深爱五月天| 婷婷五月天激情诱惑| 久久久人妻| 丁香五月大香蕉AV| 玖玖精品视频| 久久久久久久91| 夜夜人妻五月天| 色色色婷| 91综合在线视频| 五月天婷婷激情春色小说| 九九这里都是精品| 97人人干人人操| 婷婷五月天久久| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 美欧日韩国产成人在战| 1024亚洲| 色色a| 婷婷综合天堂| 九九色综合视频| 日本人妻伦在线中文字幕| 婷婷丁香成人| 色欲色香综合网| 五月丁香综合在线| 五月丁香久久久久| 五月婷婷狠狠干| 热99免费在线| 日韩久热| 色色色色网| www.91久久| 99精品性爱| 人人综合色| 天天色综合网吨吧| 狠狠干狠狠操狠狠爱| 成人性爱精品视频| 婷婷伊人綜合中文| 97人人操人人爽| 久久97| 好激情在线综合网| 五月花婷婷在线精品视频| 潘金莲AAAAAAAAAA| 色色色综合| 91色情播放| 丁香五月天欧洲在线| 丁香五月天社区婷婷| 99热久97| 丁香五月婷婷亚洲色图| 天堂在线9| 亚洲天堂啪啪| 五月丁婷香| 久久婷五月天| 99色免费视频| 五月天丁香久久| 国产熟女一区二区三区五月婷| 91精品无码| 色婷婷导航| 狠狠色婷婷丁香六月| caop视频| 国产精品久久久海的味道| 国产肏屄大片| 丁香五月欧美| 五月天激情.com| 亚州第一A片| 五月丁香六月婷婷在线| 激情床戏| 亚洲电影在线观看| 天天插天天射| 99热精品在线观看| 色色COm| 亚洲成人网站在线播放| 色激情五月天| 九九精品在线观看视频6| 9999热在线免费观看| 久久婷婷亚洲| xxx日本东京热| 五月色婷婷夜色| 激情 五月 婷婷 丁香| 丁香九月色| 偷拍九九热| 中文字幕无码人妻少妇免费视频 | 四色99久久| 成人视频在线免费播放| 热99免费在线| 九九热99视频| 五月婷婷之综合激情| 亚洲国产另类av| 99九九在线视频| 激情五月图| XX色综合| 五月丁香啪啪综合| 婷婷日日天天| 97在线精品| 福利视频在线播放| 超碰人人操| 情欲综合网| 五月婷婷黄色毛片| 亚洲日本韩国| 99re久久| 狠狠草狠狠草| 婷婷五月天电影在线| 五月婷成人网| 99免费热视频在线| 婷婷月综合| 成人短视频在线| 国产免费AV网站| 五月总合激情网| 丁香六月中文| 天天视频亚洲| 五月丁香六月婷婷久久肏| 99九九视频| 久9视频免费播放| 国产露脸150部国语对白| 亚洲亚洲永久无码777777| 66精品国产成人| 一级无码作爱片| 五月综合激情婷婷六月色窝| 色综合综合色| 五月丁香六月玩女人| 五月丁香狠狠爱| 五月天激情综合网| 人妻日日日| 丁香五月六月综合激情| 9l视频自拍九色9l视频在线观看| 丁香婷婷色六月| www.91.com处女在线直播| 成人无码精品1区2区3区免费看| 色色色综合网| 九九久久高清| 色色综合日韩| 亚洲成人av在线播放| A久久| 亚洲天堂制| 色综合丁香| 亚洲人人干| 丁香五月婷婷网| 午夜天堂啪啪| 日韩在线成人电影| 亚洲精品又粗又大又爽A片 | 国产超碰人人| 丁香五月天无码| 久久色五月天| 亚洲超碰青涩| 久久五月丁香婷婷| 国产精品色婷婷久久久精品| 日99网站| 亚洲综人色综网| 五月婷婷九月婷婷九月婷婷| 欧美婷婷五月丁香| 色婷婷激情五月天| 开心五月综合激情综合五月| 亚洲成人五月| 日本在线播放97| 久久免费精品小视频| 五月天婷婷视频30| www.久久| 91操熟女| 亚洲色婷婷五月天| 日日操夜夜操不卡| 五月婷婷和六月| 国产精品99久久久久久猫咪| 九九色综合网| 国产精品大香蕉| 色播丁香| 色噜噜伊人| tingting五月天亚洲| 6月丁香婷婷激情| 伊人狠狠狠综合| 三十路磁力链接| 思思热再线视频| 狠狠色精品综合| 五月婷婷自拍视频| 26uuu日韩| 99久热在线精品| 五月丁香六月激情综合网| 九九热视频精品2| 琪琪理论片| 色五月天中文字幕| 狠狠操性爱av| 亚洲综合五月天| 亚洲天堂爱爱| 极品人妻VIDEOSSS人妻| 美女被操一区二区| 91色噜噜狠狠狠狠色综合| 99人人干| 色插综合网| 婷婷五月天首页| 日欧大屏操| 色综合久久99色| 99热这里只| 婷婷五月花| 婷婷五月天国产性感美女演员久久久久| 婷婷综合在线网| 9精品视频在线| 五月天激情综合在线| 五月丁香六月婷婷中文版| 激情色视频| 色色色综合网| 99国产精品久久久久久久久久久 | 狼人婷婷综合| 激情AV| 婷婷影视久久| 99福利导航| 丁香婷婷五月激情综合| 丁香六月五月婷婷| 六月色婷婷| AV成人在线网站| 国产免费一区二区三州老师F1F1……| 日韩成人精品中文字幕| 五月天停停基地| 亚洲欧洲午夜成人精品av| www.夜夜操.com| 色色五月婷婷| 在线中文亚洲| 九九热在线视频,| 99人妻碰碰碰久久久久视| 五月综合视频| 激情五月婷婷啪啪| 思思久久精品视频| 九九99香蕉在线视频播放| 久久av电影| 99在线观看精品视频| 丁香五月偷拍| 97碰碰碰| 五月综合激情网| 久久精品66| 婷婷天堂视频| 久久久久亚洲AV综合| 午夜丁香综合婷婷| 天天插天天插| 任我鲁这里有精品视频| 久久丁香五月婷婷| 色色色综合| 91操黄| 插插插丁香五月婷婷| 第四色大香蕉| 九色视频九色九色91jiuseshipin| av在线免费播放| 五月激情久久综合网| 狠狠干夜夜干| 色婷婷另类| 色五月婷婷五月久久| 亚洲午夜电影| 九九美女视频| 思思热再线视频| 色情综合网| 一级A片天天操夜夜操| 免费人人操| 99精品无码| 91碰碰视频| 视频一区二区在线| 亚洲色情激情丁香五月| 色五月激情五月开心五月| 五月天天综合| 五日激情综合| www.com在线操视频免费观看| 婷婷 久综合| 六月色色| 久久视9精| 五月色婷婷综合| 啪啪小说五月天| 深爱婷婷色| 色婷婷AV在线| 久久久婷婷色五月资源网| 99性爱视频| 婷婷俺去也| 久久成人天| 国在线激情网| 激情淫乱男女| 婷婷五月天涩涩| 天天射综合网天天插| 大香蕉综合在线| 色色色天堂网| 情色五月天 网站| 午夜性做爰电影| 久超超碰| 婷婷成人视频| 91精品综合久久久久久五月丁香| 天天干,噜噜色,狠狠色| 色色热99| 久久这里只有精彩| 开心五月激情网| 亲子乱AV一区二区三区下载| 日本97在线| 中文字幕在线不卡视频| 91丁香婷婷综合久久欧美| 一级操逼大片| .青娱乐天天操B| 大香蕉久久婷婷| 色碰97| 色五月婷婷五月| 九色激情网| 99热天堂| 婷婷五月天激情网| 日韩婷婷| 天天成人综合视频| 色yeye色综合| 婷婷久久精品| 激情五月天婷婷| 91日本在线观看| 色五月天综合| 丁香五月成人自拍| 欧美久久网| 久久久8| 五月丁香激情综合| 五月花婷婷最新| 色约约视频一区二区三区四区五区| 夜夜夜夜夜操| AV在线资源| 97高清国语自产拍| 久 久9 9 热 视 频| 六月激情丁香一道本7777| 婷婷久久丁香五月| 久久人妻乱子伦| 亚洲精品第一国产综合亚AV | 丁香五月停停av| 欧美日本99| 香蕉国产2013| 色色婷婷综合网| 午夜福利8055| 九九热在线视频观看| 人妻五月天激情开心网| 色婷婷亚洲综合av| 99re8这里只有精品99re8热视频| 开心五月婷婷在线| 天天日夜夜欢| 熟妇人妻中文字幕无码老熟妇| 深爱五月日韩| 激情综合五月丁香| 超碰99在线观看| 久久女婷| 久久久国产精品黄毛片| 欧美超碰亚洲| 五月丁香A片| 婷婷五月天熟妇| 久久色9| 91色色色| 久热婷婷在线视频| 夜夜躁狠狠| 天天综合天综合| 日日操,夜夜撸| 欧美99热| 91狼友视频网页更新| 丁香激情四射| 婷婷五月色丁香在线看| 91vip在线观看| 久热A片| 久久99热这里只有精品| 5月婷婷五月天| 丁香六月综合激情| 91综合色噜噜| 99精品成人无码A片观看金桔| 五月天综合在线观看视频| 日本丁香五月婷婷| 91色噜噜狠狠狠狠色综合| WWW色五月| 色五月在线播放| 丁香五月婷婷俺也要去| 婷婷爱综合| 超碰二区| 东京热人妻一区二区三区在线| 五月天激情四射| 激情五月婷黄版| 任你日热视频| 五月婷婷欧洲| 亚洲中文字幕在线观看| av九九| 婷婷激情综合| 亚洲 五月 婷婷 成人| 婷婷激情综合无月| www.婷婷| 久久久久久久久久91| 久久久9久| 欧美搡BBBBB摔BBBBB| 激情婷婷五月| 在线另类视频| 激情五月天偷拍综合网| 激情五月天色婷婷| 五月婷婷激情69| 狠狠人妻色综合| 99久久久久久www| 99久久婷婷综合| 天天网曰日曰夜夜综合永久免费| 婷婷五月丁香在线观看| www.五月天| 婷婷性爱网| 亚洲色婷婷五月天 | 中美日韩成人在线| 中文字幕精品在线观看| 婷婷五月免费视频| 婷婷开心激情五月激情网| 啪啪啪五月天| 另类小说五月天综合| 79精品在线视频| 亚洲国产精品成人免费一区久久久在线观看AAAA| 都市激情亚洲| 五月亭亭欧美女人| 五月丁了香蕉综合| 3DAV亚洲香蕉久久 一区二区| 97色干在线观看| 欧美成人AAA片一区国产精品| 天天天天干| 婷婷色六月| 激情五月色婷婷| 欧美日本黄色| 五月天婷婷基地综合网| 婷婷五月激情网| 亚洲婷婷欧美婷婷| 五月丁香色综合| 99男人的天堂| 人人操91| 丁香六月色婷婷| 色五月婷婷亚洲| 色五月婷婷五月| 色综合天天| 99热精品在线播放| 欧美另类五月激情| 思思热久久久在线| 五月丁香六月婷婷欧美综合| 激情综合网五月| 五月婷婷日| 五月色婷婷中文字幕| 婷婷五月六月| 第九色区av天堂| 久久se 综合网| 97男人天堂| 日韩久综合| 99精品在线播放| 99视频精品视频| 五月丁香婷婷啪啪综合网| AV五月婷婷露脸| 丁香五月天婷婷中文字幕| 欧美精品99久久久| 夜精品无码A片一区二区蜜桃| 久久AAAA片一区二区| 久久ri精品视频| 干一干xxxx| 超碰人人在线观看| 丁香5月婷婷| 夜夜躁婷婷AV| 欧美婷婷| 婷婷五月丁香伊人| 日韩色色色色色| 91 影音先锋| 婷婷综合成人| 五月天激日本色情在线| 一起草日本| 九九AV| 色宗合久久五月婷婷| 五月婷婷草| 99久久久久| 无码激情精品色婷婷久久久久| 伊人久久大香天蕉亚洲特级| 欧美色五月| 开心五月激情婷婷| 级情九色| 牛牛热这里只有jingpin| 人妻久久久久久| 就99这里只有精品| 婷婷九月在线| 亚洲精品白浆高清久久久久久| 天天舔天天摸| 色五月视频无码播放| 综合性爱网| 天天射天天插天天干| 大香蕉婷婷久久| 五月丁香婷婷激情澎湃四射| 婷婷丁香熟妇综合网| 婷婷丁香成人色综合| 久久国产色| 五月激情婷婷图片基地| 天天色视频| 在线日韩视频| 激情五月婷婷视频一区二区三区| 五月丁香色色综合| 综合99久久天天综合| 国产精品久久久久久久久久| 伊人网啪啪| 久色中文| 大香蕉啪啪啪| 五月五月婷婷| 色狠狠五月天| 丁香五月激情啪啪| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 欧美超级视频97| 丁香五月天激情小说| 香蕉综合在线| 久久婷婷六月综合国际| 欧美丁香婷婷天天操| 五月天综合久久| 激情内射人妻1区2区3区| 91大神操美女| 五月天亭亭俺也| 性生生活大片又黄又| 日韩婷婷| 超碰99热精品| 爱iii做iiii日日| 五月天快乐开心激情网| www.久久爱.com| 一区二区无码视频| 丁香久久AV| 亚洲六月色| 丁香五婷婷| 婷婷五月天电影区小说区| 国产精品VIDEOSSEX久久发布| 日本超碰在线| 人人操av| 日本nghangse中文字幕| 国产探花AV在线| 婷婷欧美| 色婷婷香蕉丁丁网| 六月丁香好婷婷| 久久精品99国产精品日本| a在线观看| 国产在线黄色| 丁香久久久| 五月婷天天搞视频| 婷婷五月丁香亚洲| 婷婷六月激情丁香| 色狠狠色噜噜AV天堂五区| 六月丁香花婷婷| 六月激情婷婷| 97日本在线| 国产综合视频婷婷| 五月婷婷草| 五月婷婷亚洲色图| 99热综合| 亚洲深喉AV| 潘金莲AAAAAAAAAA| 色色色色色日韩午夜激情 | 亞洲自怕| 97人妻碰碰碰碰碰久久久久久| 4399伦理午夜| 五月丁香精品| 婷婷五月播| 色9色| 99re最新地址| 996er热| 丁香六月婷婷开心| 九九热在线观看视频| 无码免费人妻A片AAA毛片西瓜| 丰满少妇乱A片无码| 亚洲精级| 天堂色色色| 99热亚州综合| 色色免费网站| 亚洲综合网激情小说| 狠色狠色综合久久| 五月婷婷视频| 亚洲1区| 激情婷婷色色| 久9无码视频| 丁香五月欧美成人| 狠狠色噜噜狠狠色噜噜噜999| 五月丁香亭亭| 六月婷婷视频| 欧美午夜乱妇午夜福利| 久久aaaa片一区二区| 3DAV亚洲香蕉久久 一区二区| 一起草性爱不卡视频| 日本欧特黄色刺激一区影视久精品无码| 五月丁香六月婷婷姐| 中文字幕av亚洲| 丁香色综合| 久久久人妻人伦| 免费看欧美成人A片无码| 日日激情网| 五月丁香六月婷婷激情四射| 91九色视频在线观看| 日本老女人黄页在线播放| 操操啪| 婷婷五月天美女| 三年高清大片免费观看国语| 婷婷五月精品中文字幕| 亚洲色99综合天堂| 久久小视频| 五月丁香久| 99九九精品| 99亚洲色| …亚洲黄色在线播放日韩、av中文a…| 狠狠色丁香| 欧美性爱特黄一级aaaassss| 婷婷五月色花丁香社区| 色五月婷婷五月天激情综合| 久久婷婷色色| 欧美丰满熟妇BBB久久久| 深爱激情69热| 婷婷五月亚洲综合| 日韩丰满少妇无码内射| 六月色播| 丁香五月婷婷六月婷婷| 成人免费超碰| 粉嫩av蜜桃av蜜臀av| 丁香五月天天日| 五月丁香综合久久夜夜| 99热都是精品| 99国产小视频| 丁香六月啪| 国产午夜精品一区二区三区四区| 国产成人亚洲综合A∨婷婷| ′久久99一| 九九热在线99| 久久九久久| 久久丁香五月| 久久综合五月天激情小说网站| 女人被男人吃奶到高潮| 99成人精品六| www久久艹| 性按摩玩人妻HD中文字幕| 丁香五月欧美| 国产亚洲99久久精品| 欧美日韩精品一区二区三区钱| 激情五月丁香婷婷| 九九热只有精品| 亚洲精品乱码久久久久99| 免费成人中文字幕| 九九色逼| 99在线免费观看| 思思综合热| 日本91在线| 激情婷婷五月社区| 五月丁香网站| 99九九综合久久九九| 天天操,天天插| 97色色婷婷五月天| 91人人人人人人人| 久久综合五月天| 五月丁香五月婷婷| 操你av| 久久九九怡红院| 久久婷婷亚洲无码一起| 无码免费人妻A片AAA毛片西瓜| 九九久久99| 色99色| 狠狠色 综合色区| 五月丁色AV| 免费啪啪亚州视频| 成片免费观看大全| 99精品视频免费观看近期发布| 亚洲六月色| EEUSS鲁片一区二区三区| 五月天激情美女久久| 亚洲婷婷月丁香五月| 亚洲激情综合网| 日本三级网址| 黄色短视频在线观看| 97精品人人A片免费看| 婷婷天天日婷婷| 99这里都是精品6| 五月婷六月丁香| 五月丁香拍拍激情综合| 深夜男女福利刺激影院一区完整| 五月婷婷婷综合网| 色色婷婷婷丁香五月天| 久久大大香| 中文字幕无码AV| 依人大香蕉| 五月天六月色| 日日爽日日| 日韩欧美一级大黄网站| 国产色网站| 天天天日天天天干| 丁香色情五月综合网站| 五月丁香天堂网婷婷| 美妞av| 久草久青福利| 91丨熟女丨首页| 丁香五月婷婷激情小说| 丁香六月激| 这里只有精品视频222| 婷婷九月激情| 91碰碰碰| 日本精品在线噜噜噜| 丁香五月婷婷基地| 亚洲色人妻| 99热这里有精品首页10| 久久新地此| 久久激情四射| 久久香视频| 婷婷激情四射五月天| 亚州婷婷五月激情综合| 4399伦理午夜| 久久狠狠干| 欧美 日韩 成人在线| 99在线观看| 伊人婷婷青青cao| 操碰97| 秋霞学生妹一二级| 天天综合插插| 久久机热这里只有 | 狠狠va| 色婷綜合网| 99精品在线下载| 激情综合激情五月| 天天开心AV色综合婷婷五月天| 五月丁香亭亭天天舔| 涩五月丁香| 婷婷色狠狠| 精品久久人妻| 深爱激情综合| 国产免费AV在线| 五月花免费视频| 婷婷五月在线观看| 一本道在线电影| 亚洲超碰青涩| 极品嫩草| 91嫩草久久| 99黄色性生活| 色婷丨日丨天丨综合久久| 丁香九月婷婷色| 日本va欧美va欧美精品88| 久月婷婷| 色999亚洲人成色| 国产婷伊人| 99热天堂| 婷婷五月亚洲激情| 激情五月婷婷伊人| 亚洲久久激情| 成人网站在线观看视频| 婷婷中文字幕| 激情淫乱男女| 天天色天天射天天日| 亚洲精99| 天天爱天天做天天| 六月丁香婷| 成人做爰黄A片免费看直播室男男| 五月色丁香婷婷综合| 99九九玖玖| 99re在线观看视频| 五月婷婷丁香婷婷| 99在线小视频| 九月婷婷在线视频| 狠狠爱激情网| 丁香五月婷婷丫| 欧美97p| 91超碰人人操| 爆乳熟妇一区二区三区四区| 久9热视频| 激情五月激情综合网一级丸片| 俺也高清无码高清视频| 狠狠综合| av首页在线| 国产免费AV在线| 日本激情五月天‘| www.91操| 久热伊人91| 99视频内射三四| 婷婷五月天综合中文| 99在线资源| 成人.在线日韩| 丁香狠狠色婷婷| 久久99久久99精品免观看软件 | 亚洲精品99| 精品皮股午夜AV| 色综合婷婷| 黄色av高清| 婷婷五月丁香五月丁香| 色色色综合色| 色婷婷99| 97在线刺激| 99色一| 思思热在线视频精品| 九九九九操逼| 亚洲、欧美、国产另类笫二区| WWW.99热| 五月婷婷丁香六月| 久久天堂婷婷五月| 色色色色色色97| 五月婷婷综合网| 秋霞少妇毛片| 久久99热 这里有精品| 538任你爽| 99re资源在线视频导航| 日木狠狠干| 天天日夜夜爽| 1024成人免费看| 成人超碰AV| 色深爱五月| 黄色热99| 可以免费观看的av网址| 玖玖爱资源站| 五月婷综合| 激情综合婷婷| 国产精品成人在线| 六月婷婷久久| 激情婷婷综合五月少妇| 丁香五月偷拍| 丁香五月欧美激情| 操逼巨乳91| 狠狠色婷婷综合开心影视| 玖玖在线视频| 色色色国产| 激情久久网| 79色色| 激情综合视频| 色97综合婷婷天天色| 五月丁香婷婷基地| 思思热热久久| 亚洲成色综合网站免费观看| 婷婷激情在线| 综合 蜜月 婷婷| 西瓜美女a片| 成人精品在线观看| 秋霞免费三级片| 亚洲av成人在线| 日本99婷婷| 亚洲 六月 综合| 午夜天堂一区人妻| 天天色伊人| 狠狠爱综合| 久久婷综合网| 婷婷五月婷婷| 国内久久亭亭| 97碰人人操| 日韩高清久久| 欧美精品熟女一区二区| 婷婷热色| 五月天婷婷丁香六月| 日韩成人无码片| 婷婷丁香五月综合激情小说| 欧洲第一无人区观看| 色婷婷国色天香综合| 久99热| 亚州激情在线视频| 激情综合五| 久久久99视频| 亚洲激情五月天| 99热最新精品| 精品亚洲国产成AV人片传媒| 亚洲色色爱| 婷婷色色综合| 狠狠草综合网| 玖玖婷婷五月天毛片| 综合激情五月天六月婷免费视频| 婷婷五月天成人视频| 妻久久人久久| 久久视频婷婷| 涩五月婷婷| 九九精品99| 成人va在线播放| 丁香开心深爱| 蜜臀久久99精品久久久久久酒店| 婷婷丁香综合| 精品一区二区三区三区| 99热成人| 日本三级大片| 嫩草AV久久伊人妇女超级A| 深爱五月天 开心网| 婷婷五月综合中文字幕| 五月丁香亭亭| 九色自拍| 久草天堂| 激情五月综合免费| 五月激香蕉网| 天天日天天插| 亚洲操操| 婷婷综合仓库中文| 久久人妻久久| 五月色婷| 最近中文字幕2019视频1| 人妻肉射免费观看| 99热99日天天干| 91九色欧美| 激情精品久久| 婷婷六月香| 婷婷精品在线| 色欲婷婷夜夜| 五月深情久久| 免费黄色片子| 亚洲综合五月天综合| 伊人超碰在线| 五月婷婷婷丁香播| 激情四射五月天偷偷看婷婷| 色狠狠色噜噜AV天堂五区| 久久这里只有精品8| 国产免费AV网站| 97人碰人操| 999激情视频| 丁香激情六月天婷婷| 成人色图情色成人网 www.5b5b5bcom 五月天 | 91碰在线| 日本在线噜噜| 六月婷婷香蕉|