OpenGL ES 3D空间中自定义显示空间
在Android中,我们所熟知的是在ES管线中,其在图元装配时,会进行图元组装与图元分配,这样就回剪裁出来视景体中的物体。但是如果我想在3D场景中规定一个区域,凡是在这个区域中的物体就能显示出来,非这个区域中的物体就要剪裁掉。常见的做法是调用ES的API进行一些数据的裁剪。但是这样对OpenGL ES这个状态机来说,状态的切换是很耗费性能。为何不用着色器来进行裁剪那。
废话不多说了,先说一下自定义裁剪需要的步骤。
1.首先将传递到顶点着色器中的顶点(该顶点不经过任何的变换)乘以自身的一个ModelMartix矩阵,这一步骤的操作,相信做过OpenGL ES的人就会明白,这是将顶点从模型坐标系转化到世界坐标系。因为在OpenGL ES中如果不加任何特殊的说明,自己在着色器中或者在附属语言中,定义一个位置点,这个位置点所在的坐标系是在世界坐标系中的,而OpenGL ES对坐标系是很敏感的,所以得转化到同一个坐标系进行数学计算。
vec4 ds = modelMartix*vec4(vPosition.xyz,1.0);
2.将转化后的顶点坐标传递到片元着色器中,这样就可以拿着这个坐标进行做事了,因为其转化过来的是世界坐标系下的顶点位置,然后自己规定一个立方体盒子,盒子内的显示,盒子外的不显示,看到这么简单的代码,是不是感觉原来写shader也是一件极其舒坦的事情那。
if(ds.y>=-20.0&&ds.y<=25.0){
gl_FragColor = texture2D(sTexture, vTextureCoord);
}else{
discard;
}
OpenGL ES 3D空间中自定义显示空间的更多相关文章
- Android下Opengl ES实现单屏幕双眼显示
http://blog.csdn.net/u011371324/article/details/68946779 默认情况下,Opengl ES使用系统提供的帧缓冲区作为绘图表面,一般情况下,如果只在 ...
- OpenGL ES Shading Language中应尽量避免使用循环
In addition to basic if-then-else statements, it is possible to write for, while, and do-while loo ...
- OpenGL ES Shader语言中的函数不支持递归
An example function definition is given here for a simple function that computes basic diffuse light ...
- 最新广商小助手 项目进展 OpenGL ES 3D在我项目中引用 代码太多只好选重要部分出来
package com.example.home; import java.io.IOException; import java.io.InputStream; import javax.micro ...
- [OpenGL ES 03]3D变换:模型,视图,投影与Viewport
[OpenGL ES 03]3D变换:模型,视图,投影与Viewport 罗朝辉 (http://blog.csdn.net/kesalin) 本文遵循“署名-非商业用途-保持一致”创作公用协议 系列 ...
- 3D OpenGL ES
什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库. 为桌面版本OpenGL 的一个子集. ...
- 在Android中使用OpenGL ES进行开发第(一)节:概念先行
一.前期基础是知识储备笔者计划写三篇文章来详细分析OpenGL ES基础的同时也是入门关键的三个点: ①OpenGL ES是什么?与OpenGL的关系是什么?——概念部分 ②使用OpenGL ES绘制 ...
- 如何使用Android中的OpenGL ES媒体效果
引自:http://www.2cto.com/kf/201506/404366.html Android的媒体效果框架允许开发者可以很容易的应用多种令人印象深刻的视觉效果到照片或视频之上.作为这个媒体 ...
- iOS 中OpenGL ES 优化 笔记 1
1,避免同步和Flushing操作 OpenGL ES的命令执行通常是在command buffer中积累一定量的命令后,再做批处理执行,这样效率会更高:但是一些OpenGL ES命令必须flush ...
随机推荐
- kali 2020.4 在安装typecho时,无法连接数据库的问题
问题与环境 linux的环境为 kali 2020.4 php版本为:PHP 7.4.11 安装的typecho版本为:typechov1.0 遇到的问题是:在typecho初始化时,数据库的信息都填 ...
- C语言字幕从外向中间汇聚
演示数据中多个字符,从两端向中间移动,向中间汇聚 简单,粗暴,先上代码: Sleep()函数属于<windows.h>头文件中. sizeof()函数求右下标:数组内是数字时,求右下标要- ...
- Matlab R2019b安装中的问题
1.licens文件以及dll文件的放置 MATLAB的安装镜像文件放置在D:\MATLAB,我们MATLAB安装在D:\MATLAB2019B,在激活过程中,我们需要破解文件夹中的license_s ...
- Javascript中定时器的使用方法
Javascript中定时器的使用方法 1.间隔定时器(每隔一段时间执行一次代码) 格式:setInterval(函数,时间) //时间单位是毫秒,每隔设置的时间执行函数里的内容一遍(一直执行) // ...
- 打印十字码 DataMatrix
nuget 安装 DataMatrix.net //示例 DmtxImageEncoder Die = new DmtxImageEncoder(); DataMatrix.net.DmtxImage ...
- lua之自索引
Father={ a=100, b=200 } function Father:dis() print(self.a,self.b) end Father.__index=Father Son= { ...
- golang中的rpc开发
golang中实现RPC非常简单,官方提供了封装好的库,还有一些第三方的库 golang官方的net/rpc库使用encoding/gob进行编解码,支持tcp和http数据传输方式,由于其他语言不支 ...
- python操作MySQL--实例
有一段时间,没更新,但这都不是自己懒惰的借口,希望自己能坚持下去: python可以操作MySQL 数据库,需要安装的是MySQL-python,并且实现读入excel表及生成excel 表,则需要x ...
- Android开发-主要的dialog
dialog是弹出式窗口,点击后会以窗口的形式弹出 主要有添加备注,日历选择等,通过设置事件监听,将dialog弹出来 package com.example.Utils.fragment; impo ...
- OPENCV中Line2D对象的意义
这个对象有四个属性值 VY/VX就是直线的斜率,这俩值代表着直线的归一化向量 X,Y就是直线上的任意一点 直线方程计算如下: