[GEiv]第一章:静态绘制(一) 图元与基本图形

2023-12-13 11:38

本文主要是介绍[GEiv]第一章:静态绘制(一) 图元与基本图形,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一章:静态绘制(一)

图元与基本图形绘制

        从这篇文章开始,进行引擎功能的详细讲解,第一章主要讲解静态绘制的基本API,这是制作动画的基础部分。

[图元][class: geivcore.enginedata.obj.Obj]]

        我承认Obj这个名字不是很好,这是历史原因造成的。Obj是图元类,任何展示在屏幕上的图像都由Obj实现,任何对图像的变换操作由ObjAPI来完成,一个图元中容纳若干个图形类(可以是0个),在一个图元中图形被编号为由0开始的整数索引,但在实际操作中,使用索引的情况并不多见。

[引擎句柄][interface: geivcore.UESI]

        Obj的创建由引擎句柄(UESI)完成,UESI是引擎的上层包装接口,它向上提供引擎的全部系统调用,在游戏系统开始时,最好将UESI作为构造器参数传入或干脆将UESI做静态化单例包装,以供上层框架随时调用。总之,UESI就是引擎的全部,这点需要注意。

[例子]画一个方形:

public static void main(String[] args) {UESI UES = new R();//初始化引擎环境Obj rect = UES.creatObj(UESI.BGIndex);//创建一个图元,在背景层次。rect.addGLRect("FFFFFF",0,0,100f,100f);//在图元上画一个正方形,位置(0,0),大小:100X100。颜色FFFFFFrect.show();//显示rect.setDx(100);//将图元x坐标移动到100位置rect.setDy(100); //将图元y坐标移动到100位置}

        

        有必要进行详细的代码解释。

        1)UESI UES = new R();//初始化引擎环境

        UESI前者说过,是引擎包装接口,而R类是这个接口的一个具体实现,我们使用接口屏蔽R的具体实现细节。典型的游戏开发中只会使用到一个R,因此,只需要保留这个UESI引用即可,不要每次都实例化。

        2) Obj rect =UES.creatObj(UESI.BGIndex);

        Obj为图元,图元的创建能且仅能使用UES的createObj方法,不要使用new Obj的形式。构造参数是这个图元所在的绘制层次,这个引擎由下至上保留了7个绘制层次,当多个图元出现在相同位置时,上层图元一定会覆盖下层图元,而同层图元覆盖规则依赖创建的顺序。

        

       这里,BGIndex是最底层,一般放置游戏的背景元素。

        3)rect.addGLRect("FFFFFF",0,0,100f,100f);

        rect是一个图元引用,图元使用一系列addGL*方法来创建各种图形,它们包括:


        一共有十六中方法,当然包括了一些重载情况。

        抛开重载不提,依次简单介绍一下:

        addGLFont:向图元绘制一个静态字体,需要指定其颜色、位置、字体、字号、字形、内容、左下缩进。支持中文,当然也可以使用setFontString方法进行修改。(会重新生成文字纹理,所以不要频繁调用,字体调用会使用单独章节讲解)

        addGLImage:创建一个矩形区域,填充指定的图像纹理,需要指定绘制位置和图像文件,图像文件可以是JPG\PNG\BMP等外部文件。在单独由IO读取文件流后,生成的纹理会保存在内存中,不会重复读取IO。

        addGLLine:绘制一条线,需要给定颜色、两点坐标,可以指定绘制宽度。

        addGLNop:什么也不绘制。Nop就是Nop。

        addGLOval:绘制一个椭圆,指定位置与长短轴,由于是使用极坐标进行的多边形模拟,可以指定使用的顶点数来提高图像质量。

        addGLPoint:绘制顶点,指定位置与颜色。

        addGLRect:绘制矩形,指定颜色与长宽。

        addGLTrigon:绘制三角形,指定颜色与三组坐标。

        addGLWorldSet:绘制字库,与静态字体不同,字库中每个字单独产生纹理,例如产生0~9 十个数字的纹理,就可以显示所有数字(会在字体章节详细讲解)对于易变数据的显示,推荐此种方式。

        4)rect.show();

        显示图元,你可以调用hide隐藏一个图元,或调用destory方法永久销毁。

        5)setDx,Dy

        设置图元的位置,整个图元会作为一个整体一起移动,(不只是位置,很多图元变换API会影响到图元中的全部图形,这点很有用),顺带一提,在不指定配置文件的情况下,默认长宽坐标为800X600,以左上为0坐标点,左到右为X方向,上到下为Y方向。

[另一个例子,多图形图元]

        在上例中稍加改动:

        Obj rect =UES.creatObj(UESI.BGIndex);rect.addGLRect("FFFFFF",0,0,300f,300f);rect.addGLLine("00FF00",0,0,300f,300f);rect.addGLOval("FFFF00",0,0,300f,300f);rect.show();rect.setDx(100);rect.setDy(100);

        

        在rect图元中,创建了三个图形,分别为矩形、线、圆形。

        它们分别被名为DivIndex的图元索引标记为0、1、2。

 

        在进行图元变换过程中(包括位置、角度、通道),它们默认作为一个整体一同变换。当然,你也可以使用图元索引指定图元中要变换的某个图形。请看下例

[填充例子]

        我们使用rect.setGLFill(true);方法将图元设置为填充状态。在show前加入这句后执行结果如下:

        

        可以看到,作为底层的方形被填充了,但是圆形却没有填充。

        此时若我想填充圆形而非方形该如何呢?

        使用图元索引:rect.setGLFill(2,true);,其中2是圆形的图元索引,此时执行结果如下:

        

        在图元类中,大部分set方法都有针对图元索引的重载,以提供灵活的操作方式。但图形过多时不推荐放到同一个图元中,图元单图形的方式是被推荐的。

[总结]

        通过这一章,应该可以进行基本图形的绘制了。

这篇关于[GEiv]第一章:静态绘制(一) 图元与基本图形的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

SQL BETWEEN 语句的基本用法详解

《SQLBETWEEN语句的基本用法详解》SQLBETWEEN语句是一个用于在SQL查询中指定查询条件的重要工具,它允许用户指定一个范围,用于筛选符合特定条件的记录,本文将详细介绍BETWEEN语... 目录概述BETWEEN 语句的基本用法BETWEEN 语句的示例示例 1:查询年龄在 20 到 30 岁

mysql中insert into的基本用法和一些示例

《mysql中insertinto的基本用法和一些示例》INSERTINTO用于向MySQL表插入新行,支持单行/多行及部分列插入,下面给大家介绍mysql中insertinto的基本用法和一些示例... 目录基本语法插入单行数据插入多行数据插入部分列的数据插入默认值注意事项在mysql中,INSERT I

mapstruct中的@Mapper注解的基本用法

《mapstruct中的@Mapper注解的基本用法》在MapStruct中,@Mapper注解是核心注解之一,用于标记一个接口或抽象类为MapStruct的映射器(Mapper),本文给大家介绍ma... 目录1. 基本用法2. 常用属性3. 高级用法4. 注意事项5. 总结6. 编译异常处理在MapSt

MyBatis ResultMap 的基本用法示例详解

《MyBatisResultMap的基本用法示例详解》在MyBatis中,resultMap用于定义数据库查询结果到Java对象属性的映射关系,本文给大家介绍MyBatisResultMap的基本... 目录MyBATis 中的 resultMap1. resultMap 的基本语法2. 简单的 resul

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接