旋转立方体在Direct3D9上切割

时间:2013-12-21 16:27:34

标签: rotation direct3d perspectivecamera depth-testing

我正在尝试在Direct3D9上显示一个旋转的立方体。 我可以成功绘制它,但在旋转期间,不会绘制一些像素。我想在旋转过程中显示立方体的每个部分。每个面的大小为0.5f,并且它从点0,0,0旋转Pitch Yaw Roll。我试图禁用Z-Buffer或设置视口的高Z值但没有成功。有什么建议?哦,我在线框模式下渲染它。 cutted image

编辑:我确认问题出在Z Buffer上。我试图在Z轴之间转换立方体,很明显视图介于0.0和1.0之间,但SetViewport不会改变它,我不明白为什么......

编辑:如果禁用ZBUFFER,顶点仍会被切割。我尝试使用参数(m,90,800 / 480,-0.1,100)使用此实现(http://pastebin.com/EVCRG6f7)设置新的投影矩阵,但问题仍然存在。 cutted image 2

编辑:我尝试使用OpenGL相同的顶点和视图矩阵,我在Direct3D9上使用了我的立方体正确绘制。我用这些值初始化它:

                m_pp.BackBufferWidth            = width;
                m_pp.BackBufferHeight           = height;
                m_pp.BackBufferFormat           = D3DFMT_X8R8G8B8;
                m_pp.BackBufferCount            = 0;
                m_pp.MultiSampleType            = D3DMULTISAMPLE_NONE;
                m_pp.MultiSampleQuality         = 0;
                m_pp.SwapEffect                 = D3DSWAPEFFECT_FLIP;
                m_pp.hDeviceWindow              = hWnd;
                m_pp.Windowed                   = !fullscreen;
                m_pp.EnableAutoDepthStencil     = TRUE;
                m_pp.AutoDepthStencilFormat     = D3DFMT_D24S8;
                m_pp.Flags                      = 0;
                m_pp.FullScreen_RefreshRateInHz = (fullscreen) ? 60 : 0;

                p_device->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
                p_device->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID );
                p_device->SetRenderState( D3DRS_LIGHTING, FALSE );
                p_device->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
                p_device->SetRenderState( D3DRS_ALPHATESTENABLE, FALSE );
                p_device->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
                p_device->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
                p_device->SetRenderState( D3DRS_SCISSORTESTENABLE, FALSE );
                p_device->SetRenderState( D3DRS_ZENABLE, TRUE );

0 个答案:

没有答案