【问题标题】:3d Alternative for D3DXSPRITE for billboarding用于广告牌的 D3DXSPRITE 的 3d 替代方案
【发布时间】:2009-11-09 18:55:16
【问题描述】:

我希望在我的 3d 世界 (directx 9) 中宣传太阳图像。

在某些情况下创建D3DXSPRITE 非常棒,但它只是一个2d 对象,不能作为3d 对象存在于我的“世界”中。什么是广告牌的替代方法,类似于d3dxsprite?如何实现?

我目前找到的唯一选择是这个链接:http://www.two-kings.de/tutorials/dxgraphics/dxgraphics17.html 这似乎不起作用

【问题讨论】:

    标签: c++ directx


    【解决方案1】:

    以对象 vCenter 为中心。对象的宽度和高度为 (w,h)。

    首先你需要你的相机到广告牌矢量。这计算为 vCamToCen = normalise( vCamera - vCenter )。

    然后您需要一个适当的粗略向上向量。这可以从视图矩阵中提取(方便地描述here,即第二列)。然后,您可以通过执行 vSide = vCamToCen x vUp 来计算侧向量。然后通过执行 vUp = vCamToCen x vSide 计算 REAL 向上向量。其中“x”是叉积。

    您现在拥有制作广告牌所需的所有信息。

    然后您可以按如下方式形成 4 个顶点。

    const float halfW = w / 2.0f;
    const float halfH = h / 2.0f;
    
    const D3DXVECTOR3 vHalfSide = vSide * halfW;
    const D3DXVECTOR3 vHalfUp = vUp  * halfH;
    
    vertex[0].pos = vCenter;
    vertex[1].pos = vCenter;
    vertex[2].pos = vCenter;
    vertex[3].pos = vCenter;
    
    vertex[0].pos -= vHalfSide;
    vertex[0].pos -= vHalfUp;
    
    vertex[1].pos += vHalfSide;
    vertex[1].pos -= vHalfUp;
    
    vertex[2].pos += vHalfSide;
    vertex[2].pos += vHalfUp;
    
    vertex[3].pos -= vHalfSide;
    vertex[3].pos += vHalfUp;
    

    用这些顶点构建你的 2 个三角形,并像往常一样通过你的管道(即使用你的正常视图和投影矩阵)。

    【讨论】:

      猜你喜欢
      • 2016-06-13
      • 1970-01-01
      • 1970-01-01
      • 2018-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-25
      相关资源
      最近更新 更多