游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4990|回复: 12

[求助]关于GLSL中varing变量的问题

[复制链接]

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
发表于 2006-8-15 00:26:00 | 显示全部楼层 |阅读模式
      我写的EnvMap反射的例子总是运行时没有效果, debug后发现是在Fragment Shader的代码链接时出的错(即链接时的返回值为false), Vertex Shader的代码编译和链接都能通过,
Fragment Shader的代码编译可以通过, 就链接时出错.

      经过测试我发现问题出在代码中的几个varing变量的身上, 据书上说varing变量是有VS向FS传递数值用的, 使用的时候在VS中的main函数之前定义, 如varing vec3 Normal.  在FS中的main函数之前也要声明一下varing vec3 Normal, 然后就可以在FS的程序中使用从VS传过来的值了.

      请问是这样吗? 我是这样写的, 但是链接会出错. 当我把FS中所有varing变量屏蔽掉,或者换成FS的main函数中定义的局部变量时, 编译就能通过了,而且运行也正确. 只要包含varing变量(任何一个)就出错. 如: vec3 reflectvector = reflect(Normal, eyeDir);

      请问这是怎么回事? 是不是定义varing时还有什么其他的要求?

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
 楼主| 发表于 2006-8-15 00:33:00 | 显示全部楼层

Re:[求助]关于GLSL中varing变量的问题

请问谁有实现类似功能的例子(只要包括VS和FS的代码, 而且代码中有varing变量), 可否给我一份源码,最好有OpenGL应用程序部分的代码,我怀疑是不是使用varing时还要在外部程序做什么工作才行.
可以直接传给我或给出下载地址.
谢谢了.

my email:  luanzun1984@sina.com


32

主题

1259

帖子

1351

积分

金牌会员

Rank: 6Rank: 6

积分
1351
发表于 2006-8-15 09:49:00 | 显示全部楼层

Re:[求助]关于GLSL中varing变量的问题

在VS中定义为varying的变量,传递到PS会插值实现。

定义varying就几条规则的,我也不记得了。

具体参看 OpenGL Shading Language 一书。

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
 楼主| 发表于 2006-8-15 16:05:00 | 显示全部楼层

Re: [求助]关于GLSL中varing变量的问题

高手帮忙看一下这个代码有问题吗?
请问这个是不是和显卡有关, 我的显卡是ATI Radeon 9800的, 该不是这块显卡不支持使用varying吧?

sf_200681516526.zip

1011 Bytes, 下载次数:

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2006-8-16 10:23:00 | 显示全部楼层

Re:[求助]关于GLSL中varing变量的问题

单看没问题
你最好放出全部分代码

32

主题

1259

帖子

1351

积分

金牌会员

Rank: 6Rank: 6

积分
1351
发表于 2006-8-16 15:34:00 | 显示全部楼层

Re:[求助]关于GLSL中varing变量的问题

在VS,PS中,varying变量都要声明一次。

This varying variable contains the interpolated value for the light intensity that we computed at each vertex in our vertex shader. Note that both of the varying variables in our fragment shader are defined with the same type that was used to define them in our vertex shader. A link error would be generated if this were not the case.

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2006-8-16 17:44:00 | 显示全部楼层

Re:[求助]关于GLSL中varing变量的问题

在我机器上是好的。
GF7400

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
 楼主| 发表于 2006-8-16 20:46:00 | 显示全部楼层

Re:[求助]关于GLSL中varing变量的问题

"Varying Normal read in fragment shader, but not written to in vertex shader.
Link failed."

这是出错时弹出的出错信息, 看来是在VS中没有能赋上值, 汗~
看来似乎是我外部的OpenGL应用程序写的有问题.

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
 楼主| 发表于 2006-8-16 20:48:00 | 显示全部楼层

Re:[求助]关于GLSL中varing变量的问题

该不是还有什么东西没有enable吧? Vertex shader 和 Fragment shader我都enable了, 连光照都enable了. 还忘掉了什么吗?

29

主题

157

帖子

163

积分

注册会员

Rank: 2

积分
163
 楼主| 发表于 2006-8-16 23:16:00 | 显示全部楼层

Re:[求助]关于GLSL中varing变量的问题

今天晚上突然在<<OpenGL SuperBible, Third Edition>>的最后一章的最后一节发现一个包含VS和FS的例子, 而且可敬的作者竟然给出了源码下载链接, 我把人家的代码和我的比了一下,大致发现问题出在哪里了,

人家的例子里是把VS和FS的代码分别放到两个Shader Object 里进行Compile
然后把两个编译好的obj文件绑定到一个Program Object里面进行Link...

而我是先把VS放到一个Shader Object 里进行Compile, 然后放到一个Program Object里面进行Link;
接着再把FS放到一个Shader Object 里进行Compile, 然后放到另外一个Program Object里面进行Link;

所以varying值传不过去.

看来当初光想着做出来进行,没有用心去思考, 现在仔细想想, 我们编译链接程序的时候不就是把很多.c或cpp(当然其他语言也是如此)分别进行编译, 然后link成一个exe程序吗?

唉~ 伤自尊了...

抓狂~ 竟然是这种错误~ 目前面壁中......
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 03:44

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表