1

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

编辑:我确认问题出在 Z 缓冲区上。我试图在 Z 轴之间平移立方体,很明显视图在 0.0 和 1.0 之间,但 SetViewport 并没有改变它,我不明白为什么......

编辑:如果我禁用 ZBUFFER,顶点仍然会被切割。我尝试使用参数 (m, 90, 800 / 480, -0.1, 100) 使用 此实现 ( http://pastebin.com/EVCRG6f7 ) 设置一个新的投影矩阵,但问题仍然存在。剪切图像 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 );
4

0 回答 0