欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,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
返回資訊列表
色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 色综合久久中文| 在线观看av网站| 深爱五月激情五月| 婷婷丁香五月综合免费视频百花| 五月成人网天天| WWW.婷婷五月天.COM| 久久伊人大香蕉| 天天干天天干天天干天天干天天干| 99热精品在线| 六月撸婷婷| 少妇真实被内射视频三四区| 五月丁香六月婷婷网| 99热这里只是精品| 991国产精选视频在线播放下载| 97 A I色色| 婷婷五月伦理网站| 色婷婷在线视频综合| www.婷婷亚洲基地| 婷婷五月综合啪| 99视频在线观看地址| 成人短视频在线免费观看| 天天日人人| 97欧美在线| 人人插操| 丰满少妇乱A片无码| 超碰国产AV| 五月天合网| 色五月婷婷青娱乐| 婷婷综合另类| 亚洲欧洲小视频9| 五月丁香久久| 国产这里只有精品| www.丁香五月| 强壮的公次次弄得我高潮A片日本 | 8区视频在线| 色丁香婷婷| 丁香亭亭久久| eeuus五月婷| 五月天激情久久| 99在线播放| 日产精品一线二线三线芒果| 亚洲亚洲人成综合网络| 香蕉久久国产AV一区二区| 色色五月天丁香| 色综合色色色| 五月色综合| 婷婷五月天激情诱惑| 五月天色婷婷视频| 99亚洲欧洲| 99色这里| 亚州激情在线视频| 人人射av| 国产资源91在线| 操逼福利视频| 涩婷婷五月天| 五月丁香六月婷婷激情视频在线观看免费 | 99色在线观看| 色5月婷婷| 婷婷午夜天| 日韩狠狠色| 大香蕉网站,大香蕉综合| 六月色婷婷| 激情婷婷综合| 夜夜爽天操| 丁香婷停五月激情综合深爱| 香蕉AV777XXX色综合一区| 五月婷婷激情69| 5月丁香六月情| 婷婷丁香五月天狠狠| 97色伦另类图片小说视频| 五月天伊人av| 99久久免费精品| 久久久久人无码人妻| 就爱啪啪婷婷| 人人草开心五月天| 深爱激情六月天| 玖玖在线视频| 丰满少妇猛烈A片免费看观看| 久久人妻少妇嫩草AV| 99精品偷自拍| 亚洲综合另类| 第四色五月激情网| 99热在线精品观看| 狠狠色成人影片| 婷婷久久五月天| 国产激情在线| 五月天激情色色| 青青草国产亚洲精品久久| 婷婷五月色播天| 午夜微拍福利| 五月丁香激情综合| 激情婷婷亚洲五月| 亚洲人人操| 色爱亚洲| 九九九九九九九九九九九九九国产精品| 激情五月天婷婷| 国产在线激情视频| 91色噜噜狠狠狠狠色综合| 色色五月婷| 丁香激情五月综合网| 丁香五月天色| 夜夜撸夜夜骑| 欧美性生交XXXXX无码小说| www超碰com| 色综合色色色色| 欧美欧盟性爱网| 99爱免费在线视频| 在线日韩视频| 99热成人| 97综合在线| 99re欧美精品| 久久激情视频99| 五月色导航| 五月丁香免费看| 九九伊人网| 乱乱av| 日韩三及成人AV片| 色五月天成人在线| 九九伊人网| 日本91在线播放| 天天夜夜六月丁香五月婷婷老师| 国产伦理精品高清在线观看网站一区二区| www夜夜操wwwcon| 久久婷网| 视频一区二区在线| wuyuedingxiang99| 激情五月综合| 91chinese 在线| 狠狠爱婷婷| WWW五月天| 欧美日本黄色| 91精品啪| 色婷婷裸体色性在线| 九九Av| 9久热视频| 精品99这里有| 成年人最刺激的综合网| 四川女人毛多水多A片| av免费在线网站| 久久狠狠色| 91se在线视频| 91日日日| 色日本综合| 婷婷色情 | 色婷天天| 亚洲无码成人| 色色九九五月天| 丁香五月天欧美在线| 91超碰在线观看| 九一牛视频探花| 婷婷 久综合| www.夜夜| 97欧美在线| 99er6| 成人免费va| 国产精品色婷婷久久久精品| 综合狠久久| 看婷婷五月天网| 五月丁香成人视频| 综合激情在线观看| 噜噜狠狠色综无码久久合欧美| 精品久久久久成人码免费动漫| 九九色热| 综合网色| 丁香六月婷婷一区| 久久女婷| 色五月天天| AV电影在线播放| 亚洲婷婷丁香| 日韩一级片| www91精品| 色婷婷的五月天| 影音先锋五月天婷婷丁香在线观看| 日本va欧美va精品发布视频| 开心五月色婷婷综合开心网| 丁香五月婷婷成人色区| 欧美婷婷| 99福利视频| 激情久久久| 激情综合网五月在线播放| 婷婷五月天av| 99自拍视频在线观看| 伊人激情综合网| 超碰男人色| 婷婷六月色开 | 色插人人| 五月六月婷| 激情骚五月| 九九sese| 欧美日韩一区二区三区四区| 人人摸人人摸| 婷婷色九月| 99re免费精品视频| 激情婷婷内射| 黄网在线免费| 亚洲精品永久久久久久| 色色爽爽天天| 伊人五月天| 丁香六月av| 丰满少妇猛烈A片免费看观看| 天天橾日日橾夜夜橾17| 久久aaaaa| 日日杆天天| 伊人网啪啪| 超碰在线视屏| 五月色欧洲| 97操操网| 97干在线播放| 九九热九九热精品| 五月花激情网| 五月天激情小说网| 丁香五月激情五月开心五月| 超碰操网| 久久九九99视频| 另类激情五月在线视频欧美| 激情五月综合视频| 欧美久人人| 激情综合区| 婷婷丁香五月激情综合站_久久五月丁香激情综合_开心五月综合激情综合五月_婷 | 射满了还射免费在线观看 -午夜版全集-新视觉影院 | 色播播之激情五月婷婷| 国产在线网| 色五月色五天免费视频| 99热免费网站| 欧美三级视频下载| 亚洲视频一区| 五月婷六月| 噜一噜免费视频| 激情五月婷婷综合网| 这里只有精品久久| 五月婷婷 六月丁香| 少妇高潮呻吟A片免费看软件| 婷婷王月天影院| 亚洲人妻电影| 91919191919久久成人视频| 亚洲啪啪啪啪| 99热很操老逼| 色婷婷激情五月天| 婷婷五月综合丁香久久| 天天日夜夜操五月| 久久久久亚洲AV综合| 快乐激情五月色婷婷| 殴美日韩成人| 亚洲色图81p| 夜夜操夜夜姧| 性一交一乱一交A片久| 91ncom.色| 婷婷丁香五月婷婷| 久七香蕉| 九九热在线观看视频| 色啪久| 丁香五月天激情婷婷丁香六月| 99热这里都是精品| 在线观看996精品| av五月天婷婷丁香| 色婷婷亚洲综合av| 无人精品在线视频| 高清成人综合| 五月婷婷色播| 1024手机在线观看看片_日韩精品| 五月天另类小说| 丁香六月婷婷基地| 九一99| 2018夜夜草| 天天综合图片| 国产国产乱老熟女视频网站97| 五月丁香日本一抹本| 久9久9久9久9久9久9| 五月久久网| 26uuu成人网| 99热69| 日日日日操| 亚洲精品第一国产综合亚AV | 久xxxx| 婷婷五月综合亚洲| 人人干女人| 天天综合色| 五月天停停日日| 色五月婷婷在线| 狠狠爱婷婷色| 91超碰在线播放| 久久久久97| 天天影视色综合网| 伊人久久大香天蕉亚洲特级| 91色色色18| 最新久久网址| 99久久网站| 婷婷,五月天,丁香,第一| 无码操B| 激情深爱婷婷网| 一本道在线电影| 国熟女视频| www,婷婷,com| 久久丁香五月天| 熟美女麻豆| 国产成人高清| 日本的α片xxxwww| 99精品久久久久久| 久久婷婷五月天激情四射| 丁香伊人网| 五月叮香啪| 青青草蜜臀| 99资源在线| 午夜丁香婷婷| 秋霞三及片| 97色女人在线| 中文字幕永久在线| 婷婷激情五月色综合| 99热99草97| 在线中文亚洲| 五月花成人网| 丁香五月婷婷Av| www.久久| 深爱激情av| 国产黄色av| 五月婷亚洲精品AV天堂| 激情五月婷婷综合网| 日韩人妻AV在线| 丁香五月婷婷视频| 九热在线这里有精品6| 激情人妻蜜夜系列区| 五月婷婷色五月| 99狠狠色| 欧洲综合一区| 91狠狠综合网| 插插五月天| 97碰碰久久| 久操激情| 五月婷婷丁香在线视频| 五月丁香另类图片| 在线免费观看激情视频| 婷色五月| 九九热只有精品| 狠狠做五月| 婷婷色五月91啪啪| 激情五月婷婷网| 西瓜美女a片| 五月丁香激情怕怕| 欧在线一区| 久热这里只有精品6| 激情五月少妇| 伊人六月无码视频| 婷婷成人网五月天| 生活片五区| 婷婷日本在线| 青青久在线视频免费观看| 婷婷97碰碰| 99r这里| 六月五月丁香五月欧美| 天堂色婷婷| 国产首页在线| 老师的粉嫩小又紧水又多A片视频| 婷婷伊人综合中文字幕| 五月婷综合| 六月婷婷日| 午夜色婷婷| 人妻在线网站| 九九99九九精品视频| 欧美成人精品A片免费一区99| 亚洲婷婷久久综合| 国产色色视频| 激情www| 夜夜夜叫天天天做| 夜夜天天天天天干天天爽| 久热九九| 色玖玖综合网| 狠狠色97| 91凹凸在线| 六月丁香婷婷综合影院| 日本色超碰| 国内一级片| 伊人婷婷五月天| 五月丁香婷婷色色色| 99色亚洲| 天天做天天爱综合| 人妻久久久久久久久妻久久久久| 日韩狠狠色婷婷| 婷婷久久五月丁香| 九九人人自拍| 午夜丁香综合婷婷| 精品网站:999WWW| 激情五月丁香六月综合AVXXXX| 五月婷婷和六月| 淫视馆aV二区一区| 激情五月天久久丁香| 热五月婷婷| 久热AⅤ| 最新高清无码专区| 免费视频在线观看的网站| 久久久这里有精品| 婷婷天天色| 亚洲激情在线| 色偷偷五月天| 99re这里只有| 五月天大香蕉| 超碰只有精品在线| 亚洲婷婷性爱| www.99色在线| ww超碰在线| 日韩成人无码片| 日韩久久系列| 99热色综合| 色就色94欧美setu| 久久丁香九| 五月婷婷性爱视频| 99热在线资源| 99热大香蕉| 久久精品9| 激情四射网| 天天久久狠狠色综合| 91色综合网| 久久精品99久久| 七七久久婷婷| 丁香婷婷超碰 | 久9视频| 黄网免费看| 99热最新地址在线| 噜噜综合网| 色人五月婷婷| 婷婷激情五月天小说| 婷婷丁香五月亚洲综合网在线视频观看| 天天五月情| 丁香五月婷婷影院| 五月天丁香综合久久国产| 国产精品成人AV在线| 五月丁香精品| 五月丁香影院| 婷婷成人av| 99热 在线播放| 99re久热只有精品6在线直播.com| 久久看婷婷| 欧美噜噜噜草| 六月丁香婷婷开心综合基地| 夜夜躁爽日| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 婷婷五月丁香香蕉| 成人va在线观看视频| 精品视频99看在线视频| 99热这里只有精品18| 99久久网站| 五月天亭亭俺也| 开心 五月 综合| 久久视频九九视频| 婷婷久久综合| 青草青草视频2免费观看 | 五月婷婷之婷婷| 日韩欧美一级大黄网站| 第九色区av天堂| 午夜激情四射影院| 99热偷拍| 久色网五月| 国产激情综合五月久久| 五月丁香狠狠爱| 狠狠狠狠狠狠草| 久久综合首页| 欧美猛片| AA久久| 五月天激情综合网| 久9久成人精品视频| 天天综合激情| 五月天成人网在线观看| 婷婷色色五月天| 亚洲一区二区 成人网站戴套| 五月天婷婷香蕉狠狠超碰综合| 这里只有精品,日韩视频| 丁香婷婷视频一区二区| 成人丁香五月天| AⅤ网站在线看| 97色操| 日日干综合| 丁香婷婷六月男男| 男男野外做爰全过程69| 91vip在线观看| 五月婷庭丁香在线| 婷婷天堂综合| 婷婷五月娱乐在线| 5月丁香综合网| 亚洲无码99| 亚洲妇女熟BBW| 色九月欧美| 欧美成人网婷婷综合在线| 婷婷操超碰| 又大又粗九一在线| 婷五月天天| 色亚洲欧洲| 婷婷五月av| 国产亚洲成人综合| 开心五月深爱五月婷| 99色综合网| 91大操| Av性爱网| 久久婷五月婷| 久久婷婷的综合色丁香五月| 人妻久久久久久久久| 九九综合伊人| 五月天婷婷久草丁香| 五月激情婷婷色| 九九黄色网| 色色婷婷色色| 99色最新在线视频网站| 夫妇交换刺激做爰| 五月丁香六月激情综合网| 五月天开心婷婷激情网站| 色色亚洲| 色色99色色| 色色激情五月| 噜噜狠狠色综合久| 成人免费va| 欧美成人AAA片一区国产精品| 96丁香六月婷婷蜜桃综合久久| 色狠狠色噜噜AV天堂五区消防| 国产成人精品一区二三区熟女在线| 99这里有精品视频| 激情中文在线| 九九99热| 六月婷婷综合| 大香蕉七区| 婷婷五月色播放| 丁香五月婷婷色综合| 婷婷五月丁香五月丁香| 婷婷五月天综合网| 五月婷婷丁香成人网| www.91九色| 亚洲AV无码成人精品区电影网| 久久AV电影| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 猫咪伊人久久| 婷婷欧美激情| 色婷婷AV在线| 综合色网站| 婷婷五月丁香六月| 婷婷丁香五月天影院| 欧美成人性爱网| 五月婷婷黄网站大全| 六月丁香五月亭亭| 91精品久久久久久久久久| 美妞av| 天天做天天爱天天高潮| 最新午夜理论片| 99热| 日本www五月婷婷| 婷婷97狠狠成人网站| 97五月天婷婷午夜| av中文在线| www.激情五月天.com| 中文字幕日产A片在线看| 成人精品一区二区三区四区五区 | 欧美又粗又大一区二区在线观看| 中文字幕人妻熟女在线| 色天天综合色| 99超碰欧美| 亚洲激情.com| 婷婷va| 欧洲一区二区| 婷婷久久五月天丁香| 五月丁香六月激情综合| 我爱大香蕉| 成人 视频免费观看网站| www婷婷| 色色色99| 99久久思思| 亚洲中文AV| 第五色色色婷婷| 久久码久久无清| 五月欧美丁香在线观看| 九九综合| 九九免费视频| 夜夜www| 亚洲六月综合激情久久下卡| 噜噜国产| 五月天激情四射| 99久久99久久综合| 综合五月天婷婷色| 激情伊人网| 色婷网| 欧美激情五月天在线观看| AV片一区在线观看| 色婷婷亚洲婷婷在线观看| 激情人妻综合| 国产精品人人做人人爽人人添| 九九九成人在线视频| 久久日婷婷| 啪啪综合| 亚洲开心激情网| 国产九月婷婷| 91 九色 熟女| 秋霞影音91人妻久久| 99日视频在线| 亚洲另类电影| 九九久热| 全亚洲最大的婷婷五月天网站COM 丁香五月婷婷狠狠色 | AV片一区在线观看| a久久| 亚洲综合激| 欧美性爱专区| 亚洲操人| 激情五月天无人视频在线| 久热91精品| 九九在线视频| 五月婷婷成人| 激情五月综合色婷婷| 亚洲成人中文字幕| 欧美成人精品三区综合A片| 欧美色爱五月天| 深夜男女福利刺激影院一区完整| 婷婷中文字幕网站| 色~性~乱~伦~噜| 欧美色小说婷婷| 丁香婷婷六月天| 丁香婷婷九月在线| 久久久婷婷| 婷婷射丁香| 五月婷婷色播视频| 色五月自偷自拍婷婷婷婷| 噼里啪啦完整版中文在线观看| 丁婷婷五月天在线播放| 国产裸舞福利资源在线视频| 九9九9无码| 99国产精品白浆在线观看免费| 日韩三级高清无码| 婷婷激情综合网| www久久久久久久97| 色婷婷六月| 九月婷婷综合| 婷婷婷婷婷婷婷婷| 五月丁综合在线观看| 操久久网| 99九九在线精品热动漫| 丁香五月天综合网| 热久久思思热思思| 久久女人天堂| 久久亭亭电影| 7EzOBIhNq85TO| 婷婷五月av| 久久五月天色| 五月天成人在线| 五月丁香久久| 九九人人看| 99热网精品| 99这里| 人人九色| 五月成人网站| 天天做 天天爱| 六月丁香视频网站| 色久九| 色噜噜五月丁香婷婷| 超碰婷婷五月| 极品少妇XXXX精品少妇偷拍| 五月婷丁香| 日本一级| 激情五月丁香六月综合AVXXXX| 国产精品久久久60086| 26uuu四色| 亚洲综合网 665566| www.色色com| 五六月婷婷久久| 任你躁XXXXX麻豆精品| 欧美综合五月丁香六月婷| 婷婷色色欧美| 黄色笑话深爱激情网丁香五月婷婷啪啪啪啪啪 | 另类少妇人与禽zOZZ0性伦| 婷婷性爱影院| 91色五月| 色综合久久44| 五月天婷婷激情小说电影| 操一操| 六月色色婷婷| 综合图区激情| 丁香婷婷色六月| 婷婷色色播五月天| 开心五月色婷婷综合开心网| 天天天添天天操| 青青久久五月| 99燥99日| 精品成人在线| 色综啪啪网| 久久大国产香蕉| 成人.在线日韩| 婷婷五月天性色| 久久黄色片| 大香焦啪啪啪| 99精品手机在线视频| 久久九九Com| 激情五月丁香五月综合| 91熟妇大香蕉| 婷婷色基地在线看| 久久婷婷五月天大香蕉| 九九99偷拍视频| 99热色综合| www色婷婷com| www99久久| 丁香六月婷婷综合激情欧美| 开心五月六月婷婷| 久久老码第一| 久久久久久天天日天天爱| 丁香五月婷婷动漫视频| 五月丁香六月合| 婷婷色丁香六月| 婷婷六月丁香五月| 玖玖99免费视频| 五月大香蕉| 激情五月天网站| 操老逼综合网| a毛片二逼wwwwwwwwww| 久热爱大香蕉在线蜜臀悦色| 九九re精品视频在线观看| 亚洲美女高潮久久久久久69| 亚洲小视频免费观看| 激情网第四色| 婷婷五月另类网站| 精品人人操| 久久人妻精品| 日本WwW色偷偷丁香花久久久京东热| 国产女生爱爱AA| 久草九九| 天天插天天狠| 人人草人人爱手机视频看看| 五月丁香六月天| 久久99热这里只有精品| 免费无码毛片一区二区A片 | 天天摸天天日天天舔| 亚洲色热| 五月天欧美 另类小说| 五月丁香花婷婷玉莉AV| 婷婷五月天亚洲综合| 色婷五月| 玖玖综合色区在线观看| 99九九在线精品热动漫| 色在线五月天免费| 爱草人视频| 婷婷爱五月| 99热传媒| 久99久视频免费观看| 色色综合色视频| 视色综合| 99热这里只有精品在线观看| 91人人爱| 91色色色| 婷婷五月天黄色小说| 99ri国产| 九九久久腿| www超碰| 五月天在线视频尤物视频在线看| 日韩综合久久| 久久久国产精品黄毛片| 97在线刺激| 色情激情五月| 色五月天丁香| 好大好粗嗯啊-一级黄色大片免费观看-成人AV | 色五月色五天色情网址| 99成人网一区| 五月婷婷成人| 亚洲视频一区| 久久久久久久久久91| 五月婷婷深爱六月| 9久视频| 婷婷丁香五月在线观看91| www.jiujiujiu| 色色色色色色97| 五月丁香啪啪| 99久久高清视频| tingting五月天亚洲| 婷婷狠狠97| 日韩黄在免| 啪啪啪大香蕉| 五月婷婷之婷婷| 国产偷人爽久久久久久老妇APP | 日本99久久| 狠狠情色| 狠狠干在线视频| 久久精品4| 丁香五月伊人| 色色aⅤ網| 五月花激情| 婷婷综合网站| 亚洲天堂玖玖| 精品无码人妻一区| 五月天色丁香| 91九色小视频| 五月婷婷综合在线视频小说| 天天弄天天操| 99在线视频精品| 直接看的AV| 精品欧美性爱超级爽| 丁香五月天激情网址| 婷婷五月天成人| 久久人人妻| 九九re精品视频在线观看| 六月婷婷九月丁香亚洲综合| WWW.久久.COM| 婷婷四月 成人 狠狠干| 99热日本| 久9无码视频| 99久久综合| 欧美日本国产| 日韩AAA| AA丁香综合激情| 亚洲色综合| 九月色婷婷综合| 婷婷色基地在线看 | 丁香五月亚洲| 婷婷五月丁香五月基地| 五月丁香AV、伊人业余、性色熟妇| 人人摸人人搞| 激情av| 久久久激情视频| 久久hd| 久久婷婷五月天| 久久区区一二三av| www.99热这里只有精品| 婷婷黄色网| 涩婷婷五月天| 久婷婷久草| 婷婷五月天男人影院色色网| 丁香六月天婷婷色| 九九婷婷五月天影视| 91男同视频| 森林影视大全,最好看的2019年视频| 亚洲综合婷婷| 五月天色狠狠| 另类小说五月天| 亚洲激情校园| 天天插天天射| 开心五月激情站| 日日鲁鲁鲁夜夜爽爽狠狠视频97| www.五月激情.com| 色一情一乱一伦一区二区三区| 天天五月丁香五月| 婷婷五月色天| 色婷婷五月六月丁香综合视频| 日韩另类| 免費亭亭成人| 五月婷婷丁香瑟瑟视频| 亚洲视频1区| 成功精品影院| 五月婷婷久久大香蕉| 亚洲操逼网| 天天日天天做天天舔| www五月| 天天日狠狠| 国产99久久久国产精品免费看| 思思re视频在线| 亚洲一二三网| 色色热| 色综合久久88色综合天天99| 精品久久人妻| 天天操天天爽天天爱| 日本三级成人秘书精品片| 丁香五月开心五月激情| WWW、日本色丁香、co m| 综合五月丁香六月婷婷| 色三级色三级| 五月香婷婷| 人人做人人看人人摸| 久久九九一區| 婷婷操久久| 操操熟女| www.狠狠干com| 潮汕成人AV片在线| 97婷婷丁香| 五月丁香婷婷色| 精品影院| 天天激情| 九九热黄色| 国产又粗又大又爽又黄| 丁香五月五月婷婷五月天激情四射| 九月婷婷激情久久| 五月丁香啪啪综合| 精品无码色| 色婷婷激情Av久久久| 色五月五月天色婷婷色五月| 中文字幕AV在线播放| WWW.桔色成人.COM| 79色色色色| 9l视频自拍九色9l视频自拍九色9l社区| 亚洲五月天激情| 久久黄色免费视频| 久碰久| 婷婷久久综合久| 在线观看玖玖资源免费观看| 九九99在线视频| 99色色网| 99热这里全是精品| 99视频内射三四| 婷婷婷狠狠| 久久东京热婷婷五月| site:picc-up.com| 久七香蕉| 啪啪啪综合网| 好好干av| 久久久18| 婷婷五月丁香激情| 婷婷久久大香蕉| 丁香五月天社区婷婷| 国产在线aaa片一区二区99| 五月天婷婷丁香| 婷婷五月色播| 天天日天天舔| 一本道在线电影| 天天肏屄夜夜爽| 91人妻色色网| 九九亚洲视频| 色综久久久| 777久久综合视频| 亚州视频九九99| 五月丁香六月婷婷综合网| 婷婷精品在线| 婷婷涩五月天综合| 高清无码视频网址| 久狠狠狠| 婷婷激情六月| 久久婷婷五月天激情四射| 久色激情| 99热这里全都是精品| 噜噜在线| 五月丁香综合色婷婷| 亚洲日本三级片| 久久婷婷亚洲无码一起| 超碰在线99热| 婷婷欧美激情综合| 天天干天天日日| 噜噜噜久久亚洲精品国产品91| 久久人妻伊人| 久久新地址| 伊人色综合网| 97色射| 九九99在线视频| 欧美25p| 噜噜噜色噜噜| 色色网站观看| 狼人狠狠操| 五月天激情图片网| 99riav 亚洲| 五月天另类激情在线| 99这里只有精品| 少妇人妻综合色6699| 九九热这里有精品23| 久久婷色| www.久久久久久| 性爱五月婷| 国产毛片精品一区二区色欲黄A片| 亚洲天堂久久| 欧洲一区二区| 天天爽天天干| 色狠狠色综合| 天天干天天色天天干| 天天色天天色天天色天天色天天色天天色 | 免费无码毛片一区二区A片| 久机视频这只有精品| www.99热在线| 99re6久热只有精品6在线直播| 天天操九九插| 天天爱天天做天天舔| 99超级碰免费视频| 五月天丁香综合| 国产亚洲99久久| 亚洲色基地| 天天视频精品9| 日操夜操天天操不卡| 免费无码毛片一区二区A片| 99熟女| 五月丁香婷婷啪啪| 五月婷亚洲精品AV天堂| 婷婷色片| 久久婷婷综合国产| 可以直接看的av| 五月丁香六月婷婷综合网站| 五月丁香激情在线| 婷婷综合网性| 久热re在线视频| 激情综合婷婷久久| 国产三级在线播放| 日笨久久网| 色护士综合| 在线91日韩| 九九热青青草| 另类婷婷五月天啪帕帕| 精品一二三区久久AAA片| 色色国产| 成人综合网站| 俺去也五月| 91无码色色| 666555。COm毛片| 久久免费少妇高潮99精品| 狠狠色综合五月人人| av操B网站| 久久99草五月婷婷| 免费AV在线网址| 99色久| 超碰电影在线播放| 99热在线精品播放| 精品99这里有| 人人97碰| 人人色人人摸人人看| 天天日天天摸天天| 五月丁香六月婷婷不卡免费无码| 五月综合亚洲婷婷| 五月婷婷六月婷| 狠狠操狠狠操AV| www.99热| 色色婷婷丁香| 欧美色婷婷| 人妻熟人中文字幕一区二区 | 97人人操人人爽| 99rewww| 呦呦v线| 色婷五月天激情| 播播网色播播| 欧美va在线| 色99在线| 就爱日五月天| 国产综合丁香五月天| enecarbon-materials.com污K127封锁请涟系@wip1688 | 99热午夜精品| 极品另类| 亚洲另类在线观看| 欧美毛片www| 国产色99| 亚洲精品国产setv| 色婷婷导航| 五月久久丁香| 成人资源在线| 在线国产精品色| 天天做天天双| 深爱激情69热| 九九综合九九| 免费做A爰片77777| 婷婷五月色花丁香社区| 一区二区乱码视频| 精品国产va久久久久久久| 天天操天天日天天操| 日韩成人电影在线播放| 九九精品免费| 婷婷丁香大香蕉| www.com亚洲网站在线免费| 二色av| 日本性激情色播| 操逼巨乳91| 人人草人人爱手机视频看看 | 91人人爽人人操| 五月丁香啪啪啪综合网| 丁香久久五月天视频在线观看 | 欧美色频| 涩五月婷婷| 五月丁香A∨在线| 91久久久久久久久18| 婷婷六月天激情影院| 五月丁香六月婷婷无码| 天天日天天摸| 色色色色色日韩午夜激情 | 久草热8精品视频在线观看| 色99视| 亚洲天堂AV免费片| 综合激情视频| 五月丁香在线| 色色影院黄大片| 亚洲视频丁香网va| 婷婷亚洲综合| 激情内射人妻1区2区3区| 六月婷婷操逼| 精a品a视a频| 五月激情站| 99激情视频| 六月婷基地| 色青青五月| 另类综合激情| 色婷婷电影网| 超级黄色片| 97韩国久久电影院| www久| 玖玖热99| 99re久热只有精品6在线直播| 人人摸人人澡人人| 中文字幕乱码亚洲精品一区| 999精品乱码77777| 五月天色婷婷网| 免费视频99| 99热欧美偷拍| 色婷婷丁香中文在线播放| 色播五月网| www,色综合| 久久草婷婷丁香网站| 婷婷五月六月| 99久久.www| 色婷婷九月综合| 久热只有精品| 亚洲成人在线综合| 婷婷丁香激情| 狠狠干综合| 五月激情啪啪| 性综合网| 五月婷婷先锋| 色情丁香五月天| 99热精品中文字幕| 人人爽欧美婷婷久久久五月丁香| 色性日本| 五月丁香在线| 综合网色| 婷婷丁香九月| 亚洲视频1区| 国产乱妇乱子伦| AA片在线观看视频在线播放| 久久五月婷| 97干在线观看视频| 一级性爱大片| 五月婷婷激情综合视频| 538在线精品| 97色色-99久久| 色啪综合| 亚洲综合一区二区| 婷婷性爱五月天| 性色做爰片在线观看WW| 日韩好吊操| 五月天婷婷成人网| 欧美激情综合| 婷婷丁香五月天婷婷| 五月婷六月| 婷婷五月综合丁香久久| 五月丁香啪啪综合网| 日本精品久久久久中文字幕 | 五月婷婷综合热| 九九热99视频| 丁香六月啪啪啪| 99.N在线视频| 婷婷综合色网| 五月激情站| 久久九⑨| 天天色视频| 狠狠色婷婷丁香五月| 久久视频在线| 激情综合网激情五月婷婷| 久久99热 这里有精品| 色婷婷基地 | 99re这里只有精品国产99| 久草热在线视频| 91久操| 99re8这里只有精品99re8热视频| 色情五月综合婷婷| 日本久久婷| www.99在线| 99热都是精品| 大香蕉啪啪啪| 日日爽夜夜爽| 丁香六月婷婷综合色| 激情99| www.99久久久| 天天爽夜爽| 久久精品国产色| 九色PORNY9l原创自拍| 91操色| 婷婷D区| 激情九九综合网| 亚洲成人综合网在线免费观看| 丁香五月色欲| 亚洲人妻电影| 欧美六月| 久久黄A片| 99网| 久久深爱激情网| 婷婷情色五月| 六月婷婷啪啪| 成人在线视频网| www.超碰| 久久大香蕉同僚| 五月天激情久久| www.色五月| 9热在线视频精品| 久久婷网| 色五月涩涩婷婷蜜桃| 51XX午夜影福利| 五月丁综合在线观看| www.婷婷.com| 久久激情网| 激情色中文| 亚洲十月婷婷综合| 五月丁香在线观看| 丁香五月开心亚洲| 五月婷婷六月色| www...com黄在线观看| 偷拍99在线视频观看| 九九自拍网| 538在线| 五月花综合视频| 五月丁香大香蕉| 91九色网| 玖玖婷婷五月天| 国产婷婷色综合AV蜜臀AV | 久久九九激情五月天 | 激情五月婷婷丁香综合网| 一级二级香港秋霞欧美欧美秋霞| 五月久久婷婷天堂视频| 五月丁香六月激情| 在线日韩av| 精品婷婷五| 亚洲视色| 思思热在线观看| 99re免费视频| 另类五月婷婷| 色五月婷婷一二| 99国产精品白浆在线观看免费| 色五月自偷自拍婷婷婷婷| 婷婷五月丁香基地在线视频官网| 日日夜夜综合| 久久婷婷影院| 美国天天操无码| 五月色导航| 久热69| 万月丁香狠狠爱| 性日本激情| 丁香六月婷婷综合欧美| 色99色| 久久久大香蕉| 日本 @ va 免费| 国产一级片| 大香蕉久久久| 天天射综合网夜夜操| 亚洲激情综合| 在线观看欧美| 久久99美女精彩视频| 狠狠色综合网| www.久久久久久久| 少妇人妻综合色6699| 婷婷伊人綜合中文字幕小说| 久青操| 色色哒五月婷婷六月丁香| 专区无日本视频高清8| 色五月琪琪| 综合在线色婷婷| 亚洲av综合在线| 26UUU亚洲欧美| 九九热视频精品| 91丁香五月| 特级西西4444www无码| 少妇人妻丰满做爰XXX| 久久这里只有精彩| 九色视频91| 丁香五月综合首页| 深爱五月最新网址| 亚洲午夜成人av电影网| 99热这里在线精品| 婷婷丁香激情综合色情| 超碰国产AV| 色六月视频| 婷婷在线中文字幕| 激情网开心网| 免费看成人747474九号视频在线观看| 婷婷五月天渟渟| 婷婷六月激情在线视频| 99热这里只有精品青草| 色五月激情综合网| 婷婷在线免费| 亚洲五月婷| 九九亚洲综合| 久久性操| 久久女婷| 久99久在线| 天天爽人人综合免费7799| 激情综合五月天| 激情综合在线观看| 操九色| 婷婷色中文字幕| 丁香花色色网| 九九热视频这里只有精品| 永久的网站AAAA| 五月婷婷色|