个人管理功能

在CSDN Blog撰写技术文章,即有机会入选CSDN技术中心,现在就去免费注册!已注册用户,点击登录

搜索
热门标签
专题历史

有人说SOA是一种IT策略,有人说SOA是一种架构理念,还有人说SOA是一种服务。SOA到底是什么?它将带来什么?软件产业的变革亦或是新的机遇下的挑战?业界权威专家带领我们一起去深究,去探索。BEA三位重量级专家与您共同探讨SOA

随着WPF/E更名为正式名称Silverlight,以及Silverlight 1.1 Alpha 版本的发布,答案变得清晰,而且令人兴奋! - 一个跨操作系统,跨浏览器的Web应用平台出现了。Silverlight 这样一个4.5MB的浏览器插件(1.1 Alpha文件)是如何做到的这些的?周岳: SilverLight-Web应用的一道强光

中国移动用户数量在大踏步地发展与增长,根据产业部的数据,仅三月就新增了670万户。预估计6月份之后,中国很快将迎来第五亿手机用户(平均不到3人拥有一台手机)而J2ME做为最重要的手机跨平台技术,凭借Java平台以其良好的开放性和支持能力,得到了众多手机厂商的支持。对众多开发者来说,J2ME程序易于移植,轻松实现“一次编写,到处运行”。J2ME系列开发专题,将带你从最基本的工具安装,环境配置开始,进入移动应用开发的世界。
 
CSDN移动开发系列之-“J2ME开发实训”

7月31日-8月1日,即将在上海召开甲骨文全球大会•亚太地区会议同期举行的甲骨文开发者大会,这是一项付费参加的面向开发人员的活动。在甲骨文开发者大会期间,您将听到世界一流的专家讲述如何使用Java、.NET、XML和PL/SQL以及Ajax、PHP、Spring、Groovy on Rails等流行技术来简化开发过程。在为期两天的甲骨文开发者大会中,您将能够提高自身的开发技能,扩充知识,参加几十场由专家主持的深入细致的技术讲座并在专家的辅导下进行上机操作、了解高级技能和获得详细指导。在甲骨文开发者大会期间,您有机会直接向业界一流的技术专家和开发人员请教。欢迎参加甲骨文全球大会·2007·亚太地区开发者大会

2007年6月29日,自由软件基金会宣布,其创始人Richard Stallman将在GNU的网站上,在本周太平洋时间星期五上午9点通过视频发布GPLv3。本来,GPL并不是所有开源组织所认可的协议。其从出现以来一直存在争议,GPL被认为是一种“病毒式”的协议,BSD的fans和老牌Unix黑客们认为,他们编写Unix的年头都比GPL声明要长得多,他们更愿意采用比GPL更加的自由的BSD协议。今天,开源社区中有70%左右的项目采用了GPL。很多在开源社区的老牌黑客们认为,Richard Stallman所鼓吹开源软件的言行与当年卡尔·马克思号召产业无产阶级反抗工作的努力如出一辙。在GPLv3的第三版修订案发布时,开源软件团体中的许多成员都反对这种协议。尤其是Linux的核心开发小组,其中29个高级架构师有28个反对这个协议。Linus Torvalds称这个协议有“宗教性质”,并公开反对。而整个软件行业特别是开源社区对GPLv3的争论也愈演愈烈。GPLv3:大教堂和集市的新一轮对抗

2007年7月14日由CSDN与ThoughtWorks联合主办的第二届“敏捷中国”技术大会在北京丽亭华苑酒店召开,多位开源社区和ThoughtWorks公司的技术领袖即将带来精彩的演讲。本次“敏捷中国”技术大会集中展现塑造敏捷企业所需的方方面面:业界领先的敏捷项目管理工具;极大提升软件开发效率的新语言和新框架;数据库领域的敏捷实践;全方位的敏捷项目管理指导;还有身临其境的亲身体验。来自开源社区和ThoughtWorks公司的技术领导者们将带领听众全面感受敏捷企业。“敏捷中国大会”现场直击

从2004年起,在每年的夏季,CSDN都会举办面向中国程序员的大型网上调查活动。这是中国样本最丰富的开发者社区调查,持续、全面和深入地反映了中国开发者社群自身状况、各项技术、工具、产品的使用状况和发展趋势,是完整、准确地了解中国开发者市场的重要参考资料。本次调查覆盖基础信息、.NET、Java、C/C++、Web开发、数据库应用开发、软件工程及项目管理、移动及嵌入式开发、开放源代码、企业信息化等10个领域。还有惊喜大奖等着你哦,赶快进入吧! 2007中国软件开发者大调查正式启动

推荐作者
  • 大宝大宝

    时间如流水,知惜方成功。

  • SkymanSkyman

    江苏人氏,梅兰芳之老乡。现游学渝州之最...

  • ralph623ralph623

新进作者
  • 冲 s冲 s

  • 小鱼小鱼

  • 棱角棱角

    多年J2EE构架设计与开发经验,专注于企业信息系统建设,精通Java设计模式,并能熟练的运用到企业开发中。 精通Struts与Spring框架。数据库方面精通Oracle数据库,从事过数据库方面的开发以及oracle优化方面的工作。

最新技术图书推荐
PhysX SDK物理引擎开发包使用教程

发表日期:2006-9-18
更新日期:2006-9-18
作者文章阅读次数:3898

源自:Skyman (个人网站) 标签:游戏

您认为本文应该得        共有1人参与打分打印|收藏|讨论|投诉

AGEIA的PhysX处理器是世界上首款物理模拟处理器 (PPU), 该处理器将解除中央处理器进行物理模拟的负担。PhysX PPU 的设计构架基于顶点的多线程操作,允许游戏开发人员进行精确、流畅和动画创作和运动模拟,例如毛发、布料、液体、流体等。本文介绍了如何利用PhysX SDK物理引擎开发包来实现我们仿真的效果。


AGEIA的PhysX处理器是世界上首款物理模拟处理器 (PPU), 该处理器将解除中央处理器进行物理模拟的负担。PhysX PPU 的设计构架基于顶点的多线程操作,允许游戏开发人员进行精确、流畅和动画创作和运动模拟,例如毛发、布料、液体、流体等。目前 AGEIA 的PhysX处理器是世界上第一款也是唯一一款专注于物理算法处理器的产品.
利用PhysX SDK物理引擎开发包来实现我们仿真的效果时,一般需要以下几个步骤:
(1)    PrintControls();
(2)    InitGlut(argc, argv);
(3)    InitNx();
(4)    glutMainLoop();
(5)    ReleaseNx();
其中最为主要的函数是InitNx(),也既是初始化PhysX,创建一个PhysX SDK实例以及建立我们的场景。下面具体分析各个函数的作用。
一.PrintControls();
显而易见,利用该函数的目的是在告诉玩家该如何进行操作。操作的按键可根据自己的喜好进行设置。
二.InitGlut(argc, argv);
PhysX是OpenGL上开发的,所以在初始化PhysX实例之前,必须建立一个OpenGL的框架。
①.    glutInit(&argc, argv) 用来初始化GLUT,并且处理任意的命令行变量
②.    glutInitWindowSize(int width, int size) 指定了窗口以像素为单位的尺寸
③.     glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH) 建立一个带有双缓存、RGB颜色模型和很大缓存的窗口
④.    glutCreateWindow(char* string) 创建一个具有OpenGL创建的窗口,string为该窗口的窗口名
⑤.    glutSetWindow()
⑥.    glutDisplayFunc(RenderCallback) 渲染
ProcessCameraKeys();
     SetupCamera();
         if (gScene && !bPause)
     {
        GetPhysicsResults();
ProcessInputs();根据选择的对象,给该对象施加前后、上下、左右不同方向的力,然后调用对象的方法addForce,产生不同的物理效果
        StartPhysics();
     }
    // Display scene
     RenderActors(bShadows);
调用函数DrawActor(NxActor* actor)将场景中的物体渲染出来,实在是在DrawActor(NxActor* actor)函数中根据物体形状调用不同形状的绘画函数将物体渲染出来的。在渲染的过程中,利用显示列表绘制不同形状的物体。在PhysX中,物体形状分为以下几种:NX_SHAPE_PLANE(面板状), NX_SHAPE_BOX(盒子状), NX_SHAPE_ SPHERE(球形状), NX_SHAPE_CAPSULE(胶囊状), NX_SHAPE_CONVEX(凸多边形状), NX_SHAPE_MESH(网状状)。
当bShadows为true时,渲染物体的阴影;为false时就不绘制
     DrawForce(box, gForceVec, NxVec3(1,1,0));
        将物体受力的受力方向渲染出来
⑦.    glutReshapeFunc(ReshapeCallback)
设置窗口
⑧.    glutIdleFunc(IdleCallback);
  
⑨.    glutKeyboardFunc(KeyboardCallback);
⑩.    glutKeyboardUpFunc(KeyboardUpCallback);
⑪.    glutSpecialFunc(SpecialCallback);
在此,调用ResetNx(),重新渲染
⑫.    glutMouseFunc(MouseCallback);
⑬.    glutMotionFunc(MotionCallback);
⑭.    MotionCallback(0,0);
三.InitNx() 因为我们需要初始化PhysX SDK实例,并且建立我们需要的场景;所以我们需要设置以下几个变量,并且将它们设置为全局变量
        NxPhysicsSDK*gPhysicsSDK = NULL;//PhysX SDK实例对象
NxScene*gScene = NULL;//场景对象
NxVec3 gDefaultGravity(0,-9.8,0);
***注意:坐标系的方向指向,在PhysX、OpenGL以及3DMax都有一些不一样,当运行里面的demo的时候就可以体会到。它们的坐标系分别如下:    
 

  下面就在InitNx()中开始初始化实例以及建立场景.
①.    实例化 physics SDK
gPhysicsSDK = NxCreatePhysicsSDK(NX_PHYSICS_SDK_VERSION);
初始化完Physics SDK后,只是简单的一个实例。可以通过设置实例的物理参数来充实我们的模拟效果.
gPhysicsSDK->setParameter(NX_SKIN_WIDTH, 0.01);
②.    创建场景
            NxSceneDesc sceneDesc; //场景表述表对象
            sceneDesc.gravity = gDefaultGravity;
        sceneDesc.broadPhase = NX_BROADPHASE_COHERENT;
        sceneDesc.collisionDetection    = true;
            gScene = gPhysicsSDK->createScene(sceneDesc);
在PhysX中,不管是创建场景还是创建各个物体角色时,都是先通过各自对应的描述器(翻译的不是很准确)设置场景和各个物体的物理参数,用来模拟真实的世界环境和物体。建立好表述器后,通过函数createScene(NxSceneDesc)函数就可以建立需要的场景对象。
一般情况下,场景描述器的参数就是设置重力加速度sceneDesc.gravity,是否进行碰撞检测collisionDetection, true为进行,在PhysX SDK中描述器被广泛的应用. 描述器包括所有你创建物体的信息broadphase-coherent是三种碰撞检测中的一种。
gPhysicsSDK->setParameter(NX_SKIN_WIDTH, 0.01);
当相互碰撞的物体的材质都很软的时候,在现实中就会发现当发生碰撞的时候物体之间就会相互嵌入一部分,在这里我们就可以利用物理参数NX_SKIN_WIDTH,它的默认值为0.05m,该值越大,嵌入的就越多
 
同时,我们可以对场景中的所有物体创建材质。创建的材质定义了碰撞和物体材料的物理属性。比如反弹系数、静摩擦力、滑动摩擦力等。
 
            // Create the default material通过材质索引创建一个材质的对象
            NxMaterial* defaultMaterial = gScene->getMaterialFromIndex(0);
           defaultMaterial->setRestitution(0.5);
            defaultMaterial->setStaticFriction(0.5);
           defaultMaterial->setDynamicFriction(0.5);
 
创建物体,以box为例
NxActor* box = CreateBox(NxVec3(5,1,0));
NxActor* CreateBox(const NxVec3& pos)
{
        // Add a single-shape actor to the scene
        NxActorDesc actorDesc;
        NxBodyDesc bodyDesc;
 
        // The actor has one shape, a box
        NxBoxShapeDesc boxDesc;
        boxDesc.dimensions.set(0.5,1,0.5);
        actorDesc.shapes.pushBack(&boxDesc);
 
        actorDesc.body = &bodyDesc;
        actorDesc.density = 10;
        actorDesc.globalPose.t = pos;
        return gScene->createActor(actorDesc); 
}
我们创建一个角色参与者box,它的类型为NxActor*。建立该对象的时候需要设置它的描述器,然后利用函数createActor(NxActorDesc actorDesc)将该对象加入场景中。每一个对象又有和自己形状相对应的描述器。利用它设置对象的物理参数。boxDesc该描述器描述了该盒子的长、宽、高分别为0.5,初始化的位置以及该盒子的密度。
③.    创建完所有的物体对象时,调用UpdateTime()得到从上一帧渲染到现在经过的时间
④.    当创建的场景成功,利用函数StartPhysics()开始它的第一帧模拟。
            void StartPhysics()
{
    // Update the time step
           NxReal deltaTime = UpdateTime();
 
               // Start collision and dynamics for delta time since the last frame
               gScene->simulate(deltaTime);
               gScene->flushStream();
}
simulate(deltaTime)是PhysX 解决物理学的关键
              flushStream()对时间步进行仿真
四.glutMainLoop()
程序将一直停留在glutMainLoop()中,直到用户自己结束。当场景一旦被渲染后,每次设置下一场景时RenderCallback()回调函数被调用
五.ReleaseNx()
    删除场景中所有的物体对象以及场景本身
 
 

您认为本文应该得        共有1人参与打分打印|收藏|讨论|投诉

暂无图片

江苏人氏,梅兰芳之老乡。现游学渝州之最高学府,主攻机械,以有限元纵横天下。然天性喜好图形,以研究3D、虚拟世界为人生最大乐事,善使OpenGL,常以高手自称蒙混新人,愧耳!空暇喜玩文学,把酒当歌,风花雪月,不亦乐乎!近转玩佛学,常以一佛学小册在手,虔诚把玩,不忍释手,有道是:心中无尘事,莲花自在开!

评论

CSDN技术中心团队官方Blog:http://blog.csdn.net/techcenter/,反馈邮箱:techcenter at csdn.net (注意:请把 at 换成@)


网站简介广告服务网站地图帮助联系方式诚聘英才English问题报告

北京百联美达美数码科技有限公司  版权所有  京 ICP 证 020026 号

Copyright © 2000-2006, CSDN.NET, All Rights Reserved