opengl07坐标系统
坐标系统
局部空间(Local Space) / 物体空间(Object Space):
物体自身坐标系,物体的初始位置定义在这个空间中。
世界空间(World Space):
物体在全局环境中的位置和方向。
观察空间(View Space) / 视觉空间(Eye Space):
从摄像机或观察者的角度观察物体的空间,相当于从一个固定的视角观察物体。
裁剪空间(Clip Space):
坐标范围已被裁剪至可视范围内,在这里执行透视投影。
屏幕空间(Screen Space):
最终的2D屏幕坐标,在此处顶点被映射为屏幕上的像素。
概述在坐标系转换中,关键是利用多个变换矩阵来将坐标从一个坐标系转换到另一个。其中,最关键的三个矩阵是模型(Model)、观察(View)、投影(Projection)矩阵。坐标的起点是局部空间(Local Space),在转换过程中它会变为局部坐标(Local Coordinate),接着变为世界坐标(World Coordinate),观察坐标(View Coordinate),裁剪坐标(Clip Coordinat ...
opengl06变换
变换强调了使用矩阵进行变换的重要性,并暗示了它们作为处理物体移动的更有效方法。它指出了矩阵作为数学工具的重要性.
关于向量和矩阵的理解是图形编程中的基础,它们用于描述和控制物体在三维空间中的位置、旋转和缩放。即使对初学者来说,这些概念可能有些复杂,但它们是非常有用的工具。
向量
向量基本定义:
向量具有方向和大小,可以理解为指示方向和长度的箭头。
向量可在任意维度上存在,但通常用于二至四维空间。二维向量对应平面方向,三维向量可表示三维空间方向。
向量的表示和理解:
用箭头 (x, y) 在二维图中展示向量。在二维图像中表示向量更直观。
数学上通常使用带上箭头的字母来表示向量(例如:𝑣¯)。
位置向量:
为了更形象地表示方向,将向量起点设为原点(0, 0)并指向某一点,形成位置向量(也可从其他点起始指向另一点)。
向量运算:
向量支持多种运算,类似于数字运算,包括加法、减法、数乘等。
向量与标量运算向量取反向量加减长度向量相乘点乘叉乘矩阵矩阵的加减矩阵的数乘矩阵相乘矩阵与向量相乘单位矩阵缩放这段内容总结了对向量进行缩放的概念,介绍了缩放的基本原理和使用缩放矩阵进行变换 ...
opengl05纹理
纹理纹理是一种可以用来为三维物体添加细节的图片。纹理可以让物体看起来更真实,而不需要为每个顶点指定额外的颜色。
纹理坐标是纹理中的一个点的位置。纹理坐标的范围是从 0 到 1,其中 0 表示纹理的左下角,1 表示纹理的右上角。
为了将纹理映射到三维物体上,我们需要为每个顶点指定一个纹理坐标。纹理坐标告诉渲染器从纹理中采样哪个点的颜色。
例如,如果我们有一个三角形,左下角的顶点纹理坐标为 (0, 0),右下角的顶点纹理坐标为 (1, 0),上部的顶点纹理坐标为 (0.5, 1.0)。那么,渲染器将从纹理的左下角采样左下角顶点的颜色,从纹理的右下角采样右下角顶点的颜色,从纹理的中间上部采样上部的顶点的颜色。
纹理采样可以采用不同的插值方式。最常见的插值方式是线性插值,它会根据纹理坐标的值来计算采样点的颜色。
例如,如果纹理坐标为 (0.5, 0.5),那么线性插值将计算左下角和右上角两个点的颜色的平均值作为采样点的颜色。
我们可以使用 OpenGL 来指定纹理采样的插值方式。
12345float texCoords[] = { 0.0f, 0.0f, // 左下角 ...
Minecraft我的世界-如何做弓BowItem
RangedWeaponItem1. 类定义:
定义了一个名为RangedWeaponItem的抽象类,该类扩展了Item类。
2. 静态predicates
定义了两个static predicates:
BOW_PROJECTILES: 此谓词使用ItemTags检查itemstack是否为“Arrows”类型。ARROWStag。
此谓词将`BOW_PROJECTILES’谓词与对“Firework Rocket”项的附加检查相结合。这使得弩既可以射箭,也可以发射烟花火箭。
3. 构造函数:
构造函数接受`Item。Settings”对象作为参数,并调用“Item”类的父类构造函数来初始化该项。
4. getHeldProjectiles:
此方法返回“getProjectiles”方法的结果。这本质上允许子类定义自己的射弹类型,同时保持与现有“getHeldProjectle”方法的兼容性。
5. getProjectiles:
这是一种抽象方法,子类必须实现它来定义它们可以发射的特定类型的投射物。
6. getHeldProjecti ...
opengl04着色器
着色器着色器是指在GPU上运行的小程序,专门负责图形渲染管线中的特定部分。这些程序的基本功能是将输入转换为输出。它们是高度独立的程序,无法直接相互通信,唯一的沟通方式是通过输入和输出传递信息。
GLSL着色器是用类似于C语言的GLSL编写的。GLSL专为图形计算而设计,它包含了许多有用的特性,尤其是针对向量和矩阵操作的功能。
每个着色器都有一个固定的结构:它们以声明版本开始,然后包括输入和输出变量、uniform变量,以及一个main函数作为入口点。在main函数中,处理所有的输入,进行所需的计算,并将结果输出到输出变量中。如果不了解uniform变量,不必担心,我们会在后续进行详细解释。
123456789101112131415#version version_numberin type in_variable_name;in type in_variable_name;out type out_variable_name;uniform type uniform_name;int main(){ // 处理输入并进行一些图形操作 ... // 输出处理过的结果到输 ...
mixin进一步简介
introduction
Mixins是Fabric生态系统中的一个强大而重要的工具。它们的主要用途是修改基础游戏中的现有代码,可以通过注入自定义逻辑、删除机制或修改数值来实现。
Mixins必须使用Java编写,即使你使用Kotlin或其他语言。
如果想要了解Mixin的功能、用法和机制的详细步骤,可以查看Mixin官方Wiki。Mixin Javadoc中还有其他文档可供参考。
Fabric Wiki还提供了几篇实际示例和解释的文章,可以提供更多实用的示例和解释。
文献[Introduction to Mixins Fabric Wiki] (fabricmc.net)
Mixin Official Wiki.
Mixin Javadoc.
Mixins一些mixin可能会导致冲突,但负责任地使用它们是为mod添加独特行为的关键。
Mixins有各种各样的口味,大致按偏好顺序排列:
Adding Interfaces 添加接口
Callback Injectors 回调注入
Redirect Injectors 重定向注入
Overwrites 覆盖
这不是一个完整的列表, ...
opengl03你好,三角形
你好,三角形
在学习此节之前,建议将这三个单词先记下来:
顶点数组对象:Vertex Array Object,VAO
顶点缓冲对象:Vertex Buffer Object,VBO
元素缓冲对象:Element Buffer Object,EBO 或 索引缓冲对象 Index Buffer Object,IBO
当指代这三个东西的时候,可能使用的是全称,也可能用的是英文缩写,翻译的时候和原文保持的一致。由于没有英文那样的分词间隔,中文全称的部分可能不太容易注意。但请记住,缩写和中文全称指代的是一个东西。
在OpenGL中,事物都存在于3D空间中,但屏幕和窗口是2D像素数组。因此,OpenGL的主要任务就是将3D坐标转换为适应屏幕的2D像素。图形渲染管线是管理这个转换过程的一系列阶段。它可以分为两个主要部分:将3D坐标转换为2D坐标,然后将2D坐标转换为有颜色的像素。
图形渲染管线作用
2D坐标 和2D像素的意思
图形渲染管线可以被划分为几个阶段,每个阶段将会把前一个阶段的输出作为输入。
图形渲染管线的每个阶段都是高度专门化的,并且可以并行执行。因此,现代的显卡具有成千上 ...
论文-DFSN网络
一种用于高分辨率双时间遥感图像变化检测的深度监督图像融合网络摘要高分辨率遥感图像中的变化检测对于理解地表变化至关重要。考虑到高分辨率图像中精细的图像细节和复杂的纹理特征所带来的挑战,传统的变化检测方法不适合这项任务,因此提出了许多基于深度学习的变化检测算法来提高变化检测性能。尽管最先进的基于深度特征的方法优于所有其他基于深度学习的变化检测方法,但现有基于深度特征方法中的网络大多是从最初提出的用于单图像语义分割的架构中修改而来的。将这些网络转移到变化检测任务中仍然存在一些关键问题。在本文中,我们提出了一种用于高分辨率双时间遥感图像变化检测的深度监督图像融合网络(IFN)。具体地说,首先通过全卷积双层结构提取双时间图像的高度代表性的深度特征。然后,将提取的深度特征输入到深度监督差异判别网络(DDN)中进行变化检测。为了提高输出变化图中对象的边界完整性和内部紧凑性,通过用于变化图重建的注意力模块,将原始图像的多层次深度特征与图像差异特征融合。通过直接将变化映射损失引入网络中的中间层,进一步增强了DDN,并以端到端的方式对整个网络进行训练。IFN应用于一个公开可用的数据集,以及一个由谷歌地球覆 ...
opengl02创建窗口
创建窗口
第一步我们需要做什么?
为什么我们需要自己创建窗口和定义OpenGL上下文以及用户处理
幸运的是?GLFW库作用是什么,帮助我们省去了什么问题。
GLFW
GLFW是什么,我们需要他做什么?
构建GLFW由于我们使用的是java,并且在上一部分已经整理好了环境,所以这里不再赘述C的内容,想了解的可以到参考文献中参看详情。
CMake编译我们的第一个工程链接Windows上的OpenGL库Linux上的OpenGL库GLAD附加资源
GLFW: Window Guide:GLFW官方的配置GLFW窗口的指南。
Building applications:提供了很多编译或链接相关的信息和一大列错误及对应的解决方案。
GLFW with Code::Blocks:使用Code::Blocks IDE编译GLFW。
Running CMake:简要的介绍如何在Windows和Linux上使用CMake。
Writing a build system under Linux:Wouter Verholst写的一个autotools的教程,讲的是如何在Linux上编写构建系统,尤其是 ...
opengl01环境搭建
为什么要了解openGL我的世界Minecraft,使用的是的OpenGL图形库,也意味着你如果需要进行一些图形的操作就会需要用的OpenGL处理。
openGL简介
OpenGL一般被认为什么,具有什么功能
OpenGL真正是一个什么东西。
OpenGL规范的作用是什么,真正由谁实现
规范在哪里可以找到。如何理解规范的作用。
核心模式和立即渲染模式
什么是立即渲染模式,为什么又立即渲染模式的情况下还需要核心模式
核心模式和立即渲染模式的比较区别,为什么学习和新模式
为什么不学习最新的版本
为什么游戏开发不使用最新的opengl规范版本
拓展
拓展是什么?
拓展能流行起来?
为什么拓展可以成为OpenGL的规范?
如何区分机器支持不支持拓展?
状态机
OpenGL的设计思想?如何工作的?
OpenGL的状态是指什么?
如何更改OpenGL的状态
怎么使用OpenGL渲染
我们的主要手段是什么
对象
为什么OpenGL需要做抽象
如何理解OpenGL中的对象
OpenGL中的工作流
OpenGL中对象思想,如何实现多对象的渲染
LWJGL简介
LWJGL什么?又什么作用
LWJ ...