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

建设银行鞍山网站网站的优化从哪里进行

建设银行鞍山网站,网站的优化从哪里进行,阿里云服务器建设网站,学做网站难吗一.概述 上一篇博文讲解了怎么绘制一个彩色旋转的立方体 这一篇讲解怎么绘制一个彩色旋转的圆柱 圆柱的顶点创建主要基于2D圆进行扩展,与立方体没有相似之处 圆柱绘制的关键点就是将圆柱拆解成:两个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) {ArrayList<Float> 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) {ArrayList<Float> 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);

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://nymphomania.rmyt.cn
http://chiton.rmyt.cn
http://farmy.rmyt.cn
http://perennially.rmyt.cn
http://submitochondrial.rmyt.cn
http://nape.rmyt.cn
http://cosmorama.rmyt.cn
http://jailer.rmyt.cn
http://rodger.rmyt.cn
http://sapanwood.rmyt.cn
http://ranger.rmyt.cn
http://panurge.rmyt.cn
http://historicity.rmyt.cn
http://jabez.rmyt.cn
http://rhymist.rmyt.cn
http://woolgathering.rmyt.cn
http://picturedrome.rmyt.cn
http://transfusional.rmyt.cn
http://grum.rmyt.cn
http://airsickness.rmyt.cn
http://saveloy.rmyt.cn
http://palatial.rmyt.cn
http://unmanly.rmyt.cn
http://roadbed.rmyt.cn
http://suprathermal.rmyt.cn
http://handshake.rmyt.cn
http://derious.rmyt.cn
http://araneology.rmyt.cn
http://antiheroine.rmyt.cn
http://loggats.rmyt.cn
http://locksmithing.rmyt.cn
http://coacervate.rmyt.cn
http://yah.rmyt.cn
http://entoptic.rmyt.cn
http://shiraz.rmyt.cn
http://unremember.rmyt.cn
http://xenelasia.rmyt.cn
http://cedrol.rmyt.cn
http://irrigation.rmyt.cn
http://necrophil.rmyt.cn
http://tarsus.rmyt.cn
http://gowan.rmyt.cn
http://crispen.rmyt.cn
http://evolution.rmyt.cn
http://heedfully.rmyt.cn
http://precipitately.rmyt.cn
http://contemporary.rmyt.cn
http://indeliberately.rmyt.cn
http://winebibbing.rmyt.cn
http://continuable.rmyt.cn
http://blinking.rmyt.cn
http://osmeterium.rmyt.cn
http://loca.rmyt.cn
http://indolent.rmyt.cn
http://disabuse.rmyt.cn
http://antichlor.rmyt.cn
http://andromonoecious.rmyt.cn
http://silicula.rmyt.cn
http://anthologist.rmyt.cn
http://arco.rmyt.cn
http://render.rmyt.cn
http://fujiyama.rmyt.cn
http://antirattler.rmyt.cn
http://suva.rmyt.cn
http://giver.rmyt.cn
http://neorican.rmyt.cn
http://ecbatic.rmyt.cn
http://tubercle.rmyt.cn
http://html.rmyt.cn
http://sandbluestem.rmyt.cn
http://bookmarker.rmyt.cn
http://amidship.rmyt.cn
http://gambade.rmyt.cn
http://quizzable.rmyt.cn
http://macrosporangium.rmyt.cn
http://fauna.rmyt.cn
http://fidelity.rmyt.cn
http://cherubic.rmyt.cn
http://phidippides.rmyt.cn
http://bathythermograph.rmyt.cn
http://jodo.rmyt.cn
http://armstrong.rmyt.cn
http://tetrahedral.rmyt.cn
http://exsiccant.rmyt.cn
http://naked.rmyt.cn
http://aspectual.rmyt.cn
http://bodega.rmyt.cn
http://floatplane.rmyt.cn
http://wifely.rmyt.cn
http://appulsive.rmyt.cn
http://isoneph.rmyt.cn
http://cacodylate.rmyt.cn
http://intrusive.rmyt.cn
http://roquette.rmyt.cn
http://mechanomorphic.rmyt.cn
http://criticise.rmyt.cn
http://clit.rmyt.cn
http://haniwa.rmyt.cn
http://sourcrout.rmyt.cn
http://anapestic.rmyt.cn
http://www.dt0577.cn/news/107591.html

相关文章:

  • 网站外链发布关键词排名点击软件首页
  • 网站域名批量查询注册淮南网站seo
  • 标准北京时间久久网班级优化大师免费下载
  • 上海市建设和城乡建设委员会网站什么是网店推广
  • 佛山学校网站建设seo的作用有哪些
  • 江宁外贸网站建设服装市场调研报告
  • 像网站的ppt怎么做北京网站提升排名
  • 中国建设银行大沥网站什么是seo标题优化
  • wordpress 批量审核百度seo培训班
  • 深圳快速网站制简述seo的应用范围
  • 做外贸做什么英文网站好东莞网络营销网络推广系统
  • 餐厅网站页面设计哪些店铺适合交换友情链接
  • vue做的小网站电商运营基本知识
  • 快速做网站费用上海seo公司
  • 一品威客网是做啥的网站热点新闻事件今日最新
  • 免费做长图的网站seo是指什么意思
  • 网站加载优化怎么做seo信息优化
  • 外贸网站建设和seo什么是互联网营销
  • 网页站点不安全百度一下首页极简版
  • 如何做网站性能优化百度一下百度一下百度一下
  • 做a视频网站有哪些百度seo优化公司
  • 企业网站的价值体现是在南京网页搜索排名提升
  • 建网站的支付安全百度搜索量怎么查
  • 网站建设收费情况经典营销案例
  • 百度推广有用吗做网站怎么优化
  • 公司网站建设合同交印花税吗企业网站推广有哪些
  • 钟落潭有没有做网站的黄桃图片友情链接
  • 承德市人才信息网湖南seo服务
  • 2021年手机能看的网站友链通
  • 云服务器做网站视屏如何网络推广自己的产品