日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

第24章 让唯美的雪花飘扬——三维粒子系统的实现

發布時間:2023/12/20 windows 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第24章 让唯美的雪花飘扬——三维粒子系统的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
章節導讀

本章我們將一起探討三維游戲中粒子系統的方方面面, 首先對粒子系統的基本概念特性做一個全面的認知,然后依舊是把粒子系統封裝在一個C++類中,模擬了三維游戲中唯美的雪花飛揚的景象, 讓我們之前實現的綜合三維游戲場景更加炫。

大家應該記得,我們之前也用GDI 實現過雪花粒子系統,那個時候由于圖形庫GDI的限制,實現效果或多或少顯得有些拙劣,本章我們在DirectX 的幫助下,專門用粒子系統重新實現了唯美雪花的飛揚景象,算是為強大的粒子系統正名吧。

24.1 對粒子系統的基本認知

1983 年,奇才Reeves .V.T 在他發表的論文《Particle Systems A Technique for Modeling a Class of? Fuzzy Objects》中首次提出了粒子系統的概念。從此,粒子系統就開始廣泛運用于計算機中各種模 糊景物的模擬。經常使用粒子系統模擬的現象有火焰、爆炸、煙、水流、火花、落葉、云、霧、雪、 塵、流星尾跡或者像發光軌跡這樣的抽象視覺效果等等。這些物體模型在計算機中往往很難用具體 的形狀、大小來描述,但是我們可以通過粒子系統的思想,去描述組成這些物體的每個元素和它的 變化。
一般情況下,粒子的幾何特征都十分簡單,可以采用一個像素或者一個小的多邊形來表示。需 要注意的是,粒子系統的最大的缺陷是,當粒子數量達到很大的規模的時候, 對運行時機器性能的 要求會更加苛刻,如果機器的性能跟不上, 就會達不到實時的顯示效果,換句話說,就是粒子太多 了,我們的電腦跑不動了, 很卡。
在許多三維建模及渲染包內部就可以創建、修改粒子系統,如3DS Max 、Maya 以及Blender 等,這些編輯程序使藝術家能夠立即看到它們設定的特性或者規則下粒子系統的表現。 ?而2D 的粒子 特效軟件中, particlelllusion 最為出色, 因為他的渲染比一般的3D 軟件快較為平面化。 目前,粒子系統技術被廣泛用于大型3D 游戲的制作中。

下圖是DirectX SDK 中自帶Sample 一個和粒子系統相關的非常華麗的demo ,推薦大家試著運行一下,如果你的DirectX SDK 安裝在D 盤,那么路徑就是:

D:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Samples\C++\Direct3D11\NBodyGravityCS11

放2張運行的截圖:

??

上面程序中的NBody 粒子系統不是普通的粒子系統,它運用了并行計算,以模擬銀河系的強大級粒子系統。普通粒子系統的粒子之間是無關聯的. 而NBody 的粒子之間有引力的影響存在,這點大家需要注意。

粒子系統通常有3 個要素:群體性、統一性和隨機性。下面我們簡單看一下它們的定義:

  • ?群體性:粒子系統是由大量的可見元素構成的。因此,用粒子系統描述一團煙霧是合情合理的,但是我們所用粒子系統去描述一粒煙霧顯然只有鬧笑話了。
  • ?統一性:粒子系統的每個元素有具有相同的表現規律。比如,雪花粒子系統中的每一片雪花,都是白色元暇、輕盈靈動的。如果雪花粒子系統中出現了彩色的粒子,那顯然就是異類了。
  • 隨機性: 粒子系統中每個元素會隨機表現出不同的特性。比如煙霧中每一個煙霧粒子的運動軌跡往往都是雜亂無章的,但是對于整個煙霧系統來說,這些煙霧粒子往往都有一個大體的運動方向。

24.2 粒子系統的基本原理

粒子通常都是一個帶有紋理的四邊形,通常是使用了紋理映射的四邊形??梢哉J為粒子實際上 是一個很小的網格模型,只不過是紋理賦予了它特殊的外表罷了。繪制粒子就如同繪制多邊形一樣 簡單,因為一個粒子說白了就是一個可改變大小并映射了紋理的四邊形罷了。
下圖所示的就是一個20 個單位大小的粒子。


如果給出了粒子中心點的坐標和粒子的大小,不難計算出繪制粒子所需要的4 個頂點坐標,這樣往往比直接給4 個頂點坐標來得直觀和節省空間。
另外,很多情況下,因為一個例子是使用兩個三角形組成的一個矩形來表示的,所以通常需要使粒子四邊形始終面向觀察者,這就用到了Direct3D 中的廣告板(Billboard )技術,也叫公告版技術。公告版技術的基本原理在這里也提一下吧,后面有機會就專門講解一下。公告版技術的基本原理就是在渲染一個多邊形時,首先根據觀察方向構造一個旋轉矩陣,利用這個旋轉矩陣旋轉多邊形,讓這個多邊形始終是面向觀察者的,如果觀察方向是不斷變化的, 那么我們這個旋轉矩陣也要不斷進行調節。這樣,我們始終看到的是這個多邊形“最美好”的一面。這種先讓多邊形面向觀察者,然后再渲染的技術,就是傳說中的廣告板技術。
我們知道,粒子系統都由大量的粒子構成,每個粒子都有一組屬性,如位置、大小以及紋理,還比如顏色、透明度、運動速度、加速度、自旋周期、生命周期等等屬性。一個粒子需要具有什么樣的屬性, 當然是取決于具體的運用了。
另外,粒子屬性的初始值常常都是隨機值,而粒子的產生也常常是由位于空間中某個位置的粒子源產生的。
粒子系統在宏觀和微觀上都是隨時間不斷變化的, 一套粒子系統在它生命周期的每一刻, 一般都需完成以下的四步曲的工作:

1 . 產生新的粒子
在這一步中,我們會根據預定的要求, 產生一定數目的新粒子。粒子的各項初始屬性都可以用rand 函數來在一定的范圍內賦上隨機值。
2. 更新現有粒子的屬性
比如粒子有位置和移動速度, 自旋速度等等屬性,這就需要在每一幀當中根據原來的粒子的位置、移動速度和自旋速度重新進行計算和賦值更新。
3. 刪除已經消亡的粒子
這一步是可選的, 具體情況具體分析,因為有些粒子系統中粒子是一直都存在的,沒有消亡一說。在規定了粒子生命周期的一套粒子系統中,需要判斷每個粒子是否生命走到了盡頭,如果是的話,那么它就消亡了,得用相關代碼把它從粒子系統中消除。

4. 繪制出粒子
這步沒有的話什么都不是,不顯示出來叫什么粒子系統啊。人家可不管你在之前做了多少工作,算了多少東西,反正玩家是要看到最終的顯示效果的。
在Direct3D 8.0 以后,我們可以通過一種稱為點精靈( Point Sprite )的特殊點元來描述粒子系統中的粒子。和一般點元不同的是,點精靈可以進行紋理映射并改變大小。點精靈的使用常常是伴隨著SetRenderState 中第一個參數取如下的幾個值:

D3DRS POINTS I ZE = 154 ,D3DRS POINTSIZE MIN = 155,D3DRS POINTSPRITEENABLE = 156,D3DRS POINTSCALEENABLE = 157 ,D3DRS POINTSCALE_A = 158 ,D3DRS POINTSCALE_B = 159,D3DRS POINTSCALE_C = 160 , 另外,粒子系統中的一個重要要素是保存粒子的存儲結構。我們可以使用數組,如果需要動態 插入和刪除原始的話,就進一步使用鏈表或者模板了。

需要注意的是,因為粒子系統中會有很多粒子需要不斷地產生、消亡,如果在每個粒子產生時都分配內存,或者在每個粒子消亡時都釋放內存,這顯然會造成巨大的資源開銷,非常不推薦。這里我們按鏈表這種方案來講解。通常采用的做法是,未雨綢繆,預先為所有的粒子分配內存,并將這些粒子保存到一個鏈表當中。當需要產生新的粒子時,從這個鏈表中取出所需數量的粒子,并將
它們加入到渲染鏈表中,而當一個粒子消亡后,重新將它們放回到原鏈表中,并從渲染鏈表中刪除這些粒子。最后,在程序結束時,一次性釋放所有粒子所占的內存空間。這就是比較科學的做法。

24.3 雪花粒子系統的設計

我們之前己經提到過,粒子系統可以模擬很多的現象,比如火焰、爆炸、煙、水流、火花、落葉、云、霧、雪、塵、流星尾跡或者發光軌跡。對于現象的模擬,粒子的特性往往需要根據模擬的現象的屬性來具體地設計。
對于本節需要使用粒子系統來模擬的雪花飛揚場景,有兩個比較特殊的地方:
  • ?在雪花飛揚場景中,不需要用點精靈或者公告版技術來讓粒子的4 個頂點所在的面始終朝向觀察者,因為雪花飛舞起來是非常優雅的,會悠揚地繞著不同的軸打轉,用了公告板技術反而畫蛇添足,顯得不那么真實了。
  • ?在雪花飛揚場景中,不需要粒子的動態消亡與產生,可以讓雪花粒子在一定區域內下落,如果下落到Y 軸的臨界區域, 就把粒子的Y 坐標設為預定的臨界最高點的Y坐標,就像粒子都是從這個地方產生的一樣,這樣就會模擬出源源不斷地下雪景象。
好了,我們開始實現這個雪花粒子系統吧。
依舊是寫出這個名為SnowParticleClass 類的大體輪廓。
首先當頭棒喝怒寫4 個宏,方便宏觀調控。這四個宏分別用于表示雪花粒子數量, 雪花飛揚區域的長度, 雪花飛揚區域的寬度, 雪花飛揚區域的高度。
#define PARTICLE_NUMBER 100000 //雪花粒子數量,顯卡不好、運行起來卡的童鞋請取小一點。 #define SNOW_SYSTEM_LENGTH_X 20000 //雪花飛揚區域的長度 #define SNOW_SYSTEM_WIDTH_Z 20000 //雪花飛揚區域的寬度 #define SNOW_SYSTEM_HEIGHT_Y 20000 //雪花飛揚區域的高度 這里的PARTICLE_NUMBER 雪花粒子數量我們取了10 萬,那么后面我們寫出來的游戲場景中就有10 萬個雪花粒子, 這個前提是你的顯卡禁得住10 萬及以上的粒子數量。當然,你取20 萬的粒子數量,在下雪區域是20000 × 20000 × 20000 的區域中就是超級大暴雪了……建議這時候把長度和寬度調大一些,來讓這20 萬的粒子的活動區域更大。
接下來我們寫出雪花粒子的FVF 靈活頂點格式,頂點屬性是頂點坐標加上紋理坐標了:
//------------------------------------------------------------------------------------------------- //雪花粒子的FVF頂點結構和頂點格式 //------------------------------------------------------------------------------------------------- struct POINTVERTEX {float x, y, z; //頂點位置float u,v ; //頂點紋理坐標 }; #define D3DFVF_POINTVERTEX (D3DFVF_XYZ|D3DFVF_TEX1) 再接下來是雪花粒子的屬性結構體,想一想現實生活中的雪花有哪些特定的屬性呢?唯美的雪花,有特定的位置, 會旋轉,有下降速度,樣子不同,嗯,好,那我們就這樣寫: //------------------------------------------------------------------------------------------------- // Desc: 雪花粒子結構體的定義 //------------------------------------------------------------------------------------------------- struct SNOWPARTICLE {float x, y, z; //坐標位置float RotationY; //雪花繞自身Y軸旋轉角度float RotationX; //雪花繞自身X軸旋轉角度float FallSpeed; //雪花下降速度float RotationSpeed; //雪花旋轉速度int TextureIndex; //紋理索引數 };好,邊角工作完成了,下面正式來設計這個類吧。首先來看一看需要哪些成員變量,LPDIRECT3DDEVICE9 類型的設備接口指針m_pd3dDevice 不能少吧,雪花粒子數組m_Snows 要有吧,頂點緩存對象m_pVertexBuffer 要有吧,保存不同雪花紋理樣式的雪花紋理數組m_pTexture要有吧,嗯,成員變量就這些。
然后看看要有哪些成員函數,構造函數、析構函數先顯式地寫出來,再是粒子系統初始化函數lnitSnowParticle,粒子系統更新函數UpdateSnowParticle , 粒子系統渲染函數RenderSnowParticle,嗯,成員函數也就是這些了。整體來看,這個類的輪廓就是下面SnowParticleClass.h 的全部代碼:
//============================================================================= // Name: SnowParticleClass.h // Des: 一個封裝了雪花粒子系統系統的類的頭文件 // 2013年 3月31日 Create by 淺墨 //=============================================================================#pragma once #include "D3DUtil.h" #define PARTICLE_NUMBER 15000 //雪花粒子數量,顯卡不好、運行起來卡的童鞋請取小一點。 #define SNOW_SYSTEM_LENGTH_X 20000 //雪花飛揚區域的長度 #define SNOW_SYSTEM_WIDTH_Z 20000 //雪花飛揚區域的寬度 #define SNOW_SYSTEM_HEIGHT_Y 20000 //雪花飛揚區域的高度//------------------------------------------------------------------------------------------------- //雪花粒子的FVF頂點結構和頂點格式 //------------------------------------------------------------------------------------------------- struct POINTVERTEX {float x, y, z; //頂點位置float u,v ; //頂點紋理坐標 }; #define D3DFVF_POINTVERTEX (D3DFVF_XYZ|D3DFVF_TEX1)//------------------------------------------------------------------------------------------------- // Desc: 雪花粒子結構體的定義 //------------------------------------------------------------------------------------------------- struct SNOWPARTICLE {float x, y, z; //坐標位置float RotationY; //雪花繞自身Y軸旋轉角度float RotationX; //雪花繞自身X軸旋轉角度float FallSpeed; //雪花下降速度float RotationSpeed; //雪花旋轉速度int TextureIndex; //紋理索引數 };//------------------------------------------------------------------------------------------------- // Desc: 粒子系統類的定義 //------------------------------------------------------------------------------------------------- class SnowParticleClass { private:LPDIRECT3DDEVICE9 m_pd3dDevice; //D3D設備對象SNOWPARTICLE m_Snows[PARTICLE_NUMBER]; //雪花粒子數組LPDIRECT3DVERTEXBUFFER9 m_pVertexBuffer; //粒子頂點緩存LPDIRECT3DTEXTURE9 m_pTexture[6]; //雪花紋理數組public:SnowParticleClass(LPDIRECT3DDEVICE9 pd3dDevice); //構造函數~SnowParticleClass(); //析構函數HRESULT InitSnowParticle(); //粒子系統初始化函數HRESULT UpdateSnowParticle( float fElapsedTime); //粒子系統更新函數HRESULT RenderSnowParticle( ); //粒子系統渲染函數 };

24.4 雪花粒子系統的實現

又到了做填空題的時候,對著上面我們勾勒出來的SnowParticleClass 類,有5 個函數需要填上實現代碼:
首先呢,構造函數:
//------------------------------------------------------------------------------------------------- // Desc: 構造函數 //------------------------------------------------------------------------------------------------- SnowParticleClass::SnowParticleClass(LPDIRECT3DDEVICE9 pd3dDevice) {//給各個參數賦初值m_pd3dDevice=pd3dDevice;m_pVertexBuffer=NULL; for(int i=0; i<5; i++)m_pTexture[i] = NULL; }接下來, 粒子系統初始化函數lnitSnowParticle() 。首先, 調用srand 重新播種一下隨機數種子。然后for 循環為所有的雪花粒子賦予獨一無二的各項屬性值。接著,用講爛了的頂點緩存使用五步曲的其中三步為代表著所有雪花粒子屬性的一個頂點緩存賦值,最后調用6 次D3DXCreateTextureFromFile 從文件加載6 種不同的雪花紋理邊來。這6 種雪花紋理圖是按照素材PS 出來,分別導出的,效果圖在下面,它們還不錯,各有特點, 非常漂亮:

按照上面的思考, InitSnowParticle()函數的實現代碼我們就知道怎么寫了:
//------------------------------------------------------------------------------------------------- // Name: SnowParticleClass::InitSnowParticle( ) // Desc: 粒子系統初始化函數 //------------------------------------------------------------------------------------------------- HRESULT SnowParticleClass::InitSnowParticle( ) {//初始化雪花粒子數組srand(GetTickCount());for(int i=0; i<PARTICLE_NUMBER; i++){ m_Snows[i].x = float(rand()%SNOW_SYSTEM_LENGTH_X-SNOW_SYSTEM_LENGTH_X/2);m_Snows[i].z = float(rand()%SNOW_SYSTEM_WIDTH_Z-SNOW_SYSTEM_WIDTH_Z/2);m_Snows[i].y = float(rand()%SNOW_SYSTEM_HEIGHT_Y);m_Snows[i].RotationY = (rand()%100)/50.0f*D3DX_PI;m_Snows[i].RotationX = (rand()%100)/50.0f*D3DX_PI;m_Snows[i].FallSpeed = 300.0f + rand()%500;m_Snows[i].RotationSpeed = 5.0f + rand()%10/10.0f;m_Snows[i].TextureIndex = rand()%6;}//創建雪花粒子頂點緩存m_pd3dDevice->CreateVertexBuffer( 4*sizeof(POINTVERTEX), 0, D3DFVF_POINTVERTEX,D3DPOOL_MANAGED, &m_pVertexBuffer, NULL );//填充雪花粒子頂點緩存POINTVERTEX vertices[] ={{ -30.0f, 0.0f, 0.0f, 0.0f, 1.0f, },{ -30.0f, 60.0f, 0.0f, 0.0f, 0.0f, },{ 30.0f, 0.0f, 0.0f, 1.0f, 1.0f, }, { 30.0f, 60.0f, 0.0f, 1.0f, 0.0f, }};//加鎖VOID* pVertices;m_pVertexBuffer->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 );//訪問memcpy( pVertices, vertices, sizeof(vertices) );//解鎖m_pVertexBuffer->Unlock();//創建6種雪花紋理D3DXCreateTextureFromFile( m_pd3dDevice, L"GameMedia\\snow1.jpg", &m_pTexture[0] );D3DXCreateTextureFromFile( m_pd3dDevice, L"GameMedia\\snow2.jpg", &m_pTexture[1] );D3DXCreateTextureFromFile( m_pd3dDevice, L"GameMedia\\snow3.jpg", &m_pTexture[2] );D3DXCreateTextureFromFile( m_pd3dDevice, L"GameMedia\\snow4.jpg", &m_pTexture[3] );D3DXCreateTextureFromFile( m_pd3dDevice, L"GameMedia\\snow5.jpg", &m_pTexture[4] );D3DXCreateTextureFromFile( m_pd3dDevice, L"GameMedia\\snow6.jpg", &m_pTexture[5] );return S_OK; }接著我們來看一下粒子系統更新函數UpdateSnowParticle 怎么實現。其實非常簡單,就是一個for 循環遍歷所有的粒子,看有哪些需要更新的就可以了。對于這個雪花粒子系統, 需要更新一下每個粒子的Y 坐標, 判斷是否到了“地面”,然后還要改變其自旋角度。據此,代碼寫出來就是這樣了: //------------------------------------------------------------------------------------------------- // Name: SnowParticleClass::UpdateSnowParticle( ) // Desc: 粒子系統更新函數 //------------------------------------------------------------------------------------------------- HRESULT SnowParticleClass::UpdateSnowParticle( float fElapsedTime) {//一個for循環,更新每個雪花粒子的當前位置和角度for(int i=0; i<PARTICLE_NUMBER; i++){m_Snows[i].y -= m_Snows[i].FallSpeed*fElapsedTime;//如果雪花粒子落到地面, 重新將其高度設置為最大if(m_Snows[i].y<0)m_Snows[i].y = SNOW_SYSTEM_WIDTH_Z;//更改自旋角度m_Snows[i].RotationY += m_Snows[i].RotationSpeed * fElapsedTime;m_Snows[i].RotationX += m_Snows[i].RotationSpeed * fElapsedTime;}return S_OK; }最后來看一下最關鍵的粒子系統渲染函數RenderSnowParticle 怎么寫。首先禁用照明,然后設置紋理狀態,接著設置Alpha 混合系數,設置背面消隱模式為不剔除,最后就開始渲染。需要注意的是,設置Alpha 混合系數,之前沒有專門講解過,這里簡單理解它的功能為進行透明貼圖就行了,就是我們在寫GDI 游戲小程序的時候一直在做的糾結事情,把圖片背景的黑邊去掉。好了,思路有了,寫代碼還會難嗎? //------------------------------------------------------------------------------------------------- // Name: SnowParticleClass::RenderSnowParticle( ) // Desc: 粒子系統渲染函數 //------------------------------------------------------------------------------------------------- HRESULT SnowParticleClass::RenderSnowParticle( ) {//禁用照明效果m_pd3dDevice->SetRenderState( D3DRS_LIGHTING, false );//設置紋理狀態m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); //將紋理顏色混合的第一個參數的顏色值用于輸出m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE ); //紋理顏色混合的第一個參數的值就取紋理顏色值m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); //縮小過濾狀態采用線性紋理過濾m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); //放大過濾狀態采用線性紋理過濾//設置Alpha混合系數m_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, true); //打開Alpha混合m_pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE); //源混合系數設為1m_pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE); //目標混合系數設為1//設置剔出模式為不剔除任何面m_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );//渲染雪花for(int i=0; i<PARTICLE_NUMBER; i++){//構造并設置當前雪花粒子的世界矩陣static D3DXMATRIX matYaw, matPitch, matTrans, matWorld;D3DXMatrixRotationY(&matYaw, m_Snows[i].RotationY);D3DXMatrixRotationX(&matPitch, m_Snows[i].RotationX);D3DXMatrixTranslation(&matTrans, m_Snows[i].x, m_Snows[i].y, m_Snows[i].z);matWorld = matYaw * matPitch * matTrans;m_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld);//渲染當前雪花粒子m_pd3dDevice->SetTexture( 0, m_pTexture[m_Snows[i].TextureIndex] ); //設置紋理m_pd3dDevice->SetStreamSource(0, m_pVertexBuffer, 0, sizeof(POINTVERTEX)); //把包含的幾何體信息的頂點緩存和渲染流水線相關聯 m_pd3dDevice->SetFVF(D3DFVF_POINTVERTEX); //設置FVF靈活頂點格式m_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2); //繪制}//恢復相關渲染狀態:Alpha混合 、剔除狀態、光照m_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, false);m_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CCW );m_pd3dDevice->SetRenderState( D3DRS_LIGHTING, true );return S_OK; }在寫渲染代碼的時候,如果繪制的物體很多,那么我們需要養成好習慣,狀態設了之后再渲染,渲染完成之后要還原渲染之前時的狀態。需要繪制幾部分內容,就這樣做幾次。I

析構函數就很簡單了,就是收拾殘局,看看有什么COM 接口要釋放的:

//------------------------------------------------------------------------------------------------- // Desc: 析構函數 //------------------------------------------------------------------------------------------------- SnowParticleClass::~SnowParticleClass() {SAFE_RELEASE(m_pVertexBuffer);for(int i=0;i<3; i++){SAFE_RELEASE(m_pTexture[i]);} }

24.5 雪花飛揚粒子類的使用

與類打交道封裝功能和我們經歷的生活一樣,也是一個先苦后甜的過程。
設計和實現這個類的時候或許是苦澀的,但是先苦后甜是必須的,寫完這個類之后,用起來非常地方便,只用幾行代碼, 一個唯美的雪花飛揚景象就加入到我們的游戲場景中了。
也就是如下的3 步:
1:首先,定義一個SnowParticleClass 類的全局指針實例:

SnowParticleClass* g_pSnowParticles = NULL; //雪花粒子系統的指針實例 2:然后,在初始化階段拿著雪花飛揚類的指針對象SnowParticleClass 到處“指”,創建并初始化粒子系統:

//創建并初始化雪花粒子系統g_pSnowParticles = new SnowParticleClass(g_pd3dDevice);g_pSnowParticles->InitSnowParticle(); 3:最后,就是在Render 函數中依然是拿著雪花類的指針對象g_pSnowParticles 先指一下UpdateSnowParticle 函數,更新粒子系統,然后再指一下RenderSnowParticle 函數,進行渲染。

//繪制雪花粒子系統g_pSnowParticles->UpdateSnowParticle(fTimeDelta);g_pSnowParticles->RenderSnowParticle();另外,需要注意上面更新粒子系統的UpdateSnowParticle 函數,我們用到了一個流逝時間參數fTimeDelta ,所以就需要把我們服役多年的消息循環改成如下含有流逝時間的更加先進的消息循環體系,然后讓Direct3D_Update 和Direct3D_Render 各增加一個代表流逝時間的fTimeDelta 參數。

//消息循環過程MSG msg = { 0 }; //初始化msgwhile( msg.message != WM_QUIT ) //使用while循環{static FLOAT fLastTime = (float)::timeGetTime();static FLOAT fCurrTime = (float)::timeGetTime();static FLOAT fTimeDelta = 0.0f;fCurrTime = (float)::timeGetTime();fTimeDelta = (fCurrTime - fLastTime) / 1000.0f;fLastTime = fCurrTime;if( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) ) //查看應用程序消息隊列,有消息時將隊列中的消息派發出去。{TranslateMessage( &msg ); //將虛擬鍵消息轉換為字符消息DispatchMessage( &msg ); //該函數分發一個消息給窗口程序。}else{Direct3D_Update(hwnd,fTimeDelta); //調用更新函數,進行畫面的更新Direct3D_Render(hwnd,fTimeDelta); //調用渲染函數,進行畫面的渲染 }}

24.6 示例程序D3Ddemo19

本節示例程序在之前的基礎上又增加了兩個文件,也就是實現雪花飛揚粒子系統類的源文件和 頭文件。全部文件數量增加到了12 個,它們的列表如下圖所示。


我們依舊只貼出最能體現思想的、提綱輩領的main.cpp 中的核心代碼,首先依然是我們的老朋友Object_Init()函數:

//-----------------------------------【Object_Init( )函數】-------------------------------------- // 描述:渲染資源初始化函數,在此函數中進行要被渲染的物體的資源的初始化 //-------------------------------------------------------------------------------------------------- HRESULT Objects_Init() {//創建字體D3DXCreateFont(g_pd3dDevice, 36, 0, 0, 1000, false, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, _T("Calibri"), &g_pTextFPS);D3DXCreateFont(g_pd3dDevice, 20, 0, 1000, 0, false, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L"華文中宋", &g_pTextAdaperName); D3DXCreateFont(g_pd3dDevice, 23, 0, 1000, 0, false, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L"微軟雅黑", &g_pTextHelper); D3DXCreateFont(g_pd3dDevice, 26, 0, 1000, 0, false, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, 0, L"黑體", &g_pTextInfor); // 從X文件中加載網格數據LPD3DXBUFFER pAdjBuffer = NULL;LPD3DXBUFFER pMtrlBuffer = NULL;D3DXLoadMeshFromX(L"angle.X", D3DXMESH_MANAGED, g_pd3dDevice, &pAdjBuffer, &pMtrlBuffer, NULL, &g_dwNumMtrls, &g_pMesh);// 讀取材質和紋理數據D3DXMATERIAL *pMtrls = (D3DXMATERIAL*)pMtrlBuffer->GetBufferPointer(); //創建一個D3DXMATERIAL結構體用于讀取材質和紋理信息g_pMaterials = new D3DMATERIAL9[g_dwNumMtrls];g_pTextures = new LPDIRECT3DTEXTURE9[g_dwNumMtrls];for (DWORD i=0; i<g_dwNumMtrls; i++) {//獲取材質,并設置一下環境光的顏色值g_pMaterials[i] = pMtrls[i].MatD3D;g_pMaterials[i].Ambient = g_pMaterials[i].Diffuse;//創建一下紋理對象g_pTextures[i] = NULL;D3DXCreateTextureFromFileA(g_pd3dDevice, pMtrls[i].pTextureFilename, &g_pTextures[i]);}SAFE_RELEASE(pAdjBuffer)SAFE_RELEASE(pMtrlBuffer)//創建柱子D3DXCreateCylinder(g_pd3dDevice, 280.0f, 10.0f, 3000.0f, 60, 60, &g_cylinder, 0);g_MaterialCylinder.Ambient = D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f); g_MaterialCylinder.Diffuse = D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f); g_MaterialCylinder.Specular = D3DXCOLOR(0.5f, 0.0f, 0.3f, 0.3f); g_MaterialCylinder.Emissive = D3DXCOLOR(0.0f, 0.0f, 0.0f, 1.0f);// 設置光照 ::ZeroMemory(&g_Light, sizeof(g_Light)); g_Light.Type = D3DLIGHT_DIRECTIONAL; g_Light.Ambient = D3DXCOLOR(0.7f, 0.7f, 0.7f, 1.0f); g_Light.Diffuse = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f); g_Light.Specular = D3DXCOLOR(0.9f, 0.9f, 0.9f, 1.0f); g_Light.Direction = D3DXVECTOR3(1.0f, 1.0f, 1.0f); g_pd3dDevice->SetLight(0, &g_Light); g_pd3dDevice->LightEnable(0, true); g_pd3dDevice->SetRenderState(D3DRS_NORMALIZENORMALS, true); g_pd3dDevice->SetRenderState(D3DRS_SPECULARENABLE, true);// 創建并初始化虛擬攝像機g_pCamera = new CameraClass(g_pd3dDevice);g_pCamera->SetCameraPosition(&D3DXVECTOR3(0.0f, 1400.0f, -1800.0f)); //設置攝像機所在的位置g_pCamera->SetTargetPosition(&D3DXVECTOR3(0.0f, 1200.0f, 0.0f)); //設置目標觀察點所在的位置g_pCamera->SetViewMatrix(); //設置取景變換矩陣g_pCamera->SetProjMatrix(); //設置投影變換矩陣// 創建并初始化地形g_pTerrain = new TerrainClass(g_pd3dDevice); g_pTerrain->LoadTerrainFromFile(L"GameMedia\\heighmap.raw", L"GameMedia\\terrainstone.jpg"); //從文件加載高度圖和紋理g_pTerrain->InitTerrain(200, 200, 60.0f, 8.0f); //四個值分別是頂點行數,頂點列數,頂點間間距,縮放系數//創建并初始化天空對象g_pSkyBox = new SkyBoxClass( g_pd3dDevice );g_pSkyBox->LoadSkyTextureFromFile(L"GameMedia\\TropicalSunnyDayFront2048.png",L"GameMedia\\TropicalSunnyDayBack2048.png",L"GameMedia\\TropicalSunnyDayRight2048.png",L"GameMedia\\TropicalSunnyDayLeft2048.png", L"GameMedia\\TropicalSunnyDayUp2048.png");//從文件加載前、后、左、右、頂面5個面的紋理圖g_pSkyBox->InitSkyBox(50000); //設置天空盒的邊長//創建并初始化雪花粒子系統g_pSnowParticles = new SnowParticleClass(g_pd3dDevice);g_pSnowParticles->InitSnowParticle();return S_OK; }然后是我們的另外一個好朋友,Direct3D_Render()函數:

//-----------------------------------【Direct3D_Render( )函數】------------------------------- // 描述:使用Direct3D進行渲染 //-------------------------------------------------------------------------------------------------- void Direct3D_Render(HWND hwnd,FLOAT fTimeDelta) {//--------------------------------------------------------------------------------------// 【Direct3D渲染五步曲之一】:清屏操作//--------------------------------------------------------------------------------------g_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER|D3DCLEAR_STENCIL, D3DCOLOR_XRGB(100, 255, 255), 1.0f, 0);//--------------------------------------------------------------------------------------// 【Direct3D渲染五步曲之二】:開始繪制//--------------------------------------------------------------------------------------g_pd3dDevice->BeginScene(); // 開始繪制//--------------------------------------------------------------------------------------// 【Direct3D渲染五步曲之三】:正式繪制//--------------------------------------------------------------------------------------//繪制人物D3DXMATRIX mScal,mRot2,mTrans,mFinal; //定義一些矩陣,準備對大黃蜂進行矩陣變換D3DXMatrixTranslation(&mTrans,50.0f,1200.0f,0.0f);D3DXMatrixScaling(&mScal,3.0f,3.0f,3.0f);mFinal=mScal*mTrans*g_matWorld;g_pd3dDevice->SetTransform(D3DTS_WORLD, &mFinal);//設置模型的世界矩陣,為繪制做準備// 用一個for循環,進行模型的網格各個部分的繪制for (DWORD i = 0; i < g_dwNumMtrls; i++){g_pd3dDevice->SetMaterial(&g_pMaterials[i]); //設置此部分的材質g_pd3dDevice->SetTexture(0, g_pTextures[i]);//設置此部分的紋理g_pMesh->DrawSubset(i); //繪制此部分}//繪制柱子D3DXMATRIX TransMatrix, RotMatrix, FinalMatrix;D3DXMatrixRotationX(&RotMatrix, -D3DX_PI * 0.5f);g_pd3dDevice->SetLight(0, &g_Light); g_pd3dDevice->SetMaterial(&g_MaterialCylinder);g_pd3dDevice->SetTexture(0, NULL);//設置此部分的紋理for(int i = 0; i < 4; i++){D3DXMatrixTranslation(&TransMatrix, -300.0f, 0.0f, -350.0f + (i * 500.0f));FinalMatrix = RotMatrix * TransMatrix ;g_pd3dDevice->SetTransform(D3DTS_WORLD, &FinalMatrix);g_cylinder->DrawSubset(0);D3DXMatrixTranslation(&TransMatrix, 300.0f, 0.0f, -350.0f + (i * 500.0f));FinalMatrix = RotMatrix * TransMatrix ;g_pd3dDevice->SetTransform(D3DTS_WORLD, &FinalMatrix);g_cylinder->DrawSubset(0);}//繪制地形g_pTerrain->RenderTerrain(&g_matWorld, false); //渲染地形,且第二個參數設為false,表示不渲染出地形的線框//繪制天空D3DXMATRIX matSky,matTransSky,matRotSky;D3DXMatrixTranslation(&matTransSky,0.0f,-12000.0f,0.0f);D3DXMatrixRotationY(&matRotSky, -0.000005f*timeGetTime()); //旋轉天空網格, 簡單模擬云彩運動效果matSky=matTransSky*matRotSky;g_pSkyBox->RenderSkyBox(&matSky, false);//繪制雪花粒子系統g_pSnowParticles->UpdateSnowParticle(fTimeDelta);g_pSnowParticles->RenderSnowParticle();//繪制文字信息HelpText_Render(hwnd);//--------------------------------------------------------------------------------------// 【Direct3D渲染五步曲之四】:結束繪制//--------------------------------------------------------------------------------------g_pd3dDevice->EndScene(); // 結束繪制//--------------------------------------------------------------------------------------// 【Direct3D渲染五步曲之五】:顯示翻轉//--------------------------------------------------------------------------------------g_pd3dDevice->Present(NULL, NULL, NULL, NULL); // 翻轉與顯示}到目前為止,我們用所學的知識寫出來的游戲場景程序已經比較炫了, 一些運行截圖如下:



24.7 章節小憩

我們可以發現,其實Direct3D 的固定功能流水線學到目前為止,基礎知識也就那么多,頂點緩存、索引緩存、四大變換、紋理映射、網格、模板緩存等等,把它們其中的幾個合理地組合在一起運用一下就是新的知識,這就衍生出了我們最近三章中講到的地形、天空、粒子系統等等知識。



總結

以上是生活随笔為你收集整理的第24章 让唯美的雪花飘扬——三维粒子系统的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

日本黄色免费在线观看 | 91chinesexxx| 久久成人高清 | 国产一区二区久久久久 | 字幕网在线观看 | 成人午夜毛片 | 色九九视频 | 成人免费视频观看 | 天天操天天色天天 | www国产亚洲精品久久网站 | 国产黄色在线看 | 久久久噜噜噜久久久 | 欧美一区免费观看 | 国产99亚洲| 亚洲区另类春色综合小说校园片 | 粉嫩av一区二区三区四区在线观看 | 欧美精品一区二区三区一线天视频 | 91在线精品一区二区 | 中文字幕电影一区 | 免费看毛片网站 | 成年人在线观看免费视频 | 久久久国产精品视频 | 中文字幕 在线看 | 久久久久久久久久久久99 | 国内精品久久久久久久97牛牛 | 人人澡人人爽欧一区 | 激情欧美xxxx | 91精品视频在线免费观看 | 欧美日韩国产网站 | 国产精品第一视频 | 操少妇视频 | 激情综合一区 | 玖玖在线免费视频 | 成人精品久久久 | 成人av免费在线看 | 99国产精品 | 黄色成人影院 | 日韩欧在线 | 天堂av色婷婷一区二区三区 | 国产高清视频免费在线观看 | 久久综合综合久久综合 | av黄色免费网站 | 日本免费久久高清视频 | 国产精品日韩 | 99热这里只有精品国产首页 | 欧美日韩免费在线观看视频 | 国产999精品久久久久久绿帽 | 天天操月月操 | 成人永久免费 | 911av视频 | 日韩黄视频 | 欧美激情亚洲综合 | 美国人与动物xxxx | 成人黄色在线看 | 久久电影中文字幕视频 | 99热9 | 国产精品高 | 精品一二三四五区 | 在线免费av电影 | 精品免费久久 | 国产黄色精品在线观看 | 亚洲最大av在线播放 | 日韩黄色在线电影 | 五月婷婷国产 | 中文网丁香综合网 | 国产 视频 高清 免费 | 国产黄色片免费观看 | 缴情综合网五月天 | 友田真希av| 天天摸日日操 | 97色国产 | 亚洲精区二区三区四区麻豆 | 99r在线观看 | 狠狠综合久久av | 337p日本欧洲亚洲大胆裸体艺术 | 人人干干人人 | 色综合天天综合网国产成人网 | 久久久免费观看完整版 | 日韩有码第一页 | 国产精品123| 黄色小说免费在线观看 | 婷婷激情五月综合 | 国产视频在线免费 | 激情丁香婷婷 | 亚洲伊人网在线观看 | 国产精品网站 | 天天搞天天 | 爱爱av网| 黄色成人在线观看 | 狠狠色狠狠综合久久 | 色丁香色婷婷 | 午夜视频在线观看网站 | 亚洲欧美日韩精品久久奇米一区 | 在线中文视频 | 久草在线免 | 99精品热视频只有精品10 | 91精品伦理| 摸bbb搡bbb搡bbbb | 久久久久一区二区三区四区 | 青青草在久久免费久久免费 | 日韩aⅴ视频 | 中文字幕在线视频一区二区 | 91亚洲精品国偷拍 | 国产精品1区 | 日韩r级电影在线观看 | 欧美福利网址 | 国产精品欧美激情在线观看 | 97视频总站| 亚洲精品国产精品久久99 | 国产高清久久久 | 亚洲成人xxx | 国产在线高清精品 | 4438全国亚洲精品观看视频 | 亚洲一区美女视频在线观看免费 | 欧美另类网站 | 麻豆传媒视频在线免费观看 | 亚洲精品视频在线观看免费视频 | 国产精品久久久久久久久久不蜜月 | 国产精品都在这里 | 中午字幕在线观看 | 国产h在线播放 | 免费在线观看a v | 91精品伦理| 欧美精品一区二区在线观看 | 国产精品久久久久久久久久久免费看 | 涩涩爱夜夜爱 | 97理论电影 | 91av大全 | 中文字幕在线观看一区二区三区 | 欧美91精品国产自产 | 免费一级片久久 | 欧美亚洲专区 | 国产成人av片 | 在线视频18在线视频4k | avav片 | 最近2019中文免费高清视频观看www99 | 99亚洲国产精品 | 久久成人人人人精品欧 | 免费碰碰 | 精品天堂av | 91粉色视频 | 97视频在线看 | 最近日本mv字幕免费观看 | 99热这里只有精品在线观看 | www.国产精品| 精品一区在线看 | 久久歪歪 | 国产综合精品一区二区三区 | 国产高清在线免费观看 | 久久午夜国产精品 | 国产伦精品一区二区三区免费 | 91麻豆精品国产91久久久久 | 日本黄色特级片 | 91看片成人 | 免费观看的黄色片 | zzijzzij亚洲成熟少妇 | 国产精品不卡在线 | 美州a亚洲一视本频v色道 | 欧美亚洲成人免费 | 欧美激情第八页 | 成人免费视频网 | 久日视频| 精品国产乱码久久 | 久久精品成人欧美大片古装 | 欧美超碰在线 | 精品嫩模福利一区二区蜜臀 | 精品一区 精品二区 | 精品久久国产 | 精品国产伦一区二区三区 | 91大神电影 | 亚洲欧洲久久久 | 91丨九色丨国产丨porny精品 | 欧美一级艳片视频免费观看 | 亚洲国产网站 | 国内精品久久久久影院一蜜桃 | 黄色一区三区 | 五月激情av | 亚洲综合小说 | 日韩av手机在线看 | 国产18精品乱码免费看 | 久久精品香蕉视频 | 国产精品理论片在线播放 | 免费在线色电影 | 欧美一级视频一区 | 精品国产乱码久久久久久天美 | 最新日本中文字幕 | 91精品国产一区 | 蜜桃久久久| 国产伦精品一区二区三区在线 | 超碰在线公开 | 久久久久久久亚洲精品 | 国产一区二区在线免费播放 | 91在线视频精品 | 成人a免费视频 | 亚洲国产三级在线 | 国内精品免费 | 国产精品不卡 | 中文字幕免费观看 | 97超碰中文字幕 | 免费观看xxxx9999片 | 国产精品毛片一区视频 | 色91在线视频 | 丝袜+亚洲+另类+欧美+变态 | 亚洲 综合 国产 精品 | 一区二区三区在线免费 | 国产aaa毛片 | av在线8 | 中文字幕免费久久 | 亚洲在线黄色 | 久久一区二区三区超碰国产精品 | 精品久久久久久久久中文字幕 | 片网址 | 狠狠操电影网 | 精品视频免费久久久看 | 久久热亚洲 | 五月婷婷一级片 | 九九99靖品 | 九九九九热精品免费视频点播观看 | 成人一级在线观看 | 国产精品久久久久久久久岛 | av免费福利 | 高清av免费看 | 99精品毛片| 91av视频免费观看 | 婷婷中文字幕 | 久久精品中文字幕一区二区三区 | 三级av免费 | 国产精品一区二区麻豆 | 99久久婷婷国产一区二区三区 | 在线影院中文字幕 | 99色网站 | 开心激情网五月天 | 免费视频久久久久久久 | 亚洲mv大片欧洲mv大片免费 | 成人在线免费观看视视频 | 在线免费av网站 | 国产精品美女在线 | 最新国产视频 | 亚洲乱码精品 | 一区二区精 | 美女免费视频观看网站 | 91在线免费视频观看 | 婷婷亚洲综合五月天小说 | 国产精品黄网站在线观看 | 欧美日韩中文在线视频 | 成人一级在线观看 | www色 | 久久婷婷网| 久久精品久久久久电影 | 最近中文字幕免费大全 | 蜜臀av.com | 五月开心婷婷 | 在线观看国产日韩欧美 | 在线导航福利 | 在线看一区 | 99免在线观看免费视频高清 | 久久综合九色综合网站 | 国产流白浆高潮在线观看 | 91三级视频 | 97超碰在线免费 | 99久热在线精品视频 | 色婷在线 | 奇米影视777影音先锋 | 欧美视频99 | 最新av在线播放 | 久久超碰网 | 久久久久激情视频 | 久久精品欧美视频 | 草久在线播放 | 免费日韩一区二区三区 | 手机在线黄色网址 | 亚洲国产免费看 | 在线免费黄色毛片 | 天天·日日日干 | aaa亚洲精品一二三区 | 一区二区三区国产精品 | 91禁看片| 免费三级影片 | 91完整版在线观看 | 奇米影视777影音先锋 | 免费网站黄色 | 日韩欧美视频免费在线观看 | 日韩啪啪小视频 | 亚洲天堂网视频 | 日韩av图片 | 中国一区二区视频 | 日本中文字幕在线看 | 婷婷丁香在线观看 | 天天视频色版 | 夜夜躁天天躁很躁波 | 黄色在线观看www | 91日韩在线 | 97超碰精品 | 欧美日韩国产三级 | 日韩在线观看视频免费 | 亚洲国产精品久久久久 | 天天操天天干天天插 | 欧美日韩国产xxx | 久久久久久久久影视 | 精品国产一区二区三区蜜臀 | 91看片在线免费观看 | 久草爱| 天天弄天天操 | 久久不卡av | 在线观看国产91 | 日韩av三区 | 狠狠干我 | 中文有码在线视频 | 黄色aaaaa| 天天做天天爱天天综合网 | 久久女同性恋中文字幕 | 国产91大片 | 亚洲精品大全 | 五月婷婷在线视频观看 | 日韩免费不卡av | 91视频免费| 超级碰碰碰视频 | 欧美一二三视频 | 日本最新一区二区三区 | 又黄又爽免费视频 | 一区二区三区在线观看免费视频 | 日日夜夜婷婷 | 国产人免费人成免费视频 | 99操视频 | 日本精品中文字幕在线观看 | 伊甸园永久入口www 99热 精品在线 | 国产a国产a国产a | 在线观看亚洲专区 | 在线观看免费版高清版 | 一区二区三区四区五区在线 | 在线播放第一页 | 精品欧美一区二区三区久久久 | 国产精品视屏 | 久久久久久久久爱 | 2018好看的中文在线观看 | 国产黄色特级片 | 亚洲国产剧情 | 亚洲人在线7777777精品 | 欧美在线资源 | 在线看日韩 | 国产在线 一区二区三区 | 日本一区二区不卡高清 | 91在线免费视频观看 | 国产一区在线不卡 | 国产小视频在线播放 | 在线观看免费高清视频大全追剧 | 日本精品午夜 | 91视频在线免费 | 激情av一区二区 | 中文字幕av全部资源www中文字幕在线观看 | 在线视频app| 欧美精品久久人人躁人人爽 | 欧美日韩免费观看一区=区三区 | 亚洲最大av网 | 日韩在线观看精品 | 俺要去色综合狠狠 | 国产精品久久精品 | 成人三级网站在线观看 | 免费黄色网址大全 | 精品国产诱惑 | 国产91av视频在线观看 | 成人91在线| 超碰九九| 爱情影院aqdy鲁丝片二区 | 久久久免费毛片 | 欧美一级性视频 | 久久久免费精品国产一区二区 | 深爱激情五月综合 | 精品91视频 | 亚洲国产精品va在线看黑人 | 国产福利网站 | 在线观看国产麻豆 | 91免费网站在线观看 | 日韩精品一区二区三区外面 | 国产高清在线a视频大全 | 丁香花在线视频观看免费 | 国产69久久久 | 久久久久久久久久久久亚洲 | 国产免费黄色 | 亚洲欧洲日韩在线观看 | 97色婷婷成人综合在线观看 | 婷婷六月丁香激情 | 在线观看91精品视频 | 日韩一级片观看 | 国产手机av在线 | 狠狠躁日日躁狂躁夜夜躁av | 欧美久久久久久久久久久久 | 久久99亚洲热视 | 国产精品免费视频网站 | 91激情视频在线播放 | 欧美日韩国产精品久久 | 在线观看香蕉视频 | 亚洲小视频在线观看 | 岛国大片免费视频 | 中文字幕在线网址 | 亚洲色影爱久久精品 | 伊人影院得得 | 中文字幕在线观看完整版 | 日韩精品在线免费观看 | 黄色成年网站 | 在线精品亚洲 | 成人av电影免费在线观看 | 色综合天天综合 | 久久成人欧美 | 91精品久久久久久粉嫩 | 天天鲁一鲁摸一摸爽一爽 | 81精品国产乱码久久久久久 | 国产一区视频免费在线观看 | 色狠狠狠| 久久综合婷婷国产二区高清 | 8x成人免费视频 | 狠狠伊人 | 久久久久久国产精品免费 | 在线观看视频一区二区三区 | 日本精品视频在线播放 | 久久精品这里都是精品 | 亚洲精品免费在线 | 亚洲在线观看av | 欧美va在线观看 | 日韩三级视频在线观看 | 香蕉视频久久久 | 亚洲一区二区三区四区精品 | 国产亚洲一区二区在线观看 | 成人小视频在线免费观看 | 中文字幕日本电影 | 国产一区免费观看 | 色综合久久五月天 | 国产精品无av码在线观看 | 97夜夜澡人人爽人人免费 | av久久在线| 亚洲国产黄色片 | 国产专区在线播放 | 欧美日韩二区三区 | 在线免费视频一区 | 久久玖| 免费高清男女打扑克视频 | 四虎成人在线 | 四虎影视精品永久在线观看 | 激情视频免费在线观看 | 国产精品大片 | av丁香| 国产不卡在线观看 | 草在线| 欧美日韩不卡在线观看 | 久久试看| 日本黄色免费大片 | 精品国产理论片 | 91欧美国产 | 亚洲激情综合 | 精品欧美日韩 | 国产精品久久 | 国产一区二区不卡视频 | 国产黄色大全 | 久久国产精品免费一区 | 国产精品久久久久久久99 | 国产麻豆精品一区二区 | 精品日韩视频 | 亚洲专区免费观看 | 欧美午夜寂寞影院 | 亚洲精品在线观看不卡 | 成人av直播 | 黄色片亚洲 | 在线观看亚洲精品 | 中文字幕免费在线 | 午夜影视av | 国产精品久久久久久久免费观看 | 国产乱视频 | 国产精品视频99 | 久久久免费少妇 | 在线观看中文字幕2021 | 麻豆一级视频 | 欧美在线18 | 天天操天天是 | 国产黄a三级三级三级三级三级 | 91亚洲精品久久久蜜桃借种 | 伊人五月天.com | 欧美精品在线观看 | 狠狠色香婷婷久久亚洲精品 | 偷拍视频一区 | 欧美亚洲一级片 | 黄色91在线| 一本一道久久a久久综合蜜桃 | 91九色porny在线 | 狠狠久久 | 日韩av在线资源 | 国产日韩中文字幕 | 成人黄色在线观看视频 | 亚洲劲爆av| 日韩不卡高清 | 国产成人精品一区二区三区福利 | 一色屋精品视频在线观看 | 超碰公开97 | 天天性天天草 | 国产无套精品久久久久久 | 欧美欧美 | 日韩免| 在线色网站| 91免费观看视频网站 | 国产精品麻豆一区二区三区 | 国产精品精品久久久久久 | 久草在线视频网 | 国产免费午夜 | av线上免费观看 | 久久国产精品99久久久久久丝袜 | 日韩av视屏| 日韩三级精品 | 国产在线毛片 | 国产精品亚洲综合久久 | 久久久久久国产精品亚洲78 | 免费av免费观看 | 成年人在线看片 | 91看片在线看片 | 久久激情视频免费观看 | 激情丁香 | 国产小视频免费观看 | a黄色片在线观看 | 免费高清无人区完整版 | 色狠狠狠 | 亚洲免费av在线播放 | 91在线色| 国产理论片在线观看 | 亚洲免费永久精品国产 | 色偷偷88888欧美精品久久 | 欧美精品久久久久久久久久白贞 | 伊人婷婷激情 | 西西444www大胆无视频 | 成人欧美一区二区三区在线观看 | 国产视频一 | 国产中文欧美日韩在线 | 最新国产精品久久精品 | 久久久久五月天 | 色午夜 | 日韩精品久久久久久久电影竹菊 | 色老板在线视频 | 国产成人一级 | 久久综合免费视频影院 | 久久久久久黄色 | 天天插狠狠干 | 欧美一区二区伦理片 | 日日碰狠狠添天天爽超碰97久久 | 久久久国产精品人人片99精片欧美一 | 国产精品一区二区三区免费看 | 国产精品av电影 | 午夜在线日韩 | 免费日韩 精品中文字幕视频在线 | 欧美日韩国产综合网 | www久久久久| 午夜精品一区二区三区在线视频 | 天天色天天操综合网 | 97成人资源 | 91麻豆免费看 | 国产三级香港三韩国三级 | 97在线超碰 | 黄色软件在线看 | 日韩国产精品毛片 | 国产精品激情 | 涩涩伊人| www黄色 | 久久国产精品99久久人人澡 | 久久久黄色av | 欧美小视频在线观看 | 国产999精品久久久久久绿帽 | 久久综合狠狠 | 91麻豆精品久久久久久 | www.五月婷 | 亚洲一级二级 | 又黄又爽免费视频 | 国产精品99久久99久久久二8 | 91大神免费在线观看 | 成人在线观看资源 | 精品色综合 | 欧洲色综合 | 黄色.com| 久久亚洲综合国产精品99麻豆的功能介绍 | 一区二区 不卡 | 首页国产精品 | 国产一区视频在线观看免费 | 久热久草在线 | 久艹在线播放 | 在线不卡中文字幕播放 | 久草在线视频精品 | 综合色影院 | 91传媒视频在线观看 | 精品国产综合区久久久久久 | 91精品国产成人观看 | 肉色欧美久久久久久久免费看 | 婷婷丁香色 | 久草电影免费在线观看 | 久久久午夜精品理论片中文字幕 | 久久久性 | 激情婷婷综合网 | 韩日电影在线 | 久久精品免费播放 | 992tv成人免费看片 | 97国产精品 | 中文字幕有码在线播放 | 激情av资源 | 麻豆一区二区三区视频 | 亚洲久草在线视频 | 国产黄a三级三级三级三级三级 | 99久久精品久久久久久清纯 | 久久不射电影院 | 久久国产美女视频 | 国产精品18久久久 | 国产高清在线a视频大全 | 国产高清视频在线播放 | 丁香六月欧美 | 青春草视频在线播放 | 国产一在线精品一区在线观看 | 日韩在线视频网 | 免费看在线看www777 | 天天曰夜夜操 | 中日韩欧美精彩视频 | 福利一区二区在线 | 中文字幕乱码视频 | www色,com| 欧美日本不卡 | 美腿丝袜av | 国产最顶级的黄色片在线免费观看 | 国产精品video爽爽爽爽 | 亚洲精品国产综合99久久夜夜嗨 | 国产亚洲欧洲 | 日韩美精品视频 | 国产又粗又猛又黄 | 成人av免费播放 | 国产精品精品视频 | 成人av电影网址 | 99热精品视| 国产免费一区二区三区最新 | 成人毛片a| www.五月天色 | 日本精品中文字幕在线观看 | 国产日韩欧美中文 | 国产精品完整版 | 日韩高清av | 欧美另类高清 | 久久免费在线 | 久久久精选 | 四虎成人精品在永久免费 | 麻豆高清免费国产一区 | 亚洲精品国偷拍自产在线观看蜜桃 | 三级在线播放视频 | 国产精品原创视频 | 欧美a在线看 | 一区二区视频欧美 | 日日夜夜狠狠 | 久久久久高清毛片一级 | 亚洲视频免费视频 | 免费午夜在线视频 | 天天做天天爽 | 黄色av一区 | 国际精品久久久久 | 99视频+国产日韩欧美 | 丁香花在线视频观看免费 | 欧美一级电影免费观看 | 91自拍视频在线 | 91成人亚洲 | 国产手机av | aa一级片| av看片在线 | 日韩视频中文 | 美女黄频视频大全 | 亚洲欧美日韩在线一区二区 | 成人一级片视频 | 免费视频97 | 欧美日韩亚洲在线观看 | 国产群p | 国产精品毛片久久久久久久 | 成人免费一区二区三区在线观看 | 91色蜜桃 | 手机看片国产 | www.久久久 | 天天操天天干天天爽 | 国产小视频免费在线观看 | 成人av播放| 黄色福利网 | 国产91欧美 | 精品国产aⅴ麻豆 | 91丨九色丨91啦蝌蚪老版 | 欧美高清成人 | 久久在线一区 | 国产黄色片免费 | 国产精品视频 | 又黄又刺激视频 | 成人午夜黄色影院 | 亚洲作爱视频 | 亚洲 综合 精品 | 狠狠亚洲 | 国产手机精品视频 | 国产综合精品久久 | 国产精品免费观看国产网曝瓜 | 中文字幕a∨在线乱码免费看 | 亚洲第一中文字幕 | 手机看片国产日韩 | 国产黄色看片 | 久久精品看 | 18国产精品白浆在线观看免费 | 开心丁香婷婷深爱五月 | 欧美精品做受xxx性少妇 | 亚洲精品xx | 欧美色图亚洲图片 | www日日| 欧美日韩18 | 国产成人一区二区精品非洲 | 精品国内 | 国产第一页在线播放 | 在线观看久久久久久 | 在线观看视频日韩 | www一起操 | 国产精品久久久久久一二三四五 | 国内成人精品视频 | 三级黄色三级 | 一区二区三区动漫 | 免费看的国产视频网站 | 亚欧洲精品视频在线观看 | 韩国在线一区 | 在线观看中文字幕一区二区 | 成人免费一级片 | 女人18精品一区二区三区 | 久久一级片 | 亚洲精品色视频 | 狠狠操天天操 | 一二三久久久 | 97色噜噜 | 国产高清不卡一区二区三区 | 日韩av一区二区在线播放 | 国产日本在线观看 | 国产精品久久久久永久免费观看 | 在线观看黄色免费视频 | 一区二区三区四区免费视频 | 中文字幕在线影视资源 | 91精品在线免费观看视频 | 日韩高清不卡一区二区三区 | 成 人 黄 色 片 在线播放 | 欧美精品免费视频 | 天天看天天干天天操 | 成人在线视频你懂的 | 久久午夜精品影院一区 | 久久视频免费看 | 亚洲无线视频 | 国产中文字幕视频在线观看 | 久久人人看 | 日韩视频在线观看免费 | 国产成人一区二区三区 | 黄色一级在线免费观看 | 国产一区二区在线观看视频 | 久久亚洲免费视频 | 日日躁天天躁 | aaa毛片视频 | 国产成人久久精品77777综合 | 日韩69视频 | 国产一二三在线视频 | 四虎国产精品免费 | 国产精品久久久久久久久久99 | 美女黄频网站 | 91色综合| 国产黄色播放 | 中文字幕黄色网 | 综合五月 | 欧美日韩一区二区视频在线观看 | 久久久香蕉视频 | 日韩a免费| 日韩网站在线免费观看 | 99爱这里只有精品 | 国产精品久久久久婷婷 | 最近中文字幕大全中文字幕免费 | 亚洲国产成人精品在线观看 | 国产中文字幕在线免费观看 | 国产视频精品久久 | 99精品免费久久久久久日本 | 欧美日韩国产精品一区 | 一区二区视频免费在线观看 | 日韩欧美精品在线观看视频 | 日韩网站中文字幕 | 国产成人三级一区二区在线观看一 | 操操操综合 | 午夜久久美女 | 天堂va欧美va亚洲va老司机 | 国产精品尤物 | 五月婷婷爱 | 国产精品久久嫩一区二区免费 | 九九九九九精品 | 干干日日 | 日日夜精品 | 九色自拍视频 | 五月香婷| 久久久影片| 福利视频午夜 | 国产一级不卡毛片 | 在线色网站 | 久久精品导航 | 欧美亚洲一区二区在线 | 精品国产精品一区二区夜夜嗨 | 成人午夜免费福利 | 娇妻呻吟一区二区三区 | 国产精品自产拍在线观看蜜 | 日韩在线观看 | 99久久一区 | 久久久久久久久久久网 | 天天射天天射天天 | 中文字幕在线观看免费高清完整版 | 久久久久女教师免费一区 | 日日干夜夜草 | 日韩电影一区二区在线 | 2019久久精品 | 欧美性久久久 | 97超碰人人看 | 免费久久网 | 日韩视频免费 | 日韩av一区二区在线 | 97av在线视频免费播放 | 国产手机免费视频 | 超碰国产97 | 亚洲精品色视频 | 日韩在线电影 | 综合久久久久久久久 | 国产精品电影一区 | 91视频麻豆| 国产r级在线观看 | 亚洲男人天堂a | 激情综合色综合久久综合 | 狠狠88综合久久久久综合网 | 四虎成人av | 一本之道乱码区 | 97碰碰碰| 中文字幕一区二区三区四区久久 | 成人免费在线播放 | 欧美激情精品久久久久 | 久草香蕉在线 | 91视频麻豆视频 | 国产精品免费观看国产网曝瓜 | 国产夫妻性生活自拍 | 激情五月六月婷婷 | 精品久久久久一区二区国产 | 国产成人福利片 | av免费网站 | 成人小视频在线播放 | 国产欧美综合在线观看 | 亚洲成aⅴ人片久久青草影院 | 久艹视频在线免费观看 | 国产亚洲人 | 国产一级a毛片视频爆浆 | 成人av午夜 | 国产专区精品 | 日韩免费不卡av | 国产中文欧美日韩在线 | 国产日韩欧美在线看 | 国产黄色片在线 | 久久经典国产 | 黄色美女免费网站 | 久久福利在线 | 久久夜色精品国产欧美一区麻豆 | 亚洲精品在线观看免费 | 99国产精品久久久久老师 | 国产精品久久毛片 | 夜夜躁日日躁狠狠久久av | 精品一区二区综合 | 黄av资源| 色婷婷综合久久久中文字幕 | 国产色女 | 亚洲91在线 | 夜添久久精品亚洲国产精品 | av高清在线 | 亚洲一区天堂 | 一区二区中文字幕在线播放 | 国产婷婷色| 国产三级在线播放 | 99久久精品久久久久久动态片 | 国产小视频在线观看免费 | 天天操天天能 | 日本视频不卡 | 在线影院av | 国产成人三级一区二区在线观看一 | 狠狠色噜噜狠狠 | 国产一卡二卡四卡国 | 国产免费一区二区三区最新6 | 天天色欧美 | 99久久精品免费看国产一区二区三区 | 亚洲精品国偷拍自产在线观看 | 精品国产观看 | 九九国产精品视频 | 色丁香综合| 亚洲欧洲一级 | 中文字幕av日韩 | 久久精品人人做人人综合老师 | 网站在线观看你们懂的 | 色综合五月天 | 狠狠狠色狠狠色综合 | 97视频免费在线看 | 精品国产不卡 | 人交video另类hd | 久草视频在线资源站 | 中文字幕国产精品一区二区 | 中文字幕国产在线 | 国产黄色av | 亚洲永久精品一区 | a色网站 | 夜夜操天天操 | 久久综合免费视频影院 | 欧美激情精品久久久久久变态 | 色资源在线观看 | 精品国产视频在线 | 美女网站久久 | 色综合久久久久综合 | 激情 一区二区 | 亚洲日韩欧美视频 | 成人黄色在线观看视频 | 亚洲精品欧洲精品 | 极品美女被弄高潮视频网站 | 6080yy精品一区二区三区 | 天天操夜夜爱 | 日韩免费在线观看视频 | 日本成人a | 亚洲精品乱码久久久一二三 | 国产婷婷vvvv激情久 | 1区2区视频 | 有码一区二区三区 | 91九色蝌蚪国产 | 欧美在线观看视频一区二区三区 | 日韩天堂网 | 国产精品久久久久一区二区三区共 | 99超碰在线观看 | 欧美做受xxx | 欧美日产在线观看 | 91免费在线播放 | 欧美日韩一级久久久久久免费看 | 亚洲乱码国产乱码精品天美传媒 | 福利视频网址 | 91福利在线观看 | 国产精品大全 | 欧美最猛性xxxxx(亚洲精品) | 亚洲美女精品区人人人人 | 免费亚洲精品视频 | 免费 在线 中文 日本 | 在线中文字幕视频 | 青草视频网 | 久久久蜜桃一区二区 | 亚洲欧美日韩中文在线 | 96精品高清视频在线观看软件特色 | 免费在线h| 亚洲做受高潮欧美裸体 | 精品一区二区免费视频 | 国产精品久久久久久久久久新婚 | 中文字幕资源网在线观看 | 免费日韩在线 | 中文字幕在线播放视频 | 国产精品mv在线观看 | 日韩欧美xx | 日韩av影视在线观看 | 久久久久久高潮国产精品视 | 在线播放一区二区三区 | 狠狠的操| 99在线免费观看视频 | 狠狠色噜噜狠狠狠狠 | 久久精品4 | 国产高清无av久久 | 黄色中文字幕在线 | 欧美日韩视频免费 | 欧美日韩中文字幕视频 | 日韩亚洲在线 | 亚洲国内精品视频 | 韩国三级一区 | 久久综合综合久久综合 | 国产精品九九久久久久久久 | 天天操天天色天天射 | 96亚洲精品久久 | 国产第一页在线观看 | 国产精品入口传媒 | 日韩偷拍精品 | 蜜臀av性久久久久av蜜臀三区 | 丰满少妇对白在线偷拍 | 一区二区 不卡 | 深夜免费福利 | 亚洲欧美偷拍另类 | 国产剧情在线一区 | 国产精品久久久毛片 | 在线看国产精品 | 99r在线视频| 成人久久免费 | 五月婷婷久久综合 | 亚洲在线免费视频 | 美女网站黄在线观看 | 成人三级视频 | 国产又粗又猛又黄又爽的视频 | 天天综合网国产 | 美女福利视频一区二区 | 男女全黄一级一级高潮免费看 | 999久久国精品免费观看网站 | 在线免费观看视频 | 久久超碰99| www.国产在线观看 | 久久免费看a级毛毛片 | 国产.精品.日韩.另类.中文.在线.播放 | 天堂av免费观看 | 激情在线网址 | 国产福利中文字幕 | 亚洲精品高清视频在线观看 | 欧美日韩亚洲国产一区 |