精华内容
下载资源
问答
  • OPENGL屏幕坐标系原点在左下角向上向右增加,D3D屏幕坐标系原点在左上角向下向右增加。 所以glViewPort从设备坐标系变换到屏幕空间变换公式为: 使得(-1,-1)到左下角(x0,y0), (1,1)到右上角(x0 + w, y0 ...
    OPENGL屏幕坐标系原点在左下角向上向右增加,D3D屏幕坐标系原点在左上角向下向右增加。
    所以glViewPort的从设备坐标系变换到屏幕空间的变换公式为:

    使得(-1,-1)到左下角(x0,y0), (1,1)到右上角(x0 + w, y0 + h)。

    D3D中设备坐标系变换到屏幕的公式为:
    Xw = x* w/2 + w / 2 + x0;
    Yw = -y * h/2 + h / 2 + y0;
    使得(-1,1)到左上角(x0,y0), (1,-1)到右下角(x0 + w, y0 + h)。

    还需要注意OPENGL中像素的位置在格子中心,D3D9在格子左上角因此偏移0.5个像素,D3D10在格子中心。

    拓展OPENGL和D3D区别联系见:http://blog.chinaunix.net/uid-20235103-id-3060257.html
    1.世界坐标系不同,视图坐标系和投影坐标系不同导致三角网格顶点数据不同,法向量需要调整,还有叉积和旋转变换不同,绘制正面不同。矩阵表示不同,OGL是用列式矩阵,和列式向量,所以要矩阵右乘向量得到变换结果。

    2.屏幕坐标系不同和像素中心不同

        提到了坐标系的区别,另一个类似的区别出现在窗口朝向上。D3D用了左上角作为原点,而OpenGL用了左下角。D3D9用了像素左上角作为原点,而OpenGL和D3D10+用了像素中心。在像素和纹理需要1:1对应的时候,该问题就需要严重关注了。详见Directly Mapping Texels to Pixels

    窗口原点的不同造成的结果就是,两个API做render to texture之后,产生的texture在y方向是相反的。这本身可以通过调整project matrix来调整。简而言之,就是:

    glMatrixLoadIdentityEXT(GL_PROJECTION);
    glMatrixScalefEXT(GL_PROJECTION, 1, -1, 0); // y方向取反
    glMatrixTranslatefEXT(GL_PROJECTION,  0.5f / win_width, 0.5f / win_height, 0); // 调整到D3D9的话还需要偏移0.5个像素

    因此,OpenGL提供了GL_ARB_fragment_coord_conventions这个扩展,专门用来指定像素坐标的原点和偏移。在GLSL的声明里添加个属性:

    // OpenGL原生的方式
    in vec4 gl_FragCoord;

    // D3D9的方式
    layout(origin_upper_left, pixel_center_integer) in vec4 gl_FragCoord;

    // D3D10+的方式
    layout(origin_upper_left) in vec4 gl_FragCoord;

    这样就可以把像素坐标调整过来。

    综上所述,通过现代OpenGL核心和扩展的支持,填平了一些原本被认为位于底层的区别,同时不会有性能损失。破解了上篇提到的流言3。下篇将剖析两个API的功能异同,以及直接相互访问的可能性。


     3.Z缓存值大小不同

        初学者经常 说,OpenGL用右手坐标系,而D3D用左手;裁剪空间里OpenGL的z是[-1, 1],而D3D是[0, 1];不可调和。实际上,直接把左手的顶点和矩阵给OpenGL也是没有问题的。毕竟如果在VS里执行的都是mul(v, matrix),得到的会是同样的结果。可能会造成麻烦的反而是viewport的z。假设一个经过clip之后的顶点坐标为(x, y, z, w),那么在OpenGL上,该顶点经过viewport变换的z是(z/w + 1) / 2,而在D3D上则是z/w而已。这对于depth test不影响,但depth buffer里的值就不同了。所以需要对project matrix做一些调整,才能让他们写到depth buffer中的数值相同。具体来说,如果要让OpenGL流水线接受D3D的project matrix,就需要乘上

    为什么是这样,其实不用关注的?

    相当于把project space的顶点z都作了z = z * 2 – 1的操作,所以经过viewport变换就一致了。D3D到OpenGL的矩阵也可以依此类推。所以,在坐标系上,很容易就能使两者接受同样的输入,同时也没有增加runtime开销。



    4.颜色值格式不同

    D3D9 最常用的顶点颜色格式是BGRA格式(也就是D3DCOLOR),而OpenGL默认用的是RGBA格式。D3D9用BGRA纯粹是因为历史原因,早期硬 件不支持UBYTE4的格式,只能用D3DCOLOR,然后再shader里调用D3DCOLORtoUBYTE4。现在的GPU都支持 UBYTE4,D3D10+也是可以直接使用RGBA,所以这已经不是问题了。

    如果需要兼容已经生成BGRA格式数据,现代OpenGL提供了GL_EXT_vertex_array_bgra这个扩展,也可以使用BGRA作为顶点颜色输入格式:

    glColorPointer(GL_BGRA, GL_UNSIGNED_BYTE, stride, pointer);
    glSecondaryColorPointer(GL_BGRA, GL_UNSIGNED_BYTE, stride, pointer);
    glVertexAttribPointer(GL_BGRA, GL_UNSIGNED_BYTE, stride, pointer);

    该扩展进入了OpenGL 3.2的核心。


    5.D3D11的一些高级特性还只是软件层面的,而且OPENGL也可以实现

    State对象

    D3D 10新增了State对象,可以极大地减少由于改变渲染状态所需的系统调用次数。OpenGL中目前还没有State对象,所以只能在上层自行封装。虽然 有些 性能损失,但接口可以和D3D统一起来。ARB针对OpenGL的State对象进行过旷日持久的讨论,还最终各大厂商没有达成一致。不过这是个趋势,相 信不久的将来就会出个相关的扩展。到时候这个区别就能被完美地填平。

    Compute Shader

    D3D 11引入了compute shader,在D3D中直接提供了GPGPU的能力。OpenGL没有因此增加一种shader,而是增强和同门师弟OpenCL的互操作能力。 OpenGL和OpenCL能直接共享texture和buffer等,起到了和compute shader等价的功能。与GLSL和HLSL的关系一样,这里存在着shader语言不同的问题,而且没有Cg可以作为桥梁,目前只能写两份代码。

    Multithreading

    D3D 11的multithreading能力允许多个context都调用D3D11 API,每个context保存下来的API调用流可以在主context执行依次执行。OpenGL目前也没有引入该机制,需要在上层自行实现。话说回 来了,目前的所有显卡 驱动都没有实现multithreading,所以所有多context都是由D3D runtime软件实现的,没有达到应有的提速效果。自己实现一个command list也能达到那样的性能。仍然希望某一天multithreading能成为OpenGL的功能 之一,简化上层的工作。

    总结

    所以说,OpenGL和D3D功能的交集几乎就是它们的并集,并不会因为需要兼容两者而失去很多功能。从功能上说,OpenGL和D3D之间的分歧甚至小于OpenGL和OpenGL ES。破解了第一篇说的流言4。

    6.Shader部分,cg可以编译大部分着色器代码为GLSL和HLSL.


    展开全文
  • cocos2d-x坐标系很重要,想要学好该引擎,深入理解它坐标体系很重要。... //屏幕坐标系是以左上角为原点,是我们熟悉 //本地坐标系也叫节点坐标系,世界坐标系是相对于整体而言,而本地坐标系是相
  • OpenGL 默认的坐标原点屏幕的正中心,而cocos2dx是如何将屏幕的左下角作为原点的呢? 猜测是设置了摄像机 结果猜测对了! 1.AppController.mm didFinishLaunchingWithOptions 2.Director.cpp setOpenGLView 3. ...

    OpenGL 默认的坐标原点是屏幕的正中心,而cocos2dx是如何将屏幕的左下角作为原点的呢?

    猜测是设置了摄像机

    结果猜测对了!

    1.AppController.mm  didFinishLaunchingWithOptions

    Image(5)

    2.Director.cpp  setOpenGLView

    Image(6)

    3. Director::setGLDefaultValues

    Image(7)

    4. void Director::setProjection(Projection projection) 所有的一切都在这里面了

    需要说明的是 参数 projection是 Projection::_3D  而不是想象中的 Projection::_2D  所以最终执行的代码

    Image(8)

    而最终决定显示的坐标原点在左下角的原因是

    Image(9)

    在这里摄像机的位置在

    Image(10)

    因为摄像机的位置在颈托屏幕正中心的Z轴上,而因为摄像机的目标点和投影的结合,决定了如图所示的视锥体结构,这样就保证了我们看到的一切都在屏幕上喽

    而因为2D游戏的摄像机基本是不变的,所以此处提前 投影矩阵 * 摄像机矩阵,并将结果保存在了Director的

    _projectionMatrixStack   中,

    这样后续使用该矩阵 * 模型本身的矩阵(世界坐标系决定了位置,Model中的各个点需要渲染,就需要将各个点转变为世界坐标,而各个点基本都是相对于Model自己原点的坐标),再紧跟 * Model中的各个点,就可以方便的计算出来需要渲染的点的位置了,也就是完成了流程

    model点 ->  经过模型矩阵 -> 转变为世界坐标系的点 -> 摄像机矩阵 -> 转变为了可见的视锥体内部可见要素 -> 投影矩阵 -> 将3D的内容渲染到2D的平面上了。

    而最后两步操作 摄像机和投影矩阵的转变,在这里直接进行了合并,也就是说我们在使用的过程中,只需要掌控好模型自己在世界坐标系的相对关系就可以了(模型矩阵)。

    展开全文
  • 屏幕坐标系和视口坐标系

    千次阅读 2018-05-18 08:44:52
    屏幕坐标系: 手机屏幕或者电脑屏幕一个坐标系。2.屏幕坐标是以像素来定义, 屏幕左下角为原点(0,0), 右上角为(Screen.width,Screen.height), width是屏幕宽度, height是屏幕高度, Z值是摄像机世界坐标取反,...
    一.屏幕坐标系
    1.屏幕坐标系: 手机屏幕或者电脑屏幕的一个坐标系。
    2.屏幕坐标是以像素来定义的, 屏幕左下角为原点(0,0), 右上角为(Screen.width,Screen.height), width是屏幕的宽度, height是屏幕的高度, Z值是摄像机世界坐标取反,并且以相机的世界单位来衡量的。
    3.屏幕坐标和相机之间满足: Screen.width = Camera.main.pixelWidth和Screen.height = Camera.main.pixelHeight这两个条件。
    4.鼠标的位置坐标属于屏幕坐标。通过Input.mousePosition获取鼠标的屏幕坐标。
    二.创建工程
    1.创建一个游戏工程, 命名为ScreenViewPort

    2.在Project视图中创建3个文件夹, Scene文件夹、Resources文件夹和Script文件夹

    3.将当前场景保存为GameScene

    4.创建ScreenPosition游戏脚本


    5.在Hierarchy视图中创建一个空的GameObject, 命名为GameManager,并把ScreenPosition绑定在该对象上

    6.更改屏幕分辨率为480 * 800

    7.编写代码

    using UnityEngine;
    
    public class ScreenPosition : MonoBehaviour
    {
    	void Update () 
    	{
    		if(Input.GetMouseButtonDown(0))
    		{
    			Debug.Log ("屏幕坐标:" + Input.mousePosition);
    		}
    	}
    }

    8.运行点击屏幕打印

    屏幕坐标:(9.0, 33.0, 0.0)

    屏幕坐标:(458.0, 22.0, 0.0)

    屏幕坐标:(228.0, 410.0, 0.0)

    屏幕坐标:(458.0, 795.0, 0.0)

    三.视口坐标系

    1.摄像机的前面有一个长方形的小框子, 那个即为视口。


    2.视口坐标是标准化后的屏幕坐标。视口坐标是以0到1间的数字来表示的, 它的范围是以左下角为(0,0), 右上角为(1,1)定义的这样一个矩形。视口坐标是一个3D坐标, Z轴是以相机的世界单位来衡量的。通过对比可以发现视口坐标和屏幕坐标特别的相似。

    3.摄像机视口比例:public float aspect{get;set;},此属性用于获取或设置Camera视口的宽高比例值。

    4.void ResetAspect();恢复长宽比为屏幕的长宽比。

    5.代码

    using UnityEngine;
    
    public class CameraAspect : MonoBehaviour
    {
    	void Start () 
    	{
    		Debug.Log ("默认宽高比例:" + Camera.main.aspect);
    	}
    
    	void OnGUI () 
    	{
    		if(GUILayout.Button("摄像机宽高比例为1"))
    		{
    			Camera.main.ResetAspect ();
    			Camera.main.aspect = 1;
    		}
    
    		if(GUILayout.Button("摄像机宽高比例为2"))
    		{
    			Camera.main.ResetAspect ();
    			Camera.main.aspect = 2;
    		}
    	}
    }

    四.屏幕坐标和视口坐标的转换

    1.从视口空间到屏幕空间的变换位置: Vector3 ViewportToScreenPoint(Vector3 position);

    2.从屏幕空间到视窗空间的变换位置: Vector3 ScreenToViewportPoint(Vector3 position);

    3.代码

    using UnityEngine;
    
    public class ScreenViewPortPosition : MonoBehaviour 
    {
    	void Start()
    	{
    		Debug.Log ("摄像机视口坐标转换成屏幕坐标[(0,0,0),"+Camera.main.ViewportToScreenPoint(new Vector3(0,0,0))+"]");
    		Debug.Log ("摄像机视口坐标转换成屏幕坐标[(0.5,0,0),"+Camera.main.ViewportToScreenPoint(new Vector3(0.5f,0,0))+"]");
    		Debug.Log ("摄像机视口坐标转换成屏幕坐标[(0,0.5,0),"+Camera.main.ViewportToScreenPoint(new Vector3(0,0.5f,0))+"]");
    		Debug.Log ("摄像机视口坐标转换成屏幕坐标[(0.5,0.5,0),"+Camera.main.ViewportToScreenPoint(new Vector3(0.5f,0.5f,0))+"]");
    		Debug.Log ("摄像机视口坐标转换成屏幕坐标[(1,0,0),"+Camera.main.ViewportToScreenPoint(new Vector3(1,0,0))+"]");
    		Debug.Log ("摄像机视口坐标转换成屏幕坐标[(0,1,0),"+Camera.main.ViewportToScreenPoint(new Vector3(0,1,0))+"]");
    		Debug.Log ("摄像机视口坐标转换成屏幕坐标[(1,1,0),"+Camera.main.ViewportToScreenPoint(new Vector3(1,1,0))+"]");
    	}
    
    	void Update () 
    	{
    		if(Input.GetMouseButtonDown(0))
    		{
    			Debug.Log ("摄像机屏幕坐标转换成视口坐标:["+Input.mousePosition+","+Camera.main.ScreenToViewportPoint(Input.mousePosition)+"]");
    		}
    	}
    }
    展开全文
  • 屏幕坐标系和窗口客户区坐标系最明显的区别在于坐标原点屏幕坐标系的坐标原点在整个屏幕的左上角,而窗口客户区坐标系的坐标原点在窗口客户区的左上角,通常这两个点是不重合的。 一 设备坐标和逻辑坐标  ...

    http://blog.csdn.net/ljh0600301217/article/details/8736990

    屏幕坐标系和窗口客户区坐标系最明显的区别在于坐标原点,屏幕坐标系的坐标原点在整个屏幕的左上角,而窗口客户区坐标系的坐标原点在窗口客户区的左上角,通常这两个点是不重合的。

    一 设备坐标和逻辑坐标

      设备坐标(Device Coordinate)又称为物理坐标(Physical Coordinate),是指输出设备上的坐标。通常将屏幕上的设备坐标称为屏幕坐标。设备坐标用对象距离窗口左上角的水平距离和垂直距离来指定对象的位置,是以像素为单位来表示的,设备坐标的X轴向右为正,Y轴向下为正,坐标原点位于窗口的左上角。

      逻辑坐标(Logical Coordinate)是系统用作记录的坐标。在缺省的模式(MM_TEXT)下,逻辑坐标的方向和单位与设备坐标的方向和单位相同,也是以像素为单位来表示的,X轴向右为正,Y轴向下为正,坐标原点位于窗口的左上角。逻辑坐标和设备坐标即使在缺省模式下其数值也未必一致,除了在以下两种情况下:

      1. 窗口为非滚动窗口

      2. 窗口为滚动窗口,但垂直滚动条位于滚动边框的最上端,水平滚动条位于最左端,但如果移动了滚动条这两种坐标就不一致了。

      在VC中鼠标坐标的坐标位置用设备坐标表示,但所有GDI绘图都用逻

      坐标表示,所以用鼠标绘图时,那么必须将设备坐标转换为逻辑坐标,可以使用CDC 函数DptoLP()将设备坐标转化为逻辑坐标,同样可以用LptoDP()将逻辑坐标转化为设备坐标。


    客户区坐标与屏幕坐标之间的转换问题  

          1、ClientToScreen 函数:

      这个函数的功能:该函数将指定点的用户坐标转换成屏幕坐标。

      函数原型:BOOL ClientToScreen(HWND hWnd,LPPOINT lpPoint);

      参数:

      hWnd :用户区域用于转换的窗口句柄。 注:第二个参数点的坐标是相对于第一个参数(窗口句柄)的窗口的坐标,将此点转换为屏幕坐标,实际上是在此点窗口坐标(相对于窗口左上角的坐标)的基础上加上此窗口左上角坐标相对于屏幕左上角的坐标值。

      lpPoint:指向一个含有要转换的用户坐标的结构的指针,如果函数调用成功,新屏幕坐标复制到此结构。

      返回值:如果函数调用成功,返回值为非零值,否则为零。

      注释:函数用屏幕坐标取代POINT结构中的用户坐标,屏幕坐标与屏幕左上角相关联。

          CWnd::ClientToScreen(LPPOINT lpPoint)  (ClientToScreen(LPRECT lpRect))实现的是同样的效果,只不过是窗口句柄缺省为调用此函数的窗口。

     

          2、ScreenToClient 函数:

          函数功能:该函数把屏幕上指定点的屏幕坐标转换成用户坐标。

      函数原型:BOOL ScreenToClient(HWND hWnd, LPPOINT lpPoint);

      参数:

      hWnd:指向窗口的句柄,此窗口的用户空间将被用来转换。 注:将此点相对于屏幕左上角的坐标值转换成相对于此窗口左上角的坐标值。

      lpPoint:指向POINT结构指针,该结构含有要转换的屏幕坐标。

      返回值:如果函数调用成功,返回值为非零值,否则为零。

      Windows NT:若想获得更多错误信息,请调用GetLastError函数。

      注释:该函数应用hWnd参数标识的窗口和POINT结构给定的屏幕坐标来计算用户坐标,然后以用户坐标来替代屏幕坐标,新坐标是相对于指定窗口的领域的左上角。

     

    CWnd::GetClientRect(CRect rect)  函数:

    此函数得到的区域是相对于调用此函数的窗口指针所指向的窗口的客户区域,坐标点是相对于此窗口而言的。例如:在对话框中,如果是一个子控件调用此函数,那么它得到的rect值左上角的点必定为(0,0),长宽必定与此控件的客户区长宽想等。如果是对话框自身调用此函数,Rect是基类对话框客户区域坐标,并且rect左上角的点也必定是(0,0),长宽与此对话框的客户区长宽相等。

    注:API函数::GetClientRect(HWND hwnd,LPRECT lprect)实现同样的效果

     

    CWnd::GetWindowRect(rect) 函数:

    此函数得到的区域坐标是相对于屏幕左上角而言,无论是对话框本身还是它的子控件调用此函数得到的坐标都是相对于屏幕而言。并且如果是对话框那么它得到的是对话框整个窗口的区域坐标。

    注:API函数::GetWindowRect(HWND hwnd,LPRECT lprect)实现同样的效果


    展开全文
  • 屏幕坐标系,世界坐标系

    千次阅读 2013-03-26 10:08:25
    屏幕坐标系,主要有两种, 第一种:以左上角为原点。代表操作系统有Windows,Android,Symbian,iOS Core Graphics如图1左侧。 第二种:以左下角为原点。比如iOSCGContextDrawImage,如图2右侧。 (图2...
  • 屏幕坐标系 屏幕坐标系,主要有两种, 第一种:以左上角为原点。代表操作系统有Windows,Android,Symbian,iOS Core Graphics如图1左侧。 第二种:以左下角为原点。比如iOSCGContextDrawImage,如图2右侧。 ...
  • canvas坐标系转为webgl坐标系,webgl坐标是x[-1, 1],y[-1, 1]。 ①获取canvas在浏览器客户区...图中canvas原点屏幕坐标系坐标值为(a,b),即canvas在屏幕上左上角位置坐标; 其中(a,b)坐标中: a = rect..
  • 屏幕坐标系和窗口客户区坐标系最明显的区别在于坐标原点屏幕坐标系的坐标原点在整个屏幕的左上角,而窗口客户区坐标系的坐标原点在窗口客户区的左上角,通常这两个点是不重合的。一设备坐标和逻辑坐标 设备坐标...
  • 不多说,看注释。 bool HelloWorld::init() { bool bRet = false; do { CC_BREAK_IF(! CCLayer::init());... //opengl坐标系和世界坐标系相同,都是以屏幕左下角为原点,向右为x轴增加... //屏幕坐标系是以左
  • 计算机屏幕坐标系

    千次阅读 2016-01-05 18:15:44
    常用的屏幕坐标系有如下图所示的两种: ... 屏幕坐标系和窗口客户区坐标系最明显的区别在于坐标原点屏幕坐标系的坐标原点在整个屏幕的左上角,而窗口客户区
  • cocos2d中的屏幕坐标系和OPenGL坐标系转换 ...cocos2d坐标系(OPenGL坐标系):以左下角为...屏幕坐标系(android,ios,win32系统坐标系):以左上角为原点,X轴向右为正,y轴向下为正   在cocos2dxte
  • 各轴之间顺序要求符合右手法则,即以右手握住Z轴,让右手四指从X轴正向以90度直角转向Y轴正向,这时大拇指所指方向就是...OPENGL屏幕坐标系原点在左下角向上向右增加,D3D屏幕坐标系原点在左上角向下向右增...
  • 1. 系统默认设置的工具坐标系的原点位于机器人J6轴的法兰上。根据需要把工具左边西的原点移到工作的位置和方向上,该位置叫工具中心点TCP(Tool Center Point)。2. 工具坐标系的所有测量都是相对于TCP的,默认设置...
  • 在  ...并没有特别说明,下面通过测试Sample来说一下...第一个想说:世界坐标系,这个坐标很容易,opengl 坐标原点默认给在屏幕中间,一般3D 顶点参照使用这个坐标系,具体参见上面博客.这里介绍一下着色是如何进行,工
  • 在用OpenGL编写2D游戏或者其他图形程序时,很多人应该和我一样习惯于Windows的屏幕坐标系风格了(即左上角为(0,0),右下角为(屏幕宽度,屏幕高度))。在传统GDI图形程序中,以及常规Windows程序界面控件布局,...
  • 默认坐标系与当前坐标系canvas中坐标是从左上角开始,x轴沿着水平方向(按像素)向右延伸,y轴沿垂直方向向下延伸。左上角坐标为x=0,y=0点称作原点。在默认坐标系中,每一个点坐标都是直接映射到一个CSS像素...
  • OpenGL中用鼠标交互时,记得按需要把设备坐标系的原点转为左上方的。 用函数:glOrtho2D函数 函数原型为 void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top) 说明: gluOrtho2D(0,400,0,...
  • cocos2d 坐标系使用与屏幕坐标

    千次阅读 2012-06-08 14:11:41
     基本两个坐标系:屏幕坐标系和GL坐标系。  GL坐标系  Cocos2D以OpenglES为图形库,所以它使用OpenglES坐标系。GL坐标系x轴朝右,y轴朝上。默认原点在左下角。 屏幕坐标系
  • 3.屏幕坐标系:以屏幕左下角为原点建立二维坐标系,输出设备坐标一般为屏幕坐标. 4.视口坐标系:以相机屏幕左下角为原点建立一个二维坐标系,屏幕坐标和视口坐标一样,只不过 视口坐标Z轴是摄像机Z...
  • AxeSlide软件项目梳理 canvas绘图系列知识点整理默认坐标系与当前坐标系canvas中坐标是从左上角开始,x轴沿着水平方向(按像素)向右延伸,y轴沿垂直方向向下延伸。左上角坐标为x=0,y=0点称作原点。在默认坐标...
  • 屏幕坐标系(android,ios,win32系统坐标系):以左上角为原点,X轴向右为正,y轴向下为正 cocos2d坐标系同OPenGL坐标系:以屏幕左下角为原点,x向右,y向上 在cocos2dxtest例子中: void Test...
  • 一 Android坐标系:Android坐标系将屏幕的左上角的顶点作为Android坐标系的原点,向右为X轴的正方向,向下是Y轴的正方向。在触控事件中getRawX() 和 getRawY()获得的坐标也是Android坐标系的坐标。二 View坐标系...
  • 概括:Android中有两种坐标系...所谓Android坐标系就是以手机屏幕左上角为原点,从该点水平向右为X轴,从该点水平向下为Y轴。如果是在触控事件中,获取坐标值方法为getRawX()和getRawY()。 示例图如下: ...
  • 在Android中,将屏幕的最左上角顶点作为Android坐标系的原点 从原点向右是X轴的正方向,从原点向下是Y轴的正方向 View提供了getLocationOnScreen( int[] location)方法来获取在整个屏幕内的绝对坐标,该坐标值为...
  • 屏幕坐标系:该坐标系的原点在屏幕左上角,x轴向右,y轴向下,其实和OpenGL坐标系的差别也就是y轴的方向。假设游戏场景的分辨率为(500,500),其中一个点坐标为(200,200),那么它在OpenGL坐标系

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,087
精华内容 434
关键字:

屏幕坐标系的原点