Шукати в цьому блозі

Normal map шейдер для кількох джерел світла


було

стало


ps.glsl
-------------------------------------------------------------------------------------------
uniform lowp sampler2D g_Texture;
uniform lowp vec4 g_Color;
// вказати кількість джерел
#define NUM_LIGHTS 2
uniform mediump vec4 lightPos[NUM_LIGHTS];

varying highp vec2 texCoord;
varying mediump vec2 position;




void main()
{

// Візьміть основний піксельний колір із класичної текстури
lowp vec3 color0 = texture2D(g_Texture, texCoord).rgb;

//Встановіть specular (тобто 'блиск') 30% сірий
lowp vec3 color1 = vec3(0.3, 0.3, 0.3);

//-Convert RGB (range 0->1) to XYZ (range -1 -> 1)
// Візьміть звичайний вектор з правої частини текстури:
// - Відставити на 0.5 праворуч у нормалізованих координатах (1 = повна ширина текстури)
// - Перетворити RGB (діапазон 0-> 1) у XYZ (діапазон -1 -> 1)
mediump vec3 normal = texture2D(g_Texture, texCoord + vec2(0.5, 0.0)).rgb * 2.0 - 1;

lowp vec3 lightContributions=vec3(0,0,0);
int index;
for (index = 0; index < NUM_LIGHTS; index++) // вказати кількість джерел світла
{
//Обчисліть напрямок світла, припускаючи відстань світла 150 одиниць
mediump vec3 lightDir = normalize(vec3(lightPos[index].xy, 150) - vec3(position.xy, 0));


/// Обчисліть напрямок світла так, ніби світло було в два рази далі (for specular)
mediump vec3 halfdir = normalize(normalize(lightDir) + vec3(0, 0, 1));

//Обчисліть дифузний коефіцієнт: normal і lightDir colinear -> 1, perpendicular -> 0
lowp float diff = max(0.0, dot(normal, lightDir));

//Оцініть specular фактор так само, але з експоненціальною шкалою
mediump float nh = max(0.0, dot(normal, halfdir));
mediump float spec = pow(nh, 10.0);


lightContributions=lightContributions+ (color0 * diff + color1 * spec);
}
gl_FragColor = g_Color * vec4(lightContributions.rgb, 1);

}

//-=========================================================
--Lua код


local effect = Shader.new("vs","ps",0,
{
{name="g_MVPMatrix",type=Shader.CMATRIX,sys=Shader.SYS_WVP, vertex=true},
{name="g_Color",type=Shader.CFLOAT4,mult=1,sys=Shader.SYS_COLOR},
{name="lightPos",type=Shader.CFLOAT4,mult=2,vertex=false}, --Two lights
{name="g_Texture",type=Shader.CTEXTURE,mult=1,vertex=false}
},
{
{name="POSITION0",type=Shader.DFLOAT,mult=3,slot=0,offset=0},
{name="vColor",type=Shader.DUBYTE,mult=0,slot=1,offset=0},
{name="TEXCOORD0",type=Shader.DFLOAT,mult=2,slot=2,offset=0}
})

effect:setConstant("lightPos", Shader.CFLOAT4, 2, x, y,0,0,y, x,0,0) --// 2 джерела і їх координати


обрізка спрайту по масці Gideros Lua

local maska = Bitmap.new(Texture.new("img/ticket.png"))
local sprite = Bitmap.new(Texture.new("img/flag.png"))
 
stage:addChild(maska)
stage:addChild(sprite) 
sprite:setPosition(0,80)
--ticket:setVisible(false)
-- 1) Clear stencil and set it to '1' for every pixel drawn on 'ticket'
maska:setStencilOperation{
 --stencilClear = true, 
 --stenciMask = 1, 
 stencilWriteMask = 1, 
 stencilRef = 1,
 stencilFunc = Sprite.STENCIL_ALWAYS, 
 depthPass = Sprite.STENCIL_REPLACE
}
--2) Only draw fx1/fx2 if stencil isn't 0
sprite:setStencilOperation{
 stencilClear = false, 
 stencilMask = 1, 
 stencilRef = 0,
 stencilFunc = Sprite.STENCIL_NOTEQUAL
}

тестові ключі для ADMOB-ГУГЛ

  Важливо включити тестові ключі реклами під час розробки, щоб ви могли натискати на рекламу, не псуючи статистику для рекламодавців Google. Якщо ви натиснете рекламу, не в тестовому режимі , ви ризикуєте що гугл забанить ваш акаунт.

*** перевірте актуальність кодів на https://developers.google.com/admob/android/test-ads

smart_banner,
Banner 
ca-app-pub-3940256099942544/6300978111
Interstitial-міжсторінкова ca-app-pub-3940256099942544/1033173712
Interstitial Videoca-app-pub-3940256099942544/8691691433
Rewarded Videoca-app-pub-3940256099942544/5224354917
Native Advancedca-app-pub-3940256099942544/2247696110
Native Advanced Videoca-app-pub-3940256099942544/1044960115

 


--require plugin
require "ads"

--initialize admob
admob = Ads.new("admob")
admob:setKey("admob-key")
admob:enableTesting() --тестовий режим
--show admob
admob:showAd("smart_banner","ca-app-pub-3940256099942544/6300978111")  --тестовий банер
 
 
admob:addEventListener(Event.AD_FAILED, function(e)
 print("admob AD_FAILED", e.error)
end)