我是靠谱客的博主 动人小鸽子,最近开发中收集的这篇文章主要介绍[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把全景视频贴到球上所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部