WEB开发网      濠电娀娼ч崐濠氬疾椤愶附鍋熸い鏍ㄧ〒闂勫嫰鏌﹀Ο渚Ц闁诲氦顕ч湁婵犲﹤楠告禍鍓х磼鏉堛劌绗氶柟宄版嚇閹晠宕归銈嗘濠电偞鍨堕幐鎾磻閹捐秮褰掓偐閻戞﹩妫勯梺鎼炲妼鐎涒晝绮嬪澶樻晝闁挎繂鏌婇敃鍌涚厵閻庢稒锚閻忥絾绻濇繝鍐ㄧ伌闁诡垰鍟村畷鐔碱敂閸♀晙绱樺┑鐐差嚟婵儳螞閸曨剚鍙忛柍鍝勬噹缁€澶嬬箾閹存繄锛嶆鐐灲閹綊宕惰濡插鏌涢妸銉ヮ劉缂佸倸绉归弫鎾绘晸閿燂拷 ---闂備焦瀵уú鈺呭箯閿燂拷
开发学院软件开发VC 也玩视觉效果:VC++编程实现仿真火焰 阅读

也玩视觉效果:VC++编程实现仿真火焰

 2007-03-25 21:33:05 来源:WEB开发网 闂備線娼уΛ鎾箯閿燂拷闂備礁鎲¢崹鐢垫崲閹扮増鍎嶆い鎺戝€甸崑鎾斥槈濞嗗秳娌紓鍌氱▌閹凤拷濠电姭鎷冮崨顓濈捕闂侀潧娲ゅú銊╁焵椤掍胶鈯曢柕鍥╁仧缁辩偤鏁撻敓锟�闂備線娼уΛ鎾箯閿燂拷  闂備胶枪缁绘鈻嶉弴銏犳瀬闁绘劖顐煎☉妯锋瀻闁归偊鍓涘▔姘舵⒑閸涘⿴娈旀繛灞傚妼閳绘捇骞嬪┑鎰濡炪倖姊婚崢褏鎲撮敓锟�
核心提示: 初始化完成后可以通过在后台页面绘图,并在绘制完毕后将后台页面复制到主页面完成对一帧图像的显示:lpDDSBack->Blt(NULL,NULL,NULL,DDBLT_COLORFILL|DDBLT_WAIT, &ddbltfx);ddrval = lpDDSBack->Lock

初始化完成后可以通过在后台页面绘图,并在绘制完毕后将后台页面复制到主页面完成对一帧图像的显示:

lpDDSBack->Blt(NULL,NULL,NULL,DDBLT_COLORFILL|DDBLT_WAIT, &ddbltfx);
ddrval = lpDDSBack->Lock(NULL, &ddsd, 0, NULL) //锁定后台页面
while (ddrval== DDERR_WASSTILLDRAWING);
if( ddrval == DD_OK ){
 fire.render((WORD*)ddsd.lpSurface); //完成对一帧火焰的渲染
 lpDDSBack->Unlock(NULL); //解锁后台页面
}
while( 1 ) {
 ddrval = lpDDSPrimary->Flip( NULL, 0 ); //换页
 if( ddrval == DD_OK )
  break;
 if( ddrval == DDERR_SURFACELOST ){
  ddrval = lpDDSPrimary->Restore(); //恢复主页面
 if( ddrval != DD_OK )
  break;
}
if( ddrval != DDERR_WASSTILLDRAWING )
 break;
}

根据以上程序算法对火焰进行了仿真实验,在速度和仿真结果在视觉的逼真程度上都获得了非常好的效果。右图是从仿真过程中截取的一帧画面,从图中可以看出,虽然在前面的算法设计过程中多处采用了看似过分的近似处理,但并未因此产生负面效果。实验表明,本文采用的在数据缓冲区中对图象进行处理的方法在程序运算和显示的速度上与仿真对象--火焰的复杂程度是无关的,因此用类似的方法完全可以比较容易地实现对其他复杂物理、自然现象的仿真模拟。

  

结论

本文通过对火焰的计算机仿真模拟实现过程,对仿真模拟类程序一般的设计实现过程做了简要介绍。通过对本文所述程序设计思路与实现方法的理解,可以用类似的方法结合实际情况灵活选用诸如OpenGL、Direct3D等不同的软件接口对其他一些自然现象进行仿真模拟。本文所述程序在Windows 98下,由Microsoft Visual C++ 6.0调试通过(需要DirectX 5.0支持)。

上一页  1 2 3 4 5 

Tags:视觉 效果 VC

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接