Stage3D2D引擎开发:UV缩放法实现全图渲染

需积分: 10 8 下载量 92 浏览量 更新于2024-07-11 收藏 4.81MB PPT 举报
"渲染一张整图-Stage3D2D引擎开发(AIR),讲解了如何使用Stage3D进行2D渲染,重点介绍了UV缩放法,以及两种不同的渲染方案。" Stage3D是Adobe开发的一套原生API,主要用于提高Flash内容的图形处理性能,特别是在2D和3D游戏开发中。学习Stage3D能够帮助开发者更深入地理解和优化引擎,因为它提供了对底层图形硬件的直接访问,与OpenGL ES类似。 在2D渲染原理中,我们通常只使用XY坐标来表示平面图形,并且支持透明通道的位图。渲染过程可以分为多个步骤,包括创建场景、设置计时器以实现动画、创建精灵、按钮、文字等元素,以及处理人机交互。 UV缩放法是一种有效的2D动画技术,它通过改变纹理的UV坐标来实现图形的动画效果。这种方法涉及到计算渲染面积与纹理宽高的比例,然后调整UV坐标并进行偏移,以达到所需的效果。例如,可以显示纹理的特定部分,或者进行裁切、缩放和平移操作。 在讲解的两种渲染方案中,方案一是基于独立纹理的,每次上传4个顶点,通过切换UV或独立纹理实现动画。这种方案需要多次渲染,适合较小的纹理更新。而方案二是基于集显的,它一次性上传多个图形的顶点,通过UV缩放来形成不同的动画,渲染次数少,效率更高,适用于大规模的场景。 AGAL(ActionScript Graphics Assembly Language)是用于编写顶点和片段着色器的低级语言,它直接作用于图形硬件,将计算结果输出到op顶点寄存器。在2D引擎开发中,理解AGAL对于优化图形性能至关重要。 动画的播放可以通过UV移动来实现,而动画的切换则可以结合UV缩放、UV移动和XY缩放等多种方法来完成。通过这些技术,开发者可以创建出复杂的2D动画效果。 这个资源涵盖了2D渲染的基本原理,特别是Stage3D环境下的UV缩放法,以及优化图形渲染的策略。对于希望深入学习Stage3D和2D引擎开发的Flash ActionScript 3.0开发者来说,这是一个宝贵的学习资料。
2023-05-19 上传

修改以下代码的错误: import requests import csv import json def get_domain(ip): headers = { 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/44.0.2403.89 Chrome/44.0.2403.89 Safari/537.36', 'Cookie':'Q_UDID=a0087a08-8bc9-3608-ba2c-222f8a5bb22d; __guid=73887506.2650449936607309000.1676255508286.8772; cert_common=bc66e393-d403-4306-a3af-ca9e756ee279; Q=u%3D360H3407396399%26n%3D%26le%3D%26m%3DZGZ1WGWOWGWOWGWOWGWOWGWOZGpk%26qid%3D3407396399%26im%3D1_t0105d6cf9b508f72c8%26src%3Dpcw_quake%26t%3D1; __NS_Q=u%3D360H3407396399%26n%3D%26le%3D%26m%3DZGZ1WGWOWGWOWGWOWGWOWGWOZGpk%26qid%3D3407396399%26im%3D1_t0105d6cf9b508f72c8%26src%3Dpcw_quake%26t%3D1; T=s%3D61eabdeba51590da336567aacbbbeb10%26t%3D1688956103%26lm%3D%26lf%3D2%26sk%3Df74bb63ff29d85c9ac5555881d1cdefc%26mt%3D1688956103%26rc%3D%26v%3D2.0%26a%3D1; __NS_T=s%3D61eabdeba51590da336567aacbbbeb10%26t%3D1688956103%26lm%3D%26lf%3D2%26sk%3Df74bb63ff29d85c9ac5555881d1cdefc%26mt%3D1688956103%26rc%3D%26v%3D2.0%26a%3D1; Qs_lvt_344458=1688953821%2C1688972384; Qs_pv_344458=419022401534077630%2C695021803767435900; Qs_lvt_357693=1688956089%2C1689039786%2C1689125923%2C1689159866%2C1689225298; Qs_pv_357693=2550591914809554000%2C2510008180438029000%2C1154218478966065400%2C2153165497887938300%2C2883541543979267000' } url = 'https://quake.360.net/api/query/domain/' + ip res = requests.get(url=url, headers=headers, timeout=10) content = res.content.decode('utf-8') dirt = json.loads(content.text) for item in dirt['data']['domain']: print(item) def main(): with open('ips.csv', 'r') as file: ips = csv.DictReader(file) for ip in ips: get_domain(ip) if __name__ == '__main__': main()

2023-07-14 上传

//SHA1.c #include <stdio.h> #include <string.h> #include <Windows.h> void creat_w( char input[64],unsigned long w[80]){ int i,j; unsigned long temp,temp1; for(i=0;i<16;i++){ j=4*i; w[i]=((long)input[j])<<24 |((long)input[1+j])<<16|((long)input[2+j])<<8|((long)input[3+j])<<0; } for(i=16;i<80;i++){ w[i]=w[i-16]^w[i-14]^w[i-8]^w[i-3]; temp=w[i]<<1; temp1=w[i]>>31; w[i]=temp|temp1; } } void ms_len(long a,char intput[64]){ unsigned long temp3,p1; int i,j; temp3=0; p1=~(~temp3<<8); for(i=0;i<4;i++){ j=8*i; intput[63-i]=(char)((a&(p1<<j))>>j); } } int main(){ unsigned long H0=0x67452301,H1=0xefcdab89,H2=0x98badcfe,H3=0x10325476,H4=0xc3d2e1f0; unsigned long A,B,C,D,E,temp,temp1,temp2,temp3,k,f; int i,flag; unsigned long w[80]; char input[64]; long x;int n; printf("输入明文:"); scanf("%s",input); n=strlen(input); if(n<57){ x=n*8; ms_len(x,input); if(n==56){ for(i=n;i<60;i++) input[i]=0; } else{ input[n]=128; for(i=n+1;i<60;i++) input[i]=0; } } creat_w(input,w); /*for(i=0;i<80;i++) printf("%lx,",w[i]);*/ printf("\n"); A=H0;B=H1;C=H2;D=H3;E=H4; for(i=1;i < 80;i++){ flag=i/20; switch(flag){ case 0: k=0x5a827999;f=(B&C)|(~B&D);break; case 1: k=0x6ed9eba1;f=B^C^D;break; case 2: k=0x8f1bbcdc;f=(B&C)|(B&D)|(C&D);break; case 3: k=0xca62c1d6;f=B^C^D;break; } /*printf("%lx,%lx\n",k,f); */ temp1=A<<5; temp2=A>>27; temp3=temp1|temp2; temp=temp3+f+E+w[i]+k; E=D; D=C; temp1=B<<30; temp2=B>>2; C=temp1|temp2; B=A; A=temp; printf("第%d步:",i+1); printf("A = %lx,B = %lx,C = %lx,D = %lx,E = %lx\n",A,B,C,D,E); } H0=H0+A; H1=H1+B; H2=H2+C; H3=H3+D; H4=H4+E; printf("\n哈希值:\n"); printf("%lx%lx%lx%lx%lx\n",H0,H1,H2,H3,H4); system("pause"); }写出这段代码每一行的意思

2023-06-01 上传