微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在纹理图像顶部渲染四边形模型

如何解决在纹理图像顶部渲染四边形模型

我正在尝试创建用于车辆跟踪的增强现实应用程序。在应用程序中,我想放置一个四边形模型来跟踪车辆。为此,每次纹理更新时,我都会在特定的屏幕坐标处绘制一个四边形。问题是,我无法将四边形模型放置在纹理上的确切位置。

下图显示了我到底想要什么

enter image description here

如上图所示,必须将绿色四边形恰好放置在车辆的后面。

我是通过以下方式完成的

视口大小(0,0,1280,720)

  1. 渲染纹理
  • 创建大小为1280x720的纹理,并使用认的modelViewProjection(相同的矩阵)进行渲染
     GLfloat vVertices[] = { -1.f,1.f,0.0f,// Position 0
                                 0.0f,// TexCoord 0 
                             -1.f,-1.f,// Position 1
                                 0.0f,1.0f,// TexCoord 1
                                 1.f,// Position 2
                                 1.0f,// TexCoord 2
                                 1.f,// Position 3
                                 1.0f,0.0f         // TexCoord 3
                             };
     glushort indices[] = { 0,1,2,3 };```
    
    
    
  1. 在3D世界中绘制四边形

    • 我使用了以下模型视图投影
    m_unWidth= 1280
    m_unHeight = 720
    float    aspect = (float) m_unWidth / (float) m_unHeight;
    Mperspective = glm::mat4( 1.0f );
    Mperspective = glm::perspective( glm::radians(45.0f),aspect,0.1f,100.0f );
    Mview = glm::mat4(1.0f);
    Mview = glm::translate( Mview,glm::vec3(0.0f,-2.0f));
    glm::mat4 Mmodel = glm::mat4(1.0f);
    Mmodel = glm::translate( Mmodel,glm::vec3( POSITION.X,POSITION.Y,0.0 ));
    Mmodel = glm::rotate( Mmodel,glm::radians(-80.0f),glm::vec3( 1.0f,0.0f ));
    
    

我已经使用坐标转换功能映射到[-1,1]。

NDCPoint ACCOverlay::ConvertToNDC( unsigned int unX_i,unsigned int unY_i ) {
const int width = m_unWidth;
const int height = m_unHeight;
float x = float(unX_i) * 2 / float(width) - 1;
float y = 1 - float(unY_i) * 2 / float(height);
NDCPoint point;
point.x = x;
point.y = y;
point.z = 1.0f;
return point;

}

请您解释一下如何在透视投影的正确位置映射四边形模型。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。