why game developers keep getting laid off
翻译了一下why game developers keep getting laid off这个文章. 里面有些观点是挺有意思的.
引言
在Hacker News上看到此文, Why Game Developers Keep Getting Laid Off by Jason Schreier http://kotaku.com/why-game-developers-keep-getting-laid-off-1583192249 I enjoyed this article, thx. 稍微摘录和翻译一下.
Why does this happen so often?
... 为什么裁掉一些开发,几个月之后又要重新请人?这个想法好像有点傻啊。但是这种事情却常常发生。根据Sony的某前员工,其中的解释很简单:在开发的前期(游戏的概念和设计是在这期间完成),不需要那么多人,所以发行商就不养人。 ...
A deadline's ...
more ...build error from line ending
Build error, 具体是error C4335: Mac file format detected: please convert the source file to either DOS or UNIX format怎么办呢?
故事的开端是checkin了一个.cpp,当然本地是build过的,但是server端那边反馈说build error, 具体是 error C4335: Mac file format detected: please convert the source file to either DOS or UNIX format
怎么办呢?当然是查看一下到底是那个.cpp文件的line ending是什么东西,然后改成合适的就ok了.
下面截图显示改之前是CR+LF, 改之后是LF的 ...
more ...mesh history
做demo都只是对mesh做一次修改, 但是好像在一个成熟的程序里面往往是很多次修改的叠加.
引言
以前对mesh的修改都是例如 mesh.setVertexPosition( vertexID, newPos ); mesh.setVertexTC( tcID, newTC ); 这样直接改[1], 从读书时候到现在都是这么simple and naive:-) 而对于maya的case就没有这样简单了,例如去看maya>devkit>splitUV example [2], 套用上面直接修改的方法, 要split一个uv的话,那直接用MFnMesh加几个新uv, MFnMesh::setUV(new uv id, uv value) 就ok了, 可是故事没有这么简单....
Construction History and Tweak
直接摘抄两段来看看:
more ...All the operations that can be performed on a polygonal ...
algo - counting inversions
算法练习: counting inversions
Background
Given an array, say [1, 3, 5, 2, 4, 6], to count the inversions. What is an inversion ? if (i < j) but arr[i] > arr[j]. 例如上面的(3, 2), 3在2的前面, 但是3>2, 构成一个inversion. 这个例子中一共三个inversions(3, 2) (5, 2) (5, 4).
这个计算有什么用呢? 我是[Algorithms: Design and Analysis ...
more ...partio
本来是在找point clould读入的资信, 如point cloud to maya, 遇到partio这open souce project, 读读它的代码应该能学到东西, 于是故事就开始了.
引言
本来是在找point clould读入的资信, 如point cloud to maya, 遇到partio这open souce project from
Disney Animation, 读读它的代码应该能学到东西, 于是故事就开始了.
“The goal of Partio is to provide a unified interface akin to unified image libraries that makes it easier to load, save, and manipulate ...
Vector based containers
在代码中std::vector经常被用到吧? 因为它很容易用, 只管往里面塞东西就ok了. 但是用!=用得好, 而对它的了解又是否足够把它用好呢...下面是在阅读参考文章时候的笔记.
引言
Using STL Vectors
在代码中std::vector经常被用到吧? 因为它很容易用, 只管往里面塞东西就ok了. 但是用!=用得好, 而对它的了解又是否足够把它用好呢...下面是在阅读参考文章时候的笔记.
Prefer vector over list
比较 std::vector 和 std::list, 其中一个特定是, vector的内存是连续的(contiguous buffers), 还可以避免avoid内存动态分配memory allocations和四散的访问scattered access. 这些都是优势.
这里发散一下,以前在用Qt 4.8的时候(以后Qt 5可能有变),就有QVector, QList, QLinkedList,它们的区别也有意思。其中QVector跟std::vector类似 ...
more ...Pointer to Member Function
function pointer是知道的, 如
int max( int a, int b) { ... };
int (*pFtor)( int, int ) = &max;
int iResult = pFtor(1, 2);
or
typedef int(*FtorType)(int, int);
FtorType pFtor;
pFtor = &max;
int iResult = pFtor(1, 2);
但是当看到类似以下代码时候还是恐惧了一下:
class Tool {
int doA(ArgumentType &);
int doB(ArgumentType &);
};
typedef int(Tool::*MemberFunctionPtr)(ArgumentType &);
Tool toolObj ...
In the middle of time and space
刚发生了一个有意思的事情, 5月9号16:40
小伙C说了一段话; 小伙B回答了一段话;
小伙C是在北美西海岸, 跟我们差16小时; 小伙B是在英国.
那么C大致是5月8号深夜, B可能是9号早上.
过去和未来的对话,我们夹在时空中间,旁观.....
more ...Example of code conventions
刚看到如下代码:
// NvGLModel.h from nvidia samples
nv::vec3f m_center; ///< The computed center of the bounding box of the app
private:
NvModel *model;
GLuint model_vboID, model_iboID;
nv::vec3f m_minExtent, m_maxExtent, m_radius;
觉得别扭,主要是有些成员变量data member用来m_,而有些不用,不统一。所谓的taste?
btw, 反例的英文原来是: counter example; negative example
more ...Picking with OpenGL
If you have choices, choose the best. If you have no choice, do the best. 如果有选择,那就选择最好的;如果没有选择,那就努力做到最好。
Picking with OpenGL
在3d软件提供交互的时候,例如先选择了某个vertex或者某个face,然后去操作这个被选中的东西。如在maya里面很多工具(maya里面把context==tool?)都是先pick the manipulator, drag the manipulator, to update the attributes of the node (the selection list). 第一步就是要选中mouse底下的东西,这是怎么做到的呢?
其实一开始我想到的方法ray intersection的方法, approach 0 ...
more ...choose the overrided function
In class hierarchy, if functions are overrided by some subclass, which one will be invoked?
more ...Do and redo are similiar
在学maya/MPxCommand, 当一个操作需要支持undo/redo的时候,用户操作的次序可能是: - do sth -> undo it, or - do sth -> undo it -> redo it; 在实现的时候会发现do sth 跟 redo sth的代码基本一样啊,那当然想写一个都被do and redo调用的函数就好了,避免代码重复嘛。
maya/devkit的例子所使用的方法是:
//code
// inside class CommandXY
virtual bool isUndoable() const { return true or false; }
virtual MStatus doIt( const MArglist & )
{
// parse the argument list;
// do some ...
How to build a plugin system
Applications normally support custom plugins, how to do that?
很多软件都提供了API给customer, 可以写plugin来扩展原来的程序.
例如mudbox和maya. 从mudbox的API来看,一般可以实现 - 自定义operation, support undo and redo; - 自定义某种brush (operation); - 继承实现某个类,代替原有的那个. 例如map extraction? 当前接触到的maya api不多,知道plugin可以实现context and manipulator.
问题就来了, 一个简单的plugin system是怎么设计和实现的呢?
case 1: Reference: Using Dynamic Link Libraries (DLL) to Create Plug-Ins, by Jeremiah van Oosten. http://3dgep ...
more ...Maya Programming Node
学maya时候有些新概念要记录一下,否则忘得快.
先在一个新场景里面拖一个多边形球polygon sphere出来,
打开Outline窗口, 看到一个pShere1, 选择Display/Shapes, 又看到pShere1下面还有一个pSphereShape1. 而在hypergraph: connection 窗口看到一共四个东西, 其中两个就是上面的pSphere1 and pSphereShape1, 而且其中三个是有连接关系的。从左到右它们分别是:
+ polySphere1: 控制参数, 例如半径radius, axis/height上的布线密度等;
+ pSphereShape1: 这个就是实际的shape node, 形状.
+ initialShadingGroup: 用于画这个球的.
+ pSphere1: transform node, 决定了球在空间位置.
import maya.cmds;
maya.cmds.polySphere() # 用script建一个球
# Result: [u'pSphere2', u'polySphere2'] # 返回就是transform node, shape node. interesting part ...
simple implement of 2d bezier curve
工作中又一次遇到nurb curve的问题,具体是knots个数和求法的问题。那东西太难,相对来来说,bezier curve易懂很多,一直想实现一下来看看,于是就有了此。
more ...Flood fill
看见someone提到Flood fill algorithm, 惭愧,不熟悉这个名字,于是Google一下,竟然跟BFS很像,于是想着要简单实现一下。
more ...How to debug maya custom plugin
涉及maya plugin开发的时候,怎么debug呢?
Attach to maya process ... 寄生
step 1. maya plugin manager (Window -> Settings/Preferences -> Plug-in Manager)中load your custom plugin. This plugin need to be built by the same compiler version of maya, 也许不需要. step 2. at your visual studio project of that custom plugin, Tools -> Attach to ...
more ...Tree view at Qt
Qt中的TreeView很复杂, 记录一下自己的理解.
引言
Model/View/item的关系就有点像Container/Algorithm/Iterator的关系。 Tree view属于Model/View Programming的一部分。有些
Index 带上下层级结构的二维索引
QModelIndex()表示model中最上层的root item的index, QModelIndex().isValid() == 0.
item之前有上下层级关系,index.parent()获取index的parent. 当index.parent().isValid() == false,表示这个item的parent就是root item. 这些items被称为top-level itmes.
to retrieve data from a model: for (int row = 0; row < model->rowCount(parentIndex); ++row) { for (int ...
more ...Blendshape at maya
最近接触了一点maya blendshape programming, 稍微记录一下。
BlendShape deformer basis (基础)
先说明一个特点,当drag一个cube or sphere物体的时候,会生成
To create a simple blendshape example,
Polygon mode, create a cube, we have
Select cube1, Shift+D, we have
Select cube1, Shift+D, we ...
This is the Title
Most of time, do not want summary, since some theme will only display summary at the head page if there is summary here.
more ...