游戏开发论坛

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

头痛的vertexshader问题!

[复制链接]

24

主题

161

帖子

179

积分

注册会员

Rank: 2

积分
179
发表于 2004-4-13 08:51:00 | 显示全部楼层 |阅读模式
请看这个vs代码:
vs_1_1
...
dcl c10,1,1,1,0
...
mov od0.xyz,c10.xyz
mov od0.w,r0.w

r0.w是求出的顶点的alpha值,可是不中用,怎么也不能正常工作

主程中已设置
m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, true );
m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND,   D3DBLEND_SRCCOLOR );
m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_DESTCOLOR);
m_pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE,  true );
m_pd3dDevice->SetRenderState( D3DRS_ALPHAREF,   D3DXCOLOR(0.0f,0.0f,0.0f,0));
m_pd3dDevice->SetRenderState( D3DRS_ALPHAFUNC,  D3DCMP_GREATEREQUAL );

现象:顶点远离我的一端始终为全透明状态,靠近我的一端始终为不透明状态,就是将r0.w直接改为c10.w也不行,是不是某地方出错了?
[em4] [em4] [em4] [em4]

3

主题

86

帖子

94

积分

注册会员

Rank: 2

积分
94
QQ
发表于 2004-4-13 08:57:00 | 显示全部楼层

Re:头痛的vertexshader问题!

m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND,   D3DBLEND_SRCALPHA );
m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

试试?

24

主题

161

帖子

179

积分

注册会员

Rank: 2

积分
179
 楼主| 发表于 2004-4-13 09:05:00 | 显示全部楼层

Re:头痛的vertexshader问题!

谢谢楼上的,不过,透明是透明了,可效果完全不是我所需要的,靠近我的顶点将远离我的顶点的颜色过滤了

3

主题

86

帖子

94

积分

注册会员

Rank: 2

积分
94
QQ
发表于 2004-4-13 09:22:00 | 显示全部楼层

Re:头痛的vertexshader问题!

不明白你需要什么效果啊

试试1,1,然后ZTest是Always?

24

主题

161

帖子

179

积分

注册会员

Rank: 2

积分
179
 楼主| 发表于 2004-4-13 10:50:00 | 显示全部楼层

Re:头痛的vertexshader问题!

光带效果,远离我的顶点为不透明,靠近我的顶点为全透明,现在是不论我怎样设oD0的a值(1或0),都是一样,远离我的点为全透明,靠近我的点为不透明,如前所述,即使不用算出来的远离(靠近)点的a值,直接用常量都不成,设成全不透明都不成,主程的
m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND,   D3DBLEND_SRCALPHA );
m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
怎么设定都不成,原先设定cullmode为none,只使用一个三角形list(n个),后改成双面都是逆时针的面(即在反面再画一次四边形),设cullmode为cw,也不行

由于需要旋转,不能将zfunc设为always,否则太难看了

24

主题

161

帖子

179

积分

注册会员

Rank: 2

积分
179
 楼主| 发表于 2004-4-13 10:59:00 | 显示全部楼层

Re:头痛的vertexshader问题!

效果就是:门缝里射出的光带的效果

24

主题

161

帖子

179

积分

注册会员

Rank: 2

积分
179
 楼主| 发表于 2004-4-13 13:18:00 | 显示全部楼层

Re:头痛的vertexshader问题!

问题找到,但只解决了一部分,透明度可以正确设置,解决办法很简单但不明白道理

在另一个物体的渲染函数中,用了
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_MODULATE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
在光带的渲染中加入
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_DISABLE );
不太明白是怎么一回事,因为在光带渲染中没用贴图,只用了diffuse,但传给VS的数据中有贴图座标,但VS代码中没处理它,怎么会这样,难道VS会缺省处理?

透明度现在可正确体现,可是只解决了一部分,因为出现的光带两边的效果不一致,一面透明一面不太透明,其实也透明,只是与另一面的效果不一样,会遮住另外的门缝的光带,要达到的效果是与另一光带blend

现在的问题应该是个小问题了,可我没碰到过,谁知道该怎么办?

24

主题

161

帖子

179

积分

注册会员

Rank: 2

积分
179
 楼主| 发表于 2004-4-14 08:34:00 | 显示全部楼层

Re:头痛的vertexshader问题!

以为是个小问题,可这才是大问题,也许是以后人们将研究的一个方向。

我猜想可能是这样的:
透明物体要在最后的渲染中画出,如果是一系列透明点,则应从远到近(相对视点)画出,则出现的效果是所需要的,所以我虽调试所有alphablend的所有组合都无法得到正确的效果就是这个原因,但我需要渲染的透明点太复杂,不是一下子就能解决,需要对所有点排序或采用其它的算法...........

我将画点的顺序反过来就得到与以前相反的透明效果,所以我想可能是上面的原因

这是个大问题,不是小问题,希望以后的显卡厂商能够在硬件一级解决这个问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-30 02:54

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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