游戏开发论坛

 找回密码
 立即注册
搜索
查看: 7080|回复: 23

shader 能实现FLAT着色的效果吗?

[复制链接]

26

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
发表于 2006-11-23 03:22:00 | 显示全部楼层 |阅读模式
DX里,shader 能实现FLAT着色的效果吗?
我加了以下句子,不行:
pd3dDevice->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT);
那SHADER里该怎么写才能实现FLAT着色效果哦?有例子吗?
我没找到相关例子``
希望大侠们指点一下`` [em2]

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-11-23 09:38:00 | 显示全部楼层

Re:shader 能实现FLAT着色的效果吗?

这年头还要用Flat着色??

8

主题

553

帖子

560

积分

高级会员

Rank: 4

积分
560
发表于 2006-11-23 09:40:00 | 显示全部楼层

Re:shader 能实现FLAT着色的效果吗?

可以。
所谓FLAT找色,本质上就是rast硬件不对某个vertex attribute进行interpolate和perspective correction,直接把leading vertex的数据送给ps。
在sm3.0(包括)以前的shader下,必须通过COLOR0/COLOR1来传递需要FLAT的数据,在sm4.0下,任意attribute都可以控制查值得方式了。

35

主题

370

帖子

376

积分

中级会员

Rank: 3Rank: 3

积分
376
发表于 2006-11-23 11:30:00 | 显示全部楼层

Re:shader 能实现FLAT着色的效果吗?

晕,flat着色是简单的着色,shader都实现不了那还用shader干吗

26

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
 楼主| 发表于 2006-11-23 14:42:00 | 显示全部楼层

Re: Re:shader 能实现FLAT着色的效果吗?

kypck: Re:shader 能实现FLAT着色的效果吗?

可以。
所谓FLAT找色,本质上就是rast硬件不对某个vertex attribute进行interpolate和perspective correct...

谢谢 老兄~
怎么大家都说FLAT着色没用或很简单啊??呵呵,难道我脑子比较另类么?
要是简单的话,随便贴个例子看看嘛,前提是已经编译运行通过~
而且我觉得有些时候FLAT着色会很有用,譬如,用来做水晶石,石头上的各个面不是光滑过渡的,而是FLAT效果的~ [em7]

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2006-11-23 15:23:00 | 显示全部楼层

Re:shader 能实现FLAT着色的效果吗?

你这个就是所谓NPR,什么卡通啊、水墨啊都在此范围内
通过LdotN在一张你所谓的FLAT的texture上采样就好了

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
发表于 2006-11-23 15:30:00 | 显示全部楼层

Re:shader 能实现FLAT着色的效果吗?

请问楼主FLAT是什么效果?能用来做水晶石,我想学一下。

26

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
 楼主| 发表于 2006-11-23 21:47:00 | 显示全部楼层

Re: Re:shader 能实现FLAT着色的效果吗?

千里马肝: Re:shader 能实现FLAT着色的效果吗?

你这个就是所谓NPR,什么卡通啊、水墨啊都在此范围内
通过LdotN在一张你所谓的FLAT的texture上采样就好了


谢谢~ [em2]

26

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
 楼主| 发表于 2006-11-23 23:23:00 | 显示全部楼层

Re:shader 能实现FLAT着色的效果吗?

[em10] [em4]
"设置D3DSHADE_FLAT,然后在shader里用color0/1 "

哎~搞了一晚上,还是没搞出来,这个COLOR0怎么用?`

下面是GROUND效果的基础代码,大侠们能帮我改一下,让它能实现FLAT的效果吧``,好吗?`
// variables that are provided by the application
float4x4 matWorldViewProj;       
float4x4 matWorld;       
float4 vecLightDir;

// Output channels
struct VS_OUTPUT
{
    float4 Pos  : POSITION;
    float3 Light : TEXCOORD0;
    float3 Norm : TEXCOORD1;
};

// vertex shader function (input channels)
VS_OUTPUT VS(float4 Pos : POSITION, float3 Normal : NORMAL)
{
    VS_OUTPUT Out = (VS_OUTPUT)0;      
    Out.Pos = mul(Pos, matWorldViewProj);        // transform Position
    Out.Light = normalize(vecLightDir); // output light vector
    Out.Norm = normalize(mul(Normal, matWorld)); // transform Normal and normalize it   
   return Out;
}

// Pixel Shader (input channels)utput channel
float4 PS(float3 Light: TEXCOORD0, float3 Norm : TEXCOORD1) : COLOR
{
    float4 diffuse = { 1.0f, 0.0f, 0.0f, 1.0f};
        float4 ambient = {0.1,  0.0,  0.0, 1.0};
    return ambient + diffuse * saturate(dot(Light, Norm));
}

// -------------------------------------------------------------
technique TShader
{
    pass P0
    {
        // compile shaders
        VertexShader = compile vs_1_1 VS();
        PixelShader  = compile ps_1_4 PS();
    }
}

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-11-24 10:03:00 | 显示全部楼层

Re: Re:shader 能实现FLAT着色的效果吗?

kypck: Re:shader 能实现FLAT着色的效果吗?

可以。
所谓FLAT找色,本质上就是rast硬件不对某个vertex attribute进行interpolate和perspective correct...



SM3.0的寄存器已经全部变了,每个寄存器都会内插,不分color还是texcoord,只有SM3.0以前的才可以用shade_flat
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 23:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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