d3d中的粒子系統(4)
14.3具體的粒子系統:雪、火、粒子槍
現在讓我們用cparticlesystem類開始乙個具體的粒子系統,為了說明用意,這些系統的設計很簡單,沒有用到cparticlesystem類所提供的所有靈活性。我們實現雪、火、粒子槍系統。雪系統模擬下落的雪花,火系統模擬看上去像火焰的**,粒子槍系統從照相機位置向對面發射出粒子(用鍵盤)。
14.3.1 例子程式:雪
雪系統類定義如下:
class csnow : public cparticlesystem
; 建構函式提供乙個點給邊界盒結構,邊界盒是粒子系統的成員。邊界盒描述雪花在哪個範圍內(體積範圍)下落,如果雪花出了邊界盒,它將被殺死並再生。這樣,雪系統始終能儲存有同樣數量的激粒子,建構函式的實現:
csnow::csnow(cboundingbox* bounding_box, int num_particles)
同樣注意:我們指定頂點快取的尺寸,每一批的尺寸和開始的偏移。
reset_particle方法建立乙個雪花,在x、z軸隨機的位置並在邊界盒的範圍內。設定y軸高度為邊界盒的頂部。我們給雪花乙個速度,以便讓雪花下落時稍稍向左傾斜。雪花是白色的。
void csnow::reset_particle(sparticleattribute* attr)
update方法更新粒子和粒子間的位置,並且測試粒子是否在系統的邊界盒之外,如果它已經跳出邊界盒,就再重新建立。
void csnow::update(float time_delta)
} 執行程式:
#include "d3dutility.h"
#include "camera.h"
#include "particlesystem.h"
#include
#include
#pragma warning(disable : 4100)
const int width = 640;
const int height = 480;
idirect3ddevice9* g_device;
cparticlesystem* g_snow;
ccamera g_camera(air_craft);
bool setup()
///void cleanup()
///bool display(float time_delta)
///lresult callback wnd_proc(hwnd hwnd, uint msg, wparam word_param, lparam long_param)
return defwindowproc(hwnd, msg, word_param, long_param);
}///
int winapi winmain(hinstance inst, hinstance, pstr cmd_line, int cmd_show)
if(! setup())
enter_msg_loop(display);
cleanup();
g_device->release();
return 0;
} 我是沒有眼淚的人,為了保護自己,今後我可以對任何人殘忍!
粒子系統 3D粒子
你現在可能已經知道了,2d和3d在godot中是彼此的映象。凡是2d中存在的節點,在3d中也存在。所以,自然而然地,particles2d節點有乙個3d的替代品,叫做particles節點。particles節點會發出3d粒子。它不需要紋理,而是需要乙個網格。然而,如果你在屬性中檢視,你會發現不是乙...
U3D粒子系統
每個引擎都不能沒有粒子系統,u3d的粒子系統也同樣相當的強大,更多的細節以後用到慢慢補充。屬性 ellipsoid particle emitter min max size 每個粒子的半徑大小隨機範圍 越大每個粒子就越大,整個粒子系統看起來就越厚 min max energy 每個粒子的能量隨機範...
D3D中的渲染
虛擬世界中渲染幾何體一般來說有三種途徑 自定義座標渲染 d3dx內建模型渲染和外部模型資料渲染。第一步 定義頂點資料結構體 d3d提供了自定義頂點結構的機制,通過自定乙個結構體,來儲存我們所希望具有的頂點資料,例如 stuct colorvertex 頂點結構體定義好之後,需要用靈活頂點格式標記的組...