纹理(texture)

一个图片从原始格式解码并上传到GPU就被称为纹理。OpenGL要求纹理的高度和宽度都必须是2的n次方大小,只有满足这个条件纹理图片才是有效的。 一旦获取了像素值,我们就可以将这些数据传给OpenGL,让OpenGL生成一个纹理贴图

为了绘制texture,常常使用几何来描述,通过几何对应的顶点来描述纹理。比如要描述一个矩形,可以通过矩形的四个顶点来描述。

要绘图时,首先要绑定纹理,然后传递一个几何描述(如矩形的四个顶点)给OpenGL进行绘制。而绘图的大小和位置由几何描述和OpenGL的viewport的设置共同决定。当然大部分的游戏都会让viewport的大小和屏幕一致,这就意味使用像素更容易让纹理绘制在合适的大小和位置。

绘制一个矩形的几何图形是非常常见的,同样让同一个纹理在不同位置以不同大小位置也是非常常见的,比如漫天的弹幕。但是每次都传递每个形状到GPU进行绘制的效率是较低的。所以许多相同纹理可以一起描述并一起送入GPU,这就是libgdx SpriteBatch类所要做的。

SpriteBatch被赋予了纹理和坐标以便每个图形的绘制,它汇集了很多图形而没有直接提交给GPU。如果它被赋予的纹理不同于原有的,它将保持原有的图形,并获取新的图形。绘制的图片,分辨率必须是2的次方(如32x32, 128x128, 256x512, 512x1024等)

例如: 本示例采用分辨率为 256x256 像素:

图形绘制

绘制图形,程序启动(create)——》读取图片(image)——》纹理(texture)绑定——》绘制初始化(sprite.begin)——》绘制(render)——》绘制完处理(sprite.end)——》销毁(dispose)等步骤。

MainActivity

public class MainActivity extends AndroidApplication {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);initialize(new MyGame(), false);}
}

MyGame

public class MyGame implements ApplicationListener {private SpriteBatch batch;       // 批量绘制private Texture texture;     // 纹理@Overridepublic void create() {batch = new SpriteBatch();texture = new Texture(Gdx.files.internal("image03.png"));        // 从asset文件读取图片}@Overridepublic void resize(int arg0, int arg1) {  }@Overridepublic void render() {                   Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);       // 清屏Gdx.gl.glClearColor(0.5f, 0.5f, 0.5f, 1);      // 设置屏幕背景为灰色batch.begin();batch.draw(texture, 10, 10);batch.end();      }@Overridepublic void pause() {                }@Overridepublic void resume() {               }@Overridepublic void dispose() {  texture.dispose();batch.dispose();}
}

MyGame代码段中,image03.png 图片需要保存在 assets 文件夹内,这是有libgdx文件模块设计决定的

Gdx.files是libgdx的文件模块,主要提供以下5大功能:

  • 读取文件
  • 写文件
  • 复制文件
  • 移动文件

而获取操作文件的FileHandle有5种方法:

1) Classpath,  路径相对于classpath,文件通常为只读。注意: classpath与android的某些函数不兼容,如 Audio.newSound(FileHandle) 和 Audio.newMusic(FileHandle)

2) Internal,  内部文件路径相对于desktop程序根目录,或者android 的assets文件夹。assets文件夹本身就是存储资源的文件夹,相比res文件夹,它其中的资源不会生成R中的ID,用来放图片很是合适

3) External,  外部文件路径相对于desktop程序home目录,或者android 的SD卡根目录

4) Absolute, 绝对的文件系统目录,跨平台时需要注意对应的绝对路径

5) Local, 本地目录,对于android是应用Application自身内部的files目录,对于desktop是root根目录

因此,用Gdx.files.internal("image1.jpg")获取的图片,需要保存在assets文件夹下

读取图片后,调用batch.draw(texture,10,10) 绘制图形,(10,10)是绘制坐标,它基于笛卡尔座标,即以左下角为坐标原点。

运行结果:

上面示例说明:

首先,在create()申请texture,从内部assets文件夹中读取图片 image03.png

texture = new Texture(Gdx.files.internal("image03.png"));

然后,在render() 中渲染绘制图片

batch.draw(texture, 10, 10); // 绘制region

最后,在dispose中销毁资源

texture.dispose();
batch.dispose();

参考推荐:

android游戏开发框架libgdx 图形绘制

libgdx 图形绘制相关推荐

  1. matlab图形绘制基础(东北大学MOOC笔记)

    %% 二维图形绘制 % 多纵轴曲线绘制 figure(1); t = 0:0.01:2*pi; y1 = sin(t); y2 = 10*cos(t); % plotyy(t, y1, t, y2); ...

  2. tableau两个不同的图合并_Tableau可视化分析-业务常用图形绘制1

    微信公众号链接: Tableau可视化分析-业务常用图形绘制1​mp.weixin.qq.com 哑铃图VS 火柴图 哑铃图,又名DNA图,横着看是哑铃,竖着看就是DNA,它主要用来表现两个数据点之间 ...

  3. c++之openGL在VS中的配置及简单图形绘制

    VS中openGL的配置 相关资源下载: 链接:https://pan.baidu.com/s/1hRlxbckgLsNiS87k5CPvLg 提取码:tz87 以vs2010为例: 将下载的压缩包解 ...

  4. 13个JavaScript图表图形绘制插件

    由于绘制矢量图的不同技术愈发成熟以及现代浏览器所具备的更强大的计算能力等原因,目前网上出现了越来越多免费 的JavaScript图表和图形绘制解决方案.在本文中就将分享13个优秀实用的JavaScri ...

  5. 史上最扯Java图形绘制(J2SE)之一JAVA动画效果

    很多主一听说Java界面,一水的头大外带血压高,兄弟我倒觉得没什么必要.           其实Java这东西吧,就简便性和其初衷而言,真他妈就在GUI 这地界是有优势的,单就其2D界面开发的易用性 ...

  6. Matlab学习笔记——图形绘制

    写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 目录 图形绘制 1.正弦曲线绘制 2.常用三角函数曲线的绘制 图形绘制 1.正弦曲线绘制 以产生一个简单的正弦函数曲线为 ...

  7. iOS:quartz2D绘图(给图形绘制阴影)

    quartz2D既可以绘制原始图形,也可以给原始图形绘制阴影. 绘制阴影时,需要的一些参数:上下文.阴影偏移量.阴影模糊系数 注意:在drawRect:方法中同时调用绘制同一个图形时,在对绘制的图形做 ...

  8. matlab图形绘制经典案例,MATLAB经典教程第四章_图形绘制.ppt

    <MATLAB经典教程第四章_图形绘制.ppt>由会员分享,可在线阅读,更多相关<MATLAB经典教程第四章_图形绘制.ppt(32页珍藏版)>请在人人文库网上搜索. 1.Ma ...

  9. python基本图形绘制_【Python】Python基本图形绘制-Go语言中文社区

    1.Python蟒蛇图形绘制: 代码: #PythonDraw.py import turtle turtle.setup(650, 350, 200, 200) turtle.penup() tur ...

最新文章

  1. matlab方位探测处理,急大神帮忙,谁有MATLAB解算像片内外方位元素的程序
  2. [转载]如何用关键字优化网站?
  3. python画图删除上边框和右边框
  4. java gui容器_[Java教程]GUI Panel 容器以及布局管理器
  5. FCPX插件:创意多画面组合动态分屏转场过渡 Multiscreen Transition
  6. linux系统chmod缩写,文件属性控制命令chmod
  7. 预测模型| 2. Nomogram文献抄读 (2): 如何建立和解读癌症预后列线图
  8. 来电转接点击选择联系人按钮-没有出现联系人
  9. 电瓶车行驶过程中突然无动力,加速没反应,怎么办?
  10. 构建一个适合stm32mp157系列开发板的嵌入式Linux系统
  11. jquery/zepto 圣诞节雪花飞扬
  12. Linux下的一些时间说明
  13. 软件开发常见英文单词
  14. FSM-Golang
  15. 云计算是把计算机资源放在什么上,云计算就是把计算机资源都放到什么上
  16. 计算机组装和维修资料库,电脑组装与维修题库资料.doc
  17. latex--图片并排和插入pdf格式图片
  18. 软件工程与计算II-6-需求分析方法
  19. 建立高效的测试团队 (转自关河)
  20. 对抗攻击经典论文剖析(下)【DeepFool、One pixel attack、Universal adversarial perturbations、ATN】

热门文章

  1. mysql中dateformat用法,MySQL date_format()函数
  2. Linux下 安装白鹭(egret)引擎指南
  3. Wifi 认证,关联,四次握手(WPA/WPA2/WPA3-SAE)
  4. PDF.js特殊字体、水印加载不出来问题解决
  5. 怎样获得网络的最大连通子图
  6. 【Proteus仿真】74HC165功能验证
  7. va_start用法
  8. @Inherited 的作用
  9. 启明星辰产品解读_堡垒机
  10. 安全环保专题培训考试题