我是靠谱客的博主 动人小鸽子,最近开发中收集的这篇文章主要介绍[OpenGL]从零开始写一个Android平台下的全景视频播放器——5.1 使用OpenGL把全景视频贴到球上,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
Github项目地址
为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过更新会慢一些
回到目录
在第三章我们用OpenGL画了一个没有纹理的球,现在我们需要通过纹理映射将视频贴到球上。
这个和画个矩形贴平面视频有任何的区别吗?
。。。。。。
好像没有
带纹理映射的Sphere类
直接贴代码吧,在之前的Sphere基础上,我们加入纹理映射的部分,将3D点和2D点对应起来。
PS:
有一个需要注意的问题是,当用户旋转手机时,球应该朝着反方向旋转,但是传感器的旋转矢量矩阵刚好是model矩阵的逆矩阵,所以现在刚好不需要改变纹理的顺序。
准确的说,在使用旋转矩阵之前应该求逆,而旋转矩阵的转置就是它的逆矩阵,刚巧旋转矩阵是行主序,而OpenGL的矩阵是列主序,所以刚好不用求逆(多么美好的巧合。。)
上面段话看不懂完全不影响,具体原理在第四章和下一节都有介绍
package com.martin.ads.panoramaopengltutorial;
import android.opengl.GLES20;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.ShortBuffer;
import static com.martin.ads.panoramaopengltutorial.ShaderUtils.checkGlError;
/**
* Created by Ads on 2016/11/5.
*/
public class Sphere {
private static final int sPositionDataSize = 3;
private static final int sTextureCoordinateDataSize = 2;
private FloatBuffer mVerticesBuffer;
private FloatBuffer mTexCoordinateBuffer;
private ShortBuffer indexBuffer;
private int mNumIndices;
/**
* modified from hzqiujiadi on 16/1/8.
* original source code:
* https://github.com/shulja/viredero/blob/a7d28b21d762e8479dc10cde1aa88054497ff649/viredroid/src/main/java/org/viredero/viredroid/Sphere.java
* @param radius 半径,半径应该在远平面和近平面之间
* @param rings
* @param sectors
*/
public Sphere(float radius, int rings, int sectors) {
final float PI = (float) Math.PI;
final float PI_2 = (float) (Math.PI / 2);
float R = 1f/(float)rings;
float S = 1f/(float)sectors;
short r, s;
flo
最后
以上就是动人小鸽子为你收集整理的[OpenGL]从零开始写一个Android平台下的全景视频播放器——5.1 使用OpenGL把全景视频贴到球上的全部内容,希望文章能够帮你解决[OpenGL]从零开始写一个Android平台下的全景视频播放器——5.1 使用OpenGL把全景视频贴到球上所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复