欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

three.js利用卷積法實(shí)現(xiàn)物體描邊效果-創(chuàng)新互聯(lián)

小編給大家分享一下three.js利用卷積法實(shí)現(xiàn)物體描邊效果,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

專業(yè)從事成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè),高端網(wǎng)站制作設(shè)計(jì),微信小程序定制開發(fā),網(wǎng)站推廣的成都做網(wǎng)站的公司。優(yōu)秀技術(shù)團(tuán)隊(duì)竭力真誠(chéng)服務(wù),采用H5建站+CSS3前端渲染技術(shù),響應(yīng)式網(wǎng)站,讓網(wǎng)站在手機(jī)、平板、PC、微信下都能呈現(xiàn)。建站過程建立專項(xiàng)小組,與您實(shí)時(shí)在線互動(dòng),隨時(shí)提供解決方案,暢聊想法和感受。

法線延展法

網(wǎng)上使用法線延展法實(shí)現(xiàn)物體描邊效果的文章比較多,這里不再描述。

但是這種方法有個(gè)缺點(diǎn):當(dāng)兩個(gè)面的法線夾角差別較大時(shí),兩個(gè)面的描邊無法完美連接。如下圖所示:

three.js利用卷積法實(shí)現(xiàn)物體描邊效果

卷積法

這里使用另一種方法卷積法實(shí)現(xiàn)物體描邊效果,一般機(jī)器學(xué)習(xí)使用該方法比較多。先看效果圖:

three.js利用卷積法實(shí)現(xiàn)物體描邊效果three.js利用卷積法實(shí)現(xiàn)物體描邊效果three.js利用卷積法實(shí)現(xiàn)物體描邊效果

使用three.js具體的實(shí)現(xiàn)方法如下:

  1. 創(chuàng)建著色器材質(zhì),隱藏不需要描邊的物體進(jìn)行渲染,將需要描邊的位置渲染成白色,其他位置渲染成黑色。

  2. 利用片源著色器計(jì)算卷積,白色是物體內(nèi)部,黑色是物體外部,灰色是邊框。

  3. 設(shè)置材質(zhì)透明、不融合,將邊框疊加到原圖上,可以使用FXAA抗鋸齒。

這三步就可以實(shí)現(xiàn)了,很簡(jiǎn)單吧。下面我們將詳細(xì)介紹實(shí)現(xiàn)方法,不想看的可以直接去看完整實(shí)現(xiàn)代碼:

完整代碼:https://gitee.com/tengge1/ShadowEditor/blob/master/ShadowEditor.Web/src/helper/SelectHelper.js

詳細(xì)的實(shí)現(xiàn)過程:

1. 使用three.js正常繪制場(chǎng)景,得到下圖,這里不介紹了。

three.js利用卷積法實(shí)現(xiàn)物體描邊效果

2. 創(chuàng)建著色器材質(zhì),隱藏所有不需要描邊的物體。將需要描邊的物體繪制成白色,其他地方繪制成黑色。

隱藏不需要描邊的物體后,將整個(gè)場(chǎng)景材質(zhì)替換。

renderScene.overrideMaterial = this.maskMaterial;

著色器材質(zhì):

const maskMaterial = new THREE.ShaderMaterial({
 vertexShader: MaskVertex,
 fragmentShader: MaskFragment,
 depthTest: false
});

MaskVertex:

void main() {
 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}

MaskFragment:

void main() {
 gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}

效果圖:

three.js利用卷積法實(shí)現(xiàn)物體描邊效果

3. 創(chuàng)建著色器材質(zhì)進(jìn)行卷積計(jì)算,每四個(gè)像素顏色求平均值得到一個(gè)像素。描邊物體內(nèi)部是白色,外部是黑色,物體邊緣處會(huì)得到灰色?;疑褪俏覀兯璧倪吙?。

const edgeMaterial = new THREE.ShaderMaterial({
 vertexShader: EdgeVertex,
 fragmentShader: EdgeFragment,
 uniforms: {
  maskTexture: {
   value: this.maskBuffer.texture
  },
  texSize: {
   value: new THREE.Vector2(width, height)
  },
  color: {
   value: selectedColor
  },
  thickness: {
   type: 'f',
   value: 4
  },
  transparent: true
 },
 depthTest: false
});

其中texSize是計(jì)算卷積的canvas寬度和高度,為了讓邊框更平滑,可以設(shè)置為原來canvas的兩倍。color是邊框顏色,thickness是邊框粗細(xì)。

注意,要將材質(zhì)transparent設(shè)置為true。

EdgeVertex:

varying vec2 vUv;

void main() {
 vUv = uv;
 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}

EdgeFragment:

uniform sampler2D maskTexture;
uniform vec2 texSize;
uniform vec3 color;
uniform float thickness;

varying vec2 vUv;

void main() {
 vec2 invSize = thickness / texSize;
 vec4 uvOffset = vec4(1.0, 0.0, 0.0, 1.0) * vec4(invSize, invSize);

 vec4 c1 = texture2D( maskTexture, vUv + uvOffset.xy);
 vec4 c2 = texture2D( maskTexture, vUv - uvOffset.xy);
 vec4 c3 = texture2D( maskTexture, vUv + uvOffset.yw);
 vec4 c4 = texture2D( maskTexture, vUv - uvOffset.yw);
 
 float diff1 = (c1.r - c2.r)*0.5;
 float diff2 = (c3.r - c4.r)*0.5;
 
 float d = length(vec2(diff1, diff2));
 gl_FragColor = d > 0.0 ? vec4(color, 1.0) : vec4(0.0, 0.0, 0.0, 0.0);
}

效果圖:

three.js利用卷積法實(shí)現(xiàn)物體描邊效果

4. 創(chuàng)建著色器材質(zhì),將邊框疊加到原來的圖片上。由于FXAA比較復(fù)雜,這里使用簡(jiǎn)單的疊加方法。

著色器材質(zhì):

const copyMaterial = new THREE.ShaderMaterial({
 vertexShader: CopyVertexShader,
 fragmentShader: CopyFragmentShader,
 uniforms: {
  tDiffuse: {
   value: edgeBuffer.texture
  },
  resolution: {
   value: new THREE.Vector2(1 / width, 1 / height)
  }
 },
 transparent: true,
 depthTest: false
});

注意,transparent要設(shè)置為true,否則會(huì)把原來的圖片覆蓋掉。

CopyVertexShader:

varying vec2 vUv;

void main() {
 vUv = uv;
 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}

CopyFragmentShader:

uniform float opacity;

uniform sampler2D tDiffuse;

varying vec2 vUv;

void main() {
 vec4 texel = texture2D( tDiffuse, vUv );
 gl_FragColor = opacity * texel;
}

得到最終效果圖:

three.js利用卷積法實(shí)現(xiàn)物體描邊效果

以上是“three.js利用卷積法實(shí)現(xiàn)物體描邊效果”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)站欄目:three.js利用卷積法實(shí)現(xiàn)物體描邊效果-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://chinadenli.net/article44/djjiee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、營(yíng)銷型網(wǎng)站建設(shè)、域名注冊(cè)、小程序開發(fā)商城網(wǎng)站定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
高清不卡一卡二卡区在线| 中文字幕一区二区久久综合| 国产精品偷拍一区二区| 最近最新中文字幕免费| 国产午夜精品久久福利| 人妻少妇久久中文字幕久久| 97精品人妻一区二区三区麻豆| 真实国产乱子伦对白视频不卡| 高清欧美大片免费在线观看| 都市激情小说在线一区二区三区| 麻豆国产精品一区二区| 日韩性生活视频免费在线观看| 隔壁的日本人妻中文字幕版| 成年女人下边潮喷毛片免费| 欧美激情中文字幕综合八区| 国产精品不卡一区二区三区四区 | 国产原创激情一区二区三区| 欧美性高清一区二区三区视频| 亚洲精品国男人在线视频| 久久综合亚洲精品蜜桃| 少妇视频一区二区三区| 亚洲中文字幕人妻av| 91人妻丝袜一区二区三区| 欧美日韩综合免费视频| 国产大屁股喷水在线观看视频| 欧美综合色婷婷欧美激情| 日韩aa一区二区三区| 日韩在线欧美一区二区| 国产内射一级一片内射高清视频 | 亚洲专区一区中文字幕| 日韩熟妇人妻一区二区三区| 国产精品免费福利在线| 中文日韩精品视频在线| 久久精品国产亚洲av久按摩| 日本人妻中出在线观看| 大香蕉久久精品一区二区字幕 | 一本久道久久综合中文字幕| 美女黄色三级深夜福利| 国产熟女高清一区二区| 国产女优视频一区二区| 国产一区二区熟女精品免费|