用D2D进行30w个网格绘制时效率怎么提高?

洗洗睡去 2016-01-15 09:52:03
我环境是VS2015+win10,写的是32位桌面应用,用于绘制由三角形组成的网格,三角形数量比较大,目前约有30w个三角形。
我绘制过程是这样的:
1.从文件中读取网格中每个三角形的点,保存到vector里
2.正常创建D2D资源,画刷,关闭抗锯齿,并创建ID2D1PathGeometry* pMesh;用于保存所有三角形绘制出的网格
创建ID2D1TransformedGeometry* m_pTransformedGeometry;用于保存
变换后的网格(主要是缩放)。
3.绘制前给上面2个变量赋值
ID2D1GeometrySink *pSink = NULL;
hr = pMesh->Open(&pSink);

for (UINT i = 0; i < grdfile.m_grdFile.vMeshIndex.size(); i++)
{
n = grdfile.m_grdFile.vMeshIndex[i].nV1Index - 1;
pt1 = vPreparedpts[n].pt;


n = grdfile.m_grdFile.vMeshIndex[i].nV2Index - 1;
pt2 = vPreparedpts[n].pt;


n = grdfile.m_grdFile.vMeshIndex[i].nV3Index - 1;
pt3 = vPreparedpts[n].pt;

pSink->BeginFigure(pt1, D2D1_FIGURE_BEGIN_HOLLOW);
pSink->AddLine(pt2);
pSink->AddLine(pt3);
pSink->EndFigure(D2D1_FIGURE_END_CLOSED);

}
pSink->Close();
SAFE_RELEASE(pSink);
hr = pD2DFactory->CreateTransformedGeometry(
pMesh,
D2D1::Matrix3x2F::Scale(
D2D1::SizeF(1.f, 1.f),
D2D1::Point2F(0.0f, 0.0f)),
&m_pTransformedGeometry
);


4.绘制时代码
pRenderTarget->BeginDraw();
pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));
DMatrix scale = DMatrix::Scale(g_ScreenPara.scalePara.fScale,g_ScreenPara.scalePara.fScale,
D2D1::Point2F(g_ScreenPara.initPara.fXCenter,g_ScreenPara.initPara.fYCenter));
CRect rc;
GetClientRect(hwnd,rc);
DMatrix pan = DMatrix::Translation(-g_ScreenPara.scalePara.ScrollPT.x,-g_ScreenPara.scalePara.ScrollPT.y);
pRenderTarget->SetTransform(scale*pan);
pRenderTarget->DrawGeometry(m_pTransformedGeometry, pBlackBrush);
pRenderTarget->EndDraw();



现在问题是,
1.绘制这30w个三角形组成的网格速度比较慢,大约刷新一次要2s时间,想问下有没什么效率更高的方式?多线程?分块显示?
感觉现在的显卡每秒渲染个1000w三角形应该很轻松的,我的显卡虽然是核显,但效率应该不会那么低
2.你的demo里实时显示绘制帧率的代码是什么,D2D有直接可以调用的吗?
...全文
223 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-01-22
  • 打赏
  • 举报
回复
仅画能看到的部分 保存上次画的内容为位图 仅画自上次保存后有变化的部分 ……
现在ing 2016-01-22
  • 打赏
  • 举报
回复
洗洗睡去 2016-01-22
  • 打赏
  • 举报
回复
来个人 送分了
洗洗睡去 2016-01-22
  • 打赏
  • 举报
回复
这个问题真没人研究了

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧