MFC+OpenGL 怎么计算投影区域在窗口中的大小

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Ilson_/article/details/80061460

    我用的是正交投影gluOrtho2D以纹理贴图的方式显示一张BMP位图,当我滚动鼠标滚轮时位图会缩小放大;我要求的是纹理贴图在窗口中的大小,如红色框大小:

    



    这是我显示图片的代码:

//贴图的矩形大小与图片比例一致
#define MAPWIDTH    20.0
#define MAPHIGHT    GLfloat(20.0 / (1920.0 / 1080.0))
//背景图
void CDrawView::DrawImage()
{
	glPushMatrix();
	glLoadIdentity();

	glScalef(mScale_, mScale_, 1);    //横纵坐标缩放量
	glTranslatef(mTranslateX_ * mVcWidthRatio_, mTranslateY_ * mVcHightRatio_, 0);    //横纵坐标平移量


	//纹理图像的坐标范围是从(0,0)到(1,1),左下角为(0,0),右上角为(1,1)
	glEnable(GL_TEXTURE_2D);
	glBegin(GL_QUADS);
	glTexCoord2d(0.0, 0.0);
	glVertex2d(-MAPWIDTH, -MAPHIGHT);

	glTexCoord2d(1.0, 0.0);
	glVertex2d(MAPWIDTH,  -MAPHIGHT);

	glTexCoord2d(1.0, 1.0);
	glVertex2d(MAPWIDTH,   MAPHIGHT);

	glTexCoord2d(0.0, 1.0);
	glVertex2d(-MAPWIDTH,  MAPHIGHT);
	glEnd();
	glDisable(GL_TEXTURE_2D);

	glPopMatrix();
}

    这是OnSize()函数代码:

mViewHalfWidth_ = 12;
mViewHalfHight_ = 12;
void CDrawView::OnSize(UINT nType, int cx, int cy)
{
	CScrollView::OnSize(nType, cx, cy);
	
	// TODO: Add your message handler code here
	//以下两行保证窗口大小变化后图像中心点不发生变化
    mTranslateX_ *= (GLfloat)(cx * 1.0 / mClientWidth_);
    mTranslateY_ *= (GLfloat)(cy * 1.0 / mClientHight_);

    mClientWidth_ = cx;
    mClientHight_ = cy;
    if (mClientHight_==0)		// Prevent A Divide By Zero By 防止除以0
    {
        mClientHight_=1;		// Making Height Equal One
    }
    if (mClientWidth_==0)		// Prevent A Divide By Zero By
    {
        mClientWidth_=1;		// Making Height Equal One
    }

	mVcWidthRatio_ = (GLfloat)(mViewHalfWidth_ * 2 / mClientWidth_);//视窗比(视景体/窗口)
	mVcHightRatio_ = (GLfloat)(mViewHalfHight_ * 2 / mClientHight_);

	wglMakeCurrent(mhDC_, mhGLContext_);
	glViewport(0, 0, cx, cy);				// Reset The Current Viewport
	glMatrixMode(GL_PROJECTION);			// Select The Projection Matrix 选择投影矩阵
	glLoadIdentity();						// Reset The Projection Matrix

	//改变窗口大小时,使视图等比缩放  
	//正交投影
	GLdouble glScale = (GLdouble)cx / cy;
	if (cx <= cy)
		gluOrtho2D(-mViewHalfWidth_, mViewHalfWidth_, -mViewHalfHight_ / glScale, mViewHalfHight_ / glScale);
	else
		gluOrtho2D(-mViewHalfWidth_ * glScale, mViewHalfWidth_ * glScale, -mViewHalfHight_, mViewHalfHight_);

	glMatrixMode(GL_MODELVIEW);                            // Select The Modelview Matrix
	glLoadIdentity();									   // Reset The Modelview Matrix

	CurrentGLpoint(CPoint(), TRUE);
}
    请问我该怎么求在窗口中投影的大小(图片的大小、红框大小),随着缩放量改变而改变






猜你喜欢

转载自blog.csdn.net/Ilson_/article/details/80061460
今日推荐