中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站的數(shù)據(jù)庫怎么備份網(wǎng)絡(luò)營銷與網(wǎng)站推廣的

網(wǎng)站的數(shù)據(jù)庫怎么備份,網(wǎng)絡(luò)營銷與網(wǎng)站推廣的,買完網(wǎng)站怎么建設(shè),為wordpress創(chuàng)建一個ftp一.概述 上一篇博文講解了怎么繪制一個彩色旋轉(zhuǎn)的立方體 這一篇講解怎么繪制一個彩色旋轉(zhuǎn)的圓柱 圓柱的頂點創(chuàng)建主要基于2D圓進行擴展,與立方體沒有相似之處 圓柱繪制的關(guān)鍵點就是將圓柱拆解成:兩個Z坐標(biāo)不為0的圓 一個長方形的圓柱面 繪制2D圓的…

一.概述

上一篇博文講解了怎么繪制一個彩色旋轉(zhuǎn)的立方體

這一篇講解怎么繪制一個彩色旋轉(zhuǎn)的圓柱

圓柱的頂點創(chuàng)建主要基于2D圓進行擴展,與立方體沒有相似之處

圓柱繪制的關(guān)鍵點就是將圓柱拆解成:兩個Z坐標(biāo)不為0的圓? + 一個長方形的圓柱面

繪制2D圓的過程這里不再復(fù)述,不理解的可以參看前面這篇博文:《OpenGLES:繪制一個顏色漸變的圓》

廢話不多說,正文開始了。?

二.Render:變量定義

2.1 常規(guī)變量定義

//著色器程序/渲染器
private int shaderProgram;//著色器mvp矩陣屬性
private int mvpMatrix;
//位置屬性
private int aPositionLocation;//surface寬高比率
private float ratio;

2.2 定義頂點坐標(biāo)數(shù)組和緩沖

概述中提到過,繪制圓柱的關(guān)鍵思路是將圓柱拆解成:兩個Z坐標(biāo)不為0的圓? + 一個長方形的圓柱面

所以定義三個頂點坐標(biāo)數(shù)組和對應(yīng)緩沖

//圓柱柱面頂點數(shù)組
private float[] vertexData;
//圓柱頂部圓的頂點數(shù)組
private float[] vertexData1;
//圓柱底部圓的頂點數(shù)組
private float[] vertexData2;//圓柱柱面頂點緩沖
private FloatBuffer vertexBuffer;
//圓柱頂部圓的頂點緩沖
private FloatBuffer vertexBuffer1;
//圓柱頂部圓的頂點緩沖
private FloatBuffer vertexBuffer2;

需要注意的是,這次我并沒有把頂點顏色單獨定義成一個數(shù)組,而且在Render類中也不會像上一篇繪制立方體時動態(tài)加載和填充頂點顏色值

這次我會換一種方式,直接把顏色填充和變換在著色器代碼中實現(xiàn)

最終的色彩漸變效果是一樣的,殊途同歸,豐富對OpenGLES不同實現(xiàn)方式的學(xué)習(xí)。

2.3?定義MVP矩陣

//MVP矩陣
private float[] mMVPMatrix = new float[16];

三.Render:著色器、內(nèi)存分配等

3.1 著色器創(chuàng)建、鏈接、使用

3.2 著色器屬性獲取、賦值

3.3 緩沖內(nèi)存分配

這幾個部分的代碼實現(xiàn)2D圖形繪制基本一致

可參考以前2D繪制的相關(guān)博文,里面都有詳細(xì)的代碼實現(xiàn)

不再重復(fù)展示代碼

四.Render:動態(tài)創(chuàng)建頂點

float radio = 0.6f;
int spanIdx = 60;vertexData = createSidePos(radio, spanIdx);
vertexData1 = createBottomCirclePos(radio, spanIdx, 0.7f);
vertexData2 = createBottomCirclePos(radio, spanIdx, -0.7f);

重點就在于創(chuàng)建圓柱頂點的兩個函數(shù):

  • createSidePos()
  • createBottomCirclePos()

4.1 createSidePos()

private float[] createSidePos(float radius, int n) {ArrayList<Float> data = new ArrayList<>();//設(shè)置頂部/底部圓的頂點坐標(biāo)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坐標(biāo)設(shè)置為-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坐標(biāo)設(shè)置為-0.7fdata.add(0.7f);}//所有頂點坐標(biāo)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<>();//頂部/底部圓心坐標(biāo)data.add(0.0f);data.add(0.0f);data.add(circleCenterZ);//設(shè)置頂部/底部圓的頂點坐標(biāo)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坐標(biāo)設(shè)置為-0.7fdata.add(circleCenterZ);}//所有頂點坐標(biāo)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()

//準(zhǔn)備頂點坐標(biāo)和顏色數(shù)據(jù)
glVertexAttribPointer(aPositionLocation, 3, GL_FLOAT, false, 0, vertexBuffer);
//繪制
glDrawArrays(GL_TRIANGLE_STRIP, 0, vertexData.length / 3);

(2).drawBottomCircle1()

//準(zhǔn)備頂點坐標(biāo)和顏色數(shù)據(jù)
glVertexAttribPointer(aPositionLocation, 3, GL_FLOAT, false, 0, vertexBuffer1);
//繪制
glDrawArrays(GL_TRIANGLE_FAN, 0, vertexData1.length / 3);

(3).drawBottomCircle2()

//準(zhǔn)備頂點坐標(biāo)和顏色數(shù)據(jù)
glVertexAttribPointer(aPositionLocation, 3, GL_FLOAT, false, 0, vertexBuffer2);
//繪制
glDrawArrays(GL_TRIANGLE_FAN, 0, vertexData2.length / 3);

六.著色器代碼

6.1?cylinder_vertex_shader.glsl

先實現(xiàn)一個頂部綠色,底部紅色,柱面綠紅漸變的旋轉(zhuǎn)圓柱

#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;
}

七.最終效果

上一節(jié)中講了,先來一個頂部綠,底部紅,柱面綠紅漸變的旋轉(zhuǎn)3D圓柱

效果如下:

如何實現(xiàn)混色漸變的旋轉(zhuǎn)圓柱呢?

很簡單,只要修改頂點著色器代碼

void main() {gl_Position = mvpMatrix * vPosition;//顏色混合漸變vColor = vec4(vPosition.x,vPosition.y, vPosition.z,0.0);
}

效果如下:

八.結(jié)束

彩色旋轉(zhuǎn)的3D圓柱繪制到此結(jié)束

下一篇講解彩色旋轉(zhuǎn)的圓錐

http://www.risenshineclean.com/news/26912.html

相關(guān)文章:

  • 青島做外貿(mào)網(wǎng)站廣州疫情最新消息
  • 濟寧網(wǎng)站建設(shè) 田振在線磁力搜索引擎
  • c 做的網(wǎng)站又哪些廈門關(guān)鍵詞優(yōu)化網(wǎng)站
  • 林州網(wǎng)站建設(shè)外貿(mào)網(wǎng)站平臺
  • java web網(wǎng)站開發(fā)流程廈門人才網(wǎng)最新招聘信息網(wǎng)
  • 北京制作頁面網(wǎng)站搜索優(yōu)化官網(wǎng)
  • 微信朋友圈廣告投放平臺杭州上城區(qū)抖音seo有多好
  • 找美工做網(wǎng)站多少錢長沙seo優(yōu)化推廣公司
  • 洛陽做網(wǎng)站哪家便宜沈陽seo排名收費
  • 靜態(tài)網(wǎng)站制作模板百度seo關(guān)鍵詞排名優(yōu)化
  • 創(chuàng)業(yè)商機網(wǎng)餐飲seoapp推廣
  • dz論壇怎么做視頻網(wǎng)站上海十大營銷策劃公司
  • 日照網(wǎng)站建設(shè)哪家好看廣告賺錢的平臺
  • 怎么用css做網(wǎng)站背景圖整站優(yōu)化seo公司哪家好
  • 大連網(wǎng)站建設(shè)特色南京seo關(guān)鍵詞排名
  • asp動態(tài)網(wǎng)站建設(shè)模擬搜索點擊軟件
  • 源碼下載網(wǎng)站源碼廣西網(wǎng)絡(luò)優(yōu)化seo
  • 網(wǎng)站下載的軟件怎么安裝代寫1000字多少錢
  • 集團網(wǎng)站建設(shè)要多少錢sem推廣軟件選哪家
  • 一級a做爰片免費觀網(wǎng)站看無碼滄州網(wǎng)站建設(shè)
  • 網(wǎng)站建設(shè)英語翻譯資料產(chǎn)品軟文范例軟文
  • 深圳做網(wǎng)站 漢獅網(wǎng)絡(luò)seo合作代理
  • 長沙網(wǎng)站策劃在線優(yōu)化網(wǎng)站
  • 鄂州市政府網(wǎng)長沙seo培訓(xùn)
  • 青島學(xué)網(wǎng)站建設(shè)的大學(xué)搜索關(guān)鍵詞技巧
  • 做網(wǎng)站需要公司么中國制造網(wǎng)網(wǎng)站類型
  • 做dhl底單的網(wǎng)站是 什么網(wǎng)絡(luò)營銷與直播電商專業(yè)就業(yè)前景
  • 致遠oa協(xié)同管理系統(tǒng)優(yōu)化大師apk
  • 瑞安外貿(mào)網(wǎng)站制作網(wǎng)站管理系統(tǒng)
  • 帝國+只做網(wǎng)站地圖百度app怎么找人工客服