黎明的剔透里伸出了你沁清的暧昧
Graphics|EngineDev|GameDev|2D&3D Art
C++博客
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
60 随笔 :: 1 文章 :: 18 评论 :: 0 Trackbacks
公告
Please feel free to reach me through email: crazyinit(at)gmail(dot)com, this is the preferred way.
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(3)
给我留言
查看公开留言
查看私人留言
随笔分类
(83)
Coding(25)
(rss)
Documents(8)
(rss)
Graphics(44)
(rss)
Projects(5)
(rss)
SoftwareEngine(1)
(rss)
文章档案
(1)
2013年11月 (1)
相册
图片
Link
atyuwen
benjamin
ccanan
cnblogs
courses
cwyman
defrostgames
devmaster
encelo
gamasutra
GD
gdconf
gdcvault
glslDevil
gongminmin
GPUTutrial
lousodrome
mindhacks
mynameismjp
OSG
P-B A
popy007
rastergrid
selfshadow
simonstechblog
songho
terathon
WGGPU
搜索
最新评论
1. re: GLSL.Projective Texture Mapping
评论内容较长,点击标题查看
--www.czgo.net
2. re: 数据库数据转换
评论内容较长,点击标题查看
--www.czgo.net
3. re: 数据库数据转换
评论内容较长,点击标题查看
--zhongjing
4. re: GLSL.Projective Texture Mapping
如果方便的话,我的邮箱是lacp7723413@163.com
--Zi_菜
5. re: GLSL.Projective Texture Mapping
您好,我想看看实例的代码,请问可以给我一份么?
--Zi_菜
6. re: Gamma Correction
谢谢你的劳动
--tzzhwj
7. re: GLSL.Cook Torrance Model
评论内容较长,点击标题查看
--情绝格调(fresmaster)
8. re: GLSL.Cook Torrance Model
评论内容较长,点击标题查看
--杯具Graphic
9. re: GLSL.Simplified Uberlight Lighting
@Lynn Zhang
QQ需要验证
--情绝格调(crazyinit)
10. re: GLSL.Simplified Uberlight Lighting
你好,我在做的内容跟你有点像,也想跟你探讨一下~如果方便的话请加我QQ,261673157~谢谢~
--Lynn Zhang
阅读排行榜
1. OpenGL.Vertex Array Object (VAO).(17279)
2. c# Newtonsoft.Json(11788)
3. OpenGL.FrameBuffer Object (11466)
4. GLSL. 语法基础(9168)
5. OpenGL.Stencil Buffer(4940)
评论排行榜
1. 基于OpenGL写的一个小系统_模拟高速公路单车检测仿真(6)
2. GLSL.Projective Texture Mapping(3)
3. GLSL.Simplified Uberlight Lighting(3)
4. GLSL.Cook Torrance Model(2)
5. 数据库数据转换(2)
GLSL.Projective Texture Mapping
Projective Texture:shadow的基础 在fixed function pipline中启动自动生成贴图坐标功能后,用object linear模式或者eye linear模式来设置纹理参数,
这样就可以把纹理从眼睛的观察方向投射到场景中去,如果要从光源方向投射纹理,就要使用glActiveTextureARB首先把那一层的纹理单元激活,然后载入光源方向的透视观察矩阵,最后别忘了glEnable(GL_TEXTUREn_ARB).
在shader中我们可以简化这些操作:
投影纹理映射真正的流程是 “ 根据投影机(视点相机)的位置、投影角度,物体的坐标,求出每个顶点所对应的纹理坐标,然后依据纹理坐标去查询纹理值 ” ,也就是说,不是将纹理投影到墙上,而是把墙投影到纹理上。投影纹理坐标的求得,也与纹理本身没有关系,而是由投影机的位置、角度,以及 3D 模型的顶点坐标所决定
.projtexcoord=偏移矩阵 * 光源投影矩阵 * 光源观察矩阵 * 建模矩阵 (
Cg Tutorial
)
这个流程和一般我们渲染时的管线差不多
NDC的范围为[-1,1],而纹理坐标是[0,1],所以我们要有一个偏移矩阵,可以用乘以0.5再加上0.5来计算,效果是一样的。
在shader上实现没有使用fixed function pipline那样繁琐,使用前面已经用到的
Bank BRDF anisotropy
光照来渲染
Vertex Shader:
1
uniform vec3 lightposition;
2
uniform vec3 eyeposition;
3
uniform mat4 texMatrix;
4
varying
float
NdotL, NdotH, NdotV, VdotH, LdotT, VdotT;
5
varying vec4 projtexcoord;
6
void
main(
void
)
{
7
8
vec3 objPosition
=
vec3 (gl_ModelViewMatrix
*
gl_Vertex);
9
vec3 Normal
=
normalize (gl_NormalMatrix
*
gl_Normal);
10
vec3 LightDir
=
normalize (lightposition
-
objPosition);
11
vec3 EyeDir
=
normalize (eyeposition
-
objPosition);
12
vec3 HalfVec
=
normalize (LightDir
+
EyeDir);
13
14
vec3 TangVec
=
normalize(cross(Normal, EyeDir));
15
16
NdotL
=
max(dot(Normal, LightDir),
0.0
);
17
LdotT
=
max(dot(LightDir, TangVec),
0.0
);
18
VdotT
=
max(dot(EyeDir, TangVec),
0.0
);
19
20
projtexcoord
=
texMatrix
*
vec4(objPosition,
1.0
);
21
projtexcoord
=
0.5
*
(projtexcoord
+
1.0
);
22
23
gl_Position
=
ftransform();
24
}
Frag Shader:
1
uniform vec4 ambient;
2
uniform vec4 DiffuseLightColor;
3
uniform vec4 SpecularLightColor;
4
uniform
float
shininess;
5
uniform sampler2D ProjectiveTexture;
6
varying
float
NdotL, NdotH, NdotV, VdotH, LdotT, VdotT ;
7
varying vec4 projtexcoord;
8
9
float
diff
=
0.1
;
10
float
spec
=
1.0
;
11
void
main(
void
)
{
12
float
sqrt1
=
sqrt(
1.0
-
pow(LdotT,
2.0
));
13
float
sqrt2
=
sqrt(
1.0
-
pow(VdotT,
2.0
));
14
float
Rs
=
sqrt1
*
sqrt2
-
LdotT
*
VdotT;
15
vec3 diffuse
=
diff
*
vec3(DiffuseLightColor)
*
NdotL;
16
float
BRDF
=
spec
*
pow(Rs,shininess);
17
vec3 specular
=
BRDF
*
vec3(SpecularLightColor)
*
NdotL;
18
19
vec4 Color
=
vec4((diffuse
+
specular),
1.0
);
20
Color
=
Color
+
ambient;
21
22
vec4 texcolor
=
texture2DProj(ProjectiveTexture,projtexcoord );
23
24
gl_FragColor
=
Color
*
texcolor;
25
}
effect:
object1:
object2:
object3:
参考:
http://blog.csdn.net/pizi0475/article/details/6714826
http://blog.csdn.net/pizi0475/article/details/6714813
posted on 2012-03-09 03:00
情绝格调(fresmaster)
阅读(4248)
评论(3)
编辑
收藏
引用
所属分类:
Graphics
评论
#
re: GLSL.Projective Texture Mapping
2015-05-05 21:01
Zi_菜
您好,我想看看实例的代码,请问可以给我一份么?
回复
更多评论
#
re: GLSL.Projective Texture Mapping
2015-05-05 21:15
Zi_菜
如果方便的话,我的邮箱是lacp7723413@163.com
回复
更多评论
#
re: GLSL.Projective Texture Mapping
2016-08-11 10:42
www.czgo.net
《环球头条网》www.czgo.net在这里我们为您提供全国各地以及国内外最新的新闻快讯内容、新闻、时事热点新闻,网涵盖了国内外各大报社,包括国内外社会,军事,财经,娱乐,体育,汽车,科技,房产,教育,游戏,旅游,奇闻趣事,美女图库等各个领域多个栏目的新闻资讯。环球头条网是一个全面展现社会万象、人生百态的新闻资讯网。
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
glAlphaFunc in OpenGL ES2.0
Gamma Correction
Hemi-Sphere Lighting
Light Mapping
GLSL.Ambient occlusion
GLSL.High Dynamic Range
GLSL.Depth Of Field
GLSL.Image post-processing
GLSL.Parallax mapping
GLSL.Refract & Reflect & Diffraction
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
Powered by:
C++博客
Copyright © 情绝格调(fresmaster)