加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2dx 透视设置分析

发布时间:2020-12-14 16:53:04 所属栏目:百科 来源:网络整理
导读:cocos2dx 透视设置分析 转自:http://chenliang.info/blog/cocos2dx透视设置分析/ cocos2dx CCDirector 默认用的是3d投影,之前看到它里面关于设置投影矩阵的代码里写了一些数字,当时没太当回事,今天正好有时间琢磨了一下才知道它是干嘛的,记录一下。 代

cocos2dx 透视设置分析

转自:http://chenliang.info/blog/cocos2dx透视设置分析/




cocos2dx CCDirector 默认用的是3d投影,之前看到它里面关于设置投影矩阵的代码里写了一些数字,当时没太当回事,今天正好有时间琢磨了一下才知道它是干嘛的,记录一下。

代码长这个样子:

帮助
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void CCDirector::setProjection(ccDirectorProjection kProjection)
{
//省略了一些无关代码
case kCCDirectorProjection3D:
{
float zeye = this ->getZEye();
kmMat4 matrixPerspective,matrixLookup;
kmGLMatrixMode(KM_GL_PROJECTION);
kmGLLoadIdentity();
// issue #1334
kmMat4PerspectiveProjection( &matrixPerspective,60,(GLfloat)size.width/size.height,0.1f,zeye*2);
// kmMat4PerspectiveProjection( &matrixPerspective,1500);
kmGLMultMatrix(&matrixPerspective);
kmGLMatrixMode(KM_GL_MODELVIEW);
kmGLLoadIdentity();
kmVec3 eye,center,up;
kmVec3Fill( &eye,size.width/2,size.height/2,zeye );
kmVec3Fill( &center,0.0f );
kmVec3Fill( &up,0.0f,1.0f,0.0f);
kmMat4LookAt(&matrixLookup,&eye,&center,&up);
kmGLMultMatrix(&matrixLookup);
}
break ;
//同样省略了一些无关代码
}

帮助
1
2
3
4
float CCDirector::getZEye( void )
{
return (m_obWinSizeInPoints.height / 1.1566f);
}

好奇心强的小盆友肯定会问 高亮的地方 60,0.1,1.1566 这都是什么啊,代码里面写魔数不是要tcqtjjtds吗?

分析起来其实挺简单的,其实上面有意义的只是那个60度和1.1566两个,远近裁减平面只要合法就ok,那么为啥是这俩值呢,我画了一下图:

看完了这张图,相信聪明的你也明白了吧,那个1.1566f实际上就是 tan(60/2)*2。

换成别的可以吗,当然可以,只要记得 eyez和fovy是配对的就OK了,比如可视角度 60 换成 90,神奇的1.1566f就要换成2了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读