我正在用C#写了一个封装DX9的类,对于alpha效果不知道有什么好的方法??主要是效率问题

IT写轮眼 2003-09-13 10:40:32
我现在已经用C#写了一个封装DX9的的工具类。其中包括DirectDraw图形,keyboard,mouse,audio,video。
目前我在处理alpha透明效果上遇到点难题,希望得到帮助。过2天我就把原码公开,
放到网上。希望大家可以一起研究一下。

在这个贴子里,我不想去讨论用C#写游戏的利弊,我只是想写一个这样的东西,和大家交流一下coding的心得。
...全文
101 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
IT写轮眼 2003-09-14
  • 打赏
  • 举报
回复
唉,可惜C#中不能内嵌汇编,看来我只有用C++写成DLL供C#调用了。不过为了效率也只有这样了。
wzt226 2003-09-14
  • 打赏
  • 举报
回复
up
这个我不会吧,接分的.
gpml 2003-09-14
  • 打赏
  • 举报
回复
这是我以前写的带MMX的Alpha:
Graphics::AlphaBlending(LPDIRECTDRAWSURFACE7* GDS_Src,//源页面
int x_src,int y_src,//x,y
LPDIRECTDRAWSURFACE7* GDS_Des,//目标页面
int x_des,int y_des,//x,y
int width,int height,//混合大小
WORD alpha,//alpha级数(0-32,16位模式)
DWORD ColorKey)

{
WORD *bit_src;
WORD *bit_des;
WORD pit_src;
WORD pit_des;
WORD r,g,b;
DWORD New_ColorKey;
DWORD Distance_Src,Distance_Des;
int lone=width%4;
int new_width=width-lone;

WORD alpha_c=32-alpha;
WORD alphag=alpha*2;
WORD alphag_c=alpha_c*2;

b=WORD(ColorKey>>16>>3);
g=WORD((ColorKey&0xff00)>>8>>2<<5);
r=WORD((ColorKey&0xff)>>3<<11);
New_ColorKey=((r+g+b)<<16)|(r+g+b);

Graphics::LockSurface (GDS_Src,&bit_src,&pit_src);
Graphics::LockSurface (GDS_Des,&bit_des,&pit_des);
bit_src=&bit_src[x_src+y_src*pit_src];
bit_des=&bit_des[x_des+y_des*pit_des];

Distance_Src=(pit_src-width)*2;
Distance_Des=(pit_des-width)*2;

__int64 mask=0xffffffffffffffff;

__int64 mask5=0x0020002000200020;
__int64 Alpha=0x0001000100010001*alpha;

_asm
{
push eax;
push ebx;
push ecx;
push edx;

mov eax,dword ptr bit_src;
mov ebx,dword ptr bit_des;
mov ecx,0;
mov edx,0;

movd mm0,New_ColorKey;
punpckldq mm0,mm0;

next_point:
movq mm1,[eax];
movq mm2,[ebx];
movq mm5,[eax];

pcmpeqw mm5,mm0;
paddusw mm1,mm5;
pxor mm5,mask;
paddusw mm2,mm5;
pand mm1,mm2;
movq mm5,mm1;

//*******************************R
movq mm1,mm5;
movq mm2,[ebx];

movq mm7,Alpha;
movq mm6,mask5;
psubusw mm6,mm7;

psrlw mm1,11;
psrlw mm2,11;
pmullw mm1,mm7;
pmullw mm2,mm6;
paddw mm1,mm2;
psrlw mm1,5;

psllw mm1,11;

//*******************************G
psllw mm6,1;
psllw mm7,1;

movq mm2,mm5;
movq mm3,[ebx];

psllw mm2,5;
psrlw mm2,10;
psllw mm3,5;
psrlw mm3,10;
pmullw mm2,mm7;
pmullw mm3,mm6;
psrlw mm2,6;
psrlw mm3,6;
paddw mm2,mm3;
psllw mm2,5;

//*******************************B
psrlw mm6,1;
psrlw mm7,1;

movq mm3,mm5;
movq mm4,[ebx];

psllw mm3,11;
psrlw mm3,11;
psllw mm4,11;
psrlw mm4,11;
pmullw mm3,mm7;
pmullw mm4,mm6;
psrlw mm3,5;
psrlw mm4,5;
paddw mm3,mm4;

////////////////////////////////////
por mm1,mm2;
por mm1,mm3;

movq [ebx],mm1;

add eax,8;
add ebx,8;

add ecx,4;

cmp ecx,new_width;
jae next_row;

jmp next_point;
next_row:
/* mov ecx,lone;
not_mmx:
cmp ecx,0;
jae next;
push ecx;
add eax,2;
add ebx,2;
mov ecx,[eax];



next:*/
inc edx;
cmp edx,height;
jae all_end;

mov ecx,0;

add eax,Distance_Src;
add ebx,Distance_Des;

jmp next_point;
all_end:
pop eax;
pop ebx;
pop ecx;
pop edx;

emms;
}

Graphics::UnLockSurface (GDS_Src);
Graphics::UnLockSurface (GDS_Des);
}
jianglinchun 2003-09-13
  • 打赏
  • 举报
回复
呵,好啊,可惜偶的主要方面不在这里,今天刚写了自己的投票显示界面,也在为透明的问题烦恼哦,帮楼主upup。

欢迎楼主去看看,给点提高图像精度的意见:
http://diyinside.cnred.net/voteview.aspx
IT写轮眼 2003-09-13
  • 打赏
  • 举报
回复
我对D3D不是很熟,而且我的本本的3d性能不行,嘻嘻。
gpml 2003-09-13
  • 打赏
  • 举报
回复


可以用MMX来提速,不过没有硬件加速来得快哈,为什么不用D3D呢?
内容概要:本文研究了考虑隐私保护的分布式联邦学习在居民电力负荷预测中的应用,提出了一种基于联邦学习框架的方法,使多个参与方能够在不共享原始数据的前提下协同训练高精度的负荷预测模型。该方法有效缓解了传统集中式数据收集带来的隐私泄露风险,结合Python实现了算法原型,并通过实验验证了其在保证预测性能的同时,具备良好的隐私保护能力。研究进一步分析了模型在不同数据分布、通信轮次和客户端数量下的适应性与鲁棒性,展示了其在智能电网、能源管理系统及需求侧管理中的广阔应用前景。; 适合人群:具备一定机器学习基础和电力系统背景的研究生、科研人员,以及从事智慧能源、数据隐私保护相关领域开发的工程师。; 使用场景及目标:①应用于居民侧用电行为建模与精细化负荷预测,提升电网调度与能源配置效率;②在确保用户数据本地化存储的前提下,实现跨区域、跨主体的能源数据协同分析;③为构建安全、可信、合规的新一代智能电力系统提供核心技术支撑。; 阅读建议:建议读者结合文中提供的Python代码进行动手实践,深入理解联邦学习的通信机制、模型聚合策略及隐私防护设计,并关注模型收敛性与隐私预算之间的权衡优化。
内容概要:本文围绕“考虑隐私保护的分布式联邦学习电力负荷预测研究”展开,提出了一种融合联邦学习框架与隐私保护机制的电力负荷预测方法,旨在解决传统集中式数据处理中潜在的用户隐私泄露问题。通过构建分布式模型训练体系,各参与方在本地完成模型训练,仅向中心服务器上传模型参数或梯度信息,实现“数据不动模型动”的协同建模模式,确保数据“可用不可见”。研究采用Python语言实现了完整的联邦学习流程,涵盖客户端本地训练、全局模型聚合、隐私保护策略(如差分隐私或同态加密)集成、通信机制设计及预测性能评估等核心模块,显著提升了电力负荷预测在隐私安全与模型精度之间的平衡能力。; 适合人群:具备Python编程基础和机器学习基础知识,从事电力系统、智能电网、能源大数据分析、数据隐私保护等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于居民或工业级电力负荷预测任务,在保障用户用电数据隐私的前提下实现高精度预测;②为构建符合数据合规要求的智慧能源管理系统提供技术支撑;③推动联邦学习在能源互联网、跨企业数据协作等场景中的落地应用,促进多方协同建模与数据价值释放。; 阅读建议:建议读者结合文中提供的Python代码进行实践操作,重点关注联邦学习的通信轮次设置、本地训练迭代策略、模型聚合算法设计以及隐私噪声添加机制的实现细节,并可根据实际需求替换底层预测模型(如LSTM、XGBoost、Transformer等)以进一步优化预测性能。

8,324

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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