Posts

如何使用vsprintf, vsnprintf等函数

12 Dec 2016

前言

在一些c++的框架中,有很多小的util函数,通常每个框架里都会有一个log函数,用法类似于printf(fmt, ...), 比如cocos2d-x的log函数用法大概像下面这样: log("size is %d, %d", w, h); 它们的实现就是借助于vsnprintf族函数。本质在于格式化一个字符串。 下面通过一个例子来说明如何使用vsnprintf族函数来实现一个字符串格式化函数

示例

这个格式化函数的用法像下面这样:
int count(10);
cout << format("count is %d\n", count);

format函数实现

...

阅读全文 ...


【C++ STL应用与实现】72: 标准库里的堆--如何使用标准库的heap算法

29 Nov 2016

本系列文章的目录在这里:目录. 通过目录里可以对STL总体有个大概了解

前言

本文介绍如何使用STL里的heap(堆)算法。第一次接触heap这种数据结构是在大学的数据结构教材上,它是一棵完全二叉树。在STL中,heap是算法的形式提供给我们使用的。包括下面几个函数:
  • make_heap: 根据指定的迭代器区间以及一个可选的比较函数,来创建一个heap. O(N)
  • push_heap: 把指定区间的最后一个元素插入到heap中. O(logN)
  • pop_heap: 弹出heap顶元素, 将其放置于区间末尾. O(logN)
  • sort_heap:堆排序算法,通常通过反复调用pop_heap来实现. N*O(logN)
C++11加入了两个新成员:
  • is_heap: 判断给定区间是否是一个heap. O(N)
  • is_heap_until: 找出区间中第一个不满足heap条件的位置. O(N)
因为heap以算法的形式提供,所以要使用这几个api需要包含 #include <algorithm> ...

阅读全文 ...


【OpenGL Programming On macOS using glfw 】0: Build a Simple OpenGL Program

18 Nov 2016

前言

OpenGL红宝书第九版已经开始使用glfw作为窗口管理和Context创建工具, 取代了第八版里的freeglutglew。 本文讲解如何使用glfw在macOS上来构建一个OpenGL程序(OpenGL 3.0+) 包括以下步骤:
  • 从github下载glfw源码
  • 使用CMake构建glfw,并运行示例,以确保glfw确实可用
  • 编写自己的OpenGL代码,并链接glfw来展示结果
本机环境:macOS Sierra (10.12) + glfw 3.2.1 + OpenGL 4.1

下载源码

官方代码仓库: 可以使用SourceTree来下载,下载完切换到latest分支,这是最新的stable分支。 官方入门文档:

build glfw

编译 假设你已经熟悉CMake,这里我使用out-of-tree的构建方式,打开terminal,切换到glfw根目录,比如: ~/codes/glfw/
cd ~/codes/glfw
mkdir build && cd build            
cmake ..     # macOSglfw的依赖项目除了完整的Xcode工具链就只需要一个CMakeok了,所以这一步正常应该不会出问题的。
make         # 开始编译, 如果要安装到系统,执行make install 我不需要安装,只是跑个demo
运行示例 make成功后,在build目录下输入命令(或者在finder中直接打开build/examples/simple.app)
open ./examples/simple.app
可以看到如下的一个旋转的三角形: glfw-simple.png 官方编译参考文档:compile glfw

开始写自己的OpenGL项目

正如构建其它的c++程序一样,构建自己的基于glfw的OpenGL项目,无非就两步:第一,包含正确的头文件;第二,链接正确的库文件。 ...

阅读全文 ...


【cocos2d-x 3D实战】开发一款体素游戏--1. 准备工作

31 Oct 2016

本系列文章记录下使用cocos2d-x开发一款体素风游戏的过程,遇到的问题,解决办法及收获。使用了cocos2d-x的3D功能,以下简称c3d

前言

最近cocos官网推荐了一款使用cocos2d-x开发的3D游戏,叫《Steps》(信步),是一个乌克兰小伙的作品,是一款休闲小游戏,正是类似MineCraft那种体素(voxel)风格的,看起来效果还不错,于是自己也打算尝试搞一个这样的游戏玩玩。 本文是使用c3d开发一款体素风游戏系列的第一篇,记录了开发环境的配置和界面编辑器的选择和实验。

1. 新建cocos工程

使用cocos命令行工具创建即可,建议使用lua类型,因为对3D效果的调试可能要频繁修改UI部分要频繁重启游戏。

2. 模型创建和导出

使用MagicaVoxel创建出一个3D小汽车,如下图所示: magicavoxel.png MagicaVoxel比较容易上手, 画刷工具有六种,
  • L 画线
  • C 圆
  • P
  • V 自由矢量
  • F 面
  • B 方块
画刷操作类型有四种: ...

阅读全文 ...


【cocos2d-x 学习与应用总结】使用vim编写cocos2d-x c++代码,自动补全

25 Oct 2016

前言

遇到的问题:
  1. 新添加或者Classes目录下的cpp文件没有生成compile json补全信息
每个CMakeList脚本都要添加compile commands 选项
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
...

阅读全文 ...