前面ModelView变换相当于拍照时放置相机和调整被拍物体的位置和角度。投影变换则对应于调整相机镜头远近来取景。
下面代码设置当前Matrix模式为Projection投影矩阵:
gl.glMatrixMode(GL_PROJECTION);
gl.glLoadIdentity();
后续的坐标变换则针对投影矩阵。投影变换的目的是定义视锥(viewing volume),视锥一方面定义了物体如何投影到屏幕(如透视投影或是正侧投影),另一方面视锥也定义了裁剪场景的区域大小。
OpenGL ES可以使用两种不同的投影变换:透视投影(Perspective Projection)和正侧投影(Orthographic Projection)。
透视投影(Perspective Projection)
透视投影的特点是“近大远小”,也就是我们眼睛日常看到的世界。OpenGL ES定义透视投影的函数为glFrustum():
public void glFrustumf(float left,float right,float bottom,float top,float near,float far)
视锥由(left,bottom,-near) 和(right,top,-near) 定义了靠近观测点的裁剪面,near 和far定义了观测点和两个创建面直接的近距离和远距离。
在实际写代码时,Android OpenGL ES提供了一个辅助方法gluPerspective()可以更简单的来定义一个透视投影变换:
public
static void gluPerspective(GL10 gl, float fovy, float aspect, float zNear, float zFar)
- fovy: 定义视锥的view angle.
- aspect: 定义视锥的宽高比。
- zNear: 定义裁剪面的近距离。
- zFar: 定义创建面的远距离。
正侧投影(Orthographic Projection)
正侧投影,它的视锥为一长方体,特点是物体的大小不随到观测点的距离而变化,投影后可以保持物体之间的距离和夹角。它主要用在工程制图上。
定义正侧投影(也称作平移投影)的函数为:
public void glOrthof(float left, float right,float bottom,float top,float near,float far)
裁剪
场景中的图形的顶点经过modelview和projection 坐标变换后,所有处在Viewing volumn之外的顶点都会被裁剪掉,透视投影和正侧投影都有6个裁剪面。所有处在裁剪面外部的顶点都需剪裁掉以提高绘图性能。
分享到:
相关推荐
将Camera数据显示到OpenGL ES渲染的图像中,并通过MediaCodeC 将 OpenGL ES 缓冲数据,硬编码写入到 mp4 视频文件中,完成视频的录制。 文件介绍请见: https://xiaxl.blog.csdn.net/article/details/72530314 ...
Android MediaProjection截屏&录屏 1、解决Android Q中java.lang.SecurityException: Media projections require a foreground service of type ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION 异常 2、...
OpenGL视角LooAt及Perspective理解 glm::mat4 projection = glm::perspective(fovyInRadians, aspect, zNear, zFar); void gluLookAt(GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ, GLdouble centerX, ...
实现地图投影变换,采用54坐标系满屏显示中国地图,然后可以实现墨卡托投影变换,实现兰伯特投影变换
3DMAX几何投影插件Geometry Projection,将一个或多个对象或它的顶点选择沿全局或局部 x、y 或 z 轴投影到另一个对象上。
openGL perspective projection transform translate rotation scale shear
Android MediaProjection 录屏H264流或者保存为MP4视频 https://blog.csdn.net/ink_s/article/details/109811878
Android录制屏幕生成mp4文件: 1、运行环境要求: Android 5.0以上,无需ROOT; 2、案例实现方式: 使用MediaProjection构建虚拟VirtualDisplay,完成屏幕录制生成mp4文件保存到本地sdcard。 3、案例源码: 案例源码...
Android5.0之后,利用MediaProjection实现录屏功能。
image_projection概述image_projection是一个软件包,用于从多个已校准的摄像机创建各种投影。 用例涉及: 校正失真的图像根据来自多个摄像机的360°摄像机数据创建圆柱投影(等距矩形,墨卡托..) 从鱼眼镜头数据...
画法几何课件:第四讲 平面的投影 Projection of Plane.ppt
Zooming and Panning an Orthographic Projection对OpenGL图形进行缩放和panning操作(6KB)
Android5.0之后,用MediaProjection实现截屏功能。
Multi-Projection Edge Blending unity投影融合软件 请支持正版 https://assetstore.unity.com/packages/tools/integration/multi-projection-edge-blending-85466
Android Studio完整工程 开发环境:android studio 2022.2.1 Android版本: android 13 API: AudioRecord AudioPlaybackCaptureConfiguration MediaProjection
pytorch-projection_sngan 使用光谱归一化和投影判别器的条件图像生成的Pytorch实现。 频谱归一化: : 投影判别器: : id 核心代码严格从迁移该代码正在工作。 当前没有时间改进培训代码并进行更多的实验。 我会尽快...
由OpenGL渲染的3D场景必须作为2D图像投影到计算机屏幕上。投影变换采用glu投影矩阵。首先,它将所有顶点数据从眼睛坐标转换为剪辑坐标。然后,通过与剪辑坐标的w分量相除,这些剪辑坐标也被转换为归一化设备坐标...
投影仿射算法的MATLAB仿真程序,实现投影仿射算法基本功能