游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2044|回复: 7

新手问个问题关于shader

[复制链接]

23

主题

47

帖子

47

积分

注册会员

Rank: 2

积分
47
发表于 2009-4-10 16:03:00 | 显示全部楼层 |阅读模式
说DX9里面无法在pixel shader里面读取深度缓冲?只有在DX10里面才是,不知道这对不对。
另外如果是这样的话,在vertex shader里面得到一个顶点的pos保存为一个纹理,然后在pixel shader里面读取这个纹理,这时候不是可以取得深度信息么?不太明白,希望大家解惑,谢谢了

14

主题

156

帖子

158

积分

注册会员

Rank: 2

积分
158
QQ
发表于 2009-4-10 16:42:00 | 显示全部楼层

Re:新手问个问题关于shader

这是2个PASS。。。呵呵

23

主题

47

帖子

47

积分

注册会员

Rank: 2

积分
47
 楼主| 发表于 2009-4-10 17:52:00 | 显示全部楼层

Re:新手问个问题关于shader

我写错了。。可能是概念不清,在一个PASS里面vertex里面的输出结构一个语义为POSITION的float4数据,然后传给pixel shader的输入结构,然后那里面的POSITION的float4数据中的w不就是屏幕所显示点投影前的深度么?另外这句话对不对啊,我是这么理解的关于图形学中的w的意义,不晓得对不对,w不是反应z深度,而是w就是投影前的z值。。谢谢大家了

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2009-4-10 19:51:00 | 显示全部楼层

Re:新手问个问题关于shader

传给pixel shader的position是投影后的坐标,z分量是深度。说读不到深度信息,不是指vertex shader传来的当前要渲染的像素的深度,而是不能直接读zbuffer里的深度值。

14

主题

156

帖子

158

积分

注册会员

Rank: 2

积分
158
QQ
发表于 2009-4-10 20:10:00 | 显示全部楼层

Re:新手问个问题关于shader

当前顶点或片段的深度当然是知道的啦,不过,仅仅知道这个深度用处不大。

一般来说,知道zbuffer里的深度(或者说整个场景中该处的最终深度),才是比较有用的。。。

14

主题

156

帖子

158

积分

注册会员

Rank: 2

积分
158
QQ
发表于 2009-4-10 20:11:00 | 显示全部楼层

Re:新手问个问题关于shader

嗯~w就是视空间中的深度~

23

主题

47

帖子

47

积分

注册会员

Rank: 2

积分
47
 楼主| 发表于 2009-4-15 09:24:00 | 显示全部楼层

Re: Re:新手问个问题关于shader

liuzewei: Re:新手问个问题关于shader

当前顶点或片段的深度当然是知道的啦,不过,仅仅知道这个深度用处不大。

一般来说,知道zbuffer里的深度(或者说整个场景中该处的最终深度),才是比较有用的。。。

哦,是这样啊,谢谢了,参数默认情况下,zbuffer里面的存储的就是处于最前面的点的深度?,那这个值不就是pixel shader里面的w么?3q

1

主题

3

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2009-4-15 11:12:00 | 显示全部楼层

Re:新手问个问题关于shader

struct VS_OUT
{
  float4 Pos: POSITION;
  ...
  float4 ProjPos: TEXCOORDx
};

VS_OUT VS(....)
{
  ...
  Out.ProjPos = Out.Pos/Out.Pos.w; // 这里Out.Pos已经经过MVP变换了。
  return Out;
}

float4 PS(VS_OUT In)
{
  In.ProjPos.z//就是像素的深度了
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 15:46

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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