matlab分形山脉,shadertoy的一款分形山脉

在 shadertoy.com 上发现一款挺不错的分形山脉, 改写到 Codea 中, 代码如下:

function setup()

parameter.watch("1/DeltaTime")

local tex1 = readImage("Dropbox:3D-grass2")

m1 = mesh()

m1.shader=shader(f.vs,f.fs)

m1.shader.iResolution = vec3(1000,1000,100)

m1.shader.iChannel0 = tex1

m1:addRect(WIDTH/2,HEIGHT/2,WIDTH/1,HEIGHT/1)

end

function draw()

m1.shader.iGlobalTime = ElapsedTime

m1:draw()

end

f = {

vs = [[

uniform mat4 modelViewProjection;

attribute vec4 position;

attribute vec4 color;

attribute vec2 texCoord;

//This is an output variable that will be passed to the fragment shader

varying lowp vec4 vColor;

varying highp vec2 vTexCoord;

void main()

{

//Pass the mesh color to the fragment shader

vColor = color;

vTexCoord = texCoord;

//Multiply the vertex position by our combined transform

gl_Position = modelViewProjection * position;

}

]],

fs = [[

// from https://www.shadertoy.com/view/llsGW7#

precision highp float;

uniform lowp sampler2D texture;

uniform vec3 iResolution; // viewport resolution (in pixels)

uniform float iGlobalTime; // shader playback time (in seconds)

uniform lowp sampler2D iChannel0; // input channel. XX = 2D/Cube

#define F +texture2D(iChannel0,.3+p.xz*(s+=s)/6e3,-99.)/s

void main()

{

vec4 p=vec4(gl_FragCoord.xy/iResolution.xy,1,1)-.5, d=p*.5, t;

p.z += iGlobalTime*20.; d.y-=.2;

for(float i=1.7;i>=0.;i-=.002)

{

float s=.5;

//t=F+F+F+F+F+F;

t = F F F F F F;

/*

t+= texture2D(iChannel0,.3+p.xw*s/6e3,-99.)/s;s+=s;

t+= texture2D(iChannel0,.3+p.xw*s/6e3,-99.)/s;s+=s;

t+= texture2D(iChannel0,.3+p.xw*s/6e3,-99.)/s;s+=s;

t+= texture2D(iChannel0,.3+p.xw*s/6e3,-99.)/s;s+=s;

t+= texture2D(iChannel0,.3+p.xw*s/6e3,-99.)/s;s+=s;

t+= texture2D(iChannel0,.3+p.xw*s/6e3,-99.)/s;s+=s;

*/

gl_FragColor = vec4(1,.9,.8,9)+d.x-t*i;

if(t.x>p.y*.01+1.3)break;

p += d;

}

}

]]

}

结果发现FPS太低, 居然比不上 WebGL下的帧速, 正在分析原因, 显示效果:

17b101602bb92399a0001b11c584895d.png

shadertoy 用的纹理:

03823cafcaa306d5ece2b5b59ff62797.png

shadertoy 中的效果:

29a37e57ec073ed7538ad33e88c77f2e.png

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值