OpenGL ES 2.0坐标系设定与顶点转换

OpenGL与3D开发 - OpenGL与OpenGL ES OpenGL与OpenGL ES 文章目录OpenGL与OpenGL ES1、3D图像引擎简介2、OpenGL3、OpenGL ES3.1 OpenGL ES版本分类4、OpenGL ES中基本概念4.1、渲染管线5、OpenGL 坐标系理解5.1、2D笛卡尔坐标5.2、3D笛卡尔坐标系5.3、左手坐标系和右手坐标系5.4、左手旋转规则、右手旋转规则5.5、对我们来说比较重要的总共有5个不同的坐标系统 1、3D图像引擎简介 现今较为知名的3D图形引擎有OpenGL、DirectX Ø DirectX 阅读详情

原文:http://blog.youkuaiyun.com/yu0089/article/details/18600903


  前面我们对使用Android OpenGL ES 2.0绘图做过综述。对于刚刚接触到OpenGL的人来说,纹理和贴图往往令其感动很头疼。在解开这些谜团之前,我们先来了解一下绘制图形的基础--坐标系。 

1坐标系分类

        在使用OpenGL的场景中,存在世界坐标、局部坐标、纹理坐标和屏幕坐标几种。 

1.1OpenGL坐标系

        分为3个轴,x,y,z 中心点为o, 箭头方向为正方向,最大与最小值为1和-1,这是经过归一化处理的。这样的设计是为了便于显卡计算。 

1.2屏幕坐标系

        应用在设备屏幕上的坐标系。也就是图形最终绘制的地方。左上角为原点,箭头为正方向,大小又屏幕像素大小决定。OpenGL的屏幕坐标系,Y轴向上为正。相当于上面那个三维坐标系截取一个二维的XY。 

1.3纹理坐标系

        也做了归一化处理。这个坐标就代表了一个纹理。OpenGL是基于定点的网格绘制。就是说,OpenGL的图形都是由很多顶点,按照一定的规则链接起来构成的图形。那么纹理坐标的4个坐标点,映射到顶点上。OpenGL就会把这个纹理应用到4个定点构成的图形上。 

1.4坐标系组合

        
        将OpenGL坐标系的中心点与屏幕坐标系的中心点重合。矩形为屏幕的区域。openGL的绘制方法会把这个坐标系的顶点,组合成图形呈现在屏幕上(所以可以认为顶点坐标(x, y)就是屏幕坐标归一化的结果,当然,这个屏幕坐标可能只是物理显示器的其中一块显示区域)。当然这里还涉及到摄像机的位置,屏幕剪裁等设置。暂时不考虑。 

2顶点

2.1顶点坐标

        那么什么是顶点呢?就是一个有xyz坐标的点。如(0,0,0)或(1,1,1)。XY就和通常的二维坐标一样定位平面的位置。Z轴表示的是深度,OpenGL就是为了绘制3D图形而诞生的。顶点坐标是做了归一化处理的float类型。那么这里就会涉及到屏幕坐标系到OpenGL坐标系的转化工作。 
        屏幕坐标系,左上点为(0,0) 那么屏幕中心点坐标,就是(sreenWidth / 2, screenHeight / 2)。而对应openGL坐标系的归一化坐标就是(0,0,0)。所以这里需要把屏幕坐标转换成openGL的归一化坐标。 

2.2转化方法


/**
   * Convert x to openGL
   * 
   * @param x
   *            Screen x offset top left
   * @return Screen x offset top left in OpenGL
   */
  public static float toGLX(float x) {
      return -1.0f * ratio + toGLWidth(x);
  }
 
  /**
   * Convert y to openGL y
   * 
   * @param y
   *            Screen y offset top left
   * @return Screen y offset top left in OpenGL
   */
  public static float toGLY(float y) {
      return 1.0f - toGLHeight(y);
  }
 
  /**
   * Convert width to openGL width
   * 
   * @param width
   * @return Width in openGL
   */
  public static float toGLWidth(float width) {
      return 2.0f * (width / screenWidth) * ratio;
  }
 
  /**
   * Convert height to openGL height
   * 
   * @param height
   * @return Height in openGL
   */
  public static float toGLHeight(float height) {
      return 2.0f * (height / screenHeight);
  }
 
  /**
   * Convert x to screen x
   * 
   * @param glX
   *            openGL x
   * @return screen x
   */
  public static float toScreenX(float glX) {
      return toScreenWidth(glX - (-1 * ratio));
  }
 
  /**
   * Convert y to screent y
   * 
   * @param glY
   *            openGL y
   * @return screen y
   */
  public static float toScreenY(float glY) {
      return toScreenHeight(1.0f - glY);
  }
 
  /**
   * Convert glWidth to screen width
   * 
   * @param glWidth
   * @return Width in screen
   */
  public static float toScreenWidth(float glWidth) {
      return (glWidth * screenWidth) / (2.0f * ratio);
  }
 
  /**
   * Convert height to screen height
   * 
   * @param glHeight
   * @return Height in screen
   */
  public static float toScreenHeight(float glHeight) {
      return (glHeight * screenHeight) / 2.0f;
  }


Android OpenGL ES纹理总结、纹理坐标系说明、使用代码示例 #.纹理介绍: 可以简单想象成一张皮,可以贴在OpenGL空间中自己指定的区域之上,从而实现需要的视觉效果。 ##.使用纹理的好处: 如果想让图形看起来更真实,就必须有足够多的顶点,还要设置相应的颜色属性,会产生很多性能开销。 而如果是使用在指定的位置贴上一层纹理的方式,不需要非常多顶点,只需要纹理绘制满足需要,OpenGl中顶点位置与纹理对应位置关联正确。就可以达到需要的细节显示效果。 ##."需要蒙皮"位置与纹理的对应关系 纹理有自己内部的坐标系,纹... 阅读详情

相关推荐

Android显示系统(02)- OpenGL ES - 概述

为了介绍清楚Android显示系统,得从实战的目的花几篇文章介绍下OpenGL ES,对OpenGL ES熟悉的可以直接跳过这几章。OpenGL ES是OpenGL的精简版,专门用于嵌入式平台,因为嵌入式平台硬件资源有限,做了定向的优化。而OpenGL就是定义了一套渲染API标准(注意不是库),方便不同操作系统,不同硬件对渲染进行统一。目的就是一个:将3D世界转换到2D屏幕显示出来,比如以前小学课文中有一篇叫做《画杨桃》,3D空间中的杨桃就像我们设计的一个模型,但是,从不同视角去看,在2D屏幕上形成的一张画

Ziwubiancheng的博客 1931

Android OpenGL ES 2.0坐标系设定与顶点转换

前面我们对使用Android OpenGL ES 2.0绘图做过综述。对于刚刚接触到OpenGL的人来说,纹理和贴图往往令其感动很头疼。在解开这些谜团之前,我们先来了解一下绘制图形的基础--坐标系。  1坐标系分类         在使用OpenGL的场景中,存在世界坐标、局部坐标、纹理坐标和屏幕坐标几种。  1.1OpenGL坐标系         分为3个轴,x,y,z

yu0089的专栏 9963

OpenGL ES 2.0学习(一)入门知识点

前言 一个多月前开始学习Android OpenGL ES,起初是因为需要做滤镜,然后慢慢发现很有趣。但是自己感觉学起来并没有想象那么容易,主要涉及太多的转换,还有着色器语言等,但它确实强大,可以做一些滤镜,很炫的3D效果/全景等。目前自己还处于入门阶段。 OpenGL ES OpenGL ES 为OpenGL嵌入式系统,是一个适用于嵌入式系统的二维或者三维的图形库 是桌面版O...

A_sendy的博客 914

OpenGL入门教程之 坐标系统

本文仅对有代码的地方做讨论。

少年的博客 1364

OpenGL ES2.0的一些总结

本文总结了OpenGLES 2.0的一些注意点

huiyihgy的专栏 873

openGL ES3.0基础简介

一、openGL与openGL ES 1.openGL删除任何冗余得到openGL ES,保留最实用的方法 ①适用设备:手持和嵌入式为目标的高级3D图形API ②openGLES优化:降低电源消耗、着色器处理性能提升(引入精度限定符)   二、基本概念及专有名词 1.基础名词 基础名词推荐阅读PDF文章:图形处理器架构(GPU_Architecture)与图形管线(Graphics_...

u010369714的博客 1565

Android OpenGL基础(二、坐标系统)

一、引言   在Android OpenGL基础(一、绘制三角形四边形)中,我们简单实现了绘制三角形的功能。大家可能会发现,我们声明的是一个标准设备坐标系下的等边三角形: class Triangle { // 三角形三个点的坐标值 private var triangleCoords = floatArrayOf( 0.0f, 0.5f, 0.0f, // top -0.5f, -0.5f, 0.0f, // bottom left

BC工坊 3876

音视频篇 - OpenGL ES 2.0的简介

今天开始正式的 Android 音视频技术的学习,根据前面的分析,先来学习图片相关的处理 - OpenGL ES 2.0。 OpenGL ES 简介 OpenGL (全写 Open Graphics Library) 是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像 (二维的亦可),是一个功能强大,调用方便的底层图形库。 OpenGL 在不同的平台上有不同的实现,但是它定义好了专业的程序接口,不同的平台都是遵照该接口来进行实现的,思想完全相同,方法名也是一致的,所

1 710

Android之OpenGL学习

Android的OpenGL初步学习记录

一夜梦惊人的博客 2446

Android OpenGL ES 绘制 二/三维坐标系

在实际应用中,您可能需要更多的代码来处理更复杂的场景和图形绘制。通过绘制坐标系,我们可以实现场景的定位和旋转,以及在其中绘制其他图形元素。首先,我们需要定义坐标系的顶点数据。对于二维坐标系,我们可以定义一个包含四个顶点的矩形,每个顶点都包括位置和颜色信息。顶点着色器的作用是对输入的顶点数据进行处理和变换。在这里,我们只需要将顶点位置传递给片段着色器。然后,我们需要将顶点和片段着色器编译为OpenGL ES程序,并将顶点数据传递给着色器。接下来,我们需要编写顶点和片段着色器来处理顶点数据和渲染过程。

IqFlask的博客 903

NDK OpenGL ES 3.0 开发(八):坐标系统

该原创文章首发于微信公众号:字节流动 OpenGL 坐标系统 我们知道 OpenGL 坐标系中每个顶点的 x,y,z 坐标都应该在 -1.0 到 1.0 之间,超出这个坐标范围的顶点都将不可见。 将一个物体(图像)渲染到屏幕上,通常经过将物体坐标转换为标准化设备坐标,然后再将标准化设备坐标转化为屏幕坐标的过程。 该过程通常涉及多个坐标系统的变换,将所有顶点转换为片段之前,顶点需要处于不同的坐标...

字节流动 8950

OpenGL ES 基础:坐标系映射与纹理渲染实战

本文深入解析OpenGL ES坐标系系统与纹理渲染技术,详细介绍了屏幕坐标系、纹理坐标系和顶点坐标系的差异及其映射关系。通过实战代码演示,解决常见的图像倒置问题,并讲解GLSL着色器编写与完整渲染流程实现,帮助开发者掌握OpenGL ES纹理渲染的核心技术。

grape的博客 937

Android OpenGL ES 绘制三维/空间坐标系透明

Android OpenGL ES (二) 绘制三维/空间坐标系 透明的立体图加三维向量和xyz坐标轴 源代码包,直接倒入eclips修改packadge便可用

安卓三维绘图--OpenGL ES(学习记录三)绘制三维坐标系

大多数教程都是画三角锥、立方体,而我的需求是以画一个坐标系为基础,类似图一 首先,要确定想画顶点 //定义XYZ坐标 float xyzVertices[] = new float[]{ -0.6f, 0f, 0f,//x轴起点 0.6f, 0f, 0f,//X轴的终点 0.5f,0.1f,0f,//X轴箭...

ziigea的博客 2978

Fortify SCA 24.4 最新可用版

Fortify Static Code Analyzer(Fortify SCA) 是一款由 Micro Focus(原惠普旗下)开发的 静态应用安全测试(SAST)工具,专注于在软件开发早期通过分析源代码或编译后的二进制文件,识别潜在的安全漏洞、代码缺陷和合规性问题。以下是其核心特点与功能:核心功能 静态代码分析 在不运行程序的情况下,通过语法、语义分析检测代码中的安全漏洞(如 SQL 注入、跨站脚本(XSS)、缓冲区溢出等)和代码质量问题。

棉花糖的博客 3180

从零到一:树莓派OpenWrt squashfs固件扩容背后的文件系统魔法

本文深入解析树莓派OpenWrt系统中squashfs固件的扩容原理与操作。通过理解squashfs与overlayfs的协同机制,掌握分区调整和文件系统扩容技巧,解决存储空间限制问题,提升设备可用性。

hadoop5ranger的博客 1037

OpenGL ES 三 opengl 坐标系 ,纹理坐标系

一、 常用的坐标系 1. Android View 坐标系 2. opengl坐标系中采用的是3维坐标: static final float COORD[] = { -1.0f, -1.0f, //1 1.0f, -1.0f, //2 -1.0f, 1.0f, //3 1.0f, 1.0f, //4 }; 坐标原点默...

3554

QT邂逅豆包API:打造专属文章生成神器

通过本次探索,我们成功基于 QT 调用豆包 API 开发出了文章生成工具。从前期的准备工作,到核心代码的实现,再到功能的拓展与优化,每一步都凝聚着技术的魅力与挑战。我们学会了申请豆包 API 密钥,搭建 QT 开发环境,创建网络请求类来与豆包 API 进行交互,构建请求体并解析响应,还为工具添加了友好的界面交互,提升了性能。

大雨淅淅的博客 1970

OpenGL ES 2.0在MagicSurfaceView中的核心实现原理

MagicSurfaceView是一个强大的Android动画特效库,通过OpenGL ES 2.0实现了各种炫酷的3D动画效果。本文深入解析其核心实现原理,帮助开发者理解如何利用OpenGL ES 2.0在Android平台上创建高性能的视觉效果。🎯 ## 1. MagicSurfaceView的OpenGL ES 2.0架构设计 MagicSurfaceView基于Android的GLS

gitblog_01131的博客 620

泛微E8流程监控指南:如何用SQL实时追踪审批节点状态?

本文详细介绍了如何利用SQL实时监控泛微E8系统中的审批流程状态,包括核心数据表结构解析、全链路监控SQL实战以及智能预警机制设计。通过数据库直接查询和状态关联分析,帮助企业快速定位卡顿节点,提升流程效率。适用于需要优化OA系统流程管理的企业IT人员和业务主管。

weixin_30687051的博客 436

【62】OpenCV C++实战篇——【项目实战】OpenCV C++ 精准定位“十字刻度尺”中心坐标,过滤图片中的干扰,精准获取十字交点坐标

本文针对工业相机拍摄的2000万像素图像中十字刻度尺的精确定位问题进行了研究。面对图像较暗、存在红黄干扰、记号笔涂抹及细节模糊等难点,提出了一种基于霍夫变换的解决方案。通过灰度化、反色、二值化预处理后,对比分析了多尺度霍夫直线(HoughLines)和渐进概率霍夫线段(HoughLinesP)两种方法的定位效果。实验结果表明,HoughLinesP由于具有最小线段长度和间隙约束,在直线贴合度和交点定位精度上表现更优,其返回的线段端点坐标也更便于后续处理。该研究为工业视觉中微小目标的精确定位提供了实用参考。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 975

OpenGL ES 2.0 完全入门

1. 基本概念 在 OpenGL 的世界里,我们只能画点、线、三角形,复杂的图形都是由三角形构成的。 在 OpenGL 里有两个最基本的概念:Vertex 和 Fragment。一切图形都从 Vertix 开始,Vertix 序列围成了一个图形。那什么是 Fragment 呢?为此我们需要了解一下光栅化(Rasterization):光栅化是把点、线、三角形映射到屏幕上的像素点的过程(每个映射区域叫一个 Fragment),也就是生成 Fragment 的过程。通常一个 Fragment 对应于屏幕上的

EveryDayOneHour的博客 2527

单稳态触发器Multisim电路仿真——硬件工程师笔记

本文系统介绍了单稳态触发器的基础知识及其实现方式。主要内容包括:1)单稳态触发器的工作原理、电路结构、特点及应用;2)555定时器实现单稳态触发器的配置及工作过程;3)使用反相器和与非门实现积分型和微分型单稳态触发器的电路结构及工作原理。文章详细阐述了各种实现方式的特性、应用场景及设计考虑,为硬件工程师提供了实用的电路设计参考。最后还附有相关笔试面试题链接,便于读者进一步学习扩展。

XU157303764的博客 1875
上一篇: 绘制三角形序列的三种方式 :GL_TRIANGLES、GL_TRIANGLE_STRIP和GL_TRIANGLE_FAN
下一篇: LINUX C中如何定义可变参数的宏
code09
博客等级 码龄18年 31粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值