99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜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)著色器”和“片元著色器”卻對(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
返回資訊列表
99久精品视频| 激情综合区| 激情久久久久久久久久久| 激情五月天色色| 婷婷丁香五月亚洲免费| 婷婷在线五月天观看| 99色视| 激情网五月天| 色吧五月婷婷| 色欲影香| 超碰猛烈的性猛交| 国内外色色色色色成人视频| 欧美综合激情五月天| 久久精品4| 久久涩视频| www.minyis.com【JT】实力收量可预付QQ2101460746 | 操97| 偷拍91九色| 九九热青草| 久久婷婷亚洲| 99综合久久| 亚洲精品激情| 999热在线视频| 婷婷五月天影视网址| av国产精品偷| 亚洲综合视频网| 玖玖九九9999在线观看视频精品| www.韩日视频| 中文字幕欧美精品久久| 精品自拍99| 婷婷综合激情| 香蕉久久国产AV一区二区| 久色网址| 九九视频在线| 精品人妻伦九区久久AAA片| 亚洲综合成人网| www.夜夜操.com| 丁香婷婷六月激情综合| 天天天添天天操| 深爱五月激情网| 亚洲综合久| 九九re精品视频在线观看| 欧美激情 日韩无码 婷婷 五月天| 中文字幕 中文字幕明步 | 欧美天天性| site:hcxsz888.com| 久久婷婷啪啪视频| 国产99热在线看| 五月婷婷在线短视频| 91超碰人人操| 综合激情网五月激情| 欧美婷婷丁香五月社区| 99综合色色色| 五月天久久成人| 操逼福利视频| 怡红院一二三| 久久综合干| 91九色视频| 欧美性爱五月天| 99re热在线视频| 色99在线| 成人AV在线中文版| 婷婷中文综合网| 五月停性愛| 婷婷九九色| 午夜福利成人AV91| 91Chinese在线| 精品久色| 色色哒五月婷婷六月丁香| 欧洲高清免费久久| 大香蕉久久婷婷| 色情五月天丁香社区| 五月丁香狠狠爱| 大香蕉综合| 99在线精品视频| 激情都市另类| 婷婷九月亚洲| 国产精品久久久丁香五月八戒视频| 99色 色| 在线1青婷| 99热官网| 国产69精品久久久久999小说| 九九九激情综合| 五月婷婷玖玖综合玖玖爱| 国产黄色大片| 欧美99热| 终合激情网| 99只有这里有精品在线视频| 伊人婷婷五月天| 爆乳熟妇一区二区三区四区| 男人天堂99| 六月色婷婷欧美| 五月丁香欧美在线| 五月天婷婷在线播放| 国产精品99久久久久久久女警 | 婷婷五月天少妇| 九九热精品6| 五月丁香六月激情| 婷婷五月天免费99| 色婷婷五月影视| 人妻久久久久久久久妻久久久久| 99在线视频资源| 狠狠狠狠狠| 在线成人va| 日亚二欧美| 婷婷丁香色五月天久久88| 欧美日本另类| 丁香五月影| 丁香婷婷色情| 婷婷五月天美女视频| 亚韩在线视频| 激情婷婷视频在线| 精品九九视频| www.99在线| 夫妻超碰在线| 99er6热在线观看精品6| 国产一级片| 91九色PORNY中文啦| 色婷| 婷婷月综合| 免费观看欧美成人AA片爱我多深| 久久激情视频99| 思思 热 99| 97婷婷色| 开心五月天私房婷婷| 婷婷五月六月丁香| 日韩丁香涩| 激情五月综合网最新| 人人舔天天| 国产激情综合五月久久| 九热精品| AV操逼网| 26.uuu丁香五月婷婷| 婷婷 激情 五月| av在线免费网站| 日本三级第一页| 性色人人爽| 激情五月天社区| 农村熟妇高潮精品A片| 黄色五月婷婷| 99毛片| 人操91在线| 丁香六月 人妻| 亚洲啪啪啪啪| 丁香五月自拍| 91久久婷婷| 久婷婷五月天影院| 91视频五月丁香| 老司机视频lsj爱就色| 四月婷婷五月色综合| 色五月播五月| 一区三区视频有限公司| 美国十月色婷婷在线观看| 婷婷影院A成人| 再次出发二| 夜夜骑夜夜撸| tingtingjiqingwuyue| 激情四射五月天| 26uuu偷拍亚洲欧洲综合| 五月丁香六月婷婷视频| www.久操| 激情图片婷婷| 99精品国产在热久久| 激情六月婷婷| 人人操91| 久久婷色| 26uuu亚洲欧美| 日本精品人妻无码77777| 亚洲色情免费网| 激情小说视频图片| 色婷婷丁香五月天在线视频 | 天天综合社区| 伊人狠狠色婷婷综合丁香一区| 丁香五月天天高清在线| 二级黄色毛片| 亚洲精品婷婷| sewuyue第四色| 中文字幕人妻熟女在线| 操丝袜视频影院导航| 天天狠狠综合精区| 五月婷婷丁香五月 | 色婷婷狠狠18禁| 国产激情综合五月久久| 狠狠色丁香99| 超碰在线资源| 9久久精品| 99热9| 99热这里是精品| 欧美激情五月天婷婷| 大香蕉九九| 五月青青草综合| 天天躁日日躁狠狠躁日日躁2022年5月9日| 思思精品热在线| 亚洲AVwwwwwww| 久热99热| 婷婷六月丁香色| www.超碰97| 色吧五月婷婷| 亭亭色色五月天| 日本三级日本三级99| 密臀久久| 日本人人干| 五月丁香啪啪综合| 婷婷五月天资源| 超碰在线中文字幕| 国产亚洲精品久久久久久郑州| 狠狠干青青草| 日本三级中文字幕| 色色色五月天婷婷| 99色视频| 天堂草在线看www| 天堂色婷婷| 婷婷五月综合激情| 噜噜狠狠色| 九九色热| 色婷婷另类| 日韩一级片| 丁香五月成人论坛| 手机旧版看人妻1025| 丁香五月电影| 五月天综合久久| 99热久| 五月停性愛| 性热视频99精品| 五月婷婷丁香深深爱| 婷婷综合在线网| 久草天堂| 狠狠操狠狠操| 思思热热久久| 思思热久久阴99| 色都都狠狠色都都色综合色| 五月丁香婷婷色| 久久视频在线| 丁香色啪综合| 六月丁香婷婷五月天| 色吧网综合| 99色婷婷| 99这里有精品| 色色色色色色综合| 九九热这里有精品23| 色婷婷四色| 人人操av| 精品色| 天天天久久人人人合| 久久人妻久久久久| 日韩 中文 欧美| 丁香五月天啪啪| 久月丁香爱婷婷综合| 色色色色综合网| 九九热视频免费| 毛片网站谁有| 激情黄色小说色五月| 大香蕉220| 在线播放中文字幕| 久久9久| 国产精品香蕉| 欧美综合激情五月天| 丁香五月精品视频| 久久99精品九九久久久婷婷| 日韩精品999| 久久婷婷网址| 91在线视频观看午夜福利| 性爱视频久久| 色婷婷五月综合| 色99色| 五月天激情子轮| 性色播| 久久99网址| 丁香社92视频| 91久久日日| av大香蕉| 国精产品一区一区三区免费视频 | 五月天综合在线| 五月天婷婷綜合院| 香蕉婷婷色五月| 激情五月天婷婷丁香 | 1024操逼视频| 婷婷色在线视频| 久久九九热视频| 婷婷射婷婷舔| 狠狠干综合网| 丁香五月手机在线| 丁香五月天.com| 日日干日日| www.99视频| 久久久精品人妻录| 激情综合网五月天| 久久人人九| 夜夜爽天天爽| 91黄操| 91大神操美女| 色五月av| 97精品人人A片免费看| 五月天精品| 99爱爱| 人人爱操| 99精品丁香五月| 99热热热99精品婷婷| 国产欧美精品AAAAAA片| 欧美婷婷丁香社区在线播放| 综合久久六月| 武则天精品久久| 久热综合| 免费色色色| 亚洲综合视频天天精品| 99热日本| 久久丁香综合| 99热在线观看免费精品| 黄色片久久| 五月丁香在线观看国产| 综合色网站| www.99在线| 婷婷五月综合婷婷| 天天透天天摸天天舔| 丁香婷婷六月在线资源观看| 99狠狠| 欧美成人A片AAA片在线播放| Blackedraw视频一区二区| 欧美日韩婷婷五月天| 综合久久综合五月天婷婷| 亚洲成人无码免费| 九九人人操| 综合激情五月丁香| 亚洲色频| 午夜色婷婷| 亚洲精品国产A久久久久久| www.第四色99| 亚洲av成人在线| 天天综合激情| 国产五月天欧美色| 六月丁香五月婷婷| 激情五月婷色| 婷婷基地成人五月天| 秋霞簧片| 综合视频久久| 碰99在线| 色婷婷五月天中文字幕| 九九精品在线观看视频6| 色爽九九| 久久免费少妇高潮99精品| www91精品| 五月天免费色| 激情五月婷| 99国产精品久久久久久久久久久| 日本免费91| 五月激情六月| WWW99热| 天天综合精品| 九色91国产| 丁香五月瑟瑟| 9久久精品| 色综啪啪网| AV无码免费| 五月婷婷在线网站| 久热婷婷| ...婷婷五月综合不卡,国产在线手机 | 人人操人人添人人摸97| 琪琪理论片| 婷婷五月天免费视频| 天天激情站| 青青草原爱爱网| 色一区高清| 婷婷六月激情| 操逼电影免费看| 秋霞性爱AV| 日日夜夜爽| 五月丁香婷婷欧美| 狠狠爱婷婷| 婷婷五月丁香伊人网| 婷婷97碰碰| 欧美日韩成人h| 性色欲情 网站| 99无码黄色视频| 狠狠综合| 中文网AV| 狠狠爱综合网| 色伊人啪| 激情久久丁香| 婷婷综合干| 五月丁香天天| 九月婷婷综合| 五月婷婷综合网| 五月婷婷婷丁香播| 色色色色色五月| 五月天婷婷丁香视频| 91一起操| 9热视频在线观看| 色色色色色色色色综合网| 国产精品久久久久久久久久| 九九免费精品在线视频| 99这里有精品视频| 色婷婷婷av| 99久在线观看| 99色中文| 影音先锋色婷婷| 啪啪操操| 99资源在线视频| 9999热在线观看| 蜜桃五月天| 午夜不卡久久精品无码免费| 五月丁香婷婷婷婷综合网| 色播五月网| 婷婷色九月| 国精产品一区一区三区有限公司杨 | 久久九九国产| 亚洲六月色婷婷| 啪啪操超碰| 五月性色| 97久人人| 五月婷婷基地| VA日本视频| 久久激情视频| 丁香五月综合图片在线观看| 成人亚洲精品久久久久| 99成人无码| 黄色热99| 亚洲狠狠干| 操婷婷基地| 丁香婷婷社区| 日日干天天射| 色五月大香蕉| 精品51XX| 97婷婷狠狠久久综合9色| 欧美日韩成人在线网| 五月天婷婷社区久久综合| 91婷婷色| 色五月xxx| 成人做爰A片免费看视频| 天天噜天天爱| 亚洲黄色操逼| AV成人在线播放| 丁香五月综合| 97亚洲视频在线| 丁香婷婷六月激情综合| 激情碰碰碰| 国产精品久久久海的味道| 久久大香蕉同僚| 九九99免费理论| 综合天天综合| 五月激情丁香啪啪| 在线视频99| 五月色综合网欧美网| 99在线精品视频| 日韩欧美骚货| 热久国产| 四季8848精品成人免费网站| 丁香五月天啪啪| 午夜成人AV在线| 我爱大香蕉| 亚洲激情五月丁香久久久久| 91人人操人人爱| 99久久9| 99久久综合精品五月天| 97色婷婷在线观看| 中文字幕按摩做爰| 婷婷综合五月天| 天天操夜夜爽天天操| 农村熟妇高潮精品A片| 五月丁香六月婷婷久久| 五月天日日操夜夜操| 九月婷婷在线视频| 99热这里只有精品22| 伦99热| 超碰99资源站| 一本道在线电影| 日本熟女二区| 噜噜综合网| 激情综合婷婷久久| 免费无码毛片一区二区A片| 婷婷噜噜| 99热欧| 婷婷七月丁香色色| www.金莲av| 一区视频网站| 色六月视频| 九九99免费视频| 色婷青青| 丁香五月天激情综合| 中文字幕乱轮| 五月天欧美 另类小说| 97精品自拍视频| 欧美日韩精品人妻狠狠躁免费视频| 色噜噜狠噜噜视频| 激情五月丁香在线观看直播| 超碰在线人人| 激情性爱网站| 91狼友视频网页更新| 丁香六月色婷婷| 六月丁香VA| 性 色 婷婷| 久热91精品| 色婷丁香91| 五月天com| 五月天激情婷婷| 六月色色婷婷| 秋霞午夜理论| 免费黄色视频网址| 啪啪婷婷五月天激情| 狠狠色婷婷综合开心影视| 深爱五月天| 色婷婷伊人| 亚洲综合丁香五月天| 26uuu国产色| 婷婷激情九月| 色情婷婷。| 婷婷综合在线网| 熟妇无码乱子成人精品| 天天玩夜夜操| 99热综合| 五月天另类视频| 丁香五月av| 亚洲欧美一区二区三区四区爱爱动图| 只有久久精品免费| 九九久久99| 天天日狠狠| 婷婷五月色播网| 国产亚洲网站在线| 国产1区2区| 热99.com婷婷| 免费播放AV| 久久婷婷超碰| 婷婷视频在线| 91fuliwang| 九月丁香网婷婷| 色www久视频| 国产美女无遮挡裸体毛片A片| 色婷婷久久| 天天艹夜夜艹| av在线资源| 97人人射| 亚洲国产精品VA在线看黑人| 全部老头和老太XXXXX| 极品人妻VIDEOSSS人妻| 九九黄色网| 婷婷操逼| 三年高清大片免费观看国语| 无码视频国内精品久久久| 河北真实伦对白精彩脏话| 久九男女天堂| 99碰碰碰| 九九av在线| 超级碰碰碰97免费| 九九色影视| 狠狠色色| 精品无码人妻一区| 狠狠干 狠狠操| 久99热| 99热网站| 四虎成人精品永久免费AV九九| 国产白丝在线一区| 色色亚洲视频| 艹B高清无码| 91五月花丁香| 婷婷五月中文字幕| 香蕉久久国产AV一区二区| 色婷婷婷av| 99热久久最新地址| 99成人免费热视频| 九九热精品视频在线观看| 日本色天堂| 色狠狠色| 九九综合网| 玖玖婷婷精品| 五月丁香怕啪啪| 色色色欧美色色| 99热这里只有精品免费观看| 91人妻PORNY九色大屁股| www.99热| 39视频第二区| 色综合夜夜| 激情五月视频| 色热久| 五月婷婷丁香| 人妻中文字幕网| 五月激情视频| 日日操,夜夜爽| 丁香久久五月婷综合| 六月丁香五月婷婷| 九九九九中文字幕| 伊人网欧美在线男人天堂五月丁香 | 殴美综合激情五月天免费视频| 九九综合九九| 久久久久9久无码视频| 91精品无码久久久久久五月天| 丁香五月激情婷婷视频| 五月丁香六月婷婷综合网缴情| 五月婷婷六月激情| 日本人妻伦在线中文字幕| 一级无码作爱片| 快乐激情五月色婷婷| 就爱射中文字幕资源网| 五月婷婷性爱| 国产在线网址1| 亚洲综合色色| 天天日,天天射,天天舔| 六月激情网| 五月丁香花激情啪啪网| 婷婷丁香77777| 99无码精品| 国产精产国品一二三在观看| 操人久久| 久久这里有精品视频在线免费观看| 玖玖爱综合网| 超碰成人在线免费观看| 99在线观看免费精品视频| 天天插天天爽| 色综合激情图区| 啪啪一区| 夜夜久久综合网| 免费在线观看AV网站| 超碰成人电影| 五月婷婷色播| 日本偷拍九九九| 九九sese| 久久久18| 黑人无码一区| 色色色图| 色综合99无码 | 亚洲国产色色| 色五月激情五月| 大香蕉五月天婷婷| 干一干xxxx| 99操网站| 色久综合天天做视频| 九九99久久| 色欲丁香| 999婷婷综合| 九色porny在线观看激情四射| 中文字幕丁香五月| 激情五月综合网| 激情综合婷婷| 91久久综合亚洲鲁鲁五月天| 婷婷五月天精品| 99热亚洲精品| 人人操人| 丁香六月婷婷激情| 99热九九九九| 丁香婷婷五月基地| 丁香五月婷婷国产av| 五月婷婷开心激情六月蜜桃| 99热这里只有精品9| 91九色国产| 丁香激情五月| 人人九色| 亚洲午夜视频| 六月婷婷激情| 激情五月六月婷婷| 欧美极品999| 99久久婷婷国产综合精品草原| 婷婷99丁香| 天天爽天天日天天舔| 久久五月婷天天干| 亚洲国产色色| 久久久精品99| 天天插天天日| 亚洲成人无码网站| 欧美色久| 亚洲色情久久| 人人操av| 森林影视大全,最好看的2019年视频 | WWW.17C亚洲精品| 丁香五月婷婷天堂大香蕉| 成年人最刺激的综合网| 色五月婷婷自拍| 五月丁香婷婷婷激情爱爱| 97操碰人人| 久色| jiqingtaose五月天| 亚洲国产99| 五月婷婷偷| 婷婷五月天激情网| WWW.99热| 成人色图情色成人网 www.5b5b5bcom 五月天| 丁香五月六月综合激情| 欧美性猛交99久久久99| 激情五月丁香五月| 亚洲色婷婷99一9|| 婷婷五月丁香性爱| 久久婷五月综合| 综合激情在线视频| 五月婷婷无码| 五月婷导航| 熟女啪啪视频| 久久久久人妻网址| 国产26uuu视频| 九九九AAA热视频| 狠狠色大香蕉| 久久机热这里只有精品免费视频| 666555。COm毛片| 日本色视| 五月六月丁香激情视频| 婷婷五月丁香基| 99热首页| 激情综合五月激情XXXX| 色婷婷丁香AV综合| 久操热线| 好激情在线综合网| 久久色五月| 五月色综合| 五月丁香久久丝袜啪啪| 激情丁香九九五月综合网| 婷婷综合五月| 天天干天天干天天干天天干天天干| 九九操操| 五月刺激丁香月综合| 久久9精品视频| 成人色五月天| 色9月| 午夜少妇在线观看视频| 色色色热| 天天日狠狠| 亚洲有码在线视频| 久久精品99国产精品日本| www天天色天天射| www,8050,午夜三级| 五月丁香亭亭A片| 另类天堂| 日本色视| 亚洲mm色| 99久久婷婷国产综合| 97午夜一区二区| 免费黄色视频网址| 五月天网站亭亭| 六月丁香啪| 久久一级片| 香蕉97碰碰碰欧美| 91丨九色丨东北熟女| 成年人看Va免费视频| 五月激情丁香五月| 丁香五月婷婷欧美激情-中文天堂最新版在线观看 | 五月天激情影院| 五月丁香激情综合网官网| 日本天天操| 天天爽天天| 久色中文| 日日噜狠狠色综| 99啪啪网| 婷婷五月超碰| 91人久| 六月 丁香 视频| 六月婷婷综合| 99re热免费观看视频精品| 六月五月丁香五月欧美| 色综合中文色综合网| 大鸡巴伊人网| 99燥99日| 国外亚洲成AV人片在线观看| 99热这里是精品| 五月天激情综合| 日日日天天干| 99精品7| 久久AAAA片一区二区| 色噜噜夜夜夜综合网| 一区二区乱视频码| 九九99精品视品| 亚洲电影在线观看| 免费无码毛片一区二区A片| 九九99在线免费在线观看视频| www.婷婷五月天| www.国产色| 色五月婷婷激情| 99久久久国产精品免费蜜乳tv| www.夜夜夜| 99久久99热| www.激情五月天。com| 久久婷婷亚洲| 综合色图区| 99re免费精品视频| 色综合色五月| 久99久在线| 亚洲成人影视在线观看| 亚洲午夜视频| 日韩欧美一级大黄网站| 日韩精品超碰在线观看| 欧美性猛交99久久久99| 肏屄色播伊人97婷婷| 欧美日韩国产日本精品四虎网网站物 | 丁香五月欧美| 色婷婷偷拍| 精品成人在线观看| 久99久在线| 操碰99| 大香蕉久久| 成年人丁香五月| 婷婷色六月| 婷婷综合网站| 亚洲综合五月天| 五月四色婷婷| 五月天激情小说婷婷基地| 久久996re热这里只有精品无码| 激情精品久久| 成人狠狠成人狠狠成人狠狠成人狠狠| 99热大片| 综合久久人妻| 99人妻碰碰碰久久久久视| 五月天丁香成人社| 色噜噜狠狠色综合日日| 国产激情综合五月久久| 欧美怡红院黄站| 日日操无码| 91视频五月丁香| 婷婷激情综合| 五月情四婷婷| 色五月丁香六月婷婷| 亚洲成人五月| 亚洲色综合| 天天操天天插| 天天日P天天射P| 夜夜躁婷婷AV| 天天拍夜夜撸| 五月丁香婷婷俺| 人人爱摸视频| 色噜噜狠狠色综合日日| 激情五月丁香五月色| 久久五月天免费网站| 97人人操人人| 人妻五月天激情开心网| 久久黄色片| 婷婷操逼| 九月丁香八月婷婷加勒比| 91热久| 337p大胆噜噜噜噜噜91Av| 五月婷婷久久激情| 六月色播| 99热6这里只有精品| 1024操逼| AV无码免费| 开心婷婷五月天电影院| 婷香五月激情视频| www.婷婷五月| 成人网在线观看视频| 人人操操| 五月熟妇婷婷久久| 天天日天天摸| 日本久久99| 婷婷久久在线| 天天摸天天爽| 神马欧美精| 日本不卡高字幕在线2019| 色青五月天| 2050人人操免费工开爱| 婷婷狠狠干| 婷婷五月天色| 五月丁香婷婷综合视频| 久久九九99字幕| 婷婷五月电影| 九九精品9| 久久婷五月天| 99色网站| 91丁香综合| 九九碰九九爱97超| 色播激情五月天| 久久久中文| 超碰在线综合| 啪啪激情网站| 在线观看中文字幕| 色色影院黄大片| 天天噪夜夜爽| a网站免费观看| www狠狠爱com| 日韩成人五月天| 91色在线/日韩| 丁香五月天社区婷婷| ,99视频久久| 久久9精品视频| 韩国97天堂| 狠狠色丁婷婷日日,伊人激情综合网 | 天天搡日日搡aaaaⅩ| 五月成人天| 97热91| 久久婷婷六月天| 色呦呦美女| 一本九九色| 久香草视频在线观看| 天天插天天插| 日本精品99网站| 五月丁香六月玩女人| 91re色综合视频| 亚洲综合激| 丁香五月影院| 大香蕉五月天婷婷丁香91| 亚洲色模骚货| 九九九激情网| 丁香五月深爱五月婷婷| 五月婷婷丁香五月| 婷婷性爱影院| 97精品自拍| 怡春院久操| 人人干av| 天天操精品| 久久九九视频| 天天久久婷婷| 五月婷婷自拍视频| 91麻豆国产三级精品福利在线观看| 蜘蛛女免费观看完整版高清电影| www.婷婷五月| 九九热这里只有精品5| 亚洲天堂爱爱| 五月丁香六月综合基地| 91免费看片| 综合五月丁香六月婷婷| 婷婷六月啪啪| 一区二区三区四区牛| 天天碰夜夜爽| 久久99免费视频| 色五狠狠| 九九热青青草| 美女五月狠狠| 亚洲午夜一区二区| 激情av在线| 欧美日本黄色| 在线99热| 婷婷色在线| 另类天堂| 天天舔天天插天天爱| 婷婷五月天网| 五月婷婷综合激情| 国产真实乱对白精彩| 色婷婷影音| 五月婷护士| 五月天综合在线观看| 激情丁香五月AV| 另类 在线| 九九九九毛片| 99人人干| 99热这里只有精品33| 久久久久9久无码视频| 激情五婷网| 色播五月综合网| 97操视频| 亚洲 综合中文| 欧美性做爰大片免费看办公室 | 五月丁香激情在线| 99人人干人人操| 丁香美女五月天婷婷| 综合久久97| 人妻中文在线| 丁香五月天激情小说| 久久久久久久,99精品视频| 婷婷丁香十月| 97干欧美| 9l视频自拍9l九色成人| 99精品爱| 国产综合81p| 人妻啪啪啪| 精品99网站| 丁香久久九九99| 久久激情视频| 五月丁香婷婷激情久久| 六月色 亚洲| 影音先锋噜一噜| 色婷婷婷婷成人网| 丁香五月天社区婷婷| 久婷婷婷| 丁香亚洲婷婷五月| 久久精品天| www.婷婷五月天.com| 狠狠狠五月婷婷六月丁香| 激情五月婷婷啪啪| 夜夜骑夜夜撸| 丁香婷婷六月在线资源观看| 91久久综合| 熟妇人妻中文字幕无码老熟妇 | 99ri在线观看视频| 日日婷婷不卡| 99久久99视频| 色五月激情五月| 天天草天天爽| 欧美成人无码一区二区三区| 亚洲啪| 九九婷婷网五月天| 99热这里只有精品最新网址| 成人丁香五月| 五月丁香激情综合网官网| 久热伊人| 99色色色色| 99rewww| 色婷婷文字幕| 五月天偷拍| 激情五月久久| 青青草蜜臀| 91九色熟女| 99热国产在线| 五月婷婷影| 五月婷婷综合在线视频小说| 99er这里只有精品视频| 操操熟女| 国产肥白大熟妇BBBB视频| 啪啪 综合网| 99热这里只有精品2024| 久操婷婷| 男人天堂AV在线一区二区| 99精彩视频| 五月婷婷六月丁香五月| 天天综合亚洲综合| 大香蕉久久| 婷婷成人在线| 九九99久久精品| 91人妻PORNY九色大屁股| 亚洲狠狠干| 五月天色婷婷小说| 91丨九色丨东北熟女| www.com任你艹| 日本久久激情| 操碰97| 久热大香蕉| 人人操五月天| 人人视频色| 综合综合色色| 九色PORNY自拍成人精彩视频| 97se在线视频| 日本人人超碰| 五月天婷婷色色| 99久久久久| 美欧成人视频| 天天干狠狠| 丁香五月综合亚洲| 五月天婷婷激情干干| 伊人婷婷青青cao| 99精品人人| aaa9区免费在线观看| 亚洲午夜国产成人电影VA国产欧…| 五月天成人综合| 婷婷色五月天在线| 伊人婷婷大香蕉| 九九在线精点品| 婷婷五月激情视频| 激情色情五月天| 五月婷婷m| 久久与婷婷| 免费的日逼视频| 精a品a视a频| 丁香六月开心| 婷婷综合网| 亚洲中文字幕av| 色六月婷婷| 五月丁香婷婷色色色| 一起草无码| 国产97色在线 | 日韩| 99热色婷婷| 成人网页在线观看| 狠狠色噜噜色狠狠狠综合色 | 黄色五月婷婷| 噜噜干日本| 婷香五月| 啪啪91| 97人人草| 快乐婷婷五月天| 丁香六月婷婷缴情欧美| www.99热日韩.com| 开心婷婷五月激情网小说 | 五月丁香啪啪网| 亚洲超碰在线| 九九在线精点品| 日日操天天操| 欧美日韩精品人妻狠狠躁免费视频| 国产欧美日韩综合精品一区二区| 国产熟妇的荡欲午夜视频| 96精品成人无码A片观看金桔 | jiujiu无码五区| 五月天色五月天| 丁香婷婷色五月合集| 五月激情网综合| 五月婷婷六月丁香综合在线| 婷婷五月激情天| 天天做天天爱天天爽| 91碰碰视频| 日日杆天天| 无码激情AAAAA片-区区| 在线中文AV| 青青久久91| 成人色图情色成人网 www.5b5b5bcom 五月天| 99精品超在线播放| 五月丁香福利| 久久久久久xxxxx| AⅤ色区| 夜丁香综合| 久久免费操| 五月婷婷六月色| www.色五月| 亚洲成人无码片| 欧美激情综合色综合啪啪五月| 99,色| 色色色.com| 五月婷婷中文字幕AV| 色播六月| 国产精品久久久久久久久久| 五月婷婷亚洲天堂97色婷婷| 五月婷婷黄| 激情五月天婷婷直播| 韩国婷婷丁香五月| 深爱综合网| 五月婷婷中文| 天天日中文| 天堂网啪啪| 色激情综合狠狠婷婷| 亚洲最大五月天成人网| 91.com男女操| 乱岳熟女50岁| 久久婷婷色综合老司机| 久久婷婷色| 色小说五月婷婷| 丁香 久久| 无码人妻丰满熟妇奶水区码| 热久久婷婷| 九九性视频| 五月综合激情视频| 久久久大香蕉| 国产亚洲精品久久久久久久久动漫| 六月丁香成人| 五月色亭丁香| 开心激情综合| 婷婷伊人綜合中文字幕| 亚洲殴洲精品Av在线| 色婷婷狠狠18禁| dingxiangtingtingliuyue| 色五月色五天色情网| AA片在线观看视频在线播放| 婷婷 伊人 久久| 先锋资源996| A在线观看| 在线成人va| 天堂A∨在线| 日本久久爱| 免费观看的av| www.激情com| 久久午夜理论| 玖玖综合色| 99精品丰满| 夜夜操夜夜爽| 国产精品国产| 色99综合色88| 色婷婷手机在线| 思思热视频| 无人区码一码二码三码医生系列| 婷婷丁香宗合888| 五月丁六月婷| 丁香五月婷婷基地| 九九99热| 五月婷婷激情综合视频| 婷婷五月在线观看| 97资源碰碰在线| 国产色五月| 五月婷婷六月色| 色婷婷a v| 丁香六月无码播放| 国产精产国品一二三在观看| 欧美日韩123| 99色亚洲| 亚洲网站观看视频| 伊人久久激情图区五月| 日韩 中文 欧美| 狠狠色丁香久久综合婷婷亚洲成人福利| WWW.五月天9999| 97中文在线| 青青草原伊人网| 婷婷五月情天| 秋霞少妇AV网站| 天天综合亚洲综合网天天αⅴ| www.色综合.com| 一起草aV| 五月天激情视频网站| 99色色网| 人人草成人视频| 99色天堂| 91色在线| AVDV久久| 丁香九月综合在线| 欧美精品熟女一区二区| 中文字幕乱码亚洲精品一区| 五月丁婷香| 九九色色| 五月丁香亭亭操逼| 在线视频99| 五月天另类图片区99| 色色性爱视频| AV网址大全在| 丁香五月激情综合啪啪| 4438亚洲欧美| 九九热区一区二区三区| 国产成人精品123区免费视频 | 狠狠干五月天| www.婷婷| 丁香六月色婷婷| 亚洲中文字幕av| 丁香五月婷婷啪啪啪| 99操免费视频| 国产精品色婷婷久久久精品| 欧美色碰| 五月丁香婷婷婷激情爱爱| 亚洲AV无码影院| 99这里只有精品| 久综合九| 五月婷婷色影院| 亚洲免费99| 狠狠香蕉| 亚洲综合字幕色色| 日日干日日| 色婷婷五月丁香在线观看| 五月婷婷六月激情| 五月天婷婷爱丁香中文字幕| 国产69精品久久久久999小说| 婷色成人| 综合色在线| 婷婷干五月综合在线播放| 丁香五月天社区婷婷| 国产成人精品一区二三区熟女在线| 五月丁香综合激情网| 无码啪啪| 五月丁香六月婷婷网| 色欲婷婷夜夜| 久久AAAA片一区二区| 啪啪激情网站| 人人操超碰| 色99在线观看| 人妻久久婷婷| 99热这里只有精品首页| 婷丁香五月天| 超91热| 久久久久久人妻久久久久久久久久人妻久久久| 五月婷天堂视频| 免费AV在线| 色愛综合网| http:色情日本com| 五月天激情啪啪| 天天色99| 丁香六月婷婷色XXXXX| 婷五月丁香| 色婷婷av综合网| 综合久久高清| 久久欧洲久久| 五月天丁香色色| 成人在线99| 成人av免费观看| 国精产品一区一区三区免费视频| 黄色笑话深爱激情网丁香五月婷婷啪啪啪啪啪| 久久九九婷婷| 婷婷天堂综合| 激情婷婷五月黑人| 久久久精品99| 五月婷婷在线免费观看| 五月丁香六月婷婷a v| 777久久久| 色九月婷婷| 久久婷婷婷婷伊人| 色欲婷婷五月天丁香| 欧美色频| 这里精品| 亚洲久热| 色九月综合| 大香蕉综合在线| 人妻肉射免费观看| 秋霞AV淫| 亚洲日本韩国| 五月天激情网图片| yazhou seshipin| 九九综合图片网| 色99视频| 99热这里只有精品3| 激情图片亚洲| 夜夜AVV| www五月| 色婷婷狠狠| 久久99最新| 五月丁香久久呀| 夜夜嗨一区二区三区直播内容 |