当前位置:首页 > CN2资讯 > 正文内容

idle python我的世界

1天前CN2资讯


1.将每个顶点坐标和颜色送到渲染管线以进行光栅化

        I.位置:shaders\quad.vert(顶点着色器) |  在#version 330 gore下面 但main函数方法上方

layout(location = 0) in vec3 in_position; layout(location = 1) in vec3 in_color; out vec3 color;

这些代码意味着什么:

这些是glsl也就是opengl的编程语言,执行在GPU上面。

①这一行定义了一个输入变量 in_position,它是一个vec3类型的变量,表示顶点的位置信息。layout(location = 0)指定了这个变量在顶点数组中的位置,即在顶点数组的第0个位置。

②这一行定义了另一个输入变量 in_color,它也是一个vec3类型的变量,表示顶点的颜色信息。layout(location = 1)指定了这个变量在顶点数组中的位置,即在顶点数组的第1个位置。

④这一行定义了一个输出变量 color,它是一个vec3类型的变量,用于将顶点的颜色信息传递给后续的片段着色器阶段。

        II.位置:shaders\quad.vert(顶点着色器),在main函数内部

color = in_color; gl_Position = vec4(in_position, 1.0);

我做了什么:

①将输入顶点的颜色信息传递给输出变量 color,以便后续的片段着色器使用。

②将输入顶点的位置信息转换为裁剪空间坐标,并赋值给内置的输出变量 gl_Position。这里使用 vec4 类型构造了一个四维向量,将顶点的位置信息 (in_position) 作为其前三个分量,第四个分量设为1.0,以符合OpenGL中的齐次坐标系统。

2.在片段着色器中,定义一个输出变量等价于来自于顶点着色器的颜色值

        I.位置:shaders\quad.frag(片段着色器) | 在version 330 core下面 但main函数上面

layout (location = 0) out vec4 fragColor; in vec3 color;

我做了什么:

①这一行定义了一个输出变量,fragColor,它是一个vec4类型的变量,表示片段的颜色信息。layout (location = 0)指定了这个变量在帧缓冲中的位置,即输出到第0个颜色附件。

③这一行定义了一个输入变量 color,它是一个vec3类型的变量,表示从顶点着色器传递过来的颜色信息。

        II.位置:shaders\quad.frag(片段着色器)| 在main函数内

fragColor = vec4(color, 1.0);

我做了什么:

将输入变量 color 转换为vec4类型,并赋值给输出变量 fragColor。在这里,我们假设输入的颜色信息是vec3类型,因此将其作为vec4的RGB分量,同时将alpha分量设为1.0,以得到最终的片段颜色。

3.在scene.py模块中,创建一个四边形网格实例

        位置:在scene.py类中

from settings import * from meshes.quad_mesh import QuadMesh class Scene: def __init__(self, app): self.app = app self.quad = QuadMesh(self.app) def update(self): pass def render(self): self.quad.render()

我做了什么:

①我从settings模块中引入所有东西

②从meshes包中的quad_mesh模块中引入QuadMesh类

⑤定义了一个Scene类

⑥Scene类的初始化方法

⑦这一行将传入的app参数赋值给self.app属性,以便在类的其他方法中可以访问应用程序的实例。

⑧这一行创建了一个QuadMesh对象,并将应用程序的实例传递给它。然后将创建的QuadMesh对象赋值给self.quad属性,以便在类的其他方法中可以访问。

⑩用于更新场景中的对象。目前这个方法是空的,没有具体的实现。

(13)用于渲染场景中的对象

(14)这一行调用了QuadMesh对象的render方法,用于渲染四边形网格对象。

4.在main.py模块中,引入并应用Scene类

        I.位置:在on_init()方法中,就在self.shader_program = ShaderProgram(self)下面,第32行

self.scene = Scene(self)

我在on_init()方法中实例化了scene类

        II.位置:在update方法内,就在self.shader_program.update()下方,第36行

self.scene.update()

我在update方法内调用scene的update方法

        III.位置:在render内,就在self.ctx.clear(color=BG_COLOR)下方,第44行

self.scene.render()

我在render方法内调用scene的render方法


然后启动程序,你会看到这样的东西

注意到,这个四边形并非等边四边形,也就是正四边形。因为我没有添加相机视角。


5.新建两个py模块分别为:camera.py和player.py于根目录下

 6.在settings.py中添加两个camera和player参数

        位置:settings.py内 随便什么位置都可以

# camera ASPECT_RATIO = WIN_RES.x / WIN_RES.y FOV_DEG = 50 V_FOV = glm.radians(FOV_DEG) # 垂直视野 V-FOV H_FOV = 2 * math.atan(math.tan(V_FOV * 0.5) * ASPECT_RATION) # 水平视野 H-FOV NEAR = 0.1 FAR = 2000.0 PITCH_MAX = glm.radians(89) # player PLAYER_SPEED = 0.005 PLAYER_ROT_SPEED = 0.003 PLAYER_POS = glm.vec3(0, 0, 1) MOUSE_SENSITIVITY = 0.002

代码解析:

 ②计算了屏幕的宽高比(aspect ratio),通过将屏幕的水平分辨率除以垂直分辨率得到。

③设置了相机的视野角度,50度。

④将视野角度转换为弧度(radians)。

⑤计算了相机的水平视野角度。首先,将垂直视野角度的一半转换为弧度,然后根据屏幕的宽高比来计算水平视野角度。

⑥设置了相机的近裁剪平面的距离

⑦设置了相机的远裁剪平面的距离

⑧设置了相机的最大俯仰角度,单位是弧度

(11)设置了玩家的移动速度

(12)设置了玩家的旋转速度

(13)设置了玩家的初始位置,使用了glm库中的vec3类型表示

(14)设置了鼠标灵敏度,用于控制玩家视角的移动速度

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/21517.html

    分享给朋友:

    “idle python我的世界” 的相关文章

    大陆VPS选购指南:如何选择最适合的虚拟私人服务器

    1.1 什么是大陆VPS 大陆VPS,即中国大陆的虚拟私人服务器,是一种通过虚拟化技术将一台物理服务器分割成多个独立虚拟服务器的服务。每个VPS都拥有独立的操作系统、存储空间和带宽资源,用户可以像使用独立服务器一样进行管理和配置。大陆VPS的优势在于其本地化的数据中心和网络连接,能够为国内用户提供更...

    选择台湾VPS的优势与实用技巧分析

    在当今互联网迅速发展的时代,虚拟专用服务器(VPS)成为了众多企业和个人不二的选择。台湾VPS作为一个相对新兴的产品,凭借自己独特的地理位置和优异的技术性能,逐渐在市场上占据了一席之地。身为个人或企业,在选择服务器时,了解台湾VPS的基本概念及其优势无疑是一个明智的开始。 什么是VPS? VPS,即...

    GPU租用服务:灵活、高效、经济的计算解决方案

    在今天的科技世界里,GPU租用服务正逐渐成为一种流行的趋势。这种服务允许用户通过云计算平台租用高性能的图形处理单元(GPU),从而完成需要大量计算的任务,比如深度学习、3D渲染或者其他复杂的数据处理。对于很多个人用户或小企业而言,直接购买这些昂贵的硬件并不现实,租用的方式显得更加灵活和经济。 借助G...

    2024年Evoxt优惠码及促销活动详解

    什么是Evoxt优惠码? 当我首次接触Evoxt优惠码时,我的主要关注点是如何利用这些优惠信息来节省费用。简单来说,Evoxt优惠码是一种提供给顾客的特殊代码,使用这些代码可以在购物时享受到价格的折扣或其他优惠。这些代码通常由Evoxt发布,目的是吸引更多消费者,促进销售。而对于我们消费者来说,这无...

    百度云在香港的全面解决方案及使用指南

    在我了解百度云在香港的过程中,我发现它不仅是一个基础的云存储平台,更是一个能满足多个行业需求的全面解决方案。百度云的基本架构和功能非常强大,支持海量数据的存储与管理。对于需要海量数据处理的企业以及个人用户来说,它似乎是个可靠的选择。平台简单易操作,界面友好,也让我很容易上手。 香港市场对云服务的需求...

    全面解析DMIT服务器:配置、优化与安全指南

    在数字化日益深入的时代,服务器的角色愈加重要,而DMIT服务器正是其中一个引人注目的技术创新。DMIT,这个综合性的信息技术平台,不仅为企业提供了强大的数据处理能力,还支持多种应用场景,成为现代信息系统中的重要组成部分。如果你在寻找一个强大而灵活的服务器解决方案,DMIT服务器绝对值得关注。 那么,...