游戏开发论坛

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

输出不同视角到两个窗口中的问题~

[复制链接]

6

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2010-6-22 17:03:00 | 显示全部楼层 |阅读模式

我想要输出一个物体的不同视角到两个窗口中,先渲染一下物体,在1号窗口中输出,接着继续转换视角,在2好窗口中输出,代码如下:
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) ) {
        for( DWORD i = 0; i < g_dwNumMaterials; i++ )
        {
            // Set the material and texture for this subset
            g_pd3dDevice->SetMaterial( &g_pMeshMaterials );
            g_pd3dDevice->SetTexture( 0, g_pMeshTextures );

            // Draw the mesh subset
            g_pMesh->DrawSubset( i );
        }
        //设置视角为0
        SetupMatrices( 0.0f );
        // End the scene       
        g_pd3dDevice->EndScene();
}
g_pd3dDevice-&gtresent( NULL, NULL, g_hWnd0, NULL );

if( SUCCEEDED( g_pd3dDevice->BeginScene() ) ) {
        // 设置视角为3
        SetupMatrices( 3.0f );
        // End the scene       
        g_pd3dDevice->EndScene();
}
g_pd3dDevice->Present( NULL, NULL, g_hWnd1, NULL );

但是结果却是两个窗口都输出的视角为3的图像,高手解释下原因啊!
按照上面的想法,如果我想不经过重复绘制物体,只是想转换不同视角输出到另一个窗口该怎么做,有没有什么好的方法?

8

主题

79

帖子

126

积分

注册会员

Rank: 2

积分
126
发表于 2010-6-22 17:30:00 | 显示全部楼层

Re:输出不同视角到两个窗口中的问题~

你2个窗口的 D3DTS_VIEW 是否一样?

2

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2010-6-23 09:25:00 | 显示全部楼层

Re:输出不同视角到两个窗口中的问题~

试了一下,如楼主所说!
不知道原因,期待高手解答!
另:D3DTS_VIEW当然是不一样的,第二次调用SetupMatrices()函数时有重新设置新的值……

45

主题

1163

帖子

1165

积分

金牌会员

Rank: 6Rank: 6

积分
1165
发表于 2010-6-23 09:26:00 | 显示全部楼层

Re:输出不同视角到两个窗口中的问题~

首先每个窗口建一个 swapchain, 然后 pSwapChain-&gtresent( ... );  no g_pd3dDevice->Present

2

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2010-6-23 15:54:00 | 显示全部楼层

Re:输出不同视角到两个窗口中的问题~

swapChain也试过了,,一样的结果
关键是原因是什么?为什么会出现这种情况?搞不懂……

45

主题

1163

帖子

1165

积分

金牌会员

Rank: 6Rank: 6

积分
1165
发表于 2010-6-23 16:43:00 | 显示全部楼层

Re: 输出不同视角到两个窗口中的问题~

你是如何创建 swapchina的? 每一个 swapChain 要绑定到一个窗口上,我的就可以

3

主题

263

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2010-6-24 03:26:00 | 显示全部楼层

Re:输出不同视角到两个窗口中的问题~

整个流程没有问题,个人猜测是setupmatrice里面的问题,可能矩阵算错了.
另,楼上的工具不错,呵呵,我也想做一个.还有,swapchina ,呵呵,这个词是敏感词.小心被和谐掉

45

主题

1163

帖子

1165

积分

金牌会员

Rank: 6Rank: 6

积分
1165
发表于 2010-6-24 08:03:00 | 显示全部楼层

Re:输出不同视角到两个窗口中的问题~

Multiple Views in Windowed Mode
In addition to the swap chain that is owned and manipulated through the Direct3DDevice object, an application can use the CreateAdditionalSwapChain method to create additional swap chains to present multiple views from the same device.

Typically, the application creates one swap chain per view, and it associates each swap chain with a particular view. The application renders images in the back buffers of each swap chain, and then uses the Present method to present them individually. Note that only one swap chain at a time can be full-screen on each adapter.

What is Present? it means presents the contents of the next buffer in the sequence of back buffers owned by the device or swap chains

楼主为什么几个窗口都显示同样的图像?因为它用的是同一个 back buffer.....个人浅见,还请批评指正

2

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2010-6-24 14:50:00 | 显示全部楼层

Re:输出不同视角到两个窗口中的问题~

同一个backbuffer不同的present啊!
我做过如下测试:

首先绘制对象,也就是g_pMesh->DrawSubset();
接着转换视角,使用SetupMatrices( 0.0f )函数来实现!
然后present到左窗口;
然后接着绘制对象,也就再次调用g_pMesh->DrawSubset();
接着转换视角,使用SetupMatrices( 3.0f )函数来实现!
然后present到右窗口;

结果却是转换了角度3.0f的图像输出到了左窗口,转换了0.0f的输出到了右窗口!
其实这倒无所谓,关键是我想在第一次present之后、第二次present之前的过程中不用到g_pMesh->DrawSubset(),而只需要SetupMatrices( 3.0f )来转换视角输出,为何第二次转换后连第一次present也变成转换后的图像?第一次present可是在第二次转换之前执行的,为什么会受到第二次转换的影响?
如果不想要重复绘制对象,只想要转换视角输出到另一窗口的话该怎么做啊?望高手指条明路!
另:swapchain也是一样的【swapchain的创建过程是先device->getswapchain()得到swapchain1;然后再device->createadditionswapchain()得到swapchain2;之后分别调用swapchain1和swapchain2的present输出到两个窗口】

45

主题

1163

帖子

1165

积分

金牌会员

Rank: 6Rank: 6

积分
1165
发表于 2010-6-24 14:57:00 | 显示全部楼层

Re:输出不同视角到两个窗口中的问题~

没则了......
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-8 11:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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