当前位置: 首页 > news >正文

钦州网站建设怎样制作网站和软件

钦州网站建设,怎样制作网站和软件,宁波seo推荐推广平台,中国建设银行官网站企业年金一.概述 上一篇博文讲解了怎么绘制一个混色旋转的立方体 这一篇讲解怎么绘制一个混色旋转的圆柱 圆柱的顶点创建主要基于2D圆进行扩展#xff0c;与立方体没有相似之处 圆柱绘制的关键点就是将圆柱拆解成#xff1a;两个Z坐标不为0的圆 一个长方形的圆柱面 绘制2D圆的…一.概述 上一篇博文讲解了怎么绘制一个混色旋转的立方体 这一篇讲解怎么绘制一个混色旋转的圆柱 圆柱的顶点创建主要基于2D圆进行扩展与立方体没有相似之处 圆柱绘制的关键点就是将圆柱拆解成两个Z坐标不为0的圆  一个长方形的圆柱面 绘制2D圆的过程这里不再复述不理解的可以参看前面这篇博文《OpenGLES绘制一个颜色渐变的圆》 废话不多说正文开始了。  二.Render变量定义 2.1 常规变量定义 //着色器程序/渲染器 private int shaderProgram;//着色器mvp矩阵属性 private int mvpMatrix; //位置属性 private int aPositionLocation;//surface宽高比率 private float ratio; 2.2 定义顶点坐标数组和缓冲 概述中提到过绘制圆柱的关键思路是将圆柱拆解成两个Z坐标不为0的圆  一个长方形的圆柱面 所以定义三个顶点坐标数组和对应缓冲 //圆柱柱面顶点数组 private float[] vertexData; //圆柱顶部圆的顶点数组 private float[] vertexData1; //圆柱底部圆的顶点数组 private float[] vertexData2;//圆柱柱面顶点缓冲 private FloatBuffer vertexBuffer; //圆柱顶部圆的顶点缓冲 private FloatBuffer vertexBuffer1; //圆柱顶部圆的顶点缓冲 private FloatBuffer vertexBuffer2; 需要注意的是这次我并没有把顶点颜色单独定义成一个数组而且在Render类中也不会像上一篇绘制立方体时动态加载和填充顶点颜色值 这次我会换一种方式直接把颜色填充和变换在着色器代码中实现 最终的色彩渐变效果是一样的殊途同归丰富对OpenGLES不同实现方式的学习。 2.3 定义MVP矩阵 //MVP矩阵 private float[] mMVPMatrix new float[16]; 三.Render着色器、内存分配等 3.1 着色器创建、链接、使用 3.2 着色器属性获取、赋值 3.3 缓冲内存分配 这几个部分的代码实现2D图形绘制基本一致 可参考以前2D绘制的相关博文里面都有详细的代码实现 不再重复展示代码 四.Render动态创建顶点 float radio 0.6f; int spanIdx 60;vertexData createSidePos(radio, spanIdx); vertexData1 createBottomCirclePos(radio, spanIdx, 0.7f); vertexData2 createBottomCirclePos(radio, spanIdx, -0.7f); 重点就在于创建圆柱顶点的两个函数 createSidePos()createBottomCirclePos() 4.1 createSidePos() private float[] createSidePos(float radius, int n) {ArrayListFloat data new ArrayList();//设置顶部/底部圆的顶点坐标float angDegSpan 360f / n;for (float i 0; i 360 angDegSpan; i angDegSpan) {data.add((float) (radius * Math.sin(i * Math.PI / 180f)));data.add((float) (radius * Math.cos(i * Math.PI / 180f)));//顶部/底部圆的顶点Z坐标设置为-0.7fdata.add(-0.7f);data.add((float) (radius * Math.sin(i * Math.PI / 180f)));data.add((float) (radius * Math.cos(i * Math.PI / 180f)));//顶部/底部圆的顶点Z坐标设置为-0.7fdata.add(0.7f);}//所有顶点坐标float[] f new float[data.size()];for (int i 0; i data.size(); i) {f[i] data.get(i);}return f; }4.2 createBottomCirclePos() private float[] createBottomCirclePos(float radius, int n, float circleCenterZ) {ArrayListFloat data new ArrayList();//顶部/底部圆心坐标data.add(0.0f);data.add(0.0f);data.add(circleCenterZ);//设置顶部/底部圆的顶点坐标float angDegSpan 360f / n;for (float i 0; i 360 angDegSpan; i angDegSpan) {data.add((float) (radius * Math.sin(i * Math.PI / 180f)));data.add((float) (radius * Math.cos(i * Math.PI / 180f)));//顶部/底部圆的顶点Z坐标设置为-0.7fdata.add(circleCenterZ);}//所有顶点坐标float[] f new float[data.size()];for (int i 0; i data.size(); i) {f[i] data.get(i);}return f; }五.Render绘制 5.1 MVP矩阵 //填充MVP矩阵 mMVPMatrix TransformUtils.getCylinderMVPMatrix(ratio); //将变换矩阵传入顶点渲染器 glUniformMatrix4fv(mvpMatrix, 1, false, mMVPMatrix, 0);getCylinderMVPMatrix() public static float[] getCylinderMVPMatrix(float ratio) {float[] modelMatrix getIdentityMatrix(16, 0); //模型变换矩阵float[] viewMatrix getIdentityMatrix(16, 0); //观测变换矩阵/相机矩阵float[] projectionMatrix getIdentityMatrix(16, 0); //投影变换矩阵mConeRotateAgree (mConeRotateAgree 1) % 360;//旋转方向xyz三个轴是相对于相机观察方向的Matrix.rotateM(modelMatrix, 0, mConeRotateAgree, 1, 0, 1); //获取模型旋转变换矩阵//设置相机位置Matrix.setLookAtM(viewMatrix, 0, 5, 0.0f, -3.0f, 0f, 0f, 0f, 0f, 0.0f, 1.0f);//设置透视投影Matrix.frustumM(projectionMatrix, 0, -ratio, ratio, -1, 1, 3, 10);//计算变换矩阵float[] tmpMatrix new float[16];Matrix.multiplyMM(tmpMatrix, 0, viewMatrix, 0, modelMatrix, 0);float[] mvpMatrix new float[16];Matrix.multiplyMM(mvpMatrix, 0, projectionMatrix, 0, tmpMatrix, 0);return mvpMatrix; }5.2 绘制圆柱柱面、顶部圆、底部圆 (1).drawSide() //准备顶点坐标和颜色数据 glVertexAttribPointer(aPositionLocation, 3, GL_FLOAT, false, 0, vertexBuffer); //绘制 glDrawArrays(GL_TRIANGLE_STRIP, 0, vertexData.length / 3); (2).drawBottomCircle1() //准备顶点坐标和颜色数据 glVertexAttribPointer(aPositionLocation, 3, GL_FLOAT, false, 0, vertexBuffer1); //绘制 glDrawArrays(GL_TRIANGLE_FAN, 0, vertexData1.length / 3); (3).drawBottomCircle2() //准备顶点坐标和颜色数据 glVertexAttribPointer(aPositionLocation, 3, GL_FLOAT, false, 0, vertexBuffer2); //绘制 glDrawArrays(GL_TRIANGLE_FAN, 0, vertexData2.length / 3); 六.着色器代码 6.1 cylinder_vertex_shader.glsl 先实现一个顶部绿色底部红色柱面绿红渐变的旋转圆柱 #version 300 eslayout (location 0) in vec4 vPosition; layout (location 1) in vec4 aColor;uniform mat4 mvpMatrix;out vec4 vColor;void main() {gl_Position mvpMatrix * vPosition;if (vPosition.z 0.7) {vColor vec4(0.0, 1.0, 0.0, 0.0); //绿} else if (vPosition.z -0.7) {vColor vec4(1.0, 0.0, 0.0, 0.0); //红} } 6.2 cylinder_fragtment_shader.glsl #version 300 es #extension GL_OES_EGL_image_external_essl3 : require precision mediump float;in vec4 vColor;out vec4 outColor;void main(){outColor vColor; }七.最终效果 上一节中讲了先来一个顶部绿底部红柱面绿红渐变的旋转3D圆柱 效果如下 如何实现混色渐变的旋转圆柱呢 很简单只要修改顶点着色器代码 void main() {gl_Position mvpMatrix * vPosition;//颜色混合渐变vColor vec4(vPosition.x,vPosition.y, vPosition.z,0.0); } 效果如下 八.结束 混色旋转的3D圆柱绘制到此就实现完成了 下一篇讲解混色旋转的圆锥
http://www.huolong8.cn/news/245556/

相关文章:

  • 网站建设 客户亚马逊雨林地图
  • 江门网站建设设计国外游戏代码网站
  • html5网站推广成年培训班有哪些
  • 广东快速做网站公司佛山市网站建设 乾图信息科技
  • 个人免费网站申请威海做企业网站
  • 橙色在网站中的应用wordpress收费下载资源插件
  • 海外pvn加速器seo网络优化招聘
  • 重庆网站建设联系电话上海口碑最好的装修公司排名
  • 企业自助建站策划方案晋中北京网站建设
  • 南城网站建设多少钱网站建设项目策划
  • 免费ppt课件下载网站工商执照注册号查询网
  • query post wordpressseo公司哪家好
  • 长沙网站制作首页网站可以用视频做背景吗
  • php网站换服务器南阳做网站多少费用
  • 京东网站设计特点百度搜索图片
  • 网站建设计划书1200字天津网站开发
  • 正能量网站免费入口有限公司twitter wordpress
  • 彩票网站建设网站深圳网站建设公司是
  • 黄石公司做网站电子政务网站建设总结
  • 网站设计制作中心沈阳高端网站建设
  • 网站结构分类泰州泛亚信息做网站怎么样
  • ctoc的网站有哪些wordpress视频无法播放视频
  • 滨江建设交易门户网站中国品牌设计50强
  • 尚义网站建设wl17581网站页面优化分析
  • 免费的制作网站程序网站维护知识
  • 网站动态logo怎么做开发企业app公司
  • 长沙私人做网站沂水住房与城乡建设局网站
  • 广西网站开发软件wordpress支持内网和外网
  • 设计网站 知乎广告公司简介ppt
  • 如何做展示型网站如何生成自己的网站