查看: 2587|回复: 5

GLSL中的矩阵运算

[复制链接]

该用户从未签到

发表于 2011-1-25 13:35:57 | 显示全部楼层 |阅读模式
问题是这样的,现在想在GLSL中把顶点转换到某投影矩阵下,比如

该用户从未签到

 楼主| 发表于 2011-1-25 13:36:34 | 显示全部楼层
osg::MaTrix viewMatrix;

该用户从未签到

 楼主| 发表于 2011-1-25 13:41:36 | 显示全部楼层
viewMatrix.makeLookAt(......);
osg::Matrix proMatrix;

然后用unifrom mat4 把这个两个变量传递进glsl

vec4 pro=proMatrix*viewMatrix*osg_InverseViewMatrix*gl_ModelViewMatrix*gl_Vertex;

vec4 pro1=pro/pro.w;

这样就求了了(-1)--1的标准坐标

pro1=pro1*0.5+0.5;

就把坐标从-1-1 变为0-1.

输出pro1.x  pro1.y  pro1.z

发现X Y 是正确的  可是Z得值恒为1

上面的投影矩阵和视图矩阵应该是没问题的。。。

该用户从未签到

发表于 2011-1-26 08:20:29 | 显示全部楼层
您应该给出上述各个步骤的实现过程和代码,有可能您的计算过程正确,但是输出方式有问题

该用户从未签到

 楼主| 发表于 2011-1-26 10:09:05 | 显示全部楼层
viewMatrix 是这样定义的viewMatrix.makeLookAt(osg::vec3d(0,0,1000),osg::vec3d(0,0,0),osg::Vec3d(0.0,1.0f,0.0f));
proMatrix  是这样定义的proMatrix.makePerspective(30.0f,1.0f,0.1f,10000.0f);

然后就是用unifrom 把这两个变量传递进去。

输出的话是这样的:
因为当前的这个使用shader的图形是一个四边形,并且在场景的中央,所以,我就把得到的pro1.x,pro1.y当做是纹理坐标,然后贴图,发现,正好能贴到一个图的中心部分,差不多是吻合的,vec4 mapColor=texture2D(ShadowTexture,pro1.xy);
输出这个颜色的话,感觉上是正好取了相关的位置了,
然后我再输出pro1.z  即glFragColor=pro1.z  当前的这个四边形图形的颜色就全部为白色了,
然后,我又输出gl_FragColor=pro1.z/10.0f;  输出颜色就全是黑色了。。就是这样了。。。

并且,我在这个投影下,渲染到纹理,把场景输出到纹理,发现四边形也是包含在场景中的。。位置关系应该是正常的。

该用户从未签到

发表于 2011-1-26 12:20:40 | 显示全部楼层
您的解释让我完全不知道您在做什么;此外那么多的“差不多”,“大概”,“应该”,这些也完全不能作为判断的依据……如果您想有效地解决问题,请提供足够简短的能说明问题的代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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