当前位置: 首页 > news >正文

【libGDX】Mesh纹理贴图

1 前言

        纹理贴图的本质是将图片的纹理坐标与模型的顶点坐标建立一一映射关系。纹理坐标的 x、y 轴正方向分别朝右和朝下,如下。

2 纹理贴图

        本节将使用 Mesh、ShaderProgram、Shader 实现纹理贴图,OpenGL ES 的实现见博客 → 纹理贴图。

        DesktopLauncher.java

package com.zhyan8.game;import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application;
import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration;
import com.zhyan8.game.Chartlet;public class DesktopLauncher {public static void main (String[] arg) {Lwjgl3ApplicationConfiguration config = new Lwjgl3ApplicationConfiguration();config.setForegroundFPS(60);config.setTitle("Chartlet");new Lwjgl3Application(new Chartlet(), config);}
}

        Chartlet.java

package com.zhyan8.game;import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL30;
import com.badlogic.gdx.graphics.Mesh;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.VertexAttribute;
import com.badlogic.gdx.graphics.VertexAttributes.Usage;
import com.badlogic.gdx.graphics.glutils.ShaderProgram;public class Chartlet extends ApplicationAdapter {private ShaderProgram mShaderProgram;private Mesh mMesh;private Texture mTexture;@Overridepublic void create() {initShader();initMesh();mTexture = new Texture(Gdx.files.internal("textures/girl.jpg"));}@Overridepublic void render() {Gdx.gl.glClearColor(0.455f, 0.725f, 1.0f, 1.0f);Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT);mShaderProgram.bind();// mShaderProgram.setUniformi("u_texture", 0); // 设置纹理单元mTexture.bind(0);mMesh.render(mShaderProgram, GL30.GL_TRIANGLE_FAN);}@Overridepublic void dispose() {mShaderProgram.dispose();mMesh.dispose();}private void initShader() { // 初始化着色器程序String vertex = Gdx.files.internal("shaders/chartlet_vertex.glsl").readString();String fragment = Gdx.files.internal("shaders/chartlet_fragment.glsl").readString();mShaderProgram = new ShaderProgram(vertex, fragment);}private void initMesh() { // 初始化网格float[] vertices = {-1f, -1f, 0f, 0f, 1f, // 左下1f, -1f, 0f, 1f, 1f, // 右下1f, 1f, 0f, 1f, 0f, // 右上-1f, 1f, 0f, 0f, 0f // 左上};short[] indices = {0, 1, 2, 3};VertexAttribute vertexPosition = new VertexAttribute(Usage.Position, 3, "a_position");VertexAttribute texCoords = new VertexAttribute(Usage.TextureCoordinates, 2, "a_texCoord0");mMesh = new Mesh(true, vertices.length / 5, indices.length, vertexPosition, texCoords);mMesh.setVertices(vertices);mMesh.setIndices(indices);}
}

         chartlet_vertex.glsl

#version 300 esin vec3 a_position;
in vec2 a_texCoord0;out vec2 v_texCoord0;void main() {gl_Position = vec4(a_position, 1.0);v_texCoord0 = a_texCoord0;
}

        chartlet_fragment.glsl

#version 300 es
precision mediump float; // 声明float型变量的精度为mediumpin vec2 v_texCoord0;uniform sampler2D u_texture;out vec4 fragColor;void main() {fragColor = texture(u_texture, v_texCoord0);
}

        运行效果。

相关文章:

【libGDX】Mesh纹理贴图

1 前言 纹理贴图的本质是将图片的纹理坐标与模型的顶点坐标建立一一映射关系。纹理坐标的 x、y 轴正方向分别朝右和朝下,如下。 2 纹理贴图 本节将使用 Mesh、ShaderProgram、Shader 实现纹理贴图,OpenGL ES 的实现见博客 → 纹理贴图。 DesktopLauncher…...

基线扫描tomcat安全加固-检查是否支持HTTPS等加密协议

背景:基线扫描时,docker镜像中的tomcat在检查是否支持HTTPS等加密协议这一项上未通过。 思路:先通过JDK自带的keytool工具生成证书,再从tomcat的server.xml配置文件中增加配置。 我不确定不同版本的JDK生成的证书是否可以通用&a…...

基于 STM32F7 和神经网络的实时人脸特征提取与匹配算法实现

本文讨论了如何使用 STM32F7 和神经网络模型来实现实时人脸特征提取与匹配算法。首先介绍了 STM32F7 的硬件和软件特点,然后讨论了人脸特征提取和匹配算法的基本原理。接下来,我们将重点讨论如何在 STM32F7 上实现基于神经网络的人脸特征提取与匹配算法&…...

Android笔记(十四):JetPack Compose中附带效应(一)

在Android应用中可以通过定义可组合函数来搭建应用界面。应用界面的更新往往是与可组合函数内部定义的状态值相关联的。当界面的状态值发生变更,会导致应用界面进行更新。在Android笔记(九):Compose组件的状态,对Compo…...

【web】Fastapi自动生成接口文档(Swagger、ReDoc )

简介 FastAPI是流行的Python web框架,适用于开发高吞吐量API和微服务(直接支持异步编程) FastAPI的优势之一:通过提供高级抽象和自动数据模型转换,简化请求数据的处理(用户不需要手动处理原始请求数据&am…...

竞赛选题 题目:基于FP-Growth的新闻挖掘算法系统的设计与实现

文章目录 0 前言1 项目背景2 算法架构3 FP-Growth算法原理3.1 FP树3.2 算法过程3.3 算法实现3.3.1 构建FP树 3.4 从FP树中挖掘频繁项集 4 系统设计展示5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于FP-Growth的新闻挖掘算法系统的设计与实现…...

188. 股票买卖问题(交易次数为任意正整数)

题目 题解 class Solution:def maxProfit(self, k: int, prices: List[int]) -> int:N len(prices)# 定义状态:dp[i][j][k]表示在第i天,有j次交易机会,持有或不持有的最大利润dp [[[0 for i in range(2)] for j in range(k1)] for m in range(N)]f…...

Typescript怎样对URL参数进行编码?

URL中的参数需要进行编码(URL encoding)是为了确保传输的参数不包含特殊字符,同时确保数据的可靠性和安全性。 特殊字符如空格、&、?等在URL中有特殊含义,如果直接包含在参数值中,可能会导致解析错误或者安全问题…...

AndroidStudio2022.3.1 Patch3使用国内下载源加速

记录一下这个版本的as在使用国内下载源加速碰到的诸多问题。 一、gradle-8.0-bin.zip下载慢 编辑项目文件夹/gradle/wrapper/gradle-wrapper.properties,文件内容改为如下: #Fri Nov 24 18:50:06 CST 2023 distributionBaseGRADLE_USER_HOME distribu…...

Go语言的学习笔记2——Go语言源文件的结构布局

用一个只有main函数的go文件来简单说一下Go语言的源文件结构布局,主要分为包名、引入的包和具体函数。下边是main.go示例代码: package mainimport "fmt"func main() { fmt.Println("hello, world") }package main就是表明这个文件…...

python给视频增加字幕

python给视频增加字幕 安装所需库 在开始之前,我们需要安装一些Python库。主要使用到的库如下: moviepy:用于处理视频和音频的库。 pydub:用于处理音频的库。 speech_recognition:用于语音识别的库。 首先&#xff0…...

相机设置参数:黑电平(Black Level)详解和示例

本文通过原理和示例对相机设置参数“黑电平”进行讲解,以帮助大家理解和使用。 原理 相机中黑电平原理是将电平增大,可以显示更多暗区细节,可能会损失一些亮区,但图像更多的关注暗区,获取完图像信息再减掉。只是为了…...

Mac Ubuntu双系统解决WiFi和WiFi 5G网络不可用问题

文章目录 设备信息1. Ubuntu WiFi不可用解决方式查看Mac的网卡型号根据网卡型号搜索获取到的解决方法查看WiFi名字问题参考链接 2. 解决WiFi重启后失效问题打开终端创建.sh脚本文件编辑脚本文件复制粘贴脚本修改脚本权限创建并编辑systemd service文件复制粘贴下文到systemd se…...

数据分析基础之《matplotlib(2)—折线图》

一、折线图绘制与保存图片 1、matplotlib.pyplot模块 matplotlib.pyplot包含了一系列类似于matlab的画图函数。它的函数作用于当前图形(figure)的当前坐标系(axes) import matplotlib.pyplot as plt 2、折线图绘制与显示 展示城…...

Rust语言入门教程(三) - 函数与模块系统

函数 函数的定义 根据Rust的格式规范,函数名的格式应遵从蛇形命名法,即是用小写字母以及下划线组成,如: fn do_stuff(){ }Rust并不要求函数定义的位置必须在调用它之前,所以如果你习惯于把main函数放在最前面的话&a…...

ubuntu22.04 arrch64版在线安装java环境

脚本 #安装java#!/bin/bashif type -p java; thenecho "Java has been installed."else#2.Installed Java , must install wgetwget -c https://repo.huaweicloud.com/java/jdk/8u151-b12/jdk-8u151-linux-arm64-vfp-hflt.tar.gz;tar -zxvf ./jdk-8u151-linux-arm6…...

概率论与数理统计中常见的随机变量分布律、数学期望、方差及其介绍

1 离散型随机变量 1.1 0-1分布 设随机变量X的所有可能取值为0与1两个值,其分布律为 若分布律如上所示,则称X服从以P为参数的(0-1)分布或两点分布。记作X~ B(1,p) 0-1分布的分布律利用表格法表示为: X01P1-PP 0-1分布的数学期望E(X) 0 *…...

骨传导耳机的优缺点都有哪些?骨传导耳机值得入手吗?

骨传导耳机的优点还是很多的,相比于传统耳机,骨传导耳机要更值得入手! 下面让我们了解下骨传导耳机的优缺点都有哪些: 一、优点 1、使用更安全 传统的耳机,在使用时会听不到外界的声音,而骨传导耳机通过…...

在ASP.NET Core 中使用 .NET Aspire 消息传递组件

前言 云原生应用程序通常需要可扩展的消息传递解决方案,以提供消息队列、主题和订阅等功能。.NET Aspire 组件简化了连接到各种消息传递提供程序(例如 Azure 服务总线)的过程。在本教程中,小编将为大家介绍如何创建一个 ASP.NET …...

NLP学习

参考:NLP发展之路I - 从词袋模型到Transformer - 知乎 (zhihu.com) NLP大致的发展历史。从最开始的词袋模型,到RNN,到Transformers和BERT,再到ChatGPT,NLP经历了一段不断精进的发展道路。数据驱动和不断完善的端到端的…...

LIME模型可解释性:原理、实战与优化技巧

1. 理解模型可解释性的重要性 在机器学习项目实践中,我们常常会遇到一个困境:模型预测效果很好,但完全不知道它为什么做出这样的决策。三年前我接手一个医疗诊断项目时,随机森林模型在测试集上达到了94%的准确率,但当医…...

Genesis IoT Discovery Lab模块化开发平台解析与应用

1. Genesis IoT Discovery Lab 模块化开发平台解析作为一名嵌入式开发工程师,当我第一次看到Genesis IoT Discovery Lab时,立刻被它优雅的模块化设计所吸引。这款来自立陶宛Axiometa公司的开发平台,完美解决了传统面包板接线混乱、接触不良等…...

别再乱用GFP_KERNEL了!Linux内核alloc_pages内存分配标志保姆级避坑指南

Linux内核内存分配标志深度解析:从原理到实战避坑指南 在Linux内核开发中,内存分配是最基础也最容易被低估的技术细节之一。许多开发者在使用alloc_pages这类底层接口时,往往只关注了内存大小参数,却忽略了gfp_mask标志的选择——…...

DRC Debugger实战:Pin Data Type详解与TetraMAX SWV波形调试指南

DRC Debugger实战:Pin Data Type详解与TetraMAX SWV波形调试指南 在芯片测试领域,DRC(Design Rule Check)违规分析是确保设计可测试性的关键环节。当Design Vision中密密麻麻的违规报告扑面而来时,中高级DFT工程师需要…...

如何免费延长JetBrains IDE试用期:IDE Eval Resetter完整使用教程

如何免费延长JetBrains IDE试用期:IDE Eval Resetter完整使用教程 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 还在为IntelliJ IDEA、PyCharm等JetBrains IDE试用期到期而烦恼吗?想象一…...

从零构建大模型:推理与部署全流程实战

前言大模型的核心价值不仅在于训练阶段的效果优化,更在于推理阶段的高效落地与部署。对于企业和开发者而言,如何在有限硬件资源下实现低延迟、高吞吐、低成本的大模型推理,是大模型落地的关键。本文从零构建大模型推理与部署体系,…...

从思科转战Juniper SRX防火墙?这份命令对照表帮你快速上手

思科工程师的Juniper SRX防火墙快速上手指南 对于习惯了思科IOS操作方式的网络工程师来说,初次接触Juniper SRX防火墙时,最大的挑战莫过于适应完全不同的命令体系。本文将为你提供一份详尽的命令对照表,帮助你快速跨越两种设备之间的鸿沟。 1…...

XUnity.AutoTranslator终极指南:如何实现Unity游戏实时翻译的完整解决方案

XUnity.AutoTranslator终极指南:如何实现Unity游戏实时翻译的完整解决方案 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 想要玩外文Unity游戏却苦于语言障碍?XUnity.AutoTransla…...

如何实现RTAB-Map多传感器融合:5步完成精准三维环境感知

如何实现RTAB-Map多传感器融合:5步完成精准三维环境感知 【免费下载链接】rtabmap RTAB-Map library and standalone application 项目地址: https://gitcode.com/gh_mirrors/rt/rtabmap RTAB-Map是一个强大的实时定位与建图(SLAM)库&…...

Prompt 缓存有没有用?从治理视角看,关键还是缓存层放得对不对

很多系统一开始做 Prompt 缓存,出发点都很直接:希望少发一些重复内容,把调用成本压下来。 这个方向没有问题,但如果系统已经进入正式业务,缓存的价值通常不会只停留在“省一点 token”。 为什么 Prompt 缓存最后会变成…...