查看: 27759|回复: 53

[源码]使用GLSL实现的海洋效果

[复制链接]

该用户从未签到

发表于 2008-5-24 17:00:43 | 显示全部楼层 |阅读模式
虽说自己原创的部分并不算多,不过总算是调试通过了,中间有多次严重的死机……估计该换新显卡了~~不过最后的效果还蛮不错?

实现海洋平面的GLSL源代码来自:http://emiug.alanabram.co.uk,感觉他的代码比Bonzai公司的要简单些(后者需要水面纹理的反射/散射/法线/深度/Dudv贴图,3DVRI实现的水面效果好像也与之类似)。不过我个人还是GLSL的初学者,没资格多评论~~

OSG程序中,注意所需的uniform变量包括:LightPos,time,normalMap和cubeMap。后两者属于纹理采样器,在OSG中需要使用
osg::Uniform( "normalMap", 0 )和osg::Uniform( "cubeMap", 1 ) 来指定纹理采样器对应的纹理单元,同时使用setTextureAttributeAndModes在对应的纹理单元设置正确的贴图图样。

至于海洋效果的实现,应该说属于数学范畴吧~~大家不妨从附件的代码中了解一二。
使用GLSL可以实现许多让人瞠目结舌的三维特效,可惜现在国内这方面的研究资料这好像同样很少,相关书籍也只有翻译的《OpenGL Shading Language》一本,希望能有更多的朋友分享自己的经验和成果。就像这位与我们并不相识的Alan ABram一样~~



[ 本帖最后由 array 于 2008-5-24 20:11 编辑 ]

myOcean.rar

305.23 KB, 下载次数: 3318, 下载积分: 威望 1

该用户从未签到

发表于 2008-5-24 18:21:39 | 显示全部楼层
楼主,怎么没看到附件啊

该用户从未签到

 楼主| 发表于 2008-5-24 18:38:26 | 显示全部楼层
我也很想发……不过服务器的龟速根本接受不了附件嘛……晚些再想想办法

该用户从未签到

发表于 2008-5-24 20:54:25 | 显示全部楼层
学习学习,呵呵~~~~~~~~~~~~
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-5-26 09:44:49 | 显示全部楼层
    原帖由 array 于 2008-5-24 18:38 发表
    我也很想发……不过服务器的龟速根本接受不了附件嘛……晚些再想想办法


    怎精僻二字了得

    该用户从未签到

    发表于 2008-5-26 11:23:50 | 显示全部楼层
    我在执行程序的时候出现错误了,就是在shader这里,不知道什么原因


    应该不会的吧,我试了,没问题的~~~~~是不是你的显卡不支持啊~~

    该用户从未签到

    发表于 2008-5-26 16:03:12 | 显示全部楼层
    array,能不能给讲解一下,为什么要用GLSL,也就是GLSL到底能做什么,优点等等@!

    该用户从未签到

     楼主| 发表于 2008-5-26 18:44:25 | 显示全部楼层
    原帖由 zhangyi 于 2008-5-26 16:03 发表
    array,能不能给讲解一下,为什么要用GLSL,也就是GLSL到底能做什么,优点等等@!


    OpenGL Shading Language,也就是着色语言。简单说来就是使用用户自己编写的代码替换原有的OpenGL顶点坐标和片元处理流水线,从而实现多种具有特色的效果,例如卡通,凹凸贴图,光线跟踪等各种特殊效果,只要你的数学功底过硬就成。
    一些十分有特色的例子可以参照:
    http://www.bonzaisoftware.com/
    有些效果是十分让人眼馋的,不过他们不附带C语言的源码

    该用户从未签到

     楼主| 发表于 2008-5-26 18:45:06 | 显示全部楼层
    原帖由 klch0623 于 2008-5-26 14:29 发表
    难道这个显卡要DX10的?


    需要支持OpenGL 2.0,与D3D无关

    该用户从未签到

    发表于 2008-5-26 18:49:54 | 显示全部楼层
    现在都逐渐慢慢走向GPU渲染的道路了~~~~~ :lol :lol

    该用户从未签到

    发表于 2008-5-27 20:58:04 | 显示全部楼层
    纠正一下楼主的一个小错哈

    fragment shader里面第21,22行代码
    texture2D(normalMap, gl_TexCoord[1])
    应该为
    texture2D(normalMap, gl_TexCoord[1].st)
    不然很多显卡都不能编译通过。。
  • TA的每日心情

    1573439774
  • 签到天数: 2 天

    发表于 2008-5-28 00:06:34 | 显示全部楼层
    不错哟,我正大量应用Shader做体渲染呢,呵呵,初有成就,哈哈
  • TA的每日心情

    1573439774
  • 签到天数: 2 天

    发表于 2008-5-28 00:07:29 | 显示全部楼层
    另外可以大量的看看NVIDIA的SDK,里面有很多的相关例子。当然很多例子都是cg或者hlsl的。看以后将osgNV升级以便支持现在的最新调试工具。

    该用户从未签到

    发表于 2008-5-28 15:31:31 | 显示全部楼层
    hesicong斑斑能否贴一个shader做体渲染的demo出来呢?
    小弟最近也要做这个,可是摸不着头脑,正需要师父领进门啊。

    该用户从未签到

     楼主| 发表于 2008-5-28 18:33:55 | 显示全部楼层
    原帖由 gazzterran 于 2008-5-27 20:58 发表
    纠正一下楼主的一个小错哈

    fragment shader里面第21,22行代码
    texture2D(normalMap, gl_TexCoord[1])
    应该为
    texture2D(normalMap, gl_TexCoord[1].st)
    不然很多显卡都不能编译通过。。


    呵呵,谢啦~~

    该用户从未签到

    发表于 2008-5-29 13:35:33 | 显示全部楼层
    群众纷纷表示 :

    14楼是大好人

    楼主是坏人 强烈要求添加每行注释
  • TA的每日心情

    1573439774
  • 签到天数: 2 天

    发表于 2008-6-2 23:15:34 | 显示全部楼层
    原帖由 soda 于 2008-5-28 15:31 发表
    hesicong斑斑能否贴一个shader做体渲染的demo出来呢?
    小弟最近也要做这个,可是摸不着头脑,正需要师父领进门啊。

    呵呵,这个原理很简单,但是要让马儿吃得少,跑得快,那可不简单……

    该用户从未签到

    发表于 2008-6-12 15:14:58 | 显示全部楼层
    呵呵,cg做的shader似乎只能用于NV的显卡,完了,俺的程序卖不了了

    该用户从未签到

    发表于 2008-8-20 13:17:10 | 显示全部楼层

    救火拉

    谢谢老王

    该用户从未签到

     楼主| 发表于 2008-8-21 09:12:30 | 显示全部楼层
    原帖由 klch0623 于 2008-8-21 08:56 发表
    问下版主,代码里的normalmap是取的什么值?谢谢!


    看我的OSG源代码就知道了:是水面的法线贴图,也就是water.bmp

    该用户从未签到

     楼主| 发表于 2008-8-21 10:00:41 | 显示全部楼层
    原帖由 klch0623 于 2008-8-21 09:55 发表
    嗯,刚刚看出来了,那这个水面贴图怎么绑定到所建立的四个点的呢?


    看源代码中的createPlane函数

    该用户从未签到

    发表于 2008-10-10 10:49:55 | 显示全部楼层
    OSG支持Opengl+GLSL,但支持Cg吗?

    该用户从未签到

    发表于 2009-3-2 09:16:07 | 显示全部楼层

    学习一下!

    学习一下!

    该用户从未签到

    发表于 2009-3-2 16:46:28 | 显示全部楼层

    再次感谢array版主

    编译了一下,效果出来了,真的很不错!

    该用户从未签到

    发表于 2009-3-12 14:54:51 | 显示全部楼层
    感谢楼主,也感谢14楼

    该用户从未签到

    发表于 2009-3-16 12:30:52 | 显示全部楼层
    学习一下!!!以后肯定要用到!

    该用户从未签到

    发表于 2009-3-16 21:16:15 | 显示全部楼层
    请问如何将其叠加到dem生成的有海面的三维地形上?

    该用户从未签到

     楼主| 发表于 2009-3-16 21:30:05 | 显示全部楼层
    没有什么特殊的注意事项吧?只要保证海面和其它的地形对象独立就可以,然后把Program渲染状态设置给海面节点
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2009-7-11 18:54:26 | 显示全部楼层
    把这个老帖再顶起来吧,建议大家装一个RenderMoney,看一下里面的所有例子,定有所大获

    该用户从未签到

     楼主| 发表于 2009-7-11 22:56:28 | 显示全部楼层
    FreeSouth能找到免费的RenderMonkey?我曾经想试一试,但是看了一眼开发版的价格……就骂着街退缩了
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    OSG中国官方论坛-有您OSG在中国才更好

    网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

    联系我们

    • 工作时间:09:00--18:00
    • 反馈邮箱:1315785073@qq.com
    快速回复 返回顶部 返回列表