1. World Space(世界坐标):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。transform.position可以获得该位置坐标。
  2. Screen Space(屏幕坐标,鼠标坐标):以像素来定义的,以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height),Z的位置是以相机的世界单位来衡量的。注:鼠标位置坐标属于屏幕坐标,Input.mousePosition可以获得该位置坐标,手指触摸屏幕也为屏幕坐标,Input.GetTouch(0).position可以获得单个手指触摸屏幕坐标。

  3. ViewPort Space(视口坐标):视口坐标是标准的和相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的。(用的不多,反正我暂时没有用到~呵呵~)

  4. 绘制GUI界面的坐标系:这个坐标系与屏幕坐标系相似,不同的是该坐标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。

  5. LineRender坐标:以屏幕中心为原点,向上向右增加。
  • 世界坐标→屏幕坐标:camera.WorldToScreenPoint(transform.position);这样可以将世界坐标转换为屏幕坐标。其中camera为场景中的camera对象。

  • 屏幕坐标→视口坐标:camera.ScreenToViewportPoint(Input.GetTouch(0).position);这样可以将屏幕坐标转换为视口坐标。其中camera为场景中的camera对象。

  • 视口坐标→屏幕坐标:camera.ViewportToScreenPoint();

  • 视口坐标→世界坐标:camera.ViewportToWorldPoint();

案例1——在鼠标点击的位置上绘制一张图片出来(关于绘制GUI界面坐标系与屏幕坐标系之间的关系)。

using UnityEngine;
using System.Collections;public class ScreenToGUI : MonoBehaviour {// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}//图片  public Texture img;    //储存鼠标的位置坐标    private Vector2 pos;void OnGUI(){//鼠标左击,获取当前鼠标的位置       if (Input.GetMouseButton(0)){pos = Input.mousePosition; //屏幕坐标
        }//绘制图片,屏幕坐标和GUI界面坐标只在Y轴上方向相反,只要被Screen.height减就可以互相转换。      GUI.DrawTexture(new Rect(pos.x, Screen.height - pos.y, 100, 100), img);}}

案例2——角色头顶的名字(世界坐标转GUI界面坐标)

先世界坐标转屏幕坐标,再屏幕坐标转GUI界面坐标

代码如下:

using UnityEngine;
using System.Collections;public class Blood : MonoBehaviour {public static float ScaleWidht = 0f;public static float ScaleHeight = 0f;private Rect _drawRect = new Rect();public float Width = 0f;public float Height = 10f;public const float DesignStageWidth = 800;public const float DesignStageHeight = 480;public Vector2 pos2;public float size_z;// Use this for initializationvoid Start () {ScaleWidht = Screen.width / DesignStageWidth;ScaleHeight = Screen.height / DesignStageHeight;Height = 2f;size_z = transform.gameObject.collider.bounds.size.z;}// Update is called once per framevoid Update () {//世界坐标转换到屏幕坐标
        print(transform.forward);pos2 = Camera.main.WorldToScreenPoint(transform.position + transform.forward * (size_z / 2)); //计算角色头顶坐标pos2 = new Vector2(pos2.x, Screen.height  - pos2.y - Height); //Vector3 worldPosition = new Vector3(transform.position.x, transform.position.y + Height, transform.position.z);//worldPosition = Camera.mainCamera.WorldToScreenPoint(worldPosition);//_drawRect = new Rect((worldPosition.x - 100 * ScaleWidht) / ScaleWidht, (Screen.height - worldPosition.y - 50 * ScaleHeight) / ScaleHeight, 200, 50);
    }void OnGUI(){//GUILayout.BeginArea(_drawRect);//    GUILayout.Label("======哈哈======");//GUILayout.EndArea();
GUI.Label(new Rect(pos2.x, pos2.y, 100, 50), "=BETTER=");}
}

案例3——类似屏幕解锁功能的实现(屏幕坐标转换为世界坐标)

首先是创建LineRenderer。GameObject -> Create Empty ->更名为“LineRendererObj”,

给LineRendererObj添加“Line Renderer”组件,Component ->Effects ->Line Renderer;

将它的Positions 的size 设置为0

接下来是代码touch.CS:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;public class touch : MonoBehaviour {private Event e;public Texture2D Point;public Color c1 = Color.yellow;public Color c2 = Color.red;public int lengthOfLineRenderer;public GameObject LineRendererPrefab;private LineRenderer lineRenderer;/// <summary>/// 保存创建的Line Renderer/// </summary>private List<LineRenderer> lineRendArray =new List<LineRenderer>();private Vector3 screenPoint;private Vector3 scanPos;private Color[] color;/// <summary>/// 记录宫格所在GUI位置/// </summary>public List<Rect> AreaRect = new List<Rect>();/// <summary>/// 记录宫格中心点/// </summary>public List<Vector2> CenterPointList = new List<Vector2>();/// <summary>/// 宫格标签/// </summary>public int RectFlag;/// <summary>/// 记录正确的滑动顺序/// </summary>public List<int> KeyOrder = new List<int>();/// <summary>/// 记录玩家滑动顺序/// </summary>public List<int> PlayerKeyOrder = new List<int>();/// <summary>/// 判断开始鼠标位置是否可画/// </summary>public bool CheckStartRect=false;/// <summary>/// 判断结束鼠标位置是否可画/// </summary>public bool CheckEndRect = false;/// <summary>/// 行数/// </summary>public int Row = 4;/// <summary>/// 列数/// </summary>public int Column = 4;void Start(){e = Event.current;scanPos = LineRendererPrefab.transform.position;lineRenderer = (LineRenderer)LineRendererPrefab.GetComponent("LineRenderer");lineRenderer.material = new Material(Shader.Find("Particles/Additive"));lengthOfLineRenderer = 0;lineRenderer.SetColors(c1, c2);lineRenderer.SetWidth(0.7F, 0.7F);lineRenderer.SetVertexCount(0);color = new Color[8];color[0] = Color.yellow;color[1] = Color.blue;color[2] = Color.cyan;color[3] = Color.gray;color[4] = Color.green;color[5] = Color.grey;color[6] = Color.magenta;color[7] = Color.red;for (int RowCount = 0; RowCount < Row; RowCount++){for (int columnCount = 0; columnCount < Column; columnCount++){Rect IconRect = new Rect(columnCount * Screen.width / Column + Screen.width / Column / 2 - Point.width / 2, RowCount * Screen.height / Row + Screen.height / Row / 2 - Point.height / 2, Point.width, Point.height);AreaRect.Add(IconRect);Vector2 CenterP = IconRect.center;//得到每个的中心点
                CenterPointList.Add(CenterP);}}}void OnGUI(){e = Event.current;for (int RowCount = 0; RowCount < Row; RowCount++){for (int columnCount = 0; columnCount < Column; columnCount++){Rect IconRect = new Rect(columnCount * Screen.width / Column + Screen.width / Column / 2 - Point.width / 2, RowCount * Screen.height / Row + Screen.height / Row / 2 - Point.height / 2, Point.width, Point.height);GUI.Label(IconRect, Point);}}}void Update(){if (e != null){if (e.type == EventType.MouseDown){for (int i = 0; i < AreaRect.Count; i++){if (AreaRect[i].Contains(new Vector3(Input.mousePosition.x, Screen.height - Input.mousePosition.y, Input.mousePosition.z))){CheckStartRect = true;print("Contains");PlayerKeyOrder.Add(i);RectFlag = i;break;}else{CheckStartRect = false;}}if (CheckStartRect){print("MouseDown_____");//Vector3 curPosition = mousePToLineRendererP(); Vector3 curPosition = centerPToLineRendererP(RectFlag);GameObject newObj;newObj = (GameObject)Instantiate(LineRendererPrefab, LineRendererPrefab.transform.position, LineRendererPrefab.transform.rotation);lineRenderer = (LineRenderer)newObj.GetComponent("LineRenderer");int n = Random.Range(1, 8);c1 = color[n - 1];n = Random.Range(1, 8);c2 = color[n - 1];lineRenderer.SetColors(c1, c2);lineRenderer.SetVertexCount(1);lineRenderer.SetWidth(0.7F, 0.7F);lineRenderer.SetPosition(0, curPosition);lineRendArray.Add(lineRenderer);lengthOfLineRenderer++;}}if (e.type == EventType.MouseDrag&&CheckStartRect){print("MouseDrag_____");Vector3 curPosition = mousePToLineRendererP(); DrawRenderLine(lineRendArray[lengthOfLineRenderer - 1], curPosition);}if (e.type == EventType.MouseUp && CheckStartRect){for (int i = 0; i < AreaRect.Count; i++){if (AreaRect[i].Contains(new Vector3(Input.mousePosition.x, Screen.height - Input.mousePosition.y, Input.mousePosition.z))){CheckEndRect = true;PlayerKeyOrder.Add(i);RectFlag = i;print("EndContains");break;}else{CheckEndRect = false;}}if (CheckEndRect){Vector3 curPosition = centerPToLineRendererP(RectFlag);DrawRenderLine(lineRendArray[lengthOfLineRenderer - 1], curPosition);}else{PlayerKeyOrder.RemoveAt(PlayerKeyOrder.Count - 1);Destroy(lineRendArray[lengthOfLineRenderer - 1].gameObject);//lengthOfLineRenderer--;
                }}}        }void DrawRenderLine(LineRenderer line, Vector3 vect3){Vector3 newPos = vect3;line.SetVertexCount(2);line.SetPosition(1, newPos);print("new point: " + newPos);}//public Vector2 RectCenterPoint(Rect AreaRect)       //计算一个Rect的中心点//{//    Vector2 CenterPoint=Vector2.zero;//    print("Rect:"+AreaRect);//    CenterPoint.x=AreaRect.xMin+AreaRect.width/2;//    CenterPoint.y=AreaRect.yMin+AreaRect.height/2;//    print("CenterPoint:"+CenterPoint);//    return CenterPoint;//}/// <summary>/// 鼠标所在位置转换为LineRenderer的位置/// </summary>/// <returns></returns>public Vector3 mousePToLineRendererP()      {screenPoint = Camera.main.WorldToScreenPoint(scanPos);Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint);print("curScreenPoint: " + curScreenPoint);print("curPosition: " + curPosition);return curPosition;}/// <summary>/// 鼠标所在区域的中心点转换为LineRenderer的位置/// </summary>/// <returns></returns>public Vector3 centerPToLineRendererP(int Flag){screenPoint = Camera.main.WorldToScreenPoint(scanPos);Vector3 curScreenPoint = new Vector3(CenterPointList[Flag].x,Screen.height-CenterPointList[Flag].y,screenPoint.z);Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint);print("curScreenPoint: " + curScreenPoint);print("curPosition: " + curPosition);return curPosition;}
}

把touch.CS绑定在Camera上,设置如下:

运行后可以任意点间连线,如图:

  1. World Space(世界坐标):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的。transform.position可以获得该位置坐标。
  2. Screen Space(屏幕坐标,鼠标坐标):以像素来定义的,以屏幕的左下角为(0,0)点,右上角为(Screen.width,Screen.height),Z的位置是以相机的世界单位来衡量的。注:鼠标位置坐标属于屏幕坐标,Input.mousePosition可以获得该位置坐标,手指触摸屏幕也为屏幕坐标,Input.GetTouch(0).position可以获得单个手指触摸屏幕坐标。

  3. ViewPort Space(视口坐标):视口坐标是标准的和相对于相机的。相机的左下角为(0,0)点,右上角为(1,1)点,Z的位置是以相机的世界单位来衡量的。(用的不多,反正我暂时没有用到~呵呵~)

  4. 绘制GUI界面的坐标系:这个坐标系与屏幕坐标系相似,不同的是该坐标系以屏幕的左上角为(0,0)点,右下角为(Screen.width,Screen.height)。

  5. LineRender坐标:以屏幕中心为原点,向上向右增加。
  • 世界坐标→屏幕坐标:camera.WorldToScreenPoint(transform.position);这样可以将世界坐标换为屏幕坐标。其中camera为场景中的camera对象。

  • 屏幕坐标→视口坐标:camera.ScreenToViewportPoint(Input.GetTouch(0).position);这样可以将屏幕坐标换为视口坐标。其中camera为场景中的camera对象。

  • 视口坐标→屏幕坐标:camera.ViewportToScreenPoint();

  • 视口坐标→世界坐标:camera.ViewportToWorldPoint();

案例1——在鼠标点击的位置上绘制一张图片出来(关于绘制GUI界面坐标系与屏幕坐标系之间的关系)。

using UnityEngine;
using System.Collections;public class ScreenToGUI : MonoBehaviour {// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}//图片  public Texture img;    //储存鼠标的位置坐标    private Vector2 pos;void OnGUI(){//鼠标左击,获取当前鼠标的位置       if (Input.GetMouseButton(0)){pos = Input.mousePosition; //屏幕坐标
        }//绘制图片,屏幕坐标和GUI界面坐标只在Y轴上方向相反,只要被Screen.height减就可以互相换。      GUI.DrawTexture(new Rect(pos.x, Screen.height - pos.y, 100, 100), img);}}

案例2——角色头顶的名字(世界坐标转GUI界面坐标)

先世界坐标屏幕坐标,再屏幕坐标转GUI界面坐标

代码如下:

using UnityEngine;
using System.Collections;public class Blood : MonoBehaviour {public static float ScaleWidht = 0f;public static float ScaleHeight = 0f;private Rect _drawRect = new Rect();public float Width = 0f;public float Height = 10f;public const float DesignStageWidth = 800;public const float DesignStageHeight = 480;public Vector2 pos2;public float size_z;// Use this for initializationvoid Start () {ScaleWidht = Screen.width / DesignStageWidth;ScaleHeight = Screen.height / DesignStageHeight;Height = 2f;size_z = transform.gameObject.collider.bounds.size.z;}// Update is called once per framevoid Update () {//世界坐标换到屏幕坐标
        print(transform.forward);pos2 = Camera.main.WorldToScreenPoint(transform.position + transform.forward * (size_z / 2)); //计算角色头顶坐标pos2 = new Vector2(pos2.x, Screen.height  - pos2.y - Height); //Vector3 worldPosition = new Vector3(transform.position.x, transform.position.y + Height, transform.position.z);//worldPosition = Camera.mainCamera.WorldToScreenPoint(worldPosition);//_drawRect = new Rect((worldPosition.x - 100 * ScaleWidht) / ScaleWidht, (Screen.height - worldPosition.y - 50 * ScaleHeight) / ScaleHeight, 200, 50);
    }void OnGUI(){//GUILayout.BeginArea(_drawRect);//    GUILayout.Label("======哈哈======");//GUILayout.EndArea();
GUI.Label(new Rect(pos2.x, pos2.y, 100, 50), "=BETTER=");}
}

案例3——类似屏幕解锁功能的实现(屏幕坐标换为世界坐标)

首先是创建LineRenderer。GameObject -> Create Empty ->更名为“LineRendererObj”,

给LineRendererObj添加“Line Renderer”组件,Component ->Effects ->Line Renderer;

将它的Positions 的size 设置为0

接下来是代码touch.CS:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;public class touch : MonoBehaviour {private Event e;public Texture2D Point;public Color c1 = Color.yellow;public Color c2 = Color.red;public int lengthOfLineRenderer;public GameObject LineRendererPrefab;private LineRenderer lineRenderer;/// <summary>/// 保存创建的Line Renderer/// </summary>private List<LineRenderer> lineRendArray =new List<LineRenderer>();private Vector3 screenPoint;private Vector3 scanPos;private Color[] color;/// <summary>/// 记录宫格所在GUI位置/// </summary>public List<Rect> AreaRect = new List<Rect>();/// <summary>/// 记录宫格中心点/// </summary>public List<Vector2> CenterPointList = new List<Vector2>();/// <summary>/// 宫格标签/// </summary>public int RectFlag;/// <summary>/// 记录正确的滑动顺序/// </summary>public List<int> KeyOrder = new List<int>();/// <summary>/// 记录玩家滑动顺序/// </summary>public List<int> PlayerKeyOrder = new List<int>();/// <summary>/// 判断开始鼠标位置是否可画/// </summary>public bool CheckStartRect=false;/// <summary>/// 判断结束鼠标位置是否可画/// </summary>public bool CheckEndRect = false;/// <summary>/// 行数/// </summary>public int Row = 4;/// <summary>/// 列数/// </summary>public int Column = 4;void Start(){e = Event.current;scanPos = LineRendererPrefab.transform.position;lineRenderer = (LineRenderer)LineRendererPrefab.GetComponent("LineRenderer");lineRenderer.material = new Material(Shader.Find("Particles/Additive"));lengthOfLineRenderer = 0;lineRenderer.SetColors(c1, c2);lineRenderer.SetWidth(0.7F, 0.7F);lineRenderer.SetVertexCount(0);color = new Color[8];color[0] = Color.yellow;color[1] = Color.blue;color[2] = Color.cyan;color[3] = Color.gray;color[4] = Color.green;color[5] = Color.grey;color[6] = Color.magenta;color[7] = Color.red;for (int RowCount = 0; RowCount < Row; RowCount++){for (int columnCount = 0; columnCount < Column; columnCount++){Rect IconRect = new Rect(columnCount * Screen.width / Column + Screen.width / Column / 2 - Point.width / 2, RowCount * Screen.height / Row + Screen.height / Row / 2 - Point.height / 2, Point.width, Point.height);AreaRect.Add(IconRect);Vector2 CenterP = IconRect.center;//得到每个的中心点
                CenterPointList.Add(CenterP);}}}void OnGUI(){e = Event.current;for (int RowCount = 0; RowCount < Row; RowCount++){for (int columnCount = 0; columnCount < Column; columnCount++){Rect IconRect = new Rect(columnCount * Screen.width / Column + Screen.width / Column / 2 - Point.width / 2, RowCount * Screen.height / Row + Screen.height / Row / 2 - Point.height / 2, Point.width, Point.height);GUI.Label(IconRect, Point);}}}void Update(){if (e != null){if (e.type == EventType.MouseDown){for (int i = 0; i < AreaRect.Count; i++){if (AreaRect[i].Contains(new Vector3(Input.mousePosition.x, Screen.height - Input.mousePosition.y, Input.mousePosition.z))){CheckStartRect = true;print("Contains");PlayerKeyOrder.Add(i);RectFlag = i;break;}else{CheckStartRect = false;}}if (CheckStartRect){print("MouseDown_____");//Vector3 curPosition = mousePToLineRendererP(); Vector3 curPosition = centerPToLineRendererP(RectFlag);GameObject newObj;newObj = (GameObject)Instantiate(LineRendererPrefab, LineRendererPrefab.transform.position, LineRendererPrefab.transform.rotation);lineRenderer = (LineRenderer)newObj.GetComponent("LineRenderer");int n = Random.Range(1, 8);c1 = color[n - 1];n = Random.Range(1, 8);c2 = color[n - 1];lineRenderer.SetColors(c1, c2);lineRenderer.SetVertexCount(1);lineRenderer.SetWidth(0.7F, 0.7F);lineRenderer.SetPosition(0, curPosition);lineRendArray.Add(lineRenderer);lengthOfLineRenderer++;}}if (e.type == EventType.MouseDrag&&CheckStartRect){print("MouseDrag_____");Vector3 curPosition = mousePToLineRendererP(); DrawRenderLine(lineRendArray[lengthOfLineRenderer - 1], curPosition);}if (e.type == EventType.MouseUp && CheckStartRect){for (int i = 0; i < AreaRect.Count; i++){if (AreaRect[i].Contains(new Vector3(Input.mousePosition.x, Screen.height - Input.mousePosition.y, Input.mousePosition.z))){CheckEndRect = true;PlayerKeyOrder.Add(i);RectFlag = i;print("EndContains");break;}else{CheckEndRect = false;}}if (CheckEndRect){Vector3 curPosition = centerPToLineRendererP(RectFlag);DrawRenderLine(lineRendArray[lengthOfLineRenderer - 1], curPosition);}else{PlayerKeyOrder.RemoveAt(PlayerKeyOrder.Count - 1);Destroy(lineRendArray[lengthOfLineRenderer - 1].gameObject);//lengthOfLineRenderer--;
                }}}        }void DrawRenderLine(LineRenderer line, Vector3 vect3){Vector3 newPos = vect3;line.SetVertexCount(2);line.SetPosition(1, newPos);print("new point: " + newPos);}//public Vector2 RectCenterPoint(Rect AreaRect)       //计算一个Rect的中心点//{//    Vector2 CenterPoint=Vector2.zero;//    print("Rect:"+AreaRect);//    CenterPoint.x=AreaRect.xMin+AreaRect.width/2;//    CenterPoint.y=AreaRect.yMin+AreaRect.height/2;//    print("CenterPoint:"+CenterPoint);//    return CenterPoint;//}/// <summary>/// 鼠标所在位置换为LineRenderer的位置/// </summary>/// <returns></returns>public Vector3 mousePToLineRendererP()      {screenPoint = Camera.main.WorldToScreenPoint(scanPos);Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint);print("curScreenPoint: " + curScreenPoint);print("curPosition: " + curPosition);return curPosition;}/// <summary>/// 鼠标所在区域的中心点换为LineRenderer的位置/// </summary>/// <returns></returns>public Vector3 centerPToLineRendererP(int Flag){screenPoint = Camera.main.WorldToScreenPoint(scanPos);Vector3 curScreenPoint = new Vector3(CenterPointList[Flag].x,Screen.height-CenterPointList[Flag].y,screenPoint.z);Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint);print("curScreenPoint: " + curScreenPoint);print("curPosition: " + curPosition);return curPosition;}
}

把touch.CS绑定在Camera上,设置如下:

运行后可以任意点间连线,如图:

Unity3D的几种坐标系相关推荐

  1. Unity3D的四种坐标系

    [Unity3D的四种坐标系] 1.World Space(世界坐标):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的.transform.position可以获得该位置坐标. ...

  2. Untiy3D笔记之番外篇——Unity3D的四种坐标系

    原文地址:http://www.cnblogs.com/tekkaman/p/3809409.html [Unity3D的四种坐标系] 1.World Space(世界坐标):我们在场景中添加物体(如 ...

  3. Unity的四种坐标系

    [Unity3D的四种坐标系] 1.World Space(世界坐标):我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的.transform.position可以获得该位置坐标. ...

  4. 【ArcGIS Pro微课1000例】0014:两种坐标系全国1km分辨率DEM下载地址(WGS84+Albers投影)

    本文提供两种坐标系全国1km分辨率DEM下载地址(WGS84+Albers投影). 文章目录 全国1km分辨率DEM数据预览 WGS84地理坐标系 Albers投影坐标系 全国1km分辨率DEM数据下 ...

  5. workbench设置单元坐标系_浅谈Ansys中的几种坐标系

    这篇简短的文章是我多年前在仿真论坛任ansys版主时发表的,时隔多年,同事正好咨询关于ansys坐标系的知识,就将此贴翻出来解他困惑,自己也重温下当年的技术贴,发给大家,希望对学习ansys的初学者有 ...

  6. 库卡机器人坐标手势_库卡机器人为何要几种坐标系?

    展开全部 坐标系是为确定机器人的位置和姿态而在机器人或空e68a84e8a2ad3231313335323631343130323136353331333433653937间上进行定义的位置指标系统. ...

  7. 大地测量常用的四种坐标系

    文章目录 前言 一.北京54坐标系 二.西安80坐标系 三.CGCS2000坐标系 四.阜新92坐标系 前言 作为测绘人员,我们在大地测量中经常用到的四种坐标系分别为:北京54坐标系.西安80坐标系. ...

  8. WINDOWS 几种坐标系

    2019独角兽企业重金招聘Python工程师标准>>> 在窗口中绘图 图形设备接口(GDI)与设备描述表(DC) 图形设备接口(GDI) 许多MS-DOS程序都直接往视频存储区或打印 ...

  9. unity 坐标系转换_Unity的几种坐标系及相互转换

    介绍 1.WorldSpace(世界坐标系) 当我们向场景中添加物体时,他们都是以世界坐标系的方式的方式显示在场景中的 通过transform.position可以得到它在世界中的坐标位置,trans ...

最新文章

  1. xebium周末启动_我如何在周末建立和启动聊天机器人
  2. 导入导出 SAPSCRIPT 的程序
  3. golang go get 命令行安装库 报错 go: cannot use path@version syntax in GOPATH mode 解决方法
  4. 如何用python画圆形的代码-简单实现python画圆功能
  5. pyrosim有Linux版本吗,烟气流动分析软件Pyrosim版本 2020.4.092
  6. Eigen库基本操作
  7. 供应商主数据屏幕增强
  8. NETSH WINSOCK RESET这条命令的含义和作用?
  9. java barrier_Java并发类CyclicBarrier方法详解
  10. 异常检测时间序列_时间序列的无监督异常检测
  11. Android Studio 安装 PlantUML 插件
  12. Intel超线程技术 Hyper-Threading Technology (7) - 最早的一篇超线程论文介绍
  13. bug6-ResourceExhaustedError: OOM when allocating tensor with shape[512,15,15,128]
  14. mysql中regexp用法_MySQL中REGEXP正则表达式使用大全
  15. c语言中取反位运算的作用,C语言位运算符及作用与或异或取反左移和右移
  16. 网页输出pdf并转为word
  17. 数字后端设计相关文件说明
  18. 【lizhi125】分区助手:分区魔术师的终结者/无损分区魔术师!(免费中文完美支持Win7/32与64位系统)
  19. 解决word、typora等打不开超链接问题
  20. 《痞子衡嵌入式半月刊》 第 56 期

热门文章

  1. Java流程控制语句的基本概念
  2. python mysql s_Python-MySQL
  3. CSDN中使用编辑器空格
  4. android 安装卸载应用提醒_Android程序使用代码的安装和卸载!!!
  5. 怎么用计算机弹是你,抖音带你去旅行怎么用计算器弹奏_抖音带你去旅行计算器乐谱_管理资源吧...
  6. matlab ssb,MatlabSSB信号的仿真分析.doc
  7. l28n和开发版_Atmel之SAM4S Xplained开发板评测(二)
  8. cdr 表格自动填充文字_PS那些好用到哭的新手小技巧(1)——如何快速去除文字图片的水印或背景文字?...
  9. realvnc 6 教程 linux,CentOS 6下VNC的安装与配置
  10. 高中信息技术考试软件_郑州市高中信息技术学业水平考试23日起网上报名