【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 2989|回复: 2

鼯鼠,请进。关于2D程序性能

[复制链接]
发表于 2007-11-7 10:33:22 | 显示全部楼层 |阅读模式
我的程序是通过D3D的Sprite,来实现2D功能的。我程序中的功能是将电子眼所拍摄的人像,去掉背景颜色显示在程序中。本来一切是很好,由于我机器性能不是太好,每
秒能处理70帧的数据。这样的速度已经完全满足了我的要求,不过当我加入以下的代码的后,性能发生了很大的变化,每秒只有7帧的速度。请问怎么优化,谢谢。
LPDIRECT3DTEXTURE9 m_pCamer;//我将电子眼采集的图像数据,放入到m_pCamer中。
if( FAILED ( hr=D3DXCreateTexture(m_pDevice,640,480,1,0,
  D3DFMT_A8R8G8B8,D3DPOOL_MANAGED,&m_pCamer) ) )
 {
  MessageBox(NULL, TEXT("CreateTexture"), TEXT("Error"), MB_OK);
 }
/*以上为初始化部分*/
/*以下代码在每一帧中处理*/
//此时m_pCamer中已经有电子眼采集的数据了。
if (  SUCCEEDED ( m_pCamer->LockRect( 0, &d3dlrect, NULL, 0 ) ) && SUCCEEDED( m_pCamer->GetLevelDesc(0,&Desc) )  )
  {   
   DWORD *pDst = (DWORD *)d3dlrect.pBits;
   int DPitch = d3dlrect.Pitch;
   for( j = 0; j < Desc.Height; j++)
   {
    for(  i = 0; i< Desc.Width; i++)
    {
    /*此处对每一个象素进行处理*/
    }
   }/*这两个循环应该很占性能,我不知道怎样优化。因为我必需要对每个象素点进行处理*/
   m_pCamer->UnlockRect( 0 );
  }
//最后再显示。
请你帮我指导一下,就是关于Texture的每一个象素时,性能问题怎么解决的。是不是有什么选项没有打开?我以前用DirectDraw做同样的功能的程序性能要高很多。
望回复谢谢。
发表于 2007-11-7 11:28:15 | 显示全部楼层

首先你要明白Sprite和DirectDraw的区别。Sprite的性能提高主要体现在硬件加速,因为在新的显卡中都增加了硬件加速支持,Sprite很好的利用了这一点,使绘制速度大大提高。DirectDraw则是注重于像素级的操作,从你的程序中很明显发挥了DirectDraw的优势,而Sprite则根本没有用上。

对于一个程序代码执行效率下降可能是一段不良代码造成的,也可能是结构设计上有问题,一段代码体现出来的,我没接触项目这个我不便做结论,自己检查一下吧。不过单纯从一个纹理拷贝到另外一个纹理,最初的2D中模拟画中画,MINI地图等都是这么做的,这个我也做过,并不是非常消耗资源,我拷贝的是3D图形时时变2D图形,在240*360的尺寸内在P4-3.0  1G内存 8600GT显卡上几乎不影响FPS,所以你在认真查看以下代码吧。

nk
 楼主| 发表于 2007-11-7 13:17:47 | 显示全部楼层

DirectDraw则是注重于像素级的操作,从你的程序中很明显发挥了DirectDraw的优势,而Sprite则根本没有用上。

这一点是我不知道的,谢谢。

我再检查一下程序的结构,有什么不明白的地方再来请教。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-5-6 12:19

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表