Android OpenGL 纹理绘制图像---JAVA实现
来源:互联网 发布:js函数参数为对象 编辑:程序博客网 时间:2024/04/19 12:51
按照前文梳理的Android OpenGL贴图流程,Android JAVA代码实现如下:
(1)生成纹理对象
final int[] texNames = {0}; glGenTextures(1, texNames, 0); glBindTexture(GL_TEXTURE_2D, texNames[0]);
(2)设置过滤
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);//对纹理坐标进行截取,所有大于1.0的值都设置为1.0,所有小于0.0的值都设置为0.0 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
(3)定义着色器—确定像素颜色和位置
1.定义顶点和片段着色器
private static final String VERTEX_SHADER_CODE = "attribute vec4 position;" + "attribute vec4 inputTextureCoordinate;" + "varying vec2 textureCoordinate;" + "void main()" + "{" + " gl_Position = position;" + " textureCoordinate = vec2(inputTextureCoordinate.s, inputTextureCoordinate.t);" + "}"; private static final String FRAGMENT_SHADER_CODE = "varying mediump vec2 textureCoordinate;" + "uniform sampler2D textureSampler;" + "void main() { " + " gl_FragColor = texture2D(textureSampler, textureCoordinate);" + "}";
2.加载着色器并启用顶点和纹理坐标
final int vertexShader = loadShader(GL_VERTEX_SHADER, VERTEX_SHADER_CODE); final int pixelShader = loadShader(GL_FRAGMENT_SHADER, FRAGMENT_SHADER_CODE); final int program = glCreateProgram(); glAttachShader(program, vertexShader); glAttachShader(program, pixelShader); glLinkProgram(program); glDeleteShader(pixelShader); glDeleteShader(vertexShader); final int positionLocation = glGetAttribLocation(program, "position"); final int textureSampler = glGetUniformLocation(program, "textureSampler"); final int coordinateLocation = glGetAttribLocation(program, "inputTextureCoordinate"); glUseProgram(program); Buffer textureBuffer = createFloatBuffer(TEXTURE); Buffer verticesBuffer = createFloatBuffer(VERTICES); glVertexAttribPointer(coordinateLocation, 2, GL_FLOAT, false, 0, textureBuffer); glEnableVertexAttribArray(coordinateLocation); glUniform1i(textureSampler, 0); glVertexAttribPointer(positionLocation, 2, GL_FLOAT, false, 0, verticesBuffer); glEnableVertexAttribArray(positionLocation);
(4)指定纹理
InputStream in = null; try { in = getContext().getAssets().open("guide_image_4.png"); } catch (Exception e) { } final Bitmap bitmap = BitmapFactory.decodeStream(in); GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, bitmap, 0);
(5)绘制
//绘制白色背景 glClearColor(1.0f, 1.0f, 1.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //启用背景混合模式 glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glDisable(GL_BLEND);
如果不需要设置颜色背景,一行代码glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)就可以了。
附上github地址:https://github.com/qiaoyanfei/OpenGL_Image.git
0 0
- Android OpenGL 纹理绘制图像---JAVA实现
- Android OpenGL 纹理绘制图像---Native实现
- Android OpenGL 纹理绘制图像---基础知识
- Android OpenGL 纹理绘制图像---总结
- android opengl es绘制三角形+纹理
- Android OpenGL ES 2.0绘图:绘制纹理
- Android OpenGL ES 2.0绘图:绘制纹理
- opengl 三角纹理绘制
- opengl绘制纹理立方体
- Android移动开发-使用OpenGL来绘制3D纹理图的实现
- openGL绘制正方体分别实现简单颜色绘制、纹理绘制、光照绘制
- android opengl es添加纹理,绘制立方体纹理,立方体使用不同纹理
- Android OpenGL ES绘制透明纹理立方体(未解决)
- android openGL ES2 一切从绘制纹理开始
- android openGL ES2 一切从绘制纹理开始
- android OpenGl Es实现正方体多纹理
- opengl 开发笔记-绘制纹理
- openGL绘制图像
- (十七)ReactNative 中动画详解
- 【电视直播 ijkplayer】编译及导入(未完)
- ionic(一)
- linux java服务器环境搭建
- 每日一首古诗, 每日一个桌面壁纸
- Android OpenGL 纹理绘制图像---JAVA实现
- Jmeter报告优化之New XSL stylesheet
- 11 gradle 之groovy 插件的使用
- 堆和优先队列
- Leetcode 147 Insertion Sort List
- hadoop2.7.3在集群中配置多个namenode(federation cluster)
- Http中get和post的区别
- 让你事半功倍的80个Linux运维监控工具
- Bitmap和drawable的互相转换