游戏开发论坛

 找回密码
 立即注册
搜索
楼主: Ethanph

关于directx渲染到纹理的问题

[复制链接]

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2006-10-29 22:08:00 | 显示全部楼层

Re:关于directx渲染到纹理的问题

MRT。 挺有用的。

4

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
 楼主| 发表于 2006-10-29 22:23:00 | 显示全部楼层

Re:关于directx渲染到纹理的问题

嗯,事实上就是要将pixel shader的输出结果保存到另外一纹理里面,用作下一次处理用

Johnson3D:我第一步确实像你说的那样做了,但为什么如果不加shader被渲染的纹理的内容是正确的,而加上shader以后渲染出来的纹理好像只是空白,我用的代码就上如上这一段

g_pd3dDevice->SetRenderTarget( 0, pRenderSurface );
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, 0xffffffff, 1.0f, 0 );

sortEffect->SetTechnique("sortTechnique");

g_pd3dDevice->SetStreamSource(0, Quad, 0, sizeof(Vertex));
g_pd3dDevice->SetFVF(Vertex::FVF);

unsigned int numPasses = 0;
sortEffect->Begin(&numPasses, 0);

for( int i = 0; i<numPasses; i++ )
{
sortEffect->BeginPass(i);
g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &proj);
g_pd3dDevice->SetTexture(0, Tex);
g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);
sortEffect->EndPass();
}
sortEffect->End();


请教可以给我一点意见吗?非常感激。

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2006-10-29 23:23:00 | 显示全部楼层

Re:关于directx渲染到纹理的问题

ID3DTexture* pTexture = createRenderTarget.
setRenderTareget(pTexture );
//draw your scene
setRenderTarget(backbuffer);

D3DDevice->setTexture(pTexture);
draw Something

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2006-10-29 23:24:00 | 显示全部楼层

Re:关于directx渲染到纹理的问题

.fx就要看 fx 怎么写得了。

0

主题

114

帖子

114

积分

注册会员

Rank: 2

积分
114
发表于 2006-10-30 09:27:00 | 显示全部楼层

Re:关于directx渲染到纹理的问题

楼主,野猪已经说了,流程就他那样做就可以了,其实我一开始也说了的哈:)

4

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
 楼主| 发表于 2006-10-30 11:32:00 | 显示全部楼层

Re:关于directx渲染到纹理的问题

谢谢各位的指点,其实我一共才只有一个pass,shader是最简单的,好像不涉及到多个渲染目标,就像这个样子:

texture sortTexture;

sampler firstSampler:register(s0) = sampler_state
{
Texture = <sortTexture>;

};

matrix worldViewProj : WORLDVIEWPROJECTION;


void vs( in vector inPosition : POSITION, in float2 inTextureCoord : TEXCOORD0, out vector outPosition : POSITION,
out float2 outTextureCoord1 : TEXCOORD0, out float2 outTextureCoord2 : TEXCOORD1 )

{
outPosition = mul(inPosition, worldViewProj);
outTextureCoord1 = inTextureCoord;
outTextureCoord2 = inTextureCoord;

}

float4 ps( in float2 textureCoord1 : TEXCOORD0, in float2 textureCoord2 : TEXCOORD1 ) : COLOR0
{
float4 color1 = tex2D(firstSampler, coord1);

return color1;
}

technique sortTechnique
{
pass p0
{
VertexShader = compile vs_2_0 vs();
PixelShader = compile ps_2_0 ps();
}
}

我上面的代码应该也是按照那个流程来的吧,只是这句话不太理解:"然后下一个用窗口大小的Rectange去Render这个纹理",其实我的主要目的不是去render,而是正确保存shader的输出,render只是我为了验证是否正确保存到那个目标纹理了,我发现好像按照一般地render to texture,加上了shader以后结果不对

我是新手,有些地方写的不对还请指出,我会虚心接受,鞠躬敬礼,表示感谢

0

主题

114

帖子

114

积分

注册会员

Rank: 2

积分
114
发表于 2006-10-30 17:45:00 | 显示全部楼层

Re:关于directx渲染到纹理的问题

1个pass,只能把数据渲染到你设置的RT上,要真正显示出来,还要一个pass渲染到backbuffer,如果你只是要看看第一个pass渲染得结果是不是正确,告诉你一个我经常用的歪招,在RT Render Pass后,采用SaveTexture的方法,把RT保存下来,用photoshop慢慢观看吧:)

89

主题

4036

帖子

4132

积分

论坛元老

Rank: 8Rank: 8

积分
4132
发表于 2006-10-31 00:13:00 | 显示全部楼层

Re:关于directx渲染到纹理的问题

我就经常这么干。。。

4

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
 楼主| 发表于 2006-10-31 14:46:00 | 显示全部楼层

Re: 关于directx渲染到纹理的问题

非常谢谢各位!

经过我试验,还是不行...............

不知道有没有人实际作过啊?将pixel shader的输出保存下来,给后面的继续应用.

by the way...directX里面有SaveTexture()到图象的函数吗?我没有找到.还希望指点啊,看起来是不是需要自己实现了

0

主题

114

帖子

114

积分

注册会员

Rank: 2

积分
114
发表于 2006-10-31 16:34:00 | 显示全部楼层

Re:关于directx渲染到纹理的问题

D3DXSaveTextureToFile
D3DXSaveSurfaceToFile
这两个函数都可以用的
老大,RT怎么会没有人实际做过呢?这个可是N年前的Paper了,很多特效都要用到这个。现在在浮点纹理,SM3.0支持下,RT已经不局限于渲染出来图像,都可以都用来做数值计算结果保存了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-3 06:02

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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