4.opengl编程第二步:设置平截头体和输出空间

一:平截头体和输出空间的关系

从基本概念(一)中我们知道成像就是将平截头体里面的物体投影到远平面上,然后通过比例压缩形成我们看到的图像(注意:不能使伪变换,不然就变形了)

二:输出空间(设置视口)

GlSurfaceView的输出空间就是在载体上绘制图形的区域。

gl.glViewport(x, y, width, height);//这几个参数如下图(是在surfaceChange里面设置的)


4.opengl编程第二步:设置平截头体和输出空间_第1张图片
视口

当然你也可以不设置那么大,设置多少,取决于你要在哪里去进行设置

(x,y,w,h)中x,y代表坐标点,左下为0,0

三:设置平截头体(frustum)

gl.glFrustumf(left, right, top, bottom, zNear, zFar);// 后面的f仅仅代表参数是float类型

gl.glFrustumx(left, right, top, bottom, zNear, zFar);//后面的x仅仅的代表是int类型

这里注意了:这里设置平截头体的话就要注意那个伪变换的存在了。

我设置的这个平截头体最终这个头体里面的东西是不是都要成像在底片上,那么这个底片是不是就是我们刚才设置的视口。这个视口是不是就固定的宽高比。

所以我们这个平截头体的宽高比是不是就由我们的视口来决定,这样才能不产生伪变换。


4.opengl编程第二步:设置平截头体和输出空间_第2张图片
设置平截头体

这里的left,right,top,bottom是不是跟我们的视口的宽高比要一致

所以这四个参数只是一个标量,他不确定具体的大小,只确定比例。具体的输出大小在视口就已经决定了

left和right也不一定相等(top和bottom也不一定相等)

ratio=(float)width/height;

gl.glFrustumf(-1,1,-ratio, ratio, zNear, zFar);

//这里要注意的一个细节就是在平截头体里面的物体的宽度不能超过(1-(-1))=2,否则就会超出平截头体(这个还存在疑问)

zNear和zFar(近平面和远平面)

近平面到眼睛的距离就是zNearzNear越大,拍摄的区域越小。

一般设置为3,7 :为什么设置为3,7

你可能感兴趣的:(4.opengl编程第二步:设置平截头体和输出空间)