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);
...
阅读全文 ...
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>
...
阅读全文 ...
18 Nov 2016
前言
OpenGL红宝书第九版已经开始使用
glfw作为窗口管理和Context创建工具, 取代了第八版里的
freeglut
和
glew
。
本文讲解如何使用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/
运行示例
make成功后,在build目录下输入命令(或者在finder中直接打开build/examples/simple.app)
可以看到如下的一个旋转的三角形:
官方编译参考文档:
compile glfw
开始写自己的OpenGL项目
正如构建其它的c++程序一样,构建自己的基于glfw的OpenGL项目,无非就两步:第一,包含正确的头文件;第二,链接正确的库文件。
...
阅读全文 ...
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比较容易上手,
画刷工具有六种,
-
L 画线
-
C 圆
-
P
-
V 自由矢量
-
F 面
-
B 方块
画刷操作类型有四种:
...
阅读全文 ...
25 Oct 2016
前言
遇到的问题:
- 新添加或者Classes目录下的cpp文件没有生成compile json补全信息
每个CMakeList脚本都要添加compile commands 选项
...
阅读全文 ...