Stage3D 2D引擎开发:UV缩放与裁切技术详解

需积分: 10 8 下载量 142 浏览量 更新于2024-08-20 收藏 4.81MB PPT 举报
本资源主要围绕"裁切、缩放和平移在Stage3D 2D引擎开发中的应用"展开,讲解了基于Adobe原生API Stage3D进行2D渲染的原理和技术细节。主讲人谭凯分享的内容包括: 1. **2D渲染原理**:介绍如何使用Stage3D进行2D渲染,如通过上传顶点和纹理来实现动画效果,以及两种主要的渲染方案:方案一(独显,利用UV动画或独立纹理)和方案二(集显,通过UV缩放来节省渲染次数)。 - 方案一涉及多次渲染,如15次,每帧需要2的次方纹理,而方案二则通过UV缩放降低复杂度,渲染效率更高。 2. **UV缩放法**:这是一种关键技术,用于调整纹理的显示范围和位置。开发者需计算渲染区域与纹理尺寸的比例,然后根据这些信息调整UV坐标,以实现精确的显示。例如,通过改变最大U方向的投射百分比和U/V方向的偏移,可以灵活裁剪和缩放纹理。 3. **AGAL(ActionScript Graphic Abstraction Layer)**:作为编程语言的一部分,AGAL负责图形的位置计算和颜色填充,是开发人员操作顶点寄存器,实现图形变换的重要工具。 4. **核心技巧与优化**:除了基础原理,还介绍了如何利用Stage3D进行精灵、按钮、文字等元素的创建,以及人机交互的处理,如鼠标、键盘和触控。此外,还包括了关于性能优化的知识,如纹理缩放值的设置和动画播放策略。 5. **学习路径**:提到的学习资料包括了与Stage3D相关的技能储备,如OpenGL ES、J2ME和Flash ActionScript 3.0高级教程,这些都是学习Stage3D技术的基础。 6. **实战步骤**:提供了从基础到进阶的步骤指南,包括在屏幕上绘制带透明通道的图像、控制图形坐标、缩放和旋转、创建场景、动画制作、以及实现人机交互。 通过学习Stage3D,开发者不仅可以深入了解引擎的工作机制,还能提升自己的技能储备,从而创造出具有高效渲染和交互体验的2D游戏和应用程序。

//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 上传

修改以下代码的错误: 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 上传
2023-05-19 上传