最近更新 第 2 页 Toggle Comment Threads | 键盘快捷键

  • sunhongyulei 5:13 am on April 20, 2011 固定链接 | 回复
    Tags: , Interface   

    关于对Interface的理解 

    Interface其实在项目经常用到,但是之前在我多人项目中开发中它的功能只是起到一个方便他人调用或者说阅读的一个功能。
    在看到jamesLi交叉传递之说后恍然大悟啊,哈哈。
    我这样理解:
    这有点类似宇智波鼬和卡卡西的关系,鼬是继承与宇智波家族的,他们这个家族都是集成血轮眼的接口,卡卡西虽然不是宇智波家族,但是他也得到了血轮眼这个接口,并且继承到了自己身上。
    code:
    public class 宇智波 implements I血轮眼{
    public function 大招():void{}
    }
    public class 鼬 extends 宇智波{

    }
    public class 卡卡西 extends 旗木 implements I血轮眼{
    public function 大招():void{}
    }
    public interface I血轮眼{
    function 大招():void
    }

    public function 拯救世界(_有绝招的人:I血轮眼):void{
    _有绝招的人.大招();
    }

    很好,卡卡西和宇智波鼬可以做同样的事了,虽然他们不是一个妈生的。

     
  • sunhongyulei 2:41 am on April 20, 2011 固定链接 | 回复
    Tags: GPU   

    GPU从固定图形管线到可编程流处理器 

    计算机图形系统的发展以提供更快的图形数据处理和更真实的视觉效果为目标!

    基于光栅化(Rasterization)图形管线如图-2所示,图中下部虚线部分数据流向代表固定图形管线。应用程序通过点、线、多边形等几何图元构建出物理模型或可视化的数据结构,这些模型最后表示成具有对象空间坐标、法向量、颜色、纹理坐标等属性的顶点集(Vertex)。对顶点进行坐标变换、光照计算后,图元装配和光栅化操作对几何图元进行纹理和颜色的插值,生成和窗口屏幕像素相对应的片元集(Fragment)。片元集具有窗口坐标、颜色、纹理坐标、雾化坐标等属性,每个片元经过纹理应用颜色混合以及雾化等操作后计算出片元最终颜色和深度。通过模板、深度、透明混合等测试的片元最终写入帧缓存中显示出来。
    gpu
    图-2

    从图形学算法到图形库函数再到硬件图形管线,图形处理器用硬件固化算法,加速数据流处理;从固定图形管线到可编程图形管线,图形处理器不断提高其数据处理的灵活性以满足更复杂但更真实的图形效果。经过大致三个阶段的演变,图形处理器已发展成计算机系统中专注图形应用而兼顾数据流处理的高性能协处理器。

    大致在1998 年后期, 以Nvidia TNT2、ATI Rage 和3DFX Voodoo3为代表的图形芯片支持多纹理操作,在光栅化过程中完成多幅纹理的融合操作。1999 年后期,以Nvidia GeForce256、GeForce 2 和ATI Radeon 7500为代表的图形芯片可以处理顶点的矩阵变换和进行光照计算。这一时期,图形特性的固化和硬件加速是图形处理器设计的方向,这一阶段的图形处理器特点是“固定图形管线(Fix Function)”。

    但很快就发现,照这样的方向发展下去,不断增加的图形新特性将会使得图形库和图形处理器设计不堪重负。同时,有限的特性终究束缚了图形应用开发者的手脚,不能满足人们对更真实的场景和更绚丽的动画效果的需求。2001年底和2002年初,以Nvidia和ATI为代表的主流图形处理器厂商将硬件图形管线的流水线作为流处理器来解释,顶点级出现可编程性,片元级出现有限的可编程能力。这一重要的变革使图形芯片成为真正意义的图形处理器,这一时期的处理器有Nvidia GeForce3、GeForce4和ATI Radeon 8500。2003年Nvidia GeForce FX 系列和ATI Radeon 9700/9800最终通用化了顶点和片元级可编程能力。固定的图形管线中顶点的光照和坐标变换由顶点程序取代,片元的颜色融合及纹理操作由片元程序取代,固定图形管线演变为可编程图形管线,如图-2上部实线所示。人们可以在顶点和片元两个级别上编程实现灵活的处理,满足不同的要求。顶点和片元程序在图形应用中统称为渲染程序(Shader)。以及后来的GeForce 6x、7x系列和相应的ATI 5xx核心的处理器都是沿着扩展图形可编程能力的方向发展,这一阶段图形处理器的特点是“可编程图形管线(Programable Pipleline)”。

    随着通用可编程能力的提高,图形处理器迎来新的变革与发展,顶点处理和片元处理在统一的硬件处理单元上执行,体系结构更加通用化,如Nvidia G8x 和 AMD/ATI R6xx。由图形处理器衍生出的协处理器,将会提升个人电脑的并行计算能力。这个阶段的图形处理器的特点是“数据流通用计算(GPGPU)”。

    转自:http://www.cnblogs.com/zy776/archive/2007/03/21/683065.html

     
  • sunhongyulei 2:59 am on April 10, 2011 固定链接 | 回复
    Tags:   

    骨骼蒙皮动画(Skinned Mesh)的原理解析(二) 

    2)蒙皮信息和蒙皮过程

    2-1Skin info的定义

    上文曾讨论过,Skinned
    Mesh中Mesh是作为皮肤使用,蒙在骨骼之上的。为了让普通的Mesh具有蒙皮的功能,必须添加蒙皮信息,即Skin
    info。我们知道Mesh是由顶点构成的,建模时顶点是定义在模型自身坐标系的,即相对于Mesh原点的,而骨骼动画中决定模型顶点最终世界坐标的是骨骼,所以要让骨骼决定顶点的世界坐标,这就要将顶点和骨骼联系起来,Skin
    info正是起了这个作用。下面是DEMO中顶点类的定义的代码片段:

    #define MAX_BONE_PER_VERTEX 4

    class Vertex

    {

    float m_x, m_y, m_z; //local pos in mesh
    space

    float m_wX, m_wY, m_wZ;//blended vertex pos, in
    world space

    //skin info

    int m_boneNum;

    Bone* m_bones[MAX_BONE_PER_VERTEX];

    float m_boneWeights[MAX_BONE_PER_VERTEX];

    };

    (More …)

     
  • sunhongyulei 2:59 am on April 10, 2011 固定链接 | 回复
    Tags:   

    骨骼蒙皮动画(Skinned Mesh)的原理解析(一) 

    一)3D模型动画基本原理和分类

    3D模型动画的基本原理是让模型中各顶点的位置随时间变化。主要种类有Morph动画,关节动画和骨骼蒙皮动画(Skinned
    Mesh)。从动画数据的角度来说,三者一般都采用关键帧技术,即只给出关键帧的数据,其他帧的数据使用插值得到。但由于这三种技术的不同,关键帧的数据是不一样的。

    Morph(渐变,变形)动画是直接指定动画每一帧的顶点位置,其动画关键中存储的是Mesh所有顶点在关键帧对应时刻的位置。

    关节动画的模型不是一个整体的Mesh,而是分成很多部分(Mesh),通过一个父子层次结构将这些分散的Mesh组织在一起,父Mesh带动其下子Mesh的运动,各Mesh中的顶点坐标定义在自己的坐标系中,这样各个Mesh是作为一个整体参与运动的。动画帧中设置各子Mesh相对于其父Mesh的变换(主要是旋转,当然也可包括移动和缩放),通过子到父,一级级的变换累加(当然从技术上,如果是矩阵操作是累乘)得到该Mesh在整个动画模型所在的坐标空间中的变换(从本文的视角来说就是世界坐标系了,下同),从而确定每个Mesh在世界坐标系中的位置和方向,然后以Mesh为单位渲染即可。关节动画的问题是,各部分Mesh中的顶点是固定在其Mesh坐标系中的,这样在两个Mesh结合处就可能产生裂缝。

    第三类就是骨骼蒙皮动画即Skinned
    Mesh了,骨骼蒙皮动画的出现解决了关节动画的裂缝问题,而且效果非常酷,发明这个算法的人一定是个天才,因为Skinned
    Mesh的原理简单的难以置信,而效果却那么好。骨骼动画的基本原理可概括为:在骨骼控制下,通过顶点混合动态计算蒙皮网格的顶点,而骨骼的运动相对于其父骨骼,并由动画关键帧数据驱动。一个骨骼动画通常包括骨骼层次结构数据,网格(Mesh)数据,网格蒙皮数据(skin
    info)和骨骼的动画(关键帧)数据。下面将具体分析。

    (More …)

     
    • huang 10:35 上午 on 7月 27, 2011 固定链接 | 回复

      把3d的一些基本信息阐述的很清晰,做个朋友(email联系)?

  • sunhongyulei 4:39 am on April 7, 2011 固定链接 | 回复
    Tags: coder   

    你的代码写的很烂Your Code Sucks 

    English:http://www.girldeveloper.com/2010/07/your-code-sucks.html

    我有一个很熟的朋友,他现在忙的不可开交。他手上有一大堆没有完成的合同,而且一个跟他一起开发的助手也离他而去。于是,在三个大客户的催命鬼时的督促下,他已经连续好几个星期没休息了。

    其中有个客户跟他讨论他给这个客户做的iPad应用程序,客户告诉他“我们花钱雇了另外一个程序员来审查你的代码,他说你的代码写的很烂。”

    当他告诉我这个故事时,我只是微微一笑,想起了我以前是怎么唾弃别人的代码的。当我刚开始编程时,我看到过一段程序,我认为那是毋庸置疑的写的很烂 的,我删掉了那段代码,用自己认为更好的方面重新写了一遍。当我变成的成熟后,我回头再看,发现我所删掉的那段代码其实是用了一个很好的设计模式,而我重 写的确是丑陋无比。

    我就这样被上了一课。

    之后的日子里,我经常会遇到我认为是丑的不能再丑的代码。尽管如此,我也不通篇否定它们了,我只会在其中找一些特别的无法容忍的部分重新编写。可 10次中有9次,当我快要完成时,我发现了一个问题使我不得不对自己说“哦,怪不得他们要写成这样了”,然后把代码恢复成原样,或也使用同样“丑的不能再 丑”方式完成它。

    现在我变的更成熟了,我可以充满自信的告诉你,我再也不会看着别人编的代码说“哦,这代码很烂”了。我知道,在没有了解整个程序的 解决方案之前,你 不可能就那么轻易的判断代码的好和坏。真的,有时候它看起来很傻,或完成的不好,或没有文档标注(我的意思是自我注释),然而,你根本就不可能知道程序员 在写这段代码时脑袋里是怎么思考的。更多的情况是,他们要选择这样做是有一定的理由的,除非去深入的研究它们,你不可能再有其他简单快速的方法来理解程序 的上下文环境。

    所以,每当听到有人看着别人的代码说 很烂时,我只会微微一笑,让我想起我当年的天真和盲目自信。的确,我以前坚信自己是个出色的开发人员,坚信知道 每种算法的最优设计。我很想念当时的自大,但是我很高兴现在学到的这些理念,我知道,我唯一能鄙视的代码只能是我自己的代码,鄙视的原因就是我不能使它变 的更好。

     
  • sunhongyulei 4:55 am on March 30, 2011 固定链接 | 回复
    Tags:   

    PAUSING A FLASH GAME OR MOVIE DETECTING ITS FOCUS[通过监测焦点来控制影片或游戏的播放暂停] 

    English:http://www.emanueleferonato.com/2011/03/29/pausing-a-flash-game-or-movie-detecting-its-focus/

    有時候我們希望製作的Flash game 或 movie在用户没有玩/观看的时候能自动停止。

    还有我的博客阅读者经常向我反映,当他们阅读文章的时候,经常需要重新加载页面才能看到flash影片,因此它总在阅读到那里的时候已经播放完毕。

    根据adobe工程师Tinic Uro的说法,这种现象属于flash的可视状态和不可视状态之间的切换。
    当SWF是可视的:

    • SWF 帧频是受限的,并尽量和标准对齐。 比如每秒60帧.
    • timers (AS2 Interval and AS3 Timers) 是受限的,并尽量和标准对齐。
    • local connections 是受限的,并尽量和标准对齐。 这意味着2个SWF之间来回的通信间隔至少是33毫秒. 有些报告称它可以达到40ms.
    • 视频没有强制锁定,可以在任意的帧频下播放。这增加了视频回放的保真度。

    (More …)

     
  • sunhongyulei 4:19 am on March 30, 2011 固定链接 | 回复
    Tags: ,   

    Molehill渲染管线简述 

    Molehill这套API是没有固定渲染管线的,所以说如果不编写Shader的话,是无法在屏幕(也就是stage3d)上画出任何东西的。

    在以往拥有固定渲染管线的3D API中,用户程序员(即使用这套API来进行3D描画的人)只需要将构成3D世界的模型信息和环境信息以一定的组织方式描述出来(描述的方式根据不同的API形式也不同),从渲染管线的源头丢入,最终在渲染管线的末端就能得到最终渲染出来的图像。这里所说的模型信息是由数量众多的三角形所构成;而每个三角形是由三个顶点构成;每个顶点包含渲染所需要的这个顶点的属性,位置(x,y,z)、颜色(r,g,b)、贴图坐标(u,v)、顶点法线(x,y,z)等;还有顶点所对应的贴图的数据也属于模型的信息。环境信息则包括光照、Camera的位置、投影信息等。

    (More …)

     
  • sunhongyulei 3:57 am on March 30, 2011 固定链接 | 回复
    Tags: , static   

    ActionScript小技巧: 获取类的全部静态成员(常用于Enum类) 

    通常AS3中要使用到Enum类时会使用Final的Class并在其中声明一大堆静态成员常量作为Enum来使用,有时候你需要获取该类下面所有的Enum值。最近正好用到了这个小技巧,所以记录一下做个留档。

    这里我们有一个简单的Enum类:

    public final class Enum_Test
    {
    public static const AAA:String = "1";
    public static const BBB:String = "2";
    public static const CCC:String = "3";
    public static const DDD:String = "4";
    public static const EEE:String = "5";
    public static const FFF:String = "6";
    public static const GGG:String = "7";
    }
     
  • sunhongyulei 3:42 am on March 30, 2011 固定链接 | 回复
    Tags: AGAL, ,   

    我叫AGAL,来自Adobe 【Part1】 

    English:http://iflash3d.com/shaders/my-name-is-agal-i-come-from-adobe-1/

    Geroglifici

    试想有一天,人类灭绝。

    试想一下,所有的纸质文件随着时间的推移,变得破旧且无法读,最终都消失了。

    想象一下,一些外星物种找到了人类的DVD或固态存储器,包含了一些人类的信息。

    他们会如何解读呢?他们如何找到钥匙打开这些“神器”,了解到其中包含了什么样信息呢?

    就算他们得到了我们的技术成果,又如何能够真正了解我们的发现和使用我们的技术呢?

    是否他们需求这些技术本身能自我解读?

    (More …)

     
  • sunhongyulei 5:36 am on March 22, 2011 固定链接 | 回复
    Tags: 程序设计   

    不要随便跳过异常 

    在游戏开发中经常会遇到很奇怪的异常(例如无法访问的空对象),

    在此之前我经常会写这样一句话来处理:if(myObj){myObj.xx()…};

    可能再编译的时候这个错误不会再出现了。(如果你以为事情就这么结束了的话,那你就要惨了!)

    等项目深入以后,你可能发现许多你找不到原因的问题。

    例如,你游戏中的怪物突然失去了控制,也打不死它了。其实很有可能就是你很久以前的那句代码所照成的(至少我遇到了这样的问题)。

    ??难道就不能这样处理了吗(if(myObj){myObj.xx()…};)?

    其实发生这样的情况,不是因为代码有什么问题,而是设计程序的时候考虑不够周全。

    可能我设计的对象,不被允许有空值的情况,那么如果程序抛出null,我们绝对不要选择跳过就了事了,很明显我们设计的流程出现了问题!必须得找到问题根源出在哪里,否则后果很严重。

    当然,如果我们的设计中允许这个对象为null,那么它出现null就要按照null的情况处理,就像这样if(myObj){myObj.xx()…}else{…};

    好了,事情就是这样- –

    可能大家都比我更仔细,只是少部分人像我这样跳过问题,哈哈!

     
c
Compose new post
j
Next post/Next comment
k
Previous post/Previous comment
r
回复
e
编辑
o
Show/Hide comments
t
返回顶部
l
Go to login
h
Show/Hide help
shift + esc
取消