android camera获取matrix作用于canvas的研究
2015-01-16 11:50
281 查看
Lee出品,转载请注明出处:/article/8644571.html
网上查了一下相关的文章,认为自己看懂了,但是实际测试时和网上说的并不一样(后来研究发现,那个人写的是错的!!!),所以,在此提醒大家,要勇于质疑,勇于提出问题。
首先说明camera类,这个类位于package android.graphics 包下,用于图像3D变换,通过旋转、偏移等方式,最终通过getMatrix(Matrix)方法拿到矩阵,作用于canvas,使得画面呈现出立体效果。
camera的源码没什么看的,这里列举他的主要方法:
这些方法看起来都不难,通过字面意思可以大致进行了解,其中最后几个方法目前还未研究,后面研究了补上。
接着我们来看看Camera变换的几个轴坐标,图有点难看哈。
这个才是正确的x, y ,z 轴坐标,而另外一个文章说的左手坐标系,经过我的验证那个作者写的是错误的。
camera默认位置位于(0,0,-8)点,即我们现在电脑面前屏幕外距离O点8个单位处。
rotate
接着我们看如何旋转,我们假设可以转动图中坐标系,我们旋转坐标系,让X轴正方向指向我们,也就是说这时候我们看过去A点和O点重合了(能理解么?不能理解拿个方块东西转着自己看)。然后,这时候沿着顺时针进行旋转,然后我们从手机屏幕方向观察,就会发现变化了。
那我们再看一个例子:camera.rotateY(45)
他意思是绕y轴顺时针旋转45度。如果物体中间线和y轴重合,正绕y轴顺时针旋转45度就是指物体右半部分向里翻转,左半部分向外翻转;
camera.rotateX(45)的意思是绕x轴顺时针旋转45度。举例来说,如果物体中间线和x轴重合的话,绕x轴顺时针旋转45度就是指物体上半部分向里翻转,下半部分向外翻转;
camera.translate(40, 30, 30)的意思,在图中看就是把观察物体右移40,下移30,向z轴正方向移20(即让物体远离屏幕,即物体将会变小);
我们看几个图来加深理解:
首先原图:
进行变换:camera.rotateX(60);
进行变换: camera.rotateY(60);
进行变换:camera.rotateZ(-60); (这里是-60哈)
translate和canvas的偏移类似,这里不再上图示意。
网上查了一下相关的文章,认为自己看懂了,但是实际测试时和网上说的并不一样(后来研究发现,那个人写的是错的!!!),所以,在此提醒大家,要勇于质疑,勇于提出问题。
首先说明camera类,这个类位于package android.graphics 包下,用于图像3D变换,通过旋转、偏移等方式,最终通过getMatrix(Matrix)方法拿到矩阵,作用于canvas,使得画面呈现出立体效果。
camera的源码没什么看的,这里列举他的主要方法:
public native void save(); public native void restore(); public native void translate(float x, float y, float z); public native void rotateX(float deg); public native void rotateY(float deg); public native void rotateZ(float deg); public native void rotate(float x, float y, float z); public native float getLocationX(); public native float getLocationY(); public native float getLocationZ(); public native void setLocation(float x, float y, float z); public void getMatrix(Matrix matrix) { nativeGetMatrix(matrix.native_instance); } public void applyToCanvas(Canvas canvas) { nativeApplyToCanvas(canvas.mNativeCanvas); } public native float dotWithNormal(float dx, float dy, float dz);
这些方法看起来都不难,通过字面意思可以大致进行了解,其中最后几个方法目前还未研究,后面研究了补上。
接着我们来看看Camera变换的几个轴坐标,图有点难看哈。
这个才是正确的x, y ,z 轴坐标,而另外一个文章说的左手坐标系,经过我的验证那个作者写的是错误的。
camera默认位置位于(0,0,-8)点,即我们现在电脑面前屏幕外距离O点8个单位处。
rotate
接着我们看如何旋转,我们假设可以转动图中坐标系,我们旋转坐标系,让X轴正方向指向我们,也就是说这时候我们看过去A点和O点重合了(能理解么?不能理解拿个方块东西转着自己看)。然后,这时候沿着顺时针进行旋转,然后我们从手机屏幕方向观察,就会发现变化了。
那我们再看一个例子:camera.rotateY(45)
他意思是绕y轴顺时针旋转45度。如果物体中间线和y轴重合,正绕y轴顺时针旋转45度就是指物体右半部分向里翻转,左半部分向外翻转;
camera.rotateX(45)的意思是绕x轴顺时针旋转45度。举例来说,如果物体中间线和x轴重合的话,绕x轴顺时针旋转45度就是指物体上半部分向里翻转,下半部分向外翻转;
camera.translate(40, 30, 30)的意思,在图中看就是把观察物体右移40,下移30,向z轴正方向移20(即让物体远离屏幕,即物体将会变小);
我们看几个图来加深理解:
首先原图:
进行变换:camera.rotateX(60);
进行变换: camera.rotateY(60);
进行变换:camera.rotateZ(-60); (这里是-60哈)
translate和canvas的偏移类似,这里不再上图示意。
相关文章推荐
- android使用camera和matrix,canvas小结
- android学习7——canvas.concat(Matrix matrix)作用
- Android平台上从Camera的jpegquality菜单研究JNI接口(三)
- android 调用CAMERA并获取照片
- android.graphics.Camera实现图像的旋转、缩放,配合Matrix实现图像的倾斜
- android 获取camera状态?
- camera录制的视频的缩略图的获取原理 android
- Android 获取图片研究
- Android--从系统Camera和Gallery获取图片优化
- Android中Bitmap、Drawable 、Canvas和Matrix
- 初探android的Camera和Matrix
- android 获取调用camera service的进程
- [Android]android.graphics.Camera实现图像的旋转、缩放,配合Matrix实现图像的倾斜
- Android平台上从Camera的jpegquality菜单研究JNI接口
- android Drawable、Bitmap、Canvas和Paint 在画图中充当的角色以及其作用
- 初探android的Camera和Matrix
- Android平台上从Camera的jpegquality菜单研究JNI接口(二)
- Android平台上从Camera的jpegquality菜单研究JNI接口(一)
- Android显示系统之Pixel、Bitmap、Drawable、Canvas、Paint和Matrix之间的联系
- android 中如何获取camera当前状态