屏幕坐标和当前窗口坐标如何转换???

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了屏幕坐标和当前窗口坐标如何转换???相关的知识,希望对你有一定的参考价值。

如题,但不是mfc工程下的,我用的是windows平台编写的,窗口是800x600屏幕是1024x768;;
最好给个例子呀

参考技术A 屏幕分辨率是以屏幕左上角为坐标(0,0)。横向为x正轴,纵向为y正轴。
窗口坐标是窗口左上角那一点在屏幕上的坐标。
窗口大小就是窗口横向宽度和纵向高度。
参考技术B Win32,有两个函数ClientToScreen和ScreenToClient,好象是这样,查msdn看其用法 参考技术C ScreenToClient()
参数是POINT类型本回答被提问者采纳
参考技术D 该结贴了

OpenGL:如何将世界坐标转换为屏幕坐标?

【中文标题】OpenGL:如何将世界坐标转换为屏幕坐标?【英文标题】:OpenGL: How to convert world coordinate to screen coordinate? 【发布时间】:2011-03-20 14:31:45 【问题描述】:
    GL.LoadIdentity();
    GL.Translate(0f, 0f,-1f);

    GL.Begin(BeginMode.Quads);
    GL.Color4(1f, 0f, 0f, 1f);

    GL.Vertex3(-1.0f, 1.0f,0);              
    GL.Vertex3(1.0f, 1.0f,0);               
    GL.Vertex3(1.0f, -1.0f,0);              
    GL.Vertex3(-1.0f, -1.0f,0);             
    GL.End();

这是使用世界坐标系,现在我想使用以像素为单位的屏幕位置。怎么做?非常感谢您的帮助

【问题讨论】:

【参考方案1】:

OpenGL 没有“世界”坐标系。它具有由模型视图矩阵转换的模型视图空间,并具有从模型视图空间通过投影矩阵对其进行转换的剪辑空间。剪辑空间为 [-1, 1]^3,它映射到视口和 Z 缓冲区深度范围。

因此,您需要做的是,定义一系列转换,通过恒等转换将模型视图坐标映射到视口坐标(当然它不适用于 Z)。从剪辑空间到视口的转换是固定的。所以你想使用投影来做到这一点,给模型视图留下一个恒等变换:

这就是诀窍:

glViewport(x, y, width, height);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, 0, height, -1, 1);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

将它放在视口像素空间中发生的每组绘图命令之前。

【讨论】:

以上是关于屏幕坐标和当前窗口坐标如何转换???的主要内容,如果未能解决你的问题,请参考以下文章

QT 中控件内坐标转换为父窗口坐标或屏幕坐标

QT 中控件内坐标转换为父窗口坐标或屏幕坐标

将屏幕坐标中的 NSPoint 转换为窗口坐标

C语言画图模式下如何将当前坐标赋给一个变量?方面下面引用该坐标值。

VC++6.0 如何获取窗口客户区域在屏幕中的位置

Unity坐标转换