ITPub博客

首页 > 应用开发 > IT综合 > 说说cocos2d中的斜投影方法_浙江联通时代畅想张海波

说说cocos2d中的斜投影方法_浙江联通时代畅想张海波

原创 IT综合 作者:浙江联通畅想张海波 时间:2014-11-19 22:24:54 0 删除 编辑

  在浙江联通时代畅想公司,我张海波今天了解到了cocos2d中的斜投影方法,不过起初以为OpenGL中貌似没有直接的斜投影方法。那么我们用直接指定矩阵的方法也可以达到目的。不用被4.1开头的非平行平面的斜投影吓到,实际上只需要考虑平行平面的投影效果就可以求取投影矩阵了。

  例如上面例子中画的两个方块,如果希望其重合,且红的遮盖绿的。那么由于两个方块实际上是相等大小的。所以只需要考虑正方形中心的变换:(0.1, -0.1, 0.2)【红色的中心】 -> (-0.1, 0.1, -0.2)【绿色的中心】。那么投影线都是平行于这条线的。

  假设我们的投影平面是z = 0 平面,容易得到 投影的关系是 Xp = X - Z/2 ; Yp = Y + Z/2,和正投影一样,我们保留z的值来做深度测试,代码如下(仅提供与上面的程序不同的部分):

  [cpp] view plaincopyprint?

  static const GLfloat PROJECTION_MATRIX [16] = {

  1, 0, 0, 0,

  0, 1, 0, 0,

  0, 0, -1, 0,

  -0.5, 0.5, 0, 1

  };

  static void display() {

  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  glMatrixMode(GL_PROJECTION);

  glLoadIdentity();

  glMultMatrixf(PROJECTION_MATRIX);

  std::cout << "print projection " << std::endl;

  printMatrix(GL_PROJECTION_MATRIX);

  //画两个方块

  glColor3f(1, 0, 0); //先是个红的

  drawRectangle(GloatPair(-0.5, 0.5), GloatPair(0.7, -0.7), 0.2);

  glColor3f(0, 1, 0); //再在背面画个绿色的

  drawRectangle(GloatPair(-0.7, 0.7), GloatPair(0.5, -0.5), -0.2);

  glFlush();

  }

  static const GLfloat PROJECTION_MATRIX [16] = {

  1, 0, 0, 0,

  0, 1, 0, 0,

  0, 0, -1, 0,

  -0.5, 0.5, 0, 1

  };

  static void display() {

  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  glMatrixMode(GL_PROJECTION);

  glLoadIdentity();

  glMultMatrixf(PROJECTION_MATRIX);

  std::cout << "print projection " << std::endl;

  printMatrix(GL_PROJECTION_MATRIX);

  //画两个方块

  glColor3f(1, 0, 0); //先是个红的

  drawRectangle(GloatPair(-0.5, 0.5), GloatPair(0.7, -0.7), 0.2);

  glColor3f(0, 1, 0); //再在背面画个绿色的

  drawRectangle(GloatPair(-0.7, 0.7), GloatPair(0.5, -0.5), -0.2);

  glFlush();

  }

  使用glMultMatrixf来直接指定矩阵。注意这里的 PROJECTION_MATRIX 实际上是所需要的矩阵的转置。更加复杂的斜投影在这里就不继续研究了。(浙江联通时代畅想张海波的日志)

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30029683/viewspace-1339565/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2014-11-19

  • 博文量
    3
  • 访问量
    4952