使用Android OpenGL ES 2.0绘图之四:应用投影和相机视口

(4)应用投影和相机视口 在OpenGL ES环境中,投影和相机视口使你绘制的对象以更接近物理对象的样子呈现,这是通过精确的数学坐标变换实现的。 阅读详情

传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229

        在OpenGL ES环境中,投影和相机视图让绘制对象以更接近于人们肉眼所看到的实物对象的样子显示。这项仿真技术是通过对绘制对象的坐标进行精确的数学变换而实现的。

投影:这种变换是根据所在GLSurfaceView的宽和高调整绘制对象的坐标。如果没有此变换,对象会被不规则比例的视图所扭曲变形。通常一个投影变换只有当创建OpenGLView或你的renderer类的onSurfaceChange()方法发生变化时才被计算,更多关于OpenGL ES预测和坐标映射的信息,请参阅代码Mapping Coordinates for Drawn Objects。
相机视图:这种变换是基于一个虚拟相机的位置来调整绘制对象的坐标。需要主要的是,OpenGL ES并没有定义一个真实的相机对象,而是提供了一些工具方法变换绘制对象的显示来模拟一个相机。一个相机视图变换可能在创建GLSurfaceView时被计算一次,或根据用户行为或应用程序功能动态地改变。
        这一节将描述如何创建一个投影和一个相机视口,并将它们应用于你的GLSurfaceView的形状绘制过程中。

1定义一个投影

        一个投影变换的数据是在GLSurfaceView.Renderer类的onSurfaceChanged()方法中计算得到的。下面的示例代码演示了根据传入GLSurfaceView的宽和高计算比例,并使用Matrix类frustumM()方法来填充一个投影变换:

@Override
public void onSurfaceChanged(GL10 unused, int width, int height) {
    GLES20.glViewport(0, 0, width, height);

    float ratio = (float) width / height;

    // 在onDrawFrame()方法中,将投影矩阵应用到对象的坐标
    Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
}

        这段代码填充了一个投影矩阵:mProjMatrix,可以把它与一个相机视图变换在onDrawFrame()方法中结合起来使用。
        注:如果只是一个投影变换应用到你的绘制对象中,通常会导致什么也看不到。一般来说,你必须再申请一个相机视图变换才能看到屏幕上的东东。

2定义一个相机视口

        添加一个相机视口变换让你的绘制对象的变换流程变得更加完整。在下面的示例代码中,使用Matrix.setLookAtM()方法来计算相机视口变换,然后结合前面所计算的投影矩阵。将合并后的变换矩阵传递给绘制的形状。

@Override
public void onDrawFrame(GL10 unused) {
    ...

    // 设置相机的位置(视图矩阵)
    Matrix.setLookAtM(mVMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);

    // 计算投影和视图变换
    Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);

    // 绘制形状
    mTriangle.draw(mMVPMatrix);
}

3应用投影和相机视口变换

        为了使用合并后的投影和相机视口变换矩阵,需要修改你的图形对象的draw()方法,接收联合变换矩阵并应用到你的形状上:

public void draw(float[] mvpMatrix) { // 传递计算出的变换矩阵
    ...

    // 获得形状的变换矩阵的handle
    mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");

    // 应用投影和视口变换
    GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0);

    // 绘制三角形
    GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertexCount);
    ...
}

        一旦你已经正确地计算和应用了投影和相机视口变换,你的图形对象将按照正确的比例进行绘制,看起来应该像下面这样:

 

        看看现在你的这个应用程序,它能够按照正确的比例绘制图形,是时候让你的图形动起来了。

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

相关推荐

android opengl 立方体绘制并渲染 程序源代码

根据本人工作整理,因为本人在初学android OpenGL时走了很多弯路。所以抽时间整理了一下。分享给初学android OpenGL的朋友。希望朋友们能够少走弯路。代码注释详细,清晰。

在Android中使用OpenGL ES开发第(五)节:GLSL基础语法

一、前期基础储备 笔者之前的四篇文综述了Android中使用OpenGL ES绘制基本图形和实现了简单的相机预览,初次接触OpenGL ES开发的读者可能对其中新的概念比较迷惑,尤其是其中的顶点着色器(Vertex Shader)和片元着色器(Fragment Shader),我们知道,在OpenGL中顶点着色器是针对每个顶点执行一次,用于确定顶点的位置。片元着色器是针对每个片元,片元可以理解为...

Chin_Style的博客 6578

android openGL es2.0简单图形绘制

android openGL es2.0简单图形绘制 简单绘制三角形 里面注释很详细

Android OpenGL ES 入门系列(五) --- 应用投影和相机视角

转载请注明出处 本文出自Hansion的博客 本章介绍如何创建投影和相机视图,并应用于GLSurfaceView中绘制的形状上。 在OpenGL ES环境中,利用投影和相机视角可以让绘制对象的显示更接近人眼看到的样子,这是一种视角模拟,它是通过对绘制对象坐标进行数学变换实现的。 投影(Project

Hansion的博客 1183

2017-10-27 在以前的代码中加入了opengl ES2.0显示点云的功能,代码毫无保留的分享给大家

2017-10-27 在以前的代码中加入了opengl ES2.0显示点云的功能,代码毫无保留的分享给大家,下载完了不会用的联系我。

android opengl es2.0 立方体

在android 环境下实现用opengl es 2.0画立方体 并且实现手动触摸旋转 完整代码

Android OpenGL ES2.0编程教程系列之投影和相机视图的应用(四)

原文链接 OpenGL ES环境允许你以更接近于你眼睛看到的物理对象的方式来显示你绘制的对象。物理查看的模拟是通过对你所绘制的对象的坐标进行数学变换完成的: Projection — 这个变换是基于他们所显示的GLSurfaceView的宽和高来调整绘制对象的坐标的。没有这个计算变换,通过OpenGL绘制的形状会在不同显示窗口变形。这个投影变化通常只会在OpenGL view的比例被确

AlanWang4523 1887

从零到一:3D-ResNet50在医学影像中的实战陷阱与避坑指南

本文深入探讨了3D-ResNet50在医学影像分类中的实战应用,重点解析了NIFTI数据预处理、小样本迁移学习陷阱及GPU显存优化等关键问题。通过分块加载、混合精度训练等技巧,有效解决了医学影像处理中的内存管理和性能挑战,为开发者提供了实用的避坑指南和优化策略。

weixin_29038345的博客 390

关于OpenGL ES 2.0中 相机视觉,也就是Matrix.setLookAtM()参数的详细解说

关于OpenGL ES 2.0中 相机视觉,也就是Matrix.setLookAtM()参数的详细解说

a7178077的专栏 1万+

10.2 构网型变流器引发的次同步振荡与宽频振荡问题:机理分析与抑制技术

随着构网型变流器在新型电力系统中的规模化部署,其作为电压源主动支撑电网的能力得到验证的同时,也引发了一系列前所未有的稳定性问题。传统的同步发电机主导的电力系统中,振荡模式主要集中于**低频区间**。然而,构网型变流器通过快速数字控制实现的虚拟同步、惯性响应等先进功能,其控制环路动态与电网阻抗、其他电力电子设备之间产生了复杂的交互作用。这种交互不仅可能诱发经典的**次同步振荡**,更可能催生频率范围从数赫兹到数百赫兹甚至上千赫兹的**宽频振荡**。

技术工作者 1304

【学习记录】IIC驱动ICM42670+卡尔曼滤波+四元数姿态角解算

ICM42670陀螺仪可以使用iic驱动,单片机平台使用GD32f305VE。

liarsup的博客 8265

android OpenGL ES2.0编程初学

[置顶] 一步一步学android OpenGL ES2.0编程(1) 分类: android开发2013-01-23 11:01 10295人阅读 评论(9) 收藏 举报 androidAndroidANDROIDOpenGLopenglopenGLOPENGLOpenglOpenGl 目录(?)[+] (欢迎大家加入android技术交流QQ群:209796692)   建立Ope

kaiqiangzhang001的专栏 2622

CHIP-Seq数据分析流程

文章目录CHIP-Seq数据分析流程相关软件安装数据下载将SRA转化为fastq文件数据质控,过滤数据质控然后进行质控,过滤低质量reads,去接头比对下载小鼠参考基因组的索引和注释文件比对sam文件转bam为bam文件建立索引载入IGV查看用MACS call peak安装MACS结果注释与可视化 CHIP-Seq数据分析流程 相关软件安装 所需要的软件有sratoolkit, fastqc,bowtie2,samtools,macs2,htseq-count,bedtools和前面RNA-seq数据分析

bio_meimei的博客 8789

Android 官方 Training 笔记之 OpenGL ES

目的 注意 构建 OpenGL 环境 在清单文件中声明 创建一个 OpenGL ES 图形的 activity 创建 GLSurfaceView 对象 创建渲染器类 定义图形 定义一个三角形 定义一个正方形 绘制图形 初始化形状 绘制形状 应用投影和相机视图 定义投影 定义一个摄像头视图 应用投影和照相转换 添加动态 旋转形状 响应触摸事件 安装触摸监听器 暴露旋转角度 应用旋转 下载目的引导开发使

Airsaid 3291

Office系列完全干净卸载工具合集(最全)

使用 Microsoft Fix it 卸载 Microsoft Office 套件 一、Windows 7、Windows Vista或Windows XP下卸载Office 1.MicrosoftEasyFix50416 工具用来卸载office 2003 MicrosoftEasyFix50416_Office2003.msi 2.MicrosoftEasyFix50154 工具用来卸载office 2007 MicrosoftEasyFix50154_Office2007.msi 3.Microso

业精于勤,荒于嬉 3万+

vue2/3 - 详细实现高德地图轨迹回放,vue高德地图车辆历史行驶轨迹播放,在地图上绘制行程轨迹|起点和终端的路程绘制|用户运动轨迹绘制及播放等(支持开始/暂停、进度条拖放、控制播放轨迹的倍速等)

vue2,vue3,nuxt,高德地图,轨迹,vue高德地图轨迹回放,历史轨迹回放,轨迹回放功能支持倍速及进度条拖拽,VUE高德地图轨迹回放、倍速调整、进度条拖拽,vue3高德地图轨迹回放,Vue实现地图路径回放,vue中使用高德地图实现历史轨迹回放并能控制播放轨迹的倍速,多条轨迹陆续播放,巡航轨迹做带进度条和倍速的轨迹回放,Vue高德地图路径回放,历史轨迹回放并能控制播放轨迹的倍速,使用高德地图实现轨迹播放和进度条控制,vue高德地图如何实现轨迹回放,高德地图做轨迹绘制用什么api,高德轨迹API,驾车轨

✅ 精选推荐文章 1万+

Android openGL ES2.0 Matrix.frustumM和Matrix.setLookAtM解析

Android使用OpenGL ES2.0绘制3D图像或者加载3D模型时,为了达到立体效果往往需要设置视见转换矩阵和投影转换矩阵即 Matrix.setLookAtM(mVMatrix, 0, cx, cy, cz, tx, ty, tz, upx, upy, upz) 和 Matrix.frustumM(mProjMatrix, 0, left, right, bottom, top, near

jamesshaoya的专栏 8241

2021.07.05【R语言】丨预测lncRNA并绘制venn图

目录摘要环境与方法依赖工具预测工具绘制工具使用命令预测lncRNA统计noncoding_ID绘制Venn图结果展示总结 摘要 接到一个单样品测lncRNA数据的项目,正好拿来练练手,梳理一下lncRNA流程。这里记录预测lncRNA并生成venn图的过程 环境与方法 R version 3.6.3 (2020-02-29) 依赖工具 预测工具 CPC2 CNCI Pfam CPAT 绘制工具 R:VennDiagram 使用命令 预测lncRNA CPC2 #更换env conda activate py

2035

使用Android OpenGL ES 2.0绘图之五:添加运动

传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229         在

leverli的专栏 6230

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Android OpenGL ES 开发教程(17):投影变换Projection

前面ModelView变换相当于拍照时放置相机和调整被拍物体的位置和角度。投影变换则对应于调整相机镜头远近来取景。 下面代码设置当前Matrix模式为Projection投影矩阵: gl.glMatrixMode(GL_PROJECTION); gl.glLoadIdentity();   后续的坐标变换则针对投影矩阵。投影变换的目的是定义视锥(viewing volume),视锥一方

引路蜂移动软件 7310

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

基于Android的OpenGL—在 GLSurfaceView上绘制三角形和使用投影和相机视图

作者:张秀龙 定义三角形 OpenGL 允许我们使用三维坐标来定义物体。在绘制三角形前,我们需要定义它各个点的坐标。我们一般使用数组来存储各个顶点的坐标。 OpenGL ES 默认 [0,0,0] (X,Y,Z) 在GLSurfaceView的中心,[1,1,0]在右上角,[-1,-1,0]在左下角。   绘制三角形 在绘制三角形之前,我们必须告诉OpenGL我们正在使用顶

移动平台应用软件开发技术 2698

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Android OpenGL ES绘图教程之四 :投影和相机视图变换

在OpenGL ES环境中,投影和相机视图可以使被绘制的对象在某种方式上看起来更像实际的物体,这个模拟实际对象的场景是通过被绘制对象坐标的数学转换实现的:        投影 - 这种调整绘制对象坐标的变换是根据GLSurfaceView显示位置的宽度和高度。没有这个计算,OpenGL ES绘制的对象就会在不同比例的view window中扭曲变形。典型的投影变换只有在OpenGL view比例

fanfanxiaozu的专栏 2161

使用Android OpenGL ES 2.0绘图之四:应用投影和相机视图

传送门☞Android兵器谱☞转载请注明☞http://blog.csdn.net/leverage_1229 传送门☞系统架构设计☞转载请注明☞http://blog.csdn.net/leverage_1229 传送门☞GoF23种设计模式☞转载请注明☞http://blog.csdn.net/leverage_1229 在OpenGL ES环境中,投影和相机视图让绘制对象以更...

xuela-net 315

Android OpenGL ES 2.0开发环境搭建与3D渲染实践

OpenGL ES作为移动端3D图形渲染的行业标准,其可编程管线架构通过顶点着色器和片段着色器实现灵活渲染控制。在Android平台开发中,GLSurfaceView与EGL配置构成基础渲染环境,而MVP矩阵体系则处理3D空间变换。通过VBO优化顶点数据传递、纹理映射增强表面细节、Phong光照模型提升真实感,开发者能构建高性能图形应用。典型应用场景包括AR/VR、游戏开发和数据可视化,其中着色器编译、GPU资源管理和多版本API兼容是需要重点掌握的核心技术。

cucanqi9387的博客 487
上一篇: 使用Android OpenGL ES 2.0绘图之三:绘制形状
下一篇: 使用Android OpenGL ES 2.0绘图之五:添加运动
innovation
博客等级 码龄14年 251粉丝 136原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值