51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2210|回复: 0
打印 上一主题 下一主题

Ogre 一句话技巧

[复制链接]
  • TA的每日心情
    慵懒
    2015-1-8 08:46
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2008-1-9 11:12:50 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    1.所有需要挂在SceneNode上的user-object, 都需要从MovableObject来继承,比如一个最典型的应用是 3DSoundSource.

    2.Ogre中RenderQueue的相关标号,标号越小的其最先渲染。
    Background - Queue 0
    Skybox - Queue 20
    World Geometry - Queue 30
    MovableObjects - Queue 50
    Overlays - Queue 100

    比如我们需要在Overlays上显示粒子效果,
    我们就需要把粒子对象(其就是一个MovableObject)的RenderQueue,设置
    大于100,比如101。

    3.Material Script的自动退却(automatic fallback)技术
    在一个material中放置多个不同配置级别的Techique,
    可以分别代表UltraHigh High Normal Low各种配置级别。
    Techique依次由高配置排列到低配置,OGRE会按顺序自动检测,
    如果高配置的无法实现,会依次测试下一个Techique.
    当我们将所有的采制都实现上面四个Techique,我们就可以通过
    菜单来配置,只用用一个全局标量标志相应的TechiqueID,如果选择
    UltraHigh,我们就在使用材质的时候统一选择ID=0。

    4.一个顶点最多只能被4个骨头影响。

    5.Archive抽象类,用于文件的读取,如果想读取自己的包的话,
    就让我们继承它吧!还有继承一个新的ArchiveFactory哦。

    6.PluginFolder=./Plugins
    表示在Plugins目录下加载插件DLL

    7.创建自己的LOG文件
    LogManager* logMgr = new LogManager;
    Log *log = LogManager::getSingleton().createLog("mylog.log", true, true, false);

    8.生成16:9的屏幕,只用改变摄像机参数
    cam->setAspectRatio(Real(1.77777)); //16除以9

    9.使用CreateRenderWindow附加的参数
    NameValuePairList params;
    params["left"] = "0";
    params["top"] = 0;
    params["title"] = "Alternate Window Title";
    opts["parentWindowHandle"] = StringConverter::toString(hWnd);
    //这个是使用外部的窗口句柄

    10.线框模式调试
    camera->setPolygonMode(PM_WIREFRAME);

    11.让camera跟踪一个结点
    camera->setAutoTracking(true, SceneNode);

    12.产生立体眼镜效果
    通过调用camera的setFrustumOffset()和setFocalLength()两个函数。

    13.关于多视口,画中画
    window->addViewport(camera, ZOrder, x1, y1, x2, y2);

    你可以添加多个视口,ZOrder越小其越在下面

    14.当你需要将一个camera挂在scenenode上时,最好把"use fixed yaw axis"关掉,要不然当scenenode旋转的时候,会发生不可预料的显示效果。

    15.资源管理的时候最好要分组,那样查询起来快,
    而且卸载资源的时候可以按相关组一起unload.

    16.书上这样说了“Ogre, by default, is not thread-safe.”

    17.卸载那些未被任何对象使用的资源,用以下函数
    ResourceGroupManager::unloadUnreferencedResourcesInGroup()

    18.弄清楚
    ResourceGroupManager::geSingleton().clearResourceGroup("Bootstrap");
    ResourceGroupManager::geSingleton().destroyResourceGroup("Bootstrap");

    的区别
    clear会把该组的对象的引用计数减一,而destroy不仅做了clear的事情而且还会把该组删除掉。

    19.你要做loading进度条,就让我们注册一个ResourceGroupListener来回调其loading信息吧。
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-25 23:25 , Processed in 0.066808 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表