android 使用opengl开发VR的使用

来源:互联网 发布:芙丽芳丝洗面奶知乎 编辑:程序博客网 时间:2024/06/05 03:41

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


原创粉丝点击