OpenGL ES 3. Mipmap 纹理

2024-05-10 19:32
文章标签 es opengl 纹理 mipmap

本文主要是介绍OpenGL ES 3. Mipmap 纹理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大家好,接下来将为大家介绍OpenGL ES 3. Mipmap 纹理(多级渐远纹理)。

        当需要处理的场景很大时,若不采用一些技术手段,可能会出现远处地形视觉上更清楚,近处地形更模糊的反真实现象。 这主要是由于透视投影中有近大远小的效果,远处的地形投影到屏幕上尺寸比较小,近处的尺寸 比较大,而整个场景使用的是同一幅纹理图。因此,对远处的物体而言纹理图被缩小进行映射,自然很清楚;而近处的物体可能纹理图需 要被放大进行映射,自然就发虚。

        这时我们可能会想到,应该对远处的地形采用尺寸较小分辨率的纹理,近处的采用尺寸较大分辨率高的纹理,这其实就是 mipmap(多级渐远纹理)的基本思想。

        mipmap系列纹理的生成仅需要在加载纹理时进行一些设置即可,其他的工作是由渲染管 线自动完成的。mipmap 的基本工作原理如下图所示。

系统会在纹理加载时自动生成一系列由大到小的纹理图。每幅纹理图是前一幅尺寸的 1/2,直􏴐纹理图的尺寸缩小到 1 * 1。

 

        一系列的 mipmap 纹理图生成成功后,当应用程序运行时,渲染管线会首先根据情况计算出细节级别,然后根据细节级别决定使用系列中哪一个分辨率的纹理图。开发中将采样方式设置为mipmap,并自动生成一系列的 mipmap 纹理图的基本代码如下。

GLES30.glTexParameteri ( GLES30.GL_TEXTURE_2D, //设置 MIN 情况为 mipmap 最􏰯点采样        GLES30.GL_TEXTURE_MIN_FILTER, GLES30.GL_LINEAR_MIPMAP_NEAREST);
GLES30.glTexParameteri ( GLES30.GL_TEXTURE_2D, //设置 MAG 情况为 mipmap 线性采样GLES30.GL_TEXTURE_MAG_FILTER, GLES30.GL_LINEAR_MIPMAP_LINEAR);
GLES30.glGenerateMipmap(GLES30.GL_TEXTURE_2D); //自动生成 mipmap 系􏴓系列纹理

        开发中使用 mipmap 纹理并设置采样方式时,除了可以使用前面介绍过的最近点采样和线性 采样,一般需要选用 mipmap 专用的 4种纹理采样方式。

 

GL_NEAREST_MIPMAP_NEAREST使用最邻近的多级渐远纹理来匹配像素大小,并使用邻近插值进行纹理采样
GL_LINEAR_MIPMAP_NEAREST使用最邻近的多级渐远纹理级别,并使用线性插值进行采样
GL_NEAREST_MIPMAP_LINEAR在两个最匹配像素大小的多级渐远纹理之间进行线性插值,使用邻近插值进行采样
GL_LINEAR_MIPMAP_LINEAR在两个邻近的多级渐远纹理之间使用线性插值,并使用线性插值进行采样

 

最后,欢迎大家一起交流学习:微信:liaosy666 ; QQ:2209115372 。

这篇关于OpenGL ES 3. Mipmap 纹理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/977349

相关文章

ElasticSearch的DSL查询⑤(ES数据聚合、DSL语法数据聚合、RestClient数据聚合)

目录 一、数据聚合 1.1 DSL实现聚合 1.1.1 Bucket聚合  1.1.2 带条件聚合 1.1.3 Metric聚合 1.1.4 总结 2.1 RestClient实现聚合 2.1.1 Bucket聚合 2.1.2 带条件聚合 2.2.3 Metric聚合 一、数据聚合 聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如:

OPENGL顶点数组, glDrawArrays,glDrawElements

顶点数组, glDrawArrays,glDrawElements  前两天接触OpenGL ES的时候发现里面没有了熟悉的glBegin(), glEnd(),glVertex3f()函数,取而代之的是glDrawArrays()。有问题问google,终于找到答案:因为OpenGL ES是针对嵌入式设备这些对性能要求比较高的平台,因此把很多影响性能的函数都去掉了,上述的几个函数都被移除了。接

OpenGL ES学习总结:基础知识简介

什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库。 为桌面版本OpenGL 的一个子集。 OpenGL ES管道(Pipeline) OpenGL ES 1.x 的工序是固定的,称为Fix-Function Pipeline,可以想象一个带有很多控制开关的机器,尽管加工

OpenGL雾(fog)

使用fog步骤: 1. enable. glEnable(GL_FOG); // 使用雾气 2. 设置雾气颜色。glFogfv(GL_FOG_COLOR, fogColor); 3. 设置雾气的模式. glFogi(GL_FOG_MODE, GL_EXP); // 还可以选择GL_EXP2或GL_LINEAR 4. 设置雾的密度. glFogf(GL_FOG_DENSITY, 0

opengl纹理操作

我们在前一课中,学习了简单的像素操作,这意味着我们可以使用各种各样的BMP文件来丰富程序的显示效果,于是我们的OpenGL图形程序也不再像以前总是只显示几个多边形那样单调了。——但是这还不够。虽然我们可以将像素数据按照矩形进行缩小和放大,但是还不足以满足我们的要求。例如要将一幅世界地图绘制到一个球体表面,只使用glPixelZoom这样的函数来进行缩放显然是不够的。OpenGL纹理映射功能支持将

OpenGL ES 2.0渲染管线

http://codingnow.cn/opengles/1504.html Opengl es 2.0实现了可编程的图形管线,比起1.x的固定管线要复杂和灵活很多,由两部分规范组成:Opengl es 2.0 API规范和Opengl es着色语言规范。下图是Opengl es 2.0渲染管线,阴影部分是opengl es 2.0的可编程阶段。   1. 顶点着色器(Vert

MipMap的LOD实现原理

当使用MipMap时我们可能会遇到tex2D,tex2Dbias,tex2Dgrad,tex2Dlod几种纹理采样函数。 在PS中tex2D自动计算应该使用的纹理层。 tex2Dbias需要在t.w中指定一个偏移量来把自动计算出的纹理层全部偏移指定的值。 tex2Dgrad需要提供屏幕坐标x和y方向上的梯度来确定应该使用的纹理层。 tex2Dlod需要在t.w中明确指定要使用的纹

OpenGL/GLUT实践:流体模拟——数值解法求解Navier-Stokes方程模拟二维流体(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 实现效果2 实现过程2.1 流体模拟实现2.1.1 网格结构2.1.2 数据结构2.1.3 程序结构1) 更新速度场2) 更新密度值 2.1.4 实现效果 2.2 颜色设置2.2.1 颜色绘制2.2.2 颜色交互2.2.3 实现效果 2.3 障碍设置2.3.1 障碍定义2.3.2 障碍边界条件判定2.3.3 障碍实现2.3.

OpenGL——着色器画一个点

一、 绘制 在窗口中间画一个像素点: #include <GL/glew.h>#include <GLFW/glfw3.h>#include <iostream>using namespace std;#define numVAOs 1GLuint renderingProgram;GLuint vao[numVAOs];GLuintcreateShaderProgram (){c

Elastic Stack--ES集群加密及Kibana的RBAC实战

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 学习B站博主教程笔记:  最新版适合自学的ElasticStack全套视频(Elk零基础入门到精通教程)Linux运维必备—ElasticSearch+Logstash+Kibana精讲_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1VMW3e6Ezk/?sp