欧美成人午夜精品久久久,国产?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在线不卡网站| 99精品久久久久| 五月天婷a| 六月婷色| 亚州综合色| 成片免费播放| 99热这里都是精品| 天天综合色丁香| 蜜桃婷婷五月| 久久九九爽| 91碰人人| 婷婷五月天99综合网站| 少妇人妻偷人精品无码视频新浪| 五月丁香婷婷基地| 日本女人久久| 亚洲国产精品VA在线看黑人| av中文网站| 五月天婷五月天综合网在线观| 久久六月综合| 婷婷5月久久综合网站| 在线另类视频| 日本超碰在线| 欧美激情综合| 操人无码| 欧美丰满熟妇BBB久久久| 五月天婷婷影院| 性生活久久朋友人妻| 狠狠干五月天婷婷网| 伊人婷婷91| 色婷婷激情Av久久久| 五月天成人免费视频| 五月婷在线观看| 第四色婷婷最爱| 五月天激情综合首页| 十区AV| 婷婷操无码| 日韩无码专区| BBWCUCKOLD精品熟妇| 色哟哟www| 99这里有精品视频视频| 丁香五月婷婷欧美成人色图| 丁香美女主播视频在线观看| 熟女激情五月天| 日日夜夜综合| 激情五月天综合婷婷网| 91狠狠综合网| 亚洲欧美成人在线| 夜夜嗨一区二区三区直播内容 | 天天 青草 丝袜制服 在线| 99无码视频| 先锋资源91| 色yeye欧美| 天天色综网| 五月丁香影院| 六月婷婷最新网址| 五月婷婷六月丁香| 五月天婷婷色小说| 亭亭五月丁香五月天激情| 亚洲综合色色| 久久久国产精品黄毛片| 最新AV在线观看| 婷婷五月天丁香久久| 99精品九九| 99视频热99| 五月久久综合| 亚洲不卡欧洲| 五月综亚洲| 久久人妻系列| 97干网站| 九九九激情综合| 伊人香大香蕉视频| 日本色99| 无码人妻一区二区三区免费九色| 在线观看亚洲视频影院| 天天干天天干天天干| 精国产品一区二区三区A片| 五月婷在线观看| 婷婷丁香五月激情图片| 丁香五月五月婷婷五月天激情四射| 五月婷六月丁香| 成人五月天视频播放| www.天天干| AA丁香综合激情| 97精品人人A片免费看| 久久91久久精品久久| 五他月天啪啪啪| 91在线日本| 六月丁香婷婷视频综合在线观看| 成人精品99| 激情五月婷婷五月| 丁香五月婷中字在线| 海外网站专业操老外| 欧洲综合视频| 九九热经典视频在线观看| 综合伊人久久| 偷拍99在线视频观看| 亚洲综合久| 激情五月激情综合网一级丸片| 玖玖九九99| 天天透天天爱| 亚洲精品无AMM毛片| 久久亭亭电影| 日韩AV色色色| 激情色播| 九九久久精品| 超级碰碰91| 久久精品99国产精品日本| 91N 一起草| 操91| 亚洲激情综合网| 色色丁香| 婷婷五月激情四月综合| 色婷婷久久久| 中文AV在线观看| 综合在线丁香五月| www.夜夜| 六月丁香婷婷视频综合在线观看| 欧美日本国产欧美日本韩国99| 五月婷婷色在线| 五月丁香| 伊人五月综合网| 99热99在线精品| 青草久久五月婷伊人| 丁香五月色| 5月丁香美女影院| 色综合色五月| 99亚洲精品视频| 99久久色| 在线只有精品| 超碰二区| 另类小说五月天| 婷婷五月天丁香久久| 精品无码人妻一区| 国产AV影片| 99er这里只有精品视频| 欧美精品999| 五月丁香黄色| 婷婷五月综合色拍| AV在线免费网站| 26uuu日韩| 日韩色色色色| 亚洲激情综合免费| 丁香五月网| 26UUU欧美| 91中文狠狠综合| 激情五月天激情网| 中文字幕精品无码一区二区| 色色色色色色97| 极品人妻VIDEOSSS人妻| 色色亚卅| 国产老熟妇亲子乱对白| 精品久久99| 欧亚洲在线高清视频| 久久多色| 婷婷综合网在线| 国产精产国品一二三在观看| 视色综合| av在线播放网址| 人妻aV在线| 91九色欧美| 婷婷色五天| 9999热在线免费观看| 久久亚洲无码| 成人天天爽| 超碰91在线| 婷婷六月开心网| 亚洲爆乳无码精品AAA片蜜桃| 天天色天天色天天色天天色天天色天天色| 成人无码精品1区2区3区免费看| 午夜美女人啪最红院| 丁香激情五月| 综合久久五月天| 婷婷五月天首页激情| 婷婷刺激综合| 激情五月天综合图片小说网站| 欧美三级巜人妻互换| 丁香婷婷五月六月天| 97碰碰叉| 色99在线视频| 热热久久99| 中文字幕激情综合| 国产乱子轮XXX农村| 天天综合网亚洲综合网| 激情综合网五月丁香| 色色五月天激情| 亭亭丁香aV| 青柠影视免费高清电视剧| 夜夜做天天爽| AV在线中文| 特黄三级片| 婷婷五月婷婷| 五月丁香影视| 色婷婷婷综合五月天| 日韩专区五月天婷婷丁香| 久久99热这里只有精品| 色婷婷五月天激情久久| 玖玖在线| 欧美婷婷综合| 香蕉久久国产AV一区二区| 青青草原福利在线| 色婷婷中文字母五月丁香| 伊人爱爱日本| 色婷婷基地| 久久人妻伦理| 五月天激情.com| 婷婷五月AV| 欧美成人一区二区三区在线视频| 丁香婷婷五月| 另类图片色五月| 99热99免费| 久久99网址| 天天久综合网永久入口18| 午夜成人综合| 无码区婷婷五月花开| 人妻性爱av网站| av五月丁香| 色一情一乱一乱一区91Av| 婷婷色色婷婷| 男人的天堂五月丁香| a色色色色色| 日韩肏屄网| 99在线精品免费视频| 色婷婷先锋| 思思w99| 欧亚色色| www。五月天激情| 三级99热| 91视频五月丁香| 国产精品久久久久9999小说| 久综合网| 久久99网站| 91热在线| www超碰| www.99热这里精品| 99re这里| 激情五月综合| 人妻久久久久久久| 这里只有精品免费| 色欲一二三| 国产一二三四五六七八视频| 99er6热在线观看精品6| 26uuu亚洲欧美| 在线区区区| 亚洲AV网站| 色久影院| 狠狠干婷婷| 久久人人九九| 婷婷色亚洲| 久草天堂| 蜜臀AV在线成人| 天天插天天射天天干| 九月婷婷人人操人人舔人人爱| 噜噜噜狠狠色综合| 色综合综合综合| 一本色道久久88综合日韩精品| www.色婷婷| AV中文在线| 五月花婷婷| 丁香六月激情| 性做爰1一7伦| 丁香九色不卡aaa| 久草婷妨| 激情久久肏屄视频| 婷婷五月丁香五月丁香| 久久9热好| 五月天综合在线| 六月色色| 五月婷无码| 亚洲视频在线网| xxxx五月天色色| 91啪啪啪啪| 夜夜爱伊人| 激情婷婷在线中文字幕| 久久五月人人摸| 色青青视频| 色婷婷成人| 99热99极品观看| 久久综合爱| 91九色精品熟女内射| 亚洲1区| 国产黄大片在线观看画质优化| 99se丁香| 91精品婷婷国产综合久久| www久| 五月婷婷中字在线| 99久在线精品99re8热| 色五月激情综合| 天天干天天操天天拍| 婷婷九月色| 丁香狠狠干| 夫妻超碰在线| 五月丁香婷婷在线综合蜜桃| 99热亚洲精品| 99视频只有精品| 五月婷狠狠| 精品激情| 99国产在线| 人妻无码精品一区| 亚洲精品另类| 好好日激情五月天| 五月综合激情| www99精品亚| 激情六月天婷婷| 日本天天综合| 成人综合AV| 丁香六月婷婷综合| 成人av中文字幕| 婷婷五月激情欧美大胆视频| 91精品无码| 4399无码视频| 亚洲中文无码成人| 五月丁香久人妻中文| av国产精品| 久久久久98| 天天草天天舔| 99精品久久| 午夜]香婷婷深深爱| 久久久18| 丁香婷婷色九月| 丁香婷婷六月激情文学 | 五月色综合| 成人在线日韩| 久99| 九九热av| 涩涩婷婷五月| 天天日本夜夜谢| 久久99热这里只频精品6学生| 久久婷婷丁香视频网| 综合激情网| 激情丁香六月| 影音先锋一区| 97人人做| 成人av中文字幕| 五月天久久丁香| 九九热精品| 色婷婷av在线| 欧美色色色色色色色色色色| 99 福利 导航| 婷婷六月激情| 激情九色| 久久婷五月婷| 开心五月婷婷激情| 九九久久99| 欧美啪啪网| 日日狠狠久久偷偷四色综合免费| 久久九九激情五月天 | 99热这里只有精品16| 国产毛片欧美毛片久久久| 色五月天丁香| 开心激情综合| 色亚洲中文| www.狠狠操| 亚洲午夜av| 爆乳熟妇一区二区三区爆乳| 日本三级中国三级99| 少妇人妻人伦A片| 丁香五月www| 午夜激情五月天| 三日本无码| 六月丁香五月激情网| 久久思思热| 99 色色吧| 色情·com| 色婷婷丁香五月天| 一区二区中文字幕| 亚洲成人AV电影在线| 亚洲 无码 中文字幕 中出| 专区无日本视频高清8| 欧美色图45678| 99精品热| 色五月成人在线| www.ywav| 玖玖婷婷色五月| 久久免费操| 亚洲精品视频在线播放| 色播五月天天| 97ai婷婷| 色色色99| 丁香五月婷婷俺也要去| 停停综合色色| 久久这里有精品| 久久99这里只有精品| 久久伊人五月天| 亚州日本欧州韩美高青高潮一| 丁香婷婷九月在线| 婷婷五月天丁香社区| 五月综合激情| 熟女少妇内射日韩亚洲| 国产亚洲精久久久久| 久久狠婷婷| 婷婷五月天激情四射| 播五月婷婷开心| 蜜桃人妻无码AV天堂三区| 国产精品A片| 一二区成人电影| 97久久超碰| 色五月丁香激情视频| 色婷狠狠| 日日夜夜干| 天天综合天综合| 日本三级日本三级三级人妇四虎| 国产一区二区av免费| 91人人爽久久涩噜噜噜| 嫩草AV久久伊人妇女超级A| 欧美槡BBBB槡BBB少妇| 色爱亚洲| 日日天天操| 亚洲成Av人片乱码色第1集| 99热这里只有精品1025| 五月香六月婷| 深情六月婷婷综合久久| 人人摸人人摸| 美女婷婷六月色| 97色视频网| 伊人色综合网| 九九热re99re6在线精品| 26uuu国产色| 亚洲AV电影av| 精品夜夜澡人妻无码AV| 第五色婷婷| 五月天狠狠| 伊人大香五月天| 99精品女人天堂| 九九热在线视频| 亚洲99在线| 婷婷五月天亚洲图片| 婷婷五月天丁香花| 成人色图情色成人网 www.5b5b5bcom 五月天 | 99热这里只有精品免费| 99热资源在线| 五月天天爱| 婷婷五月天 偷拍| 欧美日韩国产一区| 五月天婷婷激情四射综合| 任你爽视频| 狠狠色大香蕉| 五月天激情久久| 人人做人人看人人摸| 久久这里只有国产| 婷婷五月综合在线| 国产精品久久..4399| 九九综合五月欧美| 婷婷五月丁香性爱| 97久久婷婷色| 91丁香色| 国产精品久久久久久喷浆| 五月天亭亭俺也| 婷婷综合五月| 爱久久小说下载网| 天天肏视频| 91丨九色丨国产在线| www.91av.com| 九九色情网站| 伊人狼人干| 五月天激情婷婷| 婷婷五月天综合网| 色人久久| 色色亚洲| 一区二区无码视频| 亚洲色区17| 就爱日五月天| www亚洲无码| 激情亚洲色图片丁香综合| 婷婷五月丁香六月伊人网| 免费黄色视频网址| 久久五月视频| 五月天天天开心激情网| 99久久99热这里只有精品| 我爱宗和色| 久久五月天黄色五月天色网址| 玖玖伦理电影| 欧美天天干天天草| 激情婷婷六月天| 亚洲色精彩| 五月丁香婷婷爱激情综合网| 丁香 婷婷五月| 777久久综合视频| 天天噜天天爱| 丁香美女主播视频在线观看| 操操操Av| 五月天激情久久| 99在线观看| 亚洲精品字幕| 92久操视频| 久99热在线观看| 99碰碰视频| 六月色婷婷色| 天天爽天天摸| 婷婷激情性爱| 疯狂做受XXXX高潮A片| av操B网站| 色爱综合五月| 国产精品久久..4399| 超碰免费人妻| 99这里只有免费的精品| 人人人操B超碰| 激情五月,色播五月| 丁香五月人妻| 五月丁香五月婷婷| 成人久碰| 国产成人av在线播放| 99色综合网| 激情合网婷婷| 五月丁香六月色| 性爱综合网| 欧美婷婷六月丁香综合色| 天天日日人| 森林影视大全,最好看的2019年视频| 热99只有精品| 久久大香蕉同僚| 日日操天天操| 97操男人的天堂| 婷婷激情六月综合| 五月激情综合婷婷| 丁香五月激情五月| 最近中文字幕大全免费版在线| 欧美大片| 大天天伊人| 婷婷丁香69精华| 欧美英丁香开心快乐六月天网| 六月婷婷在线| www.婷婷| 婷婷人人操| 婷婷 激情 五月| 激情六月日韩| 久久女婷| 大香蕉五月天婷婷丁香91| 开心四月婷婷在线色播播| 日本色色色| 538在线精品| 综合五月激情| 色爱99| 可以看的av网站| 夜夜爽天天爽| 91九色大屁股| 五月涩涩网| 久久久网站| 色婷婷91激情小说| aaaaaa片| 五月花激情| 久久九九热re6这里有精品| 91热爆在线| 日日.c| 免费观看18视频网站| 97热九九| 六月丁香VA| 久久一级AV| 五月婷婷在线丁香| 午夜成人综合| 成人精品网站在线观看| 丁香婷停五月激情综合深爱| 天天干,天天日| 中文在线成人| 91狼友视频在线观看| 五月丁香无码| 国产成人AV在线播放| 丁香五月天堂婷婷| 久热最新视频| 欧美成人AAA片一区国产精品 | 9999热在线观看| 深爱激情五月天婷婷网| 国色天香成人网| 婷婷五月天丁香花| 色综合综合色| 久久多色| 狼友超碰| 亚州操操| 色婷婷六月天| 国产avapp 网| 婷婷五月色综合| 久久久噜噜噜www成人| 这里只有精品在线免费视频| 91919191919久久成人视频| 精品久久人妻热| 26uuu| 亚洲黄色影视| 深爱婷婷网| 中文字幕黄色片| 在线视频你懂得| 99超级碰碰| 类似婷婷激情综合网站| 特级操b片| www.婷婷,com| 色激情综合| 99精品在线观看| 婷婷综合欧美| 高清一区二区三区日本久| 丁香五月婷婷色| 久久婷婷综合五月天| 色色婷| 天天综合色| 亚洲性图一区二区三区| 51精品国自产在线| 思思热国产| yiqicaoav| 色激情五月| 久久多色| 丰满少妇猛烈A片免费看观看| 好好日激情五月天| 91久久国产自产拍夜夜91久久精品文字>91麻豆精品国产 | 天天操无码| www。五月天激情| 六月丁香五月婷婷| 久久视频九九视频| 国精产品一区二区三区| 91狠狠综合久久久| 五月丁香六月婷婷亚洲激情综合| 欧美偷偷操| 色婷婷五月综合在线| 亚洲Va成人| 婷婷六月激情综合| 99热综合色图| 六月婷五月丁香| 夜夜AVV| 99久久9| 日日做天天操夜夜爽| 久久机热探花| 久99热| 五月丁香在线看| 成人av在线网站| 99超级碰免费视频| 五月婷婷色五月| 激情丁香婷婷六月天| 久久九九Com| 超碰在线精品| 日本五月视频| 婷婷丁香六月综合激情站| 色婷婷狠狠禁18久久| 超碰在线视屏| 日本熟女内射| 久久久妻人人人| 一区二区你懂的| av大香蕉| 五月婷婷六月色| 99热香港| 丁香五月香蕉| 日本一区二区三区精品视频| 婷婷五月综合网| 久久精品视频在这里有| 国产色婷婷亚洲| 国产熟女大叫受不了| 久久AAAA片一区二区| 久久玖玖综合| 色情五月天婷婷| 综合亚洲六月婷婷在线| 久久婷婷夜| 六月婷婷毛片| 99热99在线| 激情综合网激情五月天| 婷婷色情五月| 九九视频精品在线免费 | 婷婷综合在线| 欧美成人精品一区二区| 激情的五月| 六月婷婷色综合| 欧美色色色色色色| 一级韩国产精品毛| 久久婷婷五月丁香蜜桃网| 激情综合网五月婷婷| 草五月| 狠狠色综合五月| 亚洲色五月天是什么| 久操人妻| 99人人干| 99久久综合网| 久久综合干| 人人97操| 色欲五月丁香| av网站不卡在线| 99热在线观看免费精品| 97婷婷色| 五月丁香久久| 久久精彩视频| 亚洲久久激情| 日日干天天爽| 丁香婷婷影院| 亚洲欧美国产高清vA在线播放| 99热精品9| 色久在| 五月激情婷婷图片基地| 激情综合网址| 伊人婷婷大香蕉在线| 免费无码毛片一区二区A片| 操99| 色五月AV| 久久婷婷综合五月天| 九月婷婷久久| 久操热线| 日本欧美成人片AAAA| 天天做天天爱| 丁香五月天成人| 五月婷婷偷拍| 4399人妻无码久久久| 性热视频99精品| 婷婷涩涩五月天| 五月丁香色婷婷| 色色五月婷婷| 色色综合热| 婷婷伊人75| 激情五月深爱五月观看| www.夜夜操.con| 久久九九大香蕉电院| 国产精品热搜丁香五月婷婷| 激情综合国产| 狠狠色综合网| 亚洲国产黄色电影| 九九大香视频| 人人澡天天色天天做| 婷婷五月天熟妇| 激情亚洲网| 免费AV播放| 亚洲无AV在线中文字幕| 超碰国产一区| av在线观看网站| 丁香六月 人妻| 色5月婷婷| 九九操操| 亚洲综合网在线| 久久 婷婷 五月天| 婷婷五月天激情综合| 丁香五月偷拍| 五月丁香综合啪啪| 五月天婷婷久久| 哇嘎成人久久| 天天日夜夜高潮| 婷婷丁香六月天| 天天爱天天操| 天天干人人奸97| 99精品久久久久| 丁香六月婷婷综合激情欧美| 五月天深爱激情网| 我爱大香蕉| 丁香五月激情综合久久| 欧美一级色| 日本五月婷| 六月激情婷婷| 久草视频一,二三四| 丁香五月激情婷婷激情| 丁香婷婷久久 | 亚洲va日| 操操国产| 狠狠色噜噜狠狠狠777奇米| 国産精品| 六月婷婷久久大全| 久久精品国产AV一区二区三区 | 99ri网站在线观看| jiqingtaose五月天| 色欧洲| 欧美 日韩 人妻 高清 中文| 九九精品综合| 亚洲色爱综合| 以及AA大片看看| 婷婷色在线| 色婷婷88| 色播色丁香五月| WWW.开心五月天.COM| 久久久久久欧美精品se一二三四| 中文字幕网伦射乱中文| 这里只有精品偷拍| 97碰人人操| 综合图区激情| 五月天啪啪| 婷婷综合激情| 婷婷伊人综合中文字幕| 4438国产免费看| 伊人深爱综合| 国产激情一区| 99久久思思| 欧美经典片免费观看大全| 超碰在线视屏| 丁香五月电影| 人人操插| 婷婷五月无码| 久久精品视频99| 九九aV| 超碰日日操| 婷婷人人操| 色五月自偷自拍婷婷婷婷| 激情开心五月天婷婷基地丁香社区| WWW.国产| 色婷婷五月网| 国产精品涩涩涩视频网站| 开心五月丁香综合久久| 国内外色色色色色成人视频| 丁香五月第九色| 超碰九色| 色区久久| 婷婷久久五月天| 天天日狠狠| 五月丁香色色网| 久久6这里只有精品| 五月婷婷激情网| 激情图片婷婷| 亚洲中文字幕在线观看| 99日韩网站| 婷婷五月综合中文字幕| 丁香五月六月| 成人综合AV| 亚洲午夜AV| 丁香五月亚洲激情婷婷射| 五月丁香六月婷| 五月天久久婷婷婷| 婷婷五月天综合久久日美女| 色色 亚洲| 亚洲激情综| 久/久精品99看9| 狠狠 婷婷| 国产精产国品一二三在观看| 五月丁香婷婷成人综合网| 东京热人妻一区二区三区在线| 亚洲午夜一区二区| 亚洲天堂热| 国产XXXX搡XXXXX搡麻豆| 亚洲精品性色| 91丁香五月| 午夜婷婷久久| 无码地址| 精品9久| 66成人网| 色色热99| 超碰99热在线观看| 97干视频| 热99re| 人人操人人看97干| 99热这里| 狠狠干综合网| a色色色色色| 激情五月天丁香| 久久婷婷五月天蜜桃| 婷婷五月小说色综合| 国产欧美日韩综合精品一区二区| 婷婷六月啪啪| 激情久久久| 丁J香六月首页| 欧美日朝成人| 欧美美美女性色视频| 美欧成人视频| 玖玖99福利| 青青草原爱爱网| 色一情一乱一乱一区91Av| 色五狠狠| 色婷婷中文字母五月丁香| ai97re99一本| 五月天社区| 天天精品视频免费观看| 5月丁香综合网| 久久久久亚洲AV无码网影音先锋| 亚洲精品久久久无码| 六月婷婷八月丁香| 天天综合色综合| AAA久久| 色九九中文字幕| 久久精彩视频| 日日夜夜狠狠| 婷婷激情网五月天| 超碰人人艹| 888久久久| 开心激情婷婷| 色99网站| 中美日韩成人在线| 色色亚卅| 激情精品久久| 久久激情五月婷婷| 亚州激情九月| 香蕉网婷婷| 五月天综合| 婷婷五月丁香久久| 五月丁香在线观看| 天天粽合合合合| 久鲁鲁色网 | 99免费热视频在线| 五月天激情日色在线| 日本高清久久| 亚洲欧美婷婷五月色综合| 五月丁香婷婷99| 色吊操色妞| 亚洲欧洲中文日韩久久AV乱码| 26uuu在线观看| 久久色五月天| 中文字幕激情综合| 人人干女人| 99操逼| 这里只有免费精品| 深爱丁香激情| 五月丁香色播| 天天更新天天亚洲| 深爱激情九九五月天| 色综合99| 婷婷激情五月天网站| 丁香97综合| 天天肏天天肏| 欧美日韩国产一区二区| 五月激情婷婷四射| 东北黄色一级| 中文字幕无码成人电影| 五月丁香偷拍| 在线综合91| 影音先锋天天日| 丁香五月 无码| 激情 婷婷| aa久久| 久月婷婷| wuyuedingxiang99| 五月丁婷香| 婷婷五月天 偷拍| 久久aaa| 婷婷一本和五月丁香| 色婷婷4| www热久久yy9| 激情五月综合婷婷| 综合噜噜| 婷婷月综合| 99视频在线观看网址| 人人操AV| 综合色影院| 色婷婷中文在线| 亚洲中文字幕AV| 欧美精品999| 婷色五月| 九九热精品| 懂色av粉嫩av蜜臀av| 国产成人AV| 超碰成人影视| 99久精品| 色色色综合色| 天天搞夜夜叫| 婷婷区日本| 狠狠操狠狠干综合| 丁香色五月天| 91色色色| 国产毛片欧美毛片久久久| 少妇AB又爽又紧无码网站| av操逼网| 婷婷综合干| 99ri久久| 亚洲成人网无码| 六月婷婷狠狠做| www.五月天婷婷| 香蕉婷婷色五月| 色色亚洲| 久久se 综合网| 亚洲超级碰| 五月天激情图片| 综合激情网| 久久综合人妻| 亚洲精品视频在线播放| 欧美三级A做爰在线观看| 91人人人人人| 玖玖婷婷色五月| 99热这里在线精品| 天天射天天射一道本日本社区| 狠狠做深爱婷婷久久综合一区| 六月婷婷色综合| 五月天激情网站| 五月丁香婷婷激情图片| 久久9久| 五月婷六月天| 婷婷娌伦网| 丰满少妇猛烈A片免费看观看| www.wuyuetian啪啪| 成人电影AV在线观看| 色色色综合色| 九九视频精品在线免费| 大香蕉九操| 亚洲亚洲人成综合网络| 五月天久久网站| 五月丁香色婷婷婷基地| 欧美五月婷婷| 无码日本精品XXXXXXXXX | 91碰九色| 婷五月丁香| 婷婷色五月大香蕉在线观看| 五月色丁香国产在线视频| 亚洲激情综| 亚洲第一成人无码A片| 色婷婷88| 亚洲 小说 欧美 激情 另类| 99ri在线| 色婷婷成人做爰A片免费看网站 | 96精品久久久久久久久| www.五月天性.com| 欧美日综合| se色综合网| 9999热精品在线免费播放 | 婷婷六月激情综合| 超碰在线99| 日本熟妇精品99| 99这里只有精彩视频| 欧美交换配乱吟粗大25P| 中文字幕成人日韩| 丁香六月 婷婷六月| 人妻久久婷婷| 欧洲综合一区| 青柠影视免费高清电视剧| 狠狠色网| 亚洲激情色色| 婷婷久草| 丁香花操逼| 婷婷五月天激情AV影院| 五月婷婷综合在线| 99婷婷| 亚洲操操操| 综合色五月亭亭| 五月欧美色播| 成人看片网站| 成人av播放| 五月丁香综合激情| 激情五月天福利| 激情亚洲婷婷六月| 大地9中文在线观看免费高清| 综合久久97| 五月丁香啪啪网| 久久女人九九| 俺来也综合网精品一区| 五月丁香色色网| 色五月激情| 可以看的av| 99热欧美精品| 五月丁香在线观看| 久婷婷久草| 亚洲激情免费视频| 久在线88综合| 丁香五月天五码婷婷| 国产午夜精品一区二区三区嫩草| 婷婷综合| 婷婷爱五月| 亚洲精品国产成人AV在线| 欧美啪啪9| 国产精品色婷婷99久久精品| 色视频五月天| 91疯狂操操操操| 色色网五月激情| 久久丁香婷| 国产资源91在线| 万月丁香狠狠爱| 99热这里只有精品22| 亚州激情九月| 色五月综合| 在线看片av| 九九热超碰| 爱草视频在线观看| 战争与艾拉电影免费观看| 丁香六月婷婷综合啪啪| 日本高清久| 亚洲乱码日产精品BD| 婷婷综合伊人丁香| 五月婷婷国产| 婷婷六月啪啪| 97视频久久| 操人91| 开心五月激情站| 91精品刘玥| 天天添天天摸天天天天做| 秋霞少妇AV网站| 99热无码首页| 91人人澡人人爽人人看| 二色AV| 成人版视频在线观看| 婷婷五月激情中文字幕| 一区视频网站| 激情六月综合| 好好干av| 97人妻碰碰碰久久久久-最近国语高清| 99热免费| 精品网站99| 日韩在线观看网址| 天天狠狠干| 黄色AV日韩| 色婷婷99| 激情综合色婷婷六月天| 久久狼人天堂| 色婷婷六月| 欧州色色| www,8050,午夜三级| 9久久狠狠的| 天天肏天天肏天天肏| 草操网| 精品婷婷丁香五| 97久久久| 亚洲瑟瑟精品在线| 99超级碰碰| 九九日伊人| 99精品在线| 99热20| 色播五月综合网| 99操视频| 免费亚洲婷婷| 色色婷五月天| 中文av在线观看| 五月婷婷丁香| www.婷婷五月| 亚洲精99| www.sebowuyue| 日本无码专区| AV在线中文| 久久婷婷五月综合伊人| 亚洲精品乱码久久久久久按摩观| 亚洲综合色成丁香五月色| 99热自拍| 人人摸人人搞| 激情q青青草在线婷婷| 日本3级片一区2区| 五月婷婷影视| 色色婷婷五月天| 夜夜干 夜夜操| 久久久五月激| 色欲九区| 五月天婷婷激情四射综合| 无码激情AAAAA片-区区| 五月天婷婷綜合院| 欧美日韩aaaa| 99热日本| 91久久久久久久久18| 看逼中文字幕| 色色综合网www| 夜夜干夜夜操| 激情六月婷婷| 久久久免费精彩视频| 亚洲 在线 性爱 | 亚洲秘 无码一区二区三区妃光/1| 天天摸夜夜爽天天做| 欧美婷婷综合网| 亚洲xx在线| 精品一二三区久久AAA片| 婷婷综合色色| 成人av在线网址| 人人干av| 99热国内| 色激情综合狠狠婷婷| 日本欧美在线| 一级韩国产精品毛| 国产AV一区二区三区最新精品| 精品人妻久久久久久| 97啪啪| 狠狠干综合| 五月天啪啪啪| 99久在线精品99re8热| er99免费视频在线| 成人色站,在线视频,看片-SS1AV| 五月婷婷综合网| 91尤物九色在线| 超碰九九热| 九九久久五月天| 婷婷爱五月| 色情五月天。| 久久精品五月天| 五月丁香婷婷啪啪综合| 艹天天射| 人妻激情视频| 天堂草在线看www| 日韩欧美一级大黄网站| 99热这里只有免费| 全网最新网黄大秀直播高清,主播国产录屏在线 | 五月婷婷播| 色情五月天小说| 人人爱干人人爱草| 亚洲热手机在线观看| 天天日天天做天天舔| 亚洲网站在线鸭子av| 色必久悠悠影院| 日日夜夜青青草| 日日懆天天懆| 亚洲五月花| 婷婷天天日婷婷| 久久综合影院| 久久综合爱| 丁香五月色五月| 久久狠狠干| 精品国产乱码久久久久久免费| 天海翼中文字幕高| 伊人99久久| 亚洲人妻电影| 99热欧美| 丁香五月婷婷婷婷欧美综合| 五月天色婷婷小说| 色情五月停停丁香| 色色色热热热| 色色婷婷五月天| 2018国产大陆天天弄| 六月婷婷色色网| 超碰京东热av男人的天堂| 免费国产视频| wuyuedingxiang99| 精品色色网| 丁香婷婷色| 秋霞少妇AV网站| 久久婷婷丁香| 五月婷婷深深爱| 欧美在线干| 成人电影丁香六月天| www.婷婷六月天| 五月天激情国产综合婷婷婷| 久久日曰| 欧美激情 日韩无码 婷婷 五月天 久久婷婷丁香五月一二三 | 五月丁香六月色情网欧美| 精品乱码久久久久| 99色色网| 亚洲色综合色网| 色婷婷五月天激情在线播放| 另类激情综合| 五月天啪啪| 久热黄色| 五月婷婷色激情| 婷婷色婷婷| www.一起草av| 2025天天爽天天摸| 另类图片天天影视在线观看| 婷香五月激情视频| 91视频久久久| 五月欧美色色五月| 天天日天天摸| 五月婷婷丁香综合,亚洲天堂| 五月天婷婷午夜丁香| 激情婷婷丁香| 亚洲99热| 性五月激情| 亚洲这里只有精品| 国产乱妇无乱码大黄AA片| 91色吧网| 婷婷五月天人妻| 日韩AV大全| 丁香六月婷婷综合欧美| 深情五月天| av中文网| 欧美狠狠草| 色婷婷导航| 97色啪| 五月天亚洲综合网| 国产真实乱了老女人视频| 九九99精品视频在线观看| 久草热在线视频| 欧美成人一区二区三区在线视频| 五月丁香最新| 人妻尝试久久久久久久久久久久| 久99| 丁香激情网| 九月综合| 婷婷五月天精品| 婷婷六月啪啪| 五月天婷婷狂暴白浆| 热99热| 色播五月丁香| 色五月综合婷婷久久综合婷婷久久综合婷婷久久综合婷婷久久 | 这里只有精品在线视频在线观看| 2018夜夜草| 婷婷久久五月| 日本九九视频| 99热婷婷| 色综合区| 久月婷婷| 九热视频| av性爱网站| 久久五月天激情婷婷| 五月婷婷六月综合| 亚洲AV电影av| 精品色色网| 中文中文在线| 天天日,夜夜爽| yazhoujiqingav| 丁香五月综合在线播放| 日本欧美成人片AAAA| 丁香六月婷婷综合网| 激情五月丁香五月色| 五月婷婷五月天亚洲无码| 久久综合婷婷激情| 五月天婷婷中文字幕在线播放|