android 使用opengl开发VR的使用

opengl 学习了快一个月了主要是参考午王的博客来学习的:

http://blog.csdn.net/junzia/article/category/6462864

下面是自己封装的着色器工具类:

public class ShaderUtils {

    public static int createprograms(String vertpath1,String fragpath2){
        int vertextype=  GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER);
        GLES20.glShaderSource(vertextype,getstr(vertpath1));
        GLES20.glCompileShader(vertextype);
        int fragtype=GLES20.glCreateShader(GLES20.GL_FRAGMENT_SHADER);
        GLES20.glShaderSource(fragtype,getstr(fragpath2));
        GLES20.glCompileShader(fragtype);
        int programs=GLES20.glCreateProgram();
        GLES20.glAttachShader(programs,vertextype);
        GLES20.glAttachShader(programs,fragtype);
        GLES20.glLinkProgram(programs);
        return programs;
    }
    public static String getstr(String path1){
        try {
            Log.e( "getstr: ","aaaaaaaa" );
            InputStream input=Tp.app.getAssets().open(path1);
            int len=input.available();
            byte[]bytes=new byte[len];
            input.read(bytes);
            String str=new String(bytes);
            Log.e("getstr: ",str );
            return str;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

}
在render中动态更改贴图:

    @Override
    public void onDrawFrame(GL10 gl10) {

        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT|GLES20.GL_DEPTH_BUFFER_BIT);
        if (change){
            Log.e( "onDrawFrame: ","qqqqq" );
                textureId =createTexture();
                calculateAttribute();
            change=false;
        }

计算贴图是耗时操作只在更改时更改.

        list =new ArrayList<>();
        list.add("vr/1.jpg");
        list1.add("房间1");
        list.add("vr/2.jpg");
        list1.add("房间2");
        list.add("vr/3.jpg");
        list1.add("房间3");
        list.add("vr/4.jpg");
        list1.add("九寨沟");
        list.add("vr/5.jpg");
        list1.add("安徽章山大峡谷");
        list.add("vr/6.jpg");
        list1.add("四川黄龙景区");
        list.add("vr/7.jpg");
        list1.add("芙蓉洞金銮宝殿");
        list.add("vr/8.jpg");
        list1.add("深圳海上田园");
        list.add("vr/9.jpg");
        list1.add("花都新加坡");
        list.add("vr/10.jpg");
        list1.add("赤壁卧龙槐");
        list.add("vr/11.jpg");
        list1.add("珠穆朗玛");
        spinner = ((Spinner) findViewById(R.id.spinner));
        spinner.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list1));

        glview = ((GLView) findViewById(R.id.glview));
        init(glview);
        mSensorManager =(SensorManager)getSystemService(Context.SENSOR_SERVICE);
        List<Sensor> sensors= mSensorManager.getSensorList(Sensor.TYPE_ALL);
        mRotation =mSensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                if (first){
                    Log.e( "onItemSelected: ","1111" );
                     glview.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
                //    ((VrRender) renderer).create();
                   ((VrRender) renderer).change=true;
                    ((VrRender) renderer).setbtmap(MainActivity.this,list.get(i));
                   //  glview.onResume();
                     glview. requestRender();
                  //  glview. requestRender();
                  glview.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);
                }
                first=true;
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });
    }
动态更改文理贴图:

使用dirty模式更改再切换回动画模式

这是自己加的一些,其他的还是去参考午王的博客,他写的比我的好多了。

学了这么久好歹也是有些入门了。

项目下载地址:

http://pan.baidu.com/s/1kVPzfAf


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值