Gameplay3d游戏引擎vs2013搭建

简单介绍gameplay3d,然后给出windows编译。

gameplay3d概述

gameplay3d是黑莓出品的开源,跨平台,2D及3D游戏引擎框架。目的是给游戏开发人员独立创建桌面和手机游戏。

支持的平台

Linux、Windows、MacOSX、iOS、Android

框架

  • c++实现
  • Apache2.0授权
  • doxygen文档
  • 支持的工作平台:Visual Studio, XCode, QTCreator, Eclipse and CMake
  • 二进制打包工具,利于优化ttf字体 fbx资源。

特色

  • 完整的绘制渲染系统OpenGL (就是我们的PC,游戏主机等)OpenGL ES(移动设备)。
  • 基于材质系统的内置shader。
  • 支持灯光,场景摄像机,音频,物理和图片。
  • 陈述场景,动画,粒子,材质绑定。
  • 高层次地形和LOD。
  • 支持2D/3D的陈述ui系统
  • 可扩展的骨骼动画系统。
  • 易用的sprite, tileset 和text renderin。
  • 完整声音系统,支持wav ogg格式。
  • 全矢量数学库和二维/三维数学和可见性剔除。
  • 人工智能,状态机,消息
  • 全矢量2d/3d数学库和可见性剔除。
  • 支持输入:鼠标,键盘,触摸,手势和游戏手柄。
  • Lua脚本绑定,用户绑定生成器工具。

windows环境配置

gameplay3d源码

https://github.com/gameplay3d/GamePlay/releases

安装依赖库

  • 在开始之前,必须先下载依赖库。
  • 运行install.bat

安装Visual Studio 2013

  • 下载地址:http://www.microsoft.com/visualstudio/eng/downloads#d-2013-express
  • 安装路径随意,建议用英文路径

安装DirectX SDK – June 10

  • 下载地址:http://www.microsoft.com/en-ca/download/details.aspx?id=6812
  • 使用默认安装路径: C:Program Files (x86)Microsoft DirectX SDK (June 2010)

编译

  • 打开gameplay.sln
  • 选择Build > Build Solution (F7)

运行例子

  • 右击你想运行的例子
  • 设置为启动项目
  • 点击调试,开始调试 (F5)

赛车图

sample-racer

免费国外cdn网站提速推介

我空间在美国,在国内没备案,想让国内的访问快。国外的免费cdn网站加速incapsula,使用香港节点ping值110左右。当然国内也有个安全宝,它会给你提供日本的节点,但是及不稳定。

注册帐号

  • 登录https://www.incapsula.com/
  • 点击PRICING&SINGN UP,点击Free
  • 填入注册信息
    • First name:名字
    • Last name:姓
    • Email address:电子邮箱
    • Password:至少8位密码
    • Confirm password:重复至少8位密码
  • 到你的邮箱激活帐号。

添加网站

点击Add a website:填入你的域名。

incapsula自动扫描你的网站记录。点击Continue。

分配国外的ip节点给你。写着啥 iI completed th Dns chaanges,不管它。。

修改域名dns记录

把你的域名A 记录值改成45.64.64.200

上dnspod的dns修改图

dnspod

香港节点:45.64.64.0/24

全部CDN节点:http://bgp.he.net/AS19551#_prefixes

去除incapsula的小广告,点击Sites,点击域名,点Settings,点General,把Web Seal 的勾去掉,点Save.

写在后面

cdn服务商

  • 国内的cdn :百度云加速,腾讯云加速,360云加速 ,加速乐,新浪云加速,七牛云储存,安全宝(据说给百度已收购)。根据在网上的评论360云加速目前是好的选择。这里得说下网宿科技,相信看视频的朋友都可能留意到这个号称”中国最大的CDN及IDC综合服务提供商”。乱七八糟,都在抢占市场。
  • 国外的cdn :CloudFlare,Google PageSpeed Service

cnd好处

  1. 访问速度快,给你分配了最近的节点,这个技术是通过dns来智能识别。
  2. 抗攻击,真实的ip地址你是不知道。
  3. 对网站的seo不影响

osg3.2.1编译

openscenegraph3.2.1目前最新版 在windows7编译,支持vs2010 2012 VisualStudio 2013 RTM等

准备

最新openscenegraph稳定版源码http://www.openscenegraph.org/index.php/download-section/stable-releases

依赖库,选择相应的VisualStudio 版本:http://www.openscenegraph.org/index.php/download-section/dependencies

osg的data给例子资源OpenSceneGraph-Data-3.0.0:http://www.openscenegraph.org/index.php/download-section/data

赖人就下载已osg编译好的二进制文件:http://openscenegraph.alphapixel.com/osg/downloads/free-openscenegraph-binary-downloads

目录结构说明

OpenSceneGraph-3.2.1

  • 3rdParty:依赖库目录,注意对应vs版本,vs2013的可以下载我这的http://pan.baidu.com/s/1qW9WOES
  • build:cmake指定目录,生成sln文件
  • OpenSceneGraph:osg源码目录,这个目录下有CMakeLists.txt文件,给cmake用的

cmake生成VisualStudio工程文件

  1. 打开cmake
  2.   看cmake 的gui 分别填入
    1. source code: E:OpenSceneGraph-3.2.1 ,
    2. build the binaries:E:OpenSceneGraph-3.2.1build
  3. 点击configure,现在你要生成对应VisualStudio版本,然后点击Generate(如果你要例子需要把BUILD_OSG_EXAMPLES打勾)。
  4. build目录打开sln编译install,在C:Program Files (x86)目录看到相应osg库

运行例子

添加C:Program Files (x86)OpenSceneGraphbin到环境变量PATH。

新建环境变量OSG_FILE_PATH:E:OpenSceneGraph-Data-3.0.0;E:OpenSceneGraph-Data-3.0.0Images。

想看全屏的牛cmd运行命令:osgviewerd.exe E:OpenSceneGraph-Data-3.0.0cow.osg

四个版本说明

Debug:调试版

Release:发布版

MinSizeRel:最小发布版

RelWithDebInfo:可以调试的发布版

 

Bullet2.83.5快速入门指南

本文述说物理引擎bullet3-2.83.5的环境搭建及Hello World程序说明。

Bullet简介

Bullet 物理引擎是一个专业的开放源码的碰撞检测,刚体和柔体动力学库。Bullet 物理引擎目标是实时和交互使用在游戏,电影和机器人的视觉效果。自由zlib授权的商业使用库。

主要特点:

  • 开源C ++代码下的zlib许可证,并自由使用在所有的平台,包括PLAYSTATION3,,XBOX 360,Wii,PC,Linux,Mac OSX,Android和iPhone。
  • 离散和连续碰撞检测包括射线和凸扫描测试。碰撞的形状包括凹凸面网格和所有基本图元。

  • 快速稳定的刚体动力学约束求解器,车辆动力学,角色控制滑块,铰链,通用的六自由度和扭转约束锥的布娃娃。

  • 布柔体动力学,绳和变形量与刚体双向互动,包括相互约束支持。

  • 本地二进制文件格式的例子。.bullet文件格式 和典型格式例如:URDF,Wavefront OBJ和Quake BSP。

搭建Bullet SDK和demos

源码下载:https://github.com/bulletphysics/bullet3/releases

使用Premake

windows系统:双击build3/vs2010.bat脚本自动生成vs2010 sln文件。

使用cmake

cmake下载安装地址http://www.cmake.org。打开cmake,source code:bullet3-2.83.5牧,binaries:bullet3-2.83.5/build。点击configure,你可以选择vs2010 ~vs2013。build目录下就会产生对应的vs版本BULLET_PHYSICS.sln文件。

Hello World

讨论基本Bullet物理模拟,通过控制台输出模拟结果。源码在examples/HelloWorld/HelloWorld.cpp。

HelloWorld.cpp包含头文件

#include "btBulletDynamicsCommon.h"
#include <stdio.h>

/// 最基本的Bullet物理模拟Hello Word 程序

int main(int argc, char** argv)
{

HelloWorld.cpp 初始化世界

  ///-----初始化开始-----

    //配置碰撞默认内存设置,碰撞,高级用户可创建自己的配置。
    btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration();

    ///使用默认调度.为并行处理使用不同的调度做 (参考Extras / BulletMultiThreaded)
    btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration);

    ///btDbvtBroadphase 是个很好通用粗测阶段. 你也可以尝试btAxis3Sweep.
    btBroadphaseInterface* overlappingPairCache = new btDbvtBroadphase();

    ///默认约束求解器. 为并行处理可以使用不同求解器 (参考Extras/BulletMultiThreaded)
    btSequentialImpulseConstraintSolver* solver = new btSequentialImpulseConstraintSolver;

    btDiscreteDynamicsWorld* dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,overlappingPairCache,solver,collisionConfiguration);

 步进模拟

  for (i=0;i<100;i++)
    {
        dynamicsWorld->stepSimulation(1.f/60.f,10);

        //打印对象的坐标
        for (int j=dynamicsWorld->getNumCollisionObjects()-1; j>=0 ;j--)
        {
            btCollisionObject* obj = dynamicsWorld->getCollisionObjectArray()[j];
            btRigidBody* body = btRigidBody::upcast(obj);
            btTransform trans;
            if (body && body->getMotionState())
            {
                body->getMotionState()->getWorldTransform(trans);

            } else
            {
                trans = obj->getWorldTransform();
            }
            printf("world pos object %d = %f,%f,%fn",j,float(trans.getOrigin().getX()),float(trans.getOrigin().getY()),float(trans.getOrigin().getZ()));
        }
    }

 HelloWorld.cpp 清理

  //清理动态世界里的刚体
    for (i=dynamicsWorld->getNumCollisionObjects()-1; i>=0 ;i--)
    {
        btCollisionObject* obj = dynamicsWorld->getCollisionObjectArray()[i];
        btRigidBody* body = btRigidBody::upcast(obj);
        if (body && body->getMotionState())
        {
            delete body->getMotionState();
        }
        dynamicsWorld->removeCollisionObject( obj );
        delete obj;
    }

    //清理碰撞形状
    for (int j=0;j<collisionShapes.size();j++)
    {
        btCollisionShape* shape = collisionShapes[j];
        collisionShapes[j] = 0;
        delete shape;
    }

    //清理动态世界
    delete dynamicsWorld;

    //清理求解器
    delete solver;

    //清理粗测阶段
    delete overlappingPairCache;

    //清理调度
    delete dispatcher;
    delete collisionConfiguration ;
     // 它将会被清理通过析构函数
    collisionShapes . clear ();

 

Box2d在cocos2d-x应用

先介绍box2d基础,再和cocos2d-x结合应用,最后给利用PhysicsEditor工具导出的数据,水果从上面掉下来的例子。

Box2d基本概念

Box2D是一个用于游戏的2D刚体仿真库。程序员可以使用它在他们的游戏使物体在现实的方式,让游戏世界更生动。就是说它只是数据计算,比如两个物体的碰撞,它会告诉程序员,至于你两个物体是怎么的显示,那是渲染的事。

  • shape :2D 的几何对象,如:圆形或者对变形
  • rigid body:刚体,也就我们用到的物体,有动态和静态刚体。
  • fixture:夹具,它是绑定在body,它包含有,shape ,密度,摩擦系数,碰撞过滤。
  • constraint:约束,比如摆钟,你绕着那一点来摆。
  • contact constraint:一种特殊的约束,比你的不能穿透另外个刚体,和模拟摩擦及恢复形状。
  • joint:用来约束两个或者更多的body,支持多种节点类型:revolute, prismatic, distance等。
  • joint limit:
  • joint motor:
  • world:物理世界,是body,fixture,constraint集和到一起。box2d支持创建多个word,但何必。
  • solver:
  • continuous collision :

Box2d的简单使用

box2d简单的使用是需要经过下面四个步骤:

  1. 创建物理世界
  2. 在物理世界里面加入刚体
  3. 模拟步进计算
  4. 获取模拟后的坐标和弧度

box2d HelloWorld

 //创建物理世界
 b2Vec2 gravity(0.0f, -10.0f);
 b2World world(gravity);

//定义创建刚体
 b2BodyDef bodyDef;
 bodyDef.type = b2_dynamicBody;
 bodyDef.position.Set(0.0f, 4.0f);
 b2Body* body = world.CreateBody(&bodyDef);
 b2PolygonShape dynamicBox;
 dynamicBox.SetAsBox(1.0f, 1.0f);
//定义夹具 形状等,附加刚体上
 b2FixtureDef fixtureDef;
 fixtureDef.shape = &dynamicBox;
 fixtureDef.density = 1.0f;
 fixtureDef.friction = 0.3f;
 body->CreateFixture(&fixtureDef);

//模拟步进
 float32 timeStep = 1.0f / 60.0f;
 int32 velocityIterations = 6;
 int32 positionIterations = 2;
 world.Step(timeStep, velocityIterations, positionIterations);

//获取box2d模拟后的数据包括坐标和弧度
 b2Vec2 position = body->GetPosition();
 float32 angle = body->GetAngle();

box2d和 cocos2d-x应用

建议使用cocos2d-x 3.5以上。

文件说明:

  • GLES-Render:用显示box2d调试数据
  • GB2ShapeCache-x:解析PhysicsEditor导出的box2d数据,原来的版本是2.X的,已经修改过适应3.X的版本
  • HelloWorldScene:场景

PhysicsEditor使用:

官网有教程,就不在写了。记得导出的时候选择cocos plist格式,当然如果你导出其他的格式,就自己对应的解析。

注意事项:

  • box2d单位和像素是1:30,即是box2d一单位等于30像素。
  • box2d弧度和cocos2d-x弧度是要反的。
  • 注意设置他们锚点(setAnchorPoint);

总结

例子里面只是写刚体的创建,一直在增加,并没有销毁刚体,在一些游戏当中,比如你打中了,销毁掉自身,就需要调用world->DestroyBody(body),同样上面没有说到相互直接的碰撞过滤,等等,。。但是不在本文目的范围之内,呵呵。。。。。。

例子下载图及参考

下载地址:http://pan.baidu.com/s/1pJ1JhVH

box2d的英文手册: http://box2d.org/manual.pdf

Box2dCocos2d

Urho3D游戏引擎搭建

Urho3D是一个轻量级、跨平台的2D和3D渲染的c++实现开源游戏引擎,在MIT许可协议下发布。利用OpenGL渲染或是3D9(Shader Model 2和OpenGL 2),是受到OGRE 和horde3d极大的鼓舞而延生。本文只是描述Urho3D在win32和android搭建。

适用版本

Urho3D1.4 Urho3D1.5 Urho3D1.6 Urho3d1.7

构建的系统说明

操作系统,cmake.org下载最新版

  • Windows系统,下载安装DirectX SDK ,也可不装,cmake配置时去掉dx ,勾选OpenGL,。
  • Linux系统,安装libx11-dev,libxrandr-dev,
  • 树莓派系统
  • Mac OS X系统,Xcode开发工具包
  • Android系统,安装Android SDK和NDK的Android(API最低12),至于无法下载请百度。
  • Emscripten系统

构建

推荐使用方法二

方法一:使用脚本构建

win用bat
linux用sh
基本的使用命令是:

<script-name> /path/to/build-tree [build-options]

方法二:使用cmake构建

Urho3D使用CMake(http://www.cmake.org)来搭建。该过程有两个步骤:

  • 你可以用界面或者脚本生成解决方案。执行命令cmake_vs2013.bat build_vs2013 -DURHO3D_OPENGL=1。
    • Windows:cmake_vs20xx.bat,cmake_mingw.bat,cmake_codeblock.bat,cmake_ninja.bat,或cmake_generic.bat
    • Mac OS X的:cmake_macosx.sh,cmake_codeblocks.sh,cmake_ninja.sh,或cmake_generic.sh
    • Linux:cmake_eclipse.sh,cmake_codeblocks.sh,cmake_ninja.sh,或cmake_generic.sh
    • 树莓派:cmake_rpi.sh,cmake_eclipse.sh,cmake_codeblocks.sh,cmake_ninja.sh,或cmake_generic.sh
  • 利用的CMake的生成的项目文件或解决方案文件。
    • Visual Studio:打开Urho3D.sln
    • Xcode:打开Urho3D.xcodeproj
    • CodeBlocks:打开Urho3D.cbp
    • Eclipse:使用文件|导入 导入项目“存在项目到工作区”

安卓版本编译

笔者环境:win7 x64 win10 x64
1、新建环境变量:ANDROID_NDK D:/Android/android-ndk-r9d
2、添加到Path变量(需要自己去下载android-ndk android-sdk apache-ant):D:\Android\android-ndk-r9d\prebuilt\windows-x86_64\bin;D:\Android\android-sdk\tools;D:Android\apache-ant-1.9.4\bin
3、到Urho3D-1.5 执行 cmake_android.bat build_android -DURHO3D_LUA=0
Urho3d-1.7 执行cmake_android.bat build_android -DURHO3D_LUA=0   -DURHO3D_PCH=0
//1.7的错误提示 Source/Urho3D/Container/Str.cpp:1081:14: error: non-const lvalue reference to type ‘__builtin_va_list’ cannot bind to a value of unrelated type ‘va_list’ (aka ‘__builtin_va_list’
4、进入到build_android目录依次执行

android list target //查询 <target-id> 数字对应的版本
android update project -p . -t <target-id>
make -j <num_jobs>
ant debug

5、target-id是android list target可以查询,num_jobs 是参与并行make数量。
建议参考这里的https://github.com/299299/Urho3D已经提供了ANDROID_NDK下载。备注如果无法make –j 4
出错:
make interrupt/exception caught (code = 0xc00000fd , addr = 0000000000420386,
sdl redefinition of ‘struct mallinfo’
检查是否有D:/Program Files (x86)/Git/bin从系统环境变量Path移除。或者放到NDK后面!

HelloWorld截图

Urho3DHelloWorld.jpg

下载及参考链接

https://github.com/urho3d/Urho3D/releases
http://urho3d.github.io/documentation/1.4/_building.html