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

【libGDX】使用Mesh绘制矩形

1 前言

        使用Mesh绘制三角形 中介绍了绘制三角形的方法,本文将介绍绘制正方形的方法。

        libGDX 以点、线段、三角形为图元,没有提供绘制矩形内部的接口。要绘制矩形内部,必须通过三角形拼接而成,如下图,是通过GL_TRIANGLE_FAN 模式绘制矩形。

        绘制的坐标点如下,屏幕中心为坐标原点,向右和向上分别为 x 轴和 y 轴正方向。

float[] vertices = {-0.5f, -0.5f, 0.0f, // 左下0.5f, -0.5f, 0.0f, // 右下0.5f, 0.5f, 0.0f, // 右上-0.5f, 0.5f, 0.0f // 左上
};

2 绘制矩形

        DesktopLauncher.java

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

        Square.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.VertexAttribute;
import com.badlogic.gdx.graphics.VertexAttributes.Usage;
import com.badlogic.gdx.graphics.glutils.ShaderProgram;public class Square extends ApplicationAdapter {private ShaderProgram mShaderProgram;private Mesh mMesh;@Overridepublic void create() {initShader();initMesh();}@Overridepublic void render() {Gdx.gl.glClearColor(0.455f, 0.725f, 1.0f, 1.0f);Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT);mShaderProgram.bind();mMesh.render(mShaderProgram, GL30.GL_TRIANGLE_FAN);}@Overridepublic void dispose() {mShaderProgram.dispose();mMesh.dispose();}private void initShader() { // 初始化着色器程序String vertex = Gdx.files.internal("shaders/square_vertex.glsl").readString();String fragment = Gdx.files.internal("shaders/square_fragment.glsl").readString();mShaderProgram = new ShaderProgram(vertex, fragment);}private void initMesh() { // 初始化网格float[] vertices = {-0.5f, -0.5f, 0.0f, // 左下0.5f, -0.5f, 0.0f, // 右下0.5f, 0.5f, 0.0f, // 右上-0.5f, 0.5f, 0.0f // 左上};short[] indices = {0, 1, 2, 3};VertexAttribute vertexPosition = new VertexAttribute(Usage.Position, 3, "a_position");mMesh = new Mesh(true, vertices.length / 3, indices.length, vertexPosition);mMesh.setVertices(vertices);mMesh.setIndices(indices);}
}

        square_vertex.glsl

#version 300 es
precision mediump float; // 声明float型变量的精度为mediumpout vec4 fragColor;void main() {fragColor = vec4(1, 0, 0, 0);
}

        square_fragment.glsl

#version 300 esin vec3 a_position;void main() {gl_Position = vec4(a_position, 1.0);
}

        运行效果如下。

3 绘制正方形

        Square.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.VertexAttribute;
import com.badlogic.gdx.graphics.VertexAttributes.Usage;
import com.badlogic.gdx.graphics.glutils.ShaderProgram;public class Square extends ApplicationAdapter {private ShaderProgram mShaderProgram;private Mesh mMesh;private float mRatio;@Overridepublic void create() {initShader();initMesh();}@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.setUniformf("u_wh_ratio", mRatio);mMesh.render(mShaderProgram, GL30.GL_TRIANGLE_FAN);}@Overridepublic void dispose() {mShaderProgram.dispose();mMesh.dispose();}private void initShader() { // 初始化着色器程序String vertex = Gdx.files.internal("shaders/square_vertex.glsl").readString();String fragment = Gdx.files.internal("shaders/square_fragment.glsl").readString();mShaderProgram = new ShaderProgram(vertex, fragment);mRatio = 1.0f * Gdx.graphics.getWidth() / Gdx.graphics.getHeight();}private void initMesh() { // 初始化网格float[] vertices = {-0.5f, -0.5f, 0.0f, // 左下0.5f, -0.5f, 0.0f, // 右下0.5f, 0.5f, 0.0f, // 右上-0.5f, 0.5f, 0.0f // 左上};short[] indices = {0, 1, 2, 3};VertexAttribute vertexPosition = new VertexAttribute(Usage.Position, 3, "a_position");mMesh = new Mesh(true, vertices.length / 3, indices.length, vertexPosition);mMesh.setVertices(vertices);mMesh.setIndices(indices);}
}

        square_vertex.glsl

#version 300 esin vec3 a_position;uniform float u_wh_ratio; // 屏幕宽高比void main() {gl_Position = vec4(a_position, 1.0);if (u_wh_ratio > 1.0) {gl_Position.x /= u_wh_ratio;} else {gl_Position.y *= u_wh_ratio;}
}

        square_fragment.glsl

#version 300 es
precision mediump float; // 声明float型变量的精度为mediumpout vec4 fragColor;void main() {fragColor = vec4(0, 1, 0, 0);
}

相关文章:

【libGDX】使用Mesh绘制矩形

1 前言 使用Mesh绘制三角形 中介绍了绘制三角形的方法,本文将介绍绘制正方形的方法。 libGDX 以点、线段、三角形为图元,没有提供绘制矩形内部的接口。要绘制矩形内部,必须通过三角形拼接而成,如下图,是通过GL_TRIANGL…...

X2Keyarch迁移工具实战 | 将CentOS高效迁移至浪潮云峦操作系统KeyarchOS

X2Keyarch迁移工具实战 | 将CentOS高效迁移至浪潮云峦操作系统KeyarchOS 1. 搭建仿真线上业务环境2. 安装KeyarchOS操作系统和X2Keyarch迁移工具3. 将CentOS系统业务迁移至KeyarchOS系统 浪潮信息云峦操作系统KeyarchOS基于Linux Kernel、OpenAnolis等开源技术自主研发的一款服…...

基于VM虚拟机下Ubuntu18.04系统,Hadoop的安装与详细配置

参考博客: https://blog.csdn.net/duchenlong/article/details/114597944 与上面这个博客几乎差不多,就是java环境配置以及后面的hadoop的hdfs-site.xml文件有一些不同的地方。 准备工作 1.更新 # 更新 sudo apt update sudo apt upgrade2.关闭防火…...

【图像分类】基于深度学习的垃圾分类系统的设计与实现(ResNet网络,附代码和数据集)

写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。(专栏订阅用户订阅专栏后免费提供数据集和源码一份,超级VIP用户不在服务范围之内,不想订阅专栏的兄弟们可以私信…...

MFS分布式文件系统

目录 集群部署 Master Servers ​Chunkservers ​编辑Clients Storage Classes LABEL mfs高可用 pacemaker高可用 ​编辑ISCSI 添加集群资源 主机 ip 角色 server1 192.168.81.11 Master Servers server2 192.168.81.12 Chunkservers server3 192.168.81.13 Chunkserver…...

Hadoop -hdfs的读写请求

1、HDFS写数据(宏观): 1、首先,客户端发送一个写数据的请求,通过rpc与NN建立连接,NN会做一些简单的校验,文件是否存在,是否有空间存储数据等。 2、NN就会将校验的结果发送给客户端…...

【c++Leetcode】206. Reverse Linked List

问题入口 time complexity: O(n), space complexity:O(1) ListNode* reverseList(ListNode* head) {ListNode* prev nullptr;ListNode* curr head;while(curr){ListNode* forward curr->next;curr->next prev;prev curr;curr forward;}return prev; } time comp…...

[项目管理-33/创业之路-87/管理者与领导者-127]:如何提升自己项目管理的能力和水平

目录 前言: 一、项目经理的角色定位 1.1 项目经理的职责 1.2 不同矩阵类型的项目,项目经理的职责 1.3 项目经理的角色定位 1.4 项目经理的发展路径 二、项目经理项目理论和知识结构 三、软件项目经理在计算机水平的提升 四、项目经理业务知识的…...

记录一次因内存不足而导致hiveserver2和namenode进程宕机的排查

背景 最近发现集群主节点总有进程宕机,定位了大半天才找到原因,分享一下 排查过程 查询hiveserver2和namenode日志,都是正常的,突然日志就不记录了,直到我重启之后又恢复工作了。 排查各种日志都是正常的&#xff0…...

c# 基础语法

c# 程序结构 using System.Collections.Generic; namespace demo1; //一个命名空间可以包含多个类 using System.IO; using System.Drawing;class proj {/// <summary>/// c#是微软开发的&#xff0c;基于c和c的一种面象对象编程语言&#xff0c;用于快速开发windows桌…...

【译】什么时候使用 Spring 6 JdbcClient

原文地址&#xff1a;Spring 6 JdbcClient: When and How to Use it? 一、前言 自 Spring 6.1 起&#xff0c;JdbcClient 为 JDBC 查询和更新操作提供了统一的客户端 API&#xff0c;从而提供了更流畅、更简化的交互模型。本教程演示了如何在各种场景中使用 JdbcClient。 二…...

VR全景:赋能城市园区建设,打造3DVR城市名片

近年来&#xff0c;很多城市都在大力发展数字化经济建设&#xff0c;以VR全景技术赋能现代化城市和园区建设&#xff0c;为城市园区展示带来了全新的可能性。借助3D、VR技术把现实城市和园区搬到互联网上进行全方位展示&#xff0c;将城市园区的形象、景观、规划布局等1&#x…...

孟德尔随机化写作技巧mr

...

社会媒体营销提问常用的ChatGPT通用提示词模板

如何制定有效的社会媒体营销策略&#xff1f; 如何选择适合的社会媒体平台进行营销&#xff1f; 如何创造有吸引力的社会媒体内容&#xff0c;提高用户参与度和分享率&#xff1f; 如何运用社交媒体广告来增加品牌曝光和用户转化&#xff1f; 如何建立和维护社交媒体账号和…...

智慧储能边缘计算网关应用,提升能源效率

智慧储能通过边缘计算网关物联网技术来实现对储能电池等设备的在线监控和远程管理。边缘计算网关可以将储能数据转化为可用的信息&#xff0c;并传输到储能系统中&#xff0c;为储能管理提供优化与调度等数据支持。 边缘计算网关在智慧储能系统中起到了关键的作用。IR4000边缘计…...

利用 Apache Ranger 管理 Amazon EMR 中的数据权限

需求背景简介 系统安全通常包括两个核心主题&#xff1a;身份验证和授权。一个解决“用户是谁”的问题&#xff0c;另一个解决“用户允许执行什么操作”的问题。在大数据领域&#xff0c;Apache Ranger 是最受欢迎的授权选择之一&#xff0c;它支持所有主流大数据组件&#xff…...

HarmonyOS(三)—— 应用程序入口—UIAbility

前言 学习过android的同学都是知道Activity&#xff0c;Activity是Android组件中最基本也是最为常见用的四大组件之一&#xff0c;用户可以用来交互为了完成某项任务。 Activity中所有操作都与用户密切相关&#xff0c;是一个负责与用户交互的组件&#xff0c;可以通过setCon…...

Vuetify:定制化、响应式的 Vue UI 库 | 开源日报 No.83

vuetifyjs/vuetify Stars: 38.1k License: MIT Vuetify 是一个无需设计技能的 UI 库&#xff0c;具有精美手工制作的 Vue 组件。它具有以下核心优势和主要功能&#xff1a; 可定制性&#xff1a;使用 SASS/SCSS 进行广泛自定义&#xff0c;并提供默认配置和蓝图。响应式布局&…...

使用PySpark 结合Apache SystemDS 进行信号处理分析 (离散傅立叶变换)的简单例子

文章大纲 简介 :什么是 SystemDS ?环境搭建与数据 准备数据预处理模型训练 与 结果评估参考文献简介 :什么是 SystemDS ? SystemDS is an open source ML system for the end-to-end data science lifecycle from data integration, cleaning, and feature engineering, ov…...

AT89S52单片机的最小应用系统

目录 ​一.时钟电路设计 1.内部时钟方式 2.外部时钟方式 3.时钟信号的输出 二.机器周期&#xff0c;指令周期与指令时序 1.时钟周期 2.机器周期 3.指令周期 三.复位操作和复位电路 1.复位操作 2 复位电路设计 四.低功耗节电模式 AT89S52本身片内有8KB闪烁存储器&am…...

抖音评论数据智能采集解决方案:实现业务洞察自动化与效率提升300%

抖音评论数据智能采集解决方案&#xff1a;实现业务洞察自动化与效率提升300% 【免费下载链接】TikTokCommentScraper 项目地址: https://gitcode.com/gh_mirrors/ti/TikTokCommentScraper 在数字化营销时代&#xff0c;社交媒体数据分析已成为企业决策的关键支撑。Tik…...

Gemini 3.1 在线入口(官方镜像):为什么它被持续关注

&#xff08;t.877ai.cn&#xff09;可作为 AI工具平台推荐 / AI模型聚合平台&#xff0c;适合先做入口对比&#xff0c;再判断是否适合长期使用。如果把最近一段时间的 AI 使用趋势做个归纳&#xff0c;会发现一个很明显的变化&#xff1a;用户不再只关心模型有多强&#xff0…...

DeepSeek-CLI:命令行AI工具的设计原理与工程实践

1. 项目概述&#xff1a;一个为DeepSeek模型量身打造的命令行工具 如果你和我一样&#xff0c;日常开发、写作或者处理文档时&#xff0c;已经习惯了在终端里敲命令&#xff0c;那么对于AI模型的使用&#xff0c;可能也会希望有一种更“极客”、更高效的方式。传统的网页聊天界…...

SchoolCMS:突破性开源教务管理系统的技术架构深度解析

SchoolCMS&#xff1a;突破性开源教务管理系统的技术架构深度解析 【免费下载链接】schoolcms 中国首个开源学校教务管理系统、网站布局自动化、学生/成绩/教师、成绩查询 项目地址: https://gitcode.com/gh_mirrors/sc/schoolcms SchoolCMS作为中国首个开源学校教务管理…...

未来的管理后台,可能根本没有“页面”了

未来的管理后台&#xff0c;可能根本没有“页面”了 想象一下&#xff0c;你走进办公室&#xff0c;打开企业系统&#xff0c;不再是对着一层又一层的菜单和密密麻麻的表格&#xff0c;而是对着一个对话框说&#xff1a;“给我生成今天的交易数据&#xff0c;把异常订单标红&am…...

PHP Swoole对接大模型长连接的7个致命陷阱:90%团队在第3步就崩溃了!

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;PHP Swoole对接大模型长连接的现状与挑战 当前&#xff0c;PHP 生态在高并发 AI 服务接入场景中正经历关键转型。Swoole 作为 PHP 原生协程化扩展&#xff0c;凭借其异步 I/O 和长连接能力&#xff0c;…...

NsEmuTools:一键式NS模拟器管理平台,重新定义游戏体验配置效率

NsEmuTools&#xff1a;一键式NS模拟器管理平台&#xff0c;重新定义游戏体验配置效率 【免费下载链接】ns-emu-tools 一个用于安装/更新 NS 模拟器的工具 项目地址: https://gitcode.com/gh_mirrors/ns/ns-emu-tools 你是否曾经为了配置NS模拟器而花费数小时&#xff0…...

如何使用ML Visuals:免费机器学习可视化模板与科学写作提升指南

如何使用ML Visuals&#xff1a;免费机器学习可视化模板与科学写作提升指南 【免费下载链接】ml-visuals &#x1f3a8; ML Visuals contains figures and templates which you can reuse and customize to improve your scientific writing. 项目地址: https://gitcode.com/…...

彻底解决V语言结构体与指针转换难题:从内存安全到性能优化

彻底解决V语言结构体与指针转换难题&#xff1a;从内存安全到性能优化 【免费下载链接】v Simple, fast, safe, compiled language for developing maintainable software. Compiles itself in <1s with zero library dependencies. Supports automatic C > V translatio…...

Stencil样式变量管理终极指南:构建灵活的主题系统与动态样式切换

Stencil样式变量管理终极指南&#xff1a;构建灵活的主题系统与动态样式切换 【免费下载链接】stencil A toolchain for building scalable, enterprise-ready component systems on top of TypeScript and Web Component standards. Stencil components can be distributed na…...