如何解决在纹理图像顶部渲染四边形模型
我正在尝试创建用于车辆跟踪的增强现实应用程序。在应用程序中,我想放置一个四边形模型来跟踪车辆。为此,每次纹理更新时,我都会在特定的屏幕坐标处绘制一个四边形。问题是,我无法将四边形模型放置在纹理上的确切位置。
下图显示了我到底想要什么
如上图所示,必须将绿色四边形恰好放置在车辆的后面。
我是通过以下方式完成的
视口大小(0,0,1280,720)
- 渲染纹理
- 创建大小为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 };```
-
在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 举报,一经查实,本站将立刻删除。