諺に通り、4人の魔術師アジアでは、中国のPS手術は大きな国のために、どちらの鼓動を占め、唯一簡単に取得するには、ソフトウェアが必要、お金を寄付していません!
プログラマのチェイス女神、大きな目を達成フェイスリフト効果の女神は、自分自身にチャンスを与えていないということ、になりたいです!
独自の要件の女神に会いたいプログラマは、我々はダウンになります:
本質的に画像領域内の画素のある大アイ効果を達成するためにフェイスリフトは、我々は、天然の画素を処理するためのOpenGLのフラグメントシェーダを設定し、特定のルール(テクセル)の操作の態様に応じて移動されます。。
大型アイ効果を達成するためのOpenGL
より良い数字変形パラメータセットが大きい移動、大きな目の効果を示すために、表情は誇張しました。
OpenGLは、大眼効果はすぐに、比較的大きな領域にテクスチャマップをサンプリングした後、拡大鏡の原理を用いて領域を達成することができます。
本明細書で使用される場合、大眼効果が簡略化される達成、遠い中央、大きな増幅強度から、人間の眼を中心とした円形の領域において増幅されます。
上記のように、内側の円は、領域(拡大)変形し、赤い点のサンプリングポイント(元のテクスチャ座標)ときなし変形、歪み発生ポイント(シフトテクスチャ座標)をサンプリングする際に緑色のドットに対応します。
シェーダ眼拡大鏡スクリプト(コード指定された画像目の中心の座標と眼の半径)を実装。
#version 300 es
precision highp float;
layout(location = 0) out vec4 outColor;
uniform sampler2D s_TextureMap;
in vec2 v_texCoord;
uniform highp vec2 u_LeftEyeCenterPos;// 左眼中心点
uniform highp vec2 u_RightEyeCenterPos;// 右眼中心点
uniform highp float u_ScaleRatio;//放大系数
uniform highp float u_Radius;// 影响半径
uniform vec2 u_ImgSize;//图片分辨率
vec2 warpEyes(vec2 centerPos, vec2 curPos, float radius, float scaleRatio)
{
vec2 result = curPos;
vec2 imgCurPos = curPos * u_ImgSize;
float d = distance(imgCurPos, centerPos);
if (d < radius)
{
float gamma = 1.0 - scaleRatio * pow(smoothstep(0.0, 1.0, d / radius) - 1.0, 2.0);
result = centerPos + gamma * (imgCurPos - centerPos);
result = result / u_ImgSize;
}
return result;
}
void main()
{
vec2 newTexCoord = warpEyes(u_LeftEyeCenterPos, v_texCoord, u_Radius, u_ScaleRatio);
newTexCoord = warpEyes(u_RightEyeCenterPos, newTexCoord, u_Radius, u_ScaleRatio);
outColor = texture(s_TextureMap, newTexCoord);
}
フェイスリフトの効果を達成するためのOpenGL
顔のスクイーズ効果を形成するようにフェイスリフトの効果を達成するために、ピクセルは、一定の規則に従って全オフセット領域に指定されています。
上記のように、BCは、ある程度のオフセットベクトルに円内の全ての画素を中心距離に関連付けられたBC、画素シフトの強度、画素に応じた方向及びオフセットベクトルの変位の程度を表し、よりより大きな強度の中央付近。
計算処理を簡単にするために、ショーの唯一の原理は、我々は、次に中心点とを結ぶ制御点(寺院やあごのラインのうち、臨界点から算出(左右テンプルと顎は、上の写真)面の個々の部分の3つの重要なポイントを選択しました)、制御点ベクトルBCの組成物。あなたはすぐに顔リフト効果を確認したい場合はもちろん、手動で直接指定することができます。
フェイスリフト効果シェーダスクリプト:
#version 300 es
precision highp float;
layout(location = 0) out vec4 outColor;
in vec2 v_texCoord;
uniform sampler2D s_TextureMap;
uniform vec2 u_texSize;//图像分辨率
uniform vec4 u_preCtrlPoints;//pre控制点
uniform vec4 u_curCtrlPoints;//cur控制点
uniform float u_reshapeRadius;//影响半径
uniform float u_reshapeRatio;//强度
vec2 face_slender_1(vec2 prePoint, vec2 curPoint, vec2 texCoord, float radius, vec2 texSize)
{
vec2 pos = texCoord;
vec2 newSrc = prePoint * texSize;
vec2 newDst = curPoint * texSize;
vec2 newTex = texCoord * texSize;
float newRadius = radius;
float r = distance(newSrc, newTex);
if (r < newRadius)
{
float alpha = 1.0 - r / newRadius;
vec2 displacementVec = (newDst - newSrc) * pow(alpha, 2.0) * 0.002 * u_reshapeRatio;
pos = (newTex - displacementVec) / texSize;
}
return pos;
}
void main() {
vec2 leftPreCtrl = u_preCtrlPoints.xy;
vec2 rightPreCtrl = u_preCtrlPoints.zw;
vec2 leftCurCtrl = u_curCtrlPoints.xy;
vec2 rightCurCtrl = u_curCtrlPoints.zw;
vec2 newTexCoord = face_slender_1(leftPreCtrl, leftCurCtrl, v_texCoord, u_reshapeRadius, u_texSize);
newTexCoord = face_slender_1(rightPreCtrl, rightCurCtrl, newTexCoord, u_reshapeRadius, u_texSize);
outColor = texture(s_TextureMap, newTexCoord);
}
遂に
私はアウトラインを学ぶ私のAndroidのコア技術を囲み、より多くの私のGitHubと遊ぶことを得る:https://github.com/Meng997998/AndroidJX
最近のインタビューの季節はあなたに幸福を与えるために、よくありません:[2017から2019のバイト鼓動インタビューZhenti分析&履歴書ライティングテンプレートPDF]
仕上げを破っバイトフェイス質問については、ジェーンに簡単にから、綿密に基本から、段階的に分類しました。
5章、基本的なコンピュータの顔の質問への議論の内容は、質問には、データ構造とアルゴリズム、Javaのインタビューの質問、Androidのインタビューの質問、面接の質問他の拡張機能、5非技術的な質問部354の合計を表面。
それぞれの問題は、(実際には、多くの時間を費やした)試行錯誤消化され、それが答えとして記事を書くために良い感じ参照標準解答を伴っています。
保存時間、我々はすべての正しいことに費やさ検索、時間に行きます。。
また、他の人にメリットが解決リファレンス提案に再開ライティング、混乱春の募集、人事面接やその他の問題の完全なセットをしている仕上げ。