opengles系列-绘制三角形
1.创建render类
*** 绘制三角形* Created by hxk on 2018/10/10.*/public class TriangleRenderer implements GLSurfaceView.Renderer {private final Context context;private final FloatBuffer vertexData;private static final int POSITION_COMPONENT_COUNT = 2;private static final int BYTES_PER_FLOAT = 4;private int program;//存储链接程序的IDprivate static final String U_COLOR = "u_Color";private int uColorLocation;private static final String A_POSITION = "a_Position";private int aPositionLocation;public TriangleRenderer(Context context) {this.context = context;float[] triangleVertices = {0f, 0.5f,-0.5f, 0f,0.5f, 0};vertexData = ByteBuffer.allocateDirect(triangleVertices.length * BYTES_PER_FLOAT).order(ByteOrder.nativeOrder()).asFloatBuffer();vertexData.put(triangleVertices);//本地内存缓冲区}@Overridepublic void onSurfaceCreated(GL10 gl, EGLConfig config) {//清屏 RGBAglClearColor(0.0f, 0.0f, 0.0f, 0.0f);String vertexShaderSource = TextResourceReader.readTextFileFromResource(context, R.raw.simple_vertex_shader);String fragmentShaderSource = TextResourceReader.readTextFileFromResource(context, R.raw.simple_fragment_shader);int vertexShader = ShaderHelper.compileVertexShader(vertexShaderSource);int fragmentShader = ShaderHelper.compileFragmentShader(fragmentShaderSource);//链接着色器program = ShaderHelper.linkProgram(vertexShader, fragmentShader);//验证程序对于opengl是否有效 debugShaderHelper.validateProgram(program);//告诉opengl绘制任何东西到屏幕上需要使用这里定义的程序glUseProgram(program);//获取uniform的位置,把位置存入uColorLocation中uColorLocation = glGetUniformLocation(program, U_COLOR);//获取属性位置aPositionLocation = glGetAttribLocation(program, A_POSITION);//关联属性与顶点数据数组的数组//vertextData是我们在本地内存中创建的一个缓冲区,存的是位置//确保缓冲区从头开始读数据,置0vertexData.position(0);//告诉opengl从缓冲区vertextData中取数据找到属性a_Position的数据glVertexAttribPointer(aPositionLocation, POSITION_COMPONENT_COUNT, GL_FLOAT, false, 0, vertexData);//使能顶点数组glEnableVertexAttribArray(aPositionLocation);}@Overridepublic void onSurfaceChanged(GL10 gl, int width, int height) {}@Overridepublic void onDrawFrame(GL10 gl) {glClear(GL_COLOR_BUFFER_BIT);//绘制桌子glUniform4f(uColorLocation, 1.0f, 1.0f, 1.0f, 1.0f);//画个三角形,每个三角形有三个顶点,2个三角形6个顶点glDrawArrays(GL_TRIANGLES, 0, 3);}
}
2.创建activity
public class TriangleActivity extends AppCompatActivity {private GLSurfaceView glSurfaceView;private boolean rendererSet = false;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);glSurfaceView = new GLSurfaceView(this);// Check if the system supports OpenGL ES 2.0.ActivityManager activityManager =(ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();// Even though the latest emulator supports OpenGL ES 2.0,// it has a bug where it doesn't set the reqGlEsVersion so// the above check doesn't work. The below will detect if the// app is running on an emulator, and assume that it supports// OpenGL ES 2.0.final boolean supportsEs2 =configurationInfo.reqGlEsVersion >= 0x20000|| (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1&& (Build.FINGERPRINT.startsWith("generic")|| Build.FINGERPRINT.startsWith("unknown")|| Build.MODEL.contains("google_sdk")|| Build.MODEL.contains("Emulator")|| Build.MODEL.contains("Android SDK built for x86")));if (supportsEs2) {// Request an OpenGL ES 2.0 compatible context.glSurfaceView.setEGLContextClientVersion(2);// Assign our renderer.glSurfaceView.setRenderer(new TriangleRenderer(this));rendererSet = true;} else {/** This is where you could create an OpenGL ES 1.x compatible* renderer if you wanted to support both ES 1 and ES 2. Since* we're not doing anything, the app will crash if the device* doesn't support OpenGL ES 2.0. If we publish on the market, we* should also add the following to AndroidManifest.xml:** <uses-feature android:glEsVersion="0x00020000"* android:required="true" />** This hides our app from those devices which don't support OpenGL* ES 2.0.*/Toast.makeText(this, "This device does not support OpenGL ES 2.0.",Toast.LENGTH_LONG).show();return;}setContentView(glSurfaceView);}@Overrideprotected void onPause() {super.onPause();if (rendererSet) {glSurfaceView.onPause();}}@Overrideprotected void onResume() {super.onResume();if (rendererSet) {glSurfaceView.onResume();}}
}
3.显示效果
opengles系列-绘制三角形相关推荐
- viewpager初始化fragment没有绘制_NDK OpenGL ES渲染系列 之 绘制三角形
前言 新的知识学习都是循序渐进的,从基础到复杂.前面OpenGL ES概念 已经介绍了OpenGL ES的相关概念,这篇文章开始我们就正式开始OpenGL ES渲染系列第一站---绘制三角形.绘制三角 ...
- OpenGL ES基础教程,绘制三角形(补充,附代码)
简介 OpenGL OpenGL(全写Open Graphics Library)是指定义了一个跨编程语言.跨平台的编程接口规格的专业的图形程序接口.它用于三维图像(二维亦可),是一个功能强大,调用方 ...
- Android OpenGL ES(十)绘制三角形Triangle .
三角形为OpenGL ES支持的面,同样创建一个DrawTriangle Activity,定义6个顶点使用三种不同模式来绘制三角形: float vertexArray[] = {-0.8f, -0 ...
- OPenGL 学习笔记之 VAO VBO EBO 以及SHADER 并使用其绘制三角形
译注 在学习此节之前,建议将这三个单词先记下来: 顶点数组对象:Vertex Array Object,VAO 顶点缓冲对象:Vertex Buffer Object,VBO 索引缓冲对象:Eleme ...
- 音视频之opengl绘制三角形
音视频之opengl绘制三角形 音视频之opengl渲染图片 音视频之渲染yuv图片 2018年用了一年业余时间学习了音视频,直播,解码,编码,倍速,跳转,滤镜,倒放等.,慢慢把这部分内容写到博客上, ...
- Qt下使用Shader绘制三角形
在Qt下使用可编程管线编写OpenGL的流程是怎样的呢? 下面演示了Qt下使用可编程管线的基本代码:(绘制三个不同的三角形,并做些旋转变换) 在Qt中,我们从QGLWidget继承,来实现OpenGL ...
- css画横线箭头_用CSS绘制三角形箭头
用CSS绘制三角形箭头.使用纯CSS,你只需要很少的代码就可以创作出各种浏览器都兼容的三角形箭头! CSS代码:/* create an arrow that points up */ div.arr ...
- 【OpenGL】十五、OpenGL 绘制三角形 ( 绘制 GL_TRIANGLE_FAN 三角形扇 )
文章目录 一.绘制 GL_TRIANGLE_FAN 三角形 1.绘制 3 个点的情况 2.绘制 4 个点的情况 3.绘制 5 个点的情况 4.绘制 6 个点的情况 二.相关资源 一.绘制 GL_TRI ...
- 【OpenGL】十四、OpenGL 绘制三角形 ( 绘制 GL_TRIANGLE_STRIP 三角形 | GL_TRIANGLE_STRIP 三角形绘制分析 )
文章目录 一.绘制 GL_TRIANGLE_STRIP 三角形 二.GL_TRIANGLE_STRIP 三角形绘制分析 三.相关资源 一.绘制 GL_TRIANGLE_STRIP 三角形 该模式绘制首 ...
最新文章
- Exp4 恶意代码分析 20164303 景圣
- pytorch 打印模型参数
- 树莓派:linux库概念及相关编程(面试重点):以及USB端口号找到不的情况
- vue组件系列2、拖放上传
- 阿里SRE体系如何支撑24小时峰值压力、220+个国家“剁手党”?
- DevOps vs. Agile:它们有什么共同点?
- ts 模板库文件_vue与ts的使用模版
- Python:运行时隐藏窗口
- IT运维的365天--007PC端微信图片不能正常接收发送
- POJ 3368 Frequent values
- 什么是云服务器?如何选择?
- 网易云---手机验证码登录
- Java面向对象设计(面向对象)
- Java读取、写入、处理Excel文件中的数据
- 读书笔记 PCG in Games 程序化内容生成3 构造性方法,针对地牢式关卡
- smartgwt (B)
- DTS中video-interfaces接口详解
- Mobile-Former来了!微软提出:MobileNet+Transformer轻量化并行网络
- STM32L4R9ZIY6PTR STM32L4高性能嵌入式—MCU
- 判断OOBE 完成状态
热门文章
- java中各种运算符
- Google拒绝因搜索不良信息被传唤
- HDU1598 find the most comfortable road【枚举+并查集+最大生成树】
- Bailian4106 出现两次的字符-Characters Appearing twice【计数统计】
- 51Nod-1013 3的幂的和【快速模幂+逆元】
- scala 基础类库 —— 文件操作
- 机器学习基础(二十五)—— Feature Selection
- 语句乎?表达式乎?(Python/C)
- 隐藏网络计算机,如何在网络中隐藏自己的计算机名称
- python3 asyncio 不阻塞_Python3 asyncio异步框架,让我崩溃的点