【问题标题】:DirectX stretched pixelsDirectX 拉伸像素
【发布时间】:2014-01-29 02:53:56
【问题描述】:

我刚开始使用 directX,但遇到了像素拉伸问题。当我创建窗口和所有 directX 好东西时,我使用两个变量,宽度和高度。对于大多数测试,我将它们设置为 800x600。当我在屏幕上画一个正方形时,它看起来被拉伸了。

但是,当我将分辨率设置为 600x600

它看起来正常且方形。这使我得出结论,这是某种像素拉伸。在 directX 中,我该如何解决这个问题,并使像素变为正方形。

【问题讨论】:

  • 两个问题:1)如何创建投影矩阵,2)在调整大小时是否重新创建后台缓冲区?

标签: c++ directx resolution directx-11 pixels


【解决方案1】:
float aspectRatio = bufferWidth / bufferHeight;

这是完全正常的。投影到标准化屏幕空间后,坐标从 -1.0 到 1.0(从左到右)和 -1.0 到 1.0(从下到上)。您可以看到屏幕上的两个方向具有相同的值范围。这意味着如果您在屏幕上绘制一个高度和宽度相等的正方形,它的宽度将是高度的 aspectRatio 倍。这解释了 600x600 的良好行为,但 800x600 的问题。(aspectRatio of 1.33)

如果您真的想要一个正方形,您可以简单地将宽度除以您的纵横比,在您的情况下为 800/600 (1.33),以获得一个宽度和高度相等的多边形。

【讨论】:

    【解决方案2】:

    您可能希望根据窗口大小设置视口。

    例如:

    // Setup the viewport for rendering.
    viewport.Width = (float)screenWidth;
    viewport.Height = (float)screenHeight;
    viewport.MinDepth = 0.0f;
    viewport.MaxDepth = 1.0f;
    viewport.TopLeftX = 0.0f;
    viewport.TopLeftY = 0.0f;
    
    // Create the viewport.
    m_deviceContext->RSSetViewports(1, &viewport);
    

    您可以查看Rastertek Tutorials了解更多详情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-29
      • 1970-01-01
      • 2012-09-28
      • 1970-01-01
      • 2016-03-18
      • 2012-09-09
      • 1970-01-01
      相关资源
      最近更新 更多