效果:
//頂點
invec4 mcvertex;
//法線
invec3 mcnormal;
//懷疑這些以osg_打頭的都是osg的內建變數
invec3 osg_simulationtime;
uniform mat4 osg_modelviewmatrix;
uniform mat4 osg_modelviewprojectionmatrix;
uniform mat3 osg_normalmatrix;
//光照位置
uniform vec3 lightposition ;
//鏡面光強度
const
float specularcontribution = 0.3
;
//散射光強度
const
float diffusecontribution = 1.0 -specularcontribution;
//光照強度值
outfloat
lightintensity;
//頂點的x,y值
outvec2 mcposition;
void
main()
lightintensity = diffusecontribution * diffuse + specularcontribution *spec;
mcposition =mcvertex.xy;
gl_position = osg_modelviewprojectionmatrix *mcvertex;
}
shader.fs:
#version 140main.cpp//轉的顏色 和 磚縫的顏色
uniform vec3 brickcolor = vec3(0,1,0), mortarcolor = vec3(1,0,0
);
//轉的長和寬
uniform vec2 bricksize = vec2(0.3,0.15
);
//磚的寬和高相對於磚縫的寬和高之間的比例
uniform vec2 brickpct = vec2(0.9,0.85
);
//頂點的x、y
invec2 mcposition;
//光照強烈度
infloat
lightintensity;
//片元顏色
outvec4 fragcolor;
void
main()
else
color *=lightintensity;
fragcolor = vec4(color, 1.0
);
}
#include #include下面的main.cpp新增了一些與shader無關的東西,在上面的main.cpp中我拿掉了,並把shader提出去了,看著頭疼。#include
#include
#include
osg::ref_ptr
lightpos;
class mynodevisitor : public
osg::nodevisitor
virtual
}};int
main()
main.cpp
#include #include#include
#include
#include
static
char * vertexshader =\n""
lightintensity = diffusecontribution * diffuse + specularcontribution * spec;\n""
mcposition = mcvertex.xy;\n""
gl_position = osg_modelviewprojectionmatrix * mcvertex;\n""
} \n"};
static
char * fragshader =else \n""
color *= lightintensity;\n""
fragcolor = vec4(color, 1.0);\n""
}\n"
};osg::ref_ptr
lightpos;
class mynodevisitor : public
osg::nodevisitor
virtual
}};class lightposcallback : public
osg::uniform::callback
virtual
void
operator()(osg::uniform* uniform, osg::nodevisitor*nv)
};osg::ref_ptr
createlight()
class keyboardeventhandler : public
osgga::guieventhandler
virtual
bool handle(const osgga::guieventadapter& ea, osgga::guiactionadapter&)
if (ea.getkey() == '
y')//
繞y軸旋轉
if (ea.getkey() == '
z')//
繞z軸旋轉}}
return
false
; }
};int
main()
彩色的磚塊
小易有一些彩色的磚塊。每種顏色由乙個大寫字母表示。各個顏色磚塊看起來都完全一樣。現在有乙個給定的字串s,s中每個字元代表小易的某個磚塊的顏色。小易想把他所有的磚塊排成一行。如果最多存在一對不同顏色的相鄰磚塊,那麼這行磚塊就很漂亮的。請你幫助小易計算有多少種方式將他所有磚塊排成漂亮的一行。如果兩種方式...
Shader 各種Shader效果的合集
1.the fresnel effect 參考 實用的shader shader heroshader character a通道標記陣營區域,1 表示有陣營顏色區域,0 表示非陣營顏色區域 emission emission range 0,1 0 自發光 shadowlevel shadow l...
程式設計題 彩色的磚塊
小易有一些彩色的磚塊。每種顏色由乙個大寫字母表示。各個顏色磚塊看起來都完全一樣。現在有乙個給定的字串s,s中每個字元代表小易的某個磚塊的顏色。小易想把他所有的磚塊排成一行。如果最多存在一對不同顏色的相鄰磚塊,那麼這行磚塊就很漂亮的。請你幫助小易計算有多少種方式將他所有磚塊排成漂亮的一行。如果兩種方式...