原文:Stage3D / AGAL from scratch. Part IV – Adding some depth

eg.如果你E文不错的话  还是看E文比较带劲。本人E文非常烂,若有偏差请指出。

关于Z轴的解释(角度理解)

Stage3D,我认为这是3D的技术,但是为什么我们在上一节并没有用到Z轴坐标呢?如果你在上一节我分析代码的时候也跟着下载源码来编译,并且尝试修改其中的坐标看效果的话,你就会发现  没用(X,Y,Z,r,g,b)顶点中的Z数值,Z轴有何作用呢,下面我将解释。

——3D场景在2D中渲染,渲染出的区域叫做Clipspace(这个应该翻译为锥体裁剪之后的空间,还是投影变换后的空间?),CLIPSPACE(剪切空间)是屏幕的基础,屏幕上的每一个点 都会被映射到CLIPSPACE(剪切空间),然后才能被显示出来。(这个CLIPSPACE(剪切空间)就是这么一个东西   不理解没关系 如果要深入理解麻烦去找本计算机图形学)。

——之前说的屏幕坐标(X,Y,Z)每一个数值都是在闭区间[-1,1]其实表述并不完全正确,更准确的解释是,X,Y,Z 只有在闭区间[-1,1]的时候  才能映射在CLIPSPACE(剪切空间)上(也就是说 你所能看到的程序窗口大小 即为CLIPSPACE有效大小,所以我在之前也加了解释,坐标的有效数值是[-1,1],坐标可以取任何值)。
继续阅读

原文:Stage3D / AGAL from scratch. Part III – Hello Triangle

eg.如果你E文不错的话  还是看E文比较带劲。本人E文非常烂,若有偏差请指出。

国内的大牛FlashChe也有一篇类似的基础文章,传送门在上一篇开头。

让我们开始吧

在开始编码之前请确认你已经读过第一篇与第二篇,并且都已经理解其中的原理。

你可以先下载[源码]自行编译一遍,以确认你的硬件与编译环境可行。

这篇文章将会带您一起在GPU中渲染出第一个三角形图形,其中会涉及到一点点的关于AGAL的代码,仅仅几句而已非常容易理解,如果你汇编学得不错的话 那你一眼就能看明白,即使你的汇编非常的糟糕那也没关系  我将会一句一句的解释它。(后面这句我加的)稍微再解释一下顶点在GPU上渲染三角形的作用,所谓的顶点“Vertex”其实可以理解为内存中的指针,三个顶点确定一个三角形的形状和位置,正是依靠这三个”指针” ,GPU才能在指定位置画图,继续阅读

原文:Stage3D / AGAL from scratch. Part II – Anatomy of a Stage3D Program

eg.如果你E文不错的话  还是看E文比较带劲。本人E文非常烂,若有偏差请指出。

国内的大牛FlashChe也有一篇类似的基础文章:传送门

也有7yue写的一篇PPT“深入Stage3D

Stage3D程序基础分析:

在我们编写第一个三角形程序之前,先粗略的了解下Stage3D程序的基本结构,这种结构也适用于其他底层3D编程和webGL编程。(WebGL是一种3D绘图标准,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起)

在使用底层3D API的时候,你必须知道一些硬件知识(作者指的是上一篇末尾的内容),例如V-RAM是你的显卡内存,而缓存区则是显卡内存中的一部分。

在渲染三角形的时候,你必须提供几个顶点(Vertices)(所谓的顶点其实就是指向缓存区的“指针”)给程序,然后程序通过顶点把三角形在屏幕上渲染出来。

其中还没有说的是索引(Indexes),索引的作用其实就是 连接顶点绘制出三角形。(顶点与索引的关系 按照我的理解应该是 顶点指明位置 索引负责在指定位置画画)。

继续阅读

原文:Stage3D / AGAL from scratch. Part I – The Basics

eg.如果你E文不错的话  还是看E文比较带劲。

关于AGAL(adobe 图形汇编语言

我第一次使用AGAL是在几周前与一个同事一起,AGAL让我们终于认识到了Stage3D的强大.

可能你想看到的是关于Away3D的教程,但是在我学Away3D的第一课的时候我感到非常失望, 因为我并没有成功编译出那个例子的立方体,其中的原因就在于我欠缺3D建模能力.

直到后来出现了Starling和ND2D这两个框架,通过这两个框架所表现出来的GPU渲染能力,我们才认识到原来Stage3D在硬件加速上堪称完美。

虽然Stage3D非常难,但是如果你真的想理解他们是怎么工作的  那你还是必须要面对它,你可以通过下面两种方式去学会使用它,第一是系统的从底层开始去学习Stage3D,第二是学会使用衍生的开源框架 (例如Starling ND2D),无论哪一种方式 如果你想深入(而不是只懂皮毛)的话 都必须先去学会使用adobe提供给我们的底层Stage3D API。
继续阅读

动机:

我从今年5月份在旧公司由于工作原因开始接触AS3,后来发现AS3原来能搞那么多的东西,到现在为止接触的从C++接口框架ALCHEMY1到ALCHEMY2(FlasCC) 到Stage3D框架的涌现再到GPU加速的2D框架Starling 而衍生features,StarlingPunk等等,都非常强大,无意中我发现AGAL(ADOBE GRAPHIC ASSEMBLY  LANGUAGE ,adobe图形汇编语言),这真是非常有意思的东西.于是我在一个法国ASer的Blog上发现一组教程,本人英语非常烂(大学过程因为考级问题痛苦了好久),但是还有想把它翻译过来放到自己BLOG保存的冲动。因为天天遇到不懂的地方就去翻E文实在很累。翻译过来的目的纯属是算一种学习笔记,在翻译的过程中 会加入我个人的理解,如果有理解错误或者翻译偏差 请留言指出.

关于原作者:

My name is Nicolas Chesné, and I am a french flash developer, currently working at Marcel Paris as a senior Flash developer.

作者Chesne自己的定位是 高级FALSH程序员,粗略看了一下作者的作品  这不仅仅是高级啊.

我觉得AGAL是一个非常有意思的东西。如果你能看完全部教程 相信你也会这样觉得。让我们开始吧!

[AGAL个人笔记]第一篇:AGAL基础(译2012/11/6

[AGAL个人笔记]第二篇:  Stage3D程序原理解剖(译)2012/11/7

[AGAL个人笔记]第三篇: Hello Stage3D`s World(译)2012/11/8

[AGAL个人笔记]第四篇:加入深度坐标(译) 2012/11/12

[AGAL个人笔记]第五篇:片段(索引 Indexes )和剔除(淘汰)模式(译)2012/11/21

[AGAL个人笔记]第六篇:重新组织矩阵 2013/3/7

毕业两个月了,工作了三个月后。。

最终一切又回归到了原点。

选择了一个节奏快的城市

每天都活在奔跑中。。

很多时候其实挺喜欢这种感觉

好久没去反汇编了。。看到OD代码页的感觉真棒。

果然还是汇编比较有亲和力。。。

一组Key:

ShadowKong

5BDDCC8C

CM

最近温故了下16位的汇编.

用惯了MASMPLUS之后再去试试以前用过的编写器轻松汇编

发现其实轻松汇编也不错.

主要是发现2.7版本的提供了映像文件和交叉文件~

交叉文件刚好是汇编指令和机器码的对照~

这功能不错 省的载入OD了就可以直接看机器码了~

不过对于那个开始那个关联文件的对话框有点不爽~

于是顺手把它去了..

去这个对话框其实也很简单,为了熟悉机器码我们采用之间修改机器码的方式..

载入UE 来到文件偏移00077AA6处:

然后修改(括号里面的是原数据)

77AA6: 33 (56)
77AA7: C0 (8B)
77AA8: EB (45)
77AA9: 08 (F8)
33 对应    [cc lang=”asm”]xor eax,eax[/cc]
EB  08  是[cc lang=”asm”] JMP  $+8[/cc]
等于是选择了[否]

对下面的指令先做一些说明:
st(i):代表浮点寄存器,所说的出栈、入栈操作都是对st(i)的影响
src,dst,dest,op等都是指指令的操作数,src表示源操作数,dst/dest表示目的操作数
mem8,mem16,mem32,mem64,mem80等表示是内存操作数,后面的数值表示该操作数的内存位数(8位为一字节)
x <- y 表示将y的值放入x,例st(0) <- st(0) – st(1)表示将st(0)-st(1)的值放入浮点寄存器st(0)

1.  数据传递和对常量的操作指令

继续阅读

指令格式 指令含义 执行的操作
FLD src 装入实数到st(0) st(0) <- src (mem32/mem64/mem80)
FILD src 装入整数到st(0) st(0) <- src (mem16/mem32/mem64)
FBLD src 装入BCD数到st(0) st(0) <- src (mem80)
FLDZ 将0.0装入st(0) st(0) <- 0.0
FLD1 将1.0装入st(0) st(0) <- 1.0
FLDPI 将pi装入st(0) st(0) <- ?(ie, pi)
FLDL2T 将log2(10)装入st(0) st(0) <- log2(10)
FLDL2E 将log2(e)装入st(0) st(0) <- log2(e)
FLDLG2 将log10(2)装入st(0) st(0) <- log10(2)
FLDLN2 将loge(2)装入st(0) st(0) <- loge(2)