沈阳市网站制作公司/外贸网站哪个比较好

沈阳市网站制作公司,外贸网站哪个比较好,哪个网站可以做彩经专家,凡客网站建立OpenGL ES渲染管线概述 渲染管线一般是由显示芯片GPU内部处理图形信号的并行处理单元组成,这些并行处理单元之间是独立的,从另一个角度看,渲染管线实际上也是一系列绘制过程,这一系列过程的输入是待绘制物体的相关描述信息&#x…

OpenGL ES渲染管线概述

渲染管线一般是由显示芯片GPU内部处理图形信号的并行处理单元组成,这些并行处理单元之间是独立的,从另一个角度看,渲染管线实际上也是一系列绘制过程,这一系列过程的输入是待绘制物体的相关描述信息,输出的是要显示的图像帧数据。

OpenGL ES管线主要包括:

读取顶点数据—>顶点着色器—>组装图元—>光栅化图元—>片元着色器—>写入帧缓冲区—>显示到屏幕上

  • 读取顶点数据指的是将待绘制的图形的顶点数据传递给渲染管线中。
  • 顶点着色器最终生成每个定点的最终位置,执行顶点的各种变换,它会针对每个顶点执行一次,确定了最终位置后,OpenGL就可以把这些顶点集合按照给定的参数类型组装成点,线或者三角形。
  • 组装图元阶段包括两部分:图元的组装和图元处理,图元组装指的是顶点数据根据设置的绘制方式参数结合成完整的图元,例如点绘制方式中每个图元就只包含一个点,线段绘制方式中每个图源包含两个点;图元处理主要是剪裁以使得图元位于视景体内部的部分传递到下一个步骤,视景体外部的部分进行剪裁。视景体的概念与投影有关。
  • 光栅化图元主要指的是将一个图元离散化成可显示的二维单元片段,这些小单元称为片元。一个片元对应了屏幕上的一个或多个像素,片元包括了位置,颜色,纹理坐标等信息,这些值是由图元的顶点信息进行插值计算得到的。
  • 片元着色器为每个片元生成最终的颜色,针对每个片元都会执行一次。一旦每个片元的颜色确定了,OpenGL就会把它们写入到帧缓冲区中。

在OpenGL ES2.0中主要的两个部分就是上面的可编程顶点着色器和片段着色器。学习OpenGL ES主要是要了解渲染管线,了解CPU的渲染过程,主要编程工作在于顶点着色器和片元着色器的编写。

绘制一个六边形

效果如图所示
OpenGL ES绘制六边形
六边形类

public class SixShape {private FloatBuffer mVertexBuffer;private FloatBuffer mColorBuffer;private int mProgram;private int mPositionHandle;private int mColorHandle;private int muMVPMatrixHandle;public SixShape(float r) {initVetexData(r);}public void initVetexData(float r) {// 初始化顶点坐标float[] vertexArray = new float[8*3];// 初始化顶点颜色float[] colorArray=new float[8*4];int j = 0, k = 0;vertexArray[j++] = 0;vertexArray[j++] = 0;vertexArray[j++] = 0;colorArray[k++] = 1;colorArray[k++] = 1;colorArray[k++] = 1;colorArray[k++] = 0;for (int angle = 0; angle <= 360; angle += 60) {vertexArray[j++] = (float) (r*Math.cos(Math.toRadians(angle)));vertexArray[j++] = (float) (r*Math.sin(Math.toRadians(angle)));vertexArray[j++] = 0;colorArray[k++] = 1;colorArray[k++] = 0;colorArray[k++] = 0;colorArray[k++] = 0;}ByteBuffer buffer = ByteBuffer.allocateDirect(vertexArray.length * 4);buffer.order(ByteOrder.nativeOrder());mVertexBuffer = buffer.asFloatBuffer();mVertexBuffer.put(vertexArray);mVertexBuffer.position(0);ByteBuffer cbb=ByteBuffer.allocateDirect(colorArray.length*4);cbb.order(ByteOrder.nativeOrder());mColorBuffer=cbb.asFloatBuffer();mColorBuffer.put(colorArray);mColorBuffer.position(0);int vertexShader = loaderShader(GLES20.GL_VERTEX_SHADER, vertexShaderCode);int fragmentShader = loaderShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode);mProgram = GLES20.glCreateProgram();GLES20.glAttachShader(mProgram, vertexShader);GLES20.glAttachShader(mProgram, fragmentShader);GLES20.glLinkProgram(mProgram);mPositionHandle = GLES20.glGetAttribLocation(mProgram, "aPosition");mColorHandle = GLES20.glGetAttribLocation(mProgram, "aColor");muMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");}public void draw(float[] mvpMatrix) {GLES20.glUseProgram(mProgram);// 将顶点数据传递到管线,顶点着色器GLES20.glVertexAttribPointer(mPositionHandle, 3, GLES20.GL_FLOAT, false, 3 * 4, mVertexBuffer);// 将顶点颜色传递到管线,顶点着色器GLES20.glVertexAttribPointer(mColorHandle, 4, GLES20.GL_FLOAT, false,4*4, mColorBuffer);// 将变换矩阵传递到管线GLES20.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, mvpMatrix, 0);GLES20.glEnableVertexAttribArray(mPositionHandle);GLES20.glEnableVertexAttribArray(mColorHandle);// 绘制图元GLES20.glDrawArrays(GLES20.GL_TRIANGLE_FAN, 0, 8);}private int loaderShader(int type, String shaderCode) {int shader = GLES20.glCreateShader(type);GLES20.glShaderSource(shader, shaderCode);GLES20.glCompileShader(shader);return shader;}private String vertexShaderCode = "uniform mat4 uMVPMatrix;"+ "attribute vec3 aPosition;"+ "attribute vec4 aColor;"+ "varying  vec4 aaColor;"+ "void main(){"+ "gl_Position = uMVPMatrix * vec4(aPosition,1);"+ "aaColor = aColor;"+ "}";private String fragmentShaderCode = "precision mediump float;"+ "varying  vec4 aaColor;"+ "void main(){"+ "gl_FragColor = aaColor;"+ "}";}

六边形View

public class SixView extends GLSurfaceView{public SixView(Context context) {super(context);setEGLContextClientVersion(2);setRenderer(new MyRender());}class MyRender implements GLSurfaceView.Renderer {private SixShape circle;@Overridepublic void onSurfaceCreated(GL10 gl, EGLConfig config) {GLES20.glClearColor(0.5f, 0.5f, 0.5f, 1);circle = new SixShape(0.5f);GLES20.glEnable(GLES20.GL_DEPTH_TEST);}// 投影矩阵private final float[] mProjectionMatrix = new float[16];// 视图矩阵private final float[] mViewMatrix = new float[16];// 模型矩阵private final float[] mMMatrix = new float[16];private final float[] mViewProjectionMatrix = new float[16];private final float[] mMVPMatrix = new float[16];@Overridepublic void onSurfaceChanged(GL10 gl, int width, int height) {GLES20.glViewport(0, 0, width, height);float ratio= (float) width / height;// 设置正交投影Matrix.orthoM(mProjectionMatrix, 0, -ratio, ratio, -1, 1, 0, 5);// 设置视图矩阵Matrix.setLookAtM(mViewMatrix, 0, 0, 0, 2,  0, 0, 0, 0, 1, 0);}@Overridepublic void onDrawFrame(GL10 gl) {GLES20.glClear( GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);Matrix.multiplyMM(mViewProjectionMatrix, 0, mProjectionMatrix, 0, mViewMatrix, 0);// 设置模型矩阵Matrix.setIdentityM(mMMatrix, 0);Matrix.translateM(mMMatrix,0,0,0,1);Matrix.rotateM(mMMatrix, 0, 30, 0, 0, 1);Matrix.multiplyMM(mMVPMatrix, 0, mViewProjectionMatrix, 0, mMMatrix, 0);circle.draw(mMVPMatrix);}}}

接下来在Activity中就可以使用这个View了。上面的例子虽然简单,但是包括了使用OpenGL ES编程的主要流程,包括生成顶点数据,编写顶点着色器,片元着色器,传递数据给顶点/片元着色器,这里最主要的就是着色器语言。此外包括投影,平移,旋转等操作。在后面会详细学习每个细节以及上面例子没有涉及到的光照,纹理等OpenGL的知识。

转载于:https://www.cnblogs.com/qhyuan1992/p/6071972.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【前沿】MIT搞了个进取型机器人!能研究学习对象操纵的基础

来源&#xff1a;中国机器人网 前言&#xff1a;MIT的研究让数据有了机器人的方向麻省理工学院的研究人员已经汇编了一个数据集&#xff0c;该数据集捕获了物理上推动数百个不同对象的机器人系统的详细行为。研究人员可以使用数据集&#xff08;同类中规模最大&#xff0c;种类…

java进度条_自学java你需要知道的,适合编程小白

1. java学习网站之前在很多学习网站上学习过Java&#xff0c;踩过很多坑&#xff0c;今天给大家推荐一个比较好用的Java学习网站&#xff0c;希望大家能少踩坑Java教程 | 项目实践一站式java学习这个网站的针对性强&#xff0c;如果你是想学习Java&#xff0c;在这个网站学习就…

软考考前冲刺第一章计算机硬件基础知识

1.原码表示法和补码表示法是计算机中用于表示数据的两种编码方法&#xff0c;在计算机系统中常采用补码来表示和运算数据&#xff0c;原因是采用补码可以简化计算机运算部件的设计。 在计算机中&#xff0c;各类运算都可以采用补码进行&#xff0c;特别是对于有符号数的运算。在…

既然使用神经网络也可以解决分类问题,那SVM、决策树这些算法还有什么意义呢?...

来源&#xff1a;Jerry的算法和NLPJerry的算法和NLP先说下结论&#xff1a;没有一个模型是万能的&#xff0c;需要根据数据选择适合的模型。在机器学习中&#xff0c;数据大概可以分成四大类&#xff1a;图像 (Image)&#xff0c;序列(Sequence)&#xff0c;图(Graph) 和表格(T…

使用python处理子域名爆破工具subdomainsbrute结果txt

近期学习了一段时间python&#xff0c;结合自己的安全从业经验&#xff0c;越来越感觉到安全测试是一个体力活。如果没有良好的coding能力去自动化的话&#xff0c;无疑会把安全测试效率变得很低。 作为安全测试而言&#xff0c;第一步往往要通过爆破目标站的一级域名开始。作为…

美陆军将在2020年军演中测试人工智能新应用

▲美陆军利用人工智能技术探测隐藏的目标&#xff0c;例如这辆伪装的M109A6自行榴弹炮来源&#xff1a; 美国《防务快讯》/图片来自互联网 编者按美陆军人工智能工作组负责人表示&#xff0c;陆军已开发出可检测“侦察照片”中隐藏目标的人工智能技术&#xff0c;并将在明年举行…

Nature:1000种植物的测序揭示10亿年来的进化

来源&#xff1a;生物通千种植物转录组计划&#xff08;1,000 Plants Project&#xff0c;1KP&#xff09;是由加拿大科学家在2008年11月发起的&#xff0c;召集了将近200名植物学家对1,100多种植物的基因进行测序和分析。如今&#xff0c;这个项目的研究成果发表在《Nature》杂…

java 通过反射得到命名空间_利用反射得到一个命名空间下的所有类,并调用?...

当年话下Assembly.LoadFrom("assemblyName").GetTypes();Assembly.Load("assemblyName").GetTypes();遍历&#xff0c; 再通过Type.GetInterface(""),如果结果不为null&#xff0c;那就说明找到了再Activator.CreateInstance(“”)即可还是写段代…

量子霸权之争

来源&#xff1a; 原理这一个月以来&#xff0c;量子计算机领域吸引了许多人的关注&#xff0c;因为关于谷歌已经实现了人们期待已久的里程碑——“量子霸权”&#xff08;也被称为”量子优越性“&#xff09;的消息不胫而走。“量子霸权”是加州理工学院的理论物理学家John Pr…

主成分分析法案例_因子分析案例及操作解析

分析一个省的科技创新能力受哪些潜在因素的影响&#xff1f;&#xff08;本数据来源于网络收集&#xff0c;x1~x15代表各省市相关经济指标&#xff09;第一步&#xff1a;数据输入&#xff08;如下图&#xff09;第二步&#xff1a;操作步骤&#xff1a;分析——降维——因子分…

date js 半年_js Date 日期使用上的一个坑

作者&#xff1a;坚强一点链接&#xff1a;https://zhuanlan.zhihu.com/p/22253858来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。在写js 日历插件的时候遇到一个奇怪的情况。日历当前的日期是 2016-08-31 号 用 js Da…

IBM人工智能将“掌舵”全球首个跨大西洋自主驾驶船舶

来源&#xff1a;IBM中国IBM提供IBM Systems、AI、云以及边缘计算技术&#xff0c;“掌舵”全球首个跨大西洋的自主航行任务目标是拓展人类对于海洋的认识&#xff0c;以及消除海洋研究的障碍此次航行将帮助科学家们了解海洋塑料堆积这一重大社会问题日前&#xff0c;IBM THINK…

【周末阅读】人工智能时代基础数据服务大有可为

来源&#xff1a;青岛智能产业技术研究院智能产业 前沿高地【导读】为机器学习算法训练、优化提供数据采集、标注等服务的人工智能基础数据服务成为这一人工智能热潮中必不可少的一环。如果说计算机工程师是AI的老师&#xff0c;那基础数据服务就是老师手中的教材。人工智能基础…

物理史2000年来最精彩的对决!

来源&#xff1a;工程客背景&#xff1a;在20世纪初&#xff0c;物理学界诞生了影响至今的两大理论&#xff0c;这两个门派&#xff0c;一个是爱因斯坦以一人之力提出的相对论&#xff0c;另一个则是由玻尔领导的哥本哈根学派合力塑成的量子力学。而因为观念的差异&#xff0c;…

sql多行合成一行的解决方法

转载于:https://www.cnblogs.com/shanhuashuiqing11/p/6000627.html

动态改变eachers图表高_让你的Excel图表动起来

有读者提了这样一个问题&#xff0c;想要制作如下的动态图表&#xff0c;要怎么实现&#xff1f;动态图表展示.gif可以看到&#xff0c;这个动态效果里有4种选择器&#xff0c;左上方的组合框呈现出选择不同的方案展示相应柱形图的效果&#xff1b;中间的复选框勾上显示差额的图…

2018-2020年Gartner战略科技发展趋势一览!

来源&#xff1a;边缘计算社区近日&#xff0c;Gartner公布了2020年十大战略科技趋势的预测&#xff0c;值此之际&#xff0c;边缘计算社区总结回顾并简要分析了2018-2020三年的战略科技发展趋势变化。Gartner将战略科技发展趋势定义为具有巨大颠覆性潜力、脱离初期阶段且影响范…

【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)

奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1836 Accepted Submission(s): 798 Problem Description传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革&#xff1a;重新分配…

正面交锋!另类“竞赛”探索大脑的意识起源

图片来源&#xff1a;ZEPHYR/SCIENCE PHOTO LIBRARY/GETTY IMAGES来源&#xff1a;中国生物技术网在脑科学研究领域&#xff0c;科学家们可以观察到神经元的放电及其之间的通信&#xff0c;从而描绘出在产生感觉、进行决策和说话过程中大脑各区域是如何被“点亮”的。但他们无法…

(第七周)内容汇总

项目名&#xff1a;食物链教学工具 组名&#xff1a;奋斗吧兄弟 组长&#xff1a;黄兴 组员&#xff1a;谢孝淼、李俞寰、杜桥 1、团队贡献分 黄兴 5.1 谢孝淼 4.8 李俞寰 5.2 杜桥 4.9 2、alpha视频发布 平台&#xff1a;优酷 链接&#xff1a;http://v.youku.com/v_show/i…