HNU计算机图形学-作业一

news2024/11/23 6:31:40

任务一:创建交互式三维场景

前言

完整工程文件

具体运行环境配置看这个栏目的第一篇文章

专选课计算机图形学的第一次作业,老师是第一次给本科生上课,用的作业是香港中文大学的计算机图形学的作业内容(老师就是这个学校毕业)。第一次接触OpenGL,一开始也没学什么高级的技术,所以就简单画了一些图形的组合,只学了一周不到,写这篇文章主要为了记录和分享所学内容(毕竟也花费了很多时间的专选),代码格式也比较混乱,很多重复的部分,比如定义顶点的信息等等,凑合看看吧。

下面是作业文档的要求

介绍

第一个编程任务将向您介绍OpenGL图形编程接口和可编程管道。在这个编程任务中,您需要创建一个具有用户交互的3D场景(参见图1中的好例子)。本作业旨在将您对计算机图形概念的理解应用于实践,熟悉OpenGL编程库,并向您介绍可编程管道。

在这里插入图片描述

您的目标是设计具有用户交互的3D场景。具体来说,在场景中,必须有2D对象(例如平面)、3D对象(例如立方体)和/或线(点)(示例见图2),并且您应该能够对其应用包括平移、旋转和缩放在内的变换。用户应该能够使用键盘(和/或鼠标)平移、旋转和缩放对象。对象颜色、窗口大小、窗口标题和场景布局都取决于您。要使场景更逼真,应使用透视投影而不是正交投影。需要使用索引绘制对象。您 的3D场景不受演示图片和程序的限制。

在这里插入图片描述

实施详细信息

我们提供了两个着色器程序(即VertexShaderCode.glsl和FragmentShaderCode.glsl)和一个模板主程序 (即main.cpp)。它们包括GLFW接口工具包中用于事件处理函数的必要函数。使用此模板作为实施的基础。你必须设计你的函数来处理键盘事件,你还应该提交一个readme.txt文件来解释你在程序中设计的键盘(和/或鼠标)事件。否则,将扣除相关项目的分数。所有程序都应符合合理的编程标准:标题注释、在线注释、良好的模块化、清晰的打印输出和效率。

基本要求:

  1. OpenGL代码应该使用OpenGL 3.0+的可编程管道,而不是固定管道。

  2. 至少绘制一个二维对象和两个三维对象。

  3. 确保至少绘制了一个带有索引的对象。

  4. 创建至少三种键盘和/或鼠标事件,如旋转、平移和缩放。

  5. 使用给定的透视投影(45.0 degree, any aspect, 0.1, 20.0)绘制场景。

  6. 启用深度测试以实现遮挡。

其他自我设计要求:

可以自由添加对象、移动对象、组织对象,以及任何使场景有趣的内容

分级方案

您的作业将根据以下评分方案进行评分:

在这里插入图片描述

实现效果

在这里插入图片描述

鼠标 “移动”:转动整个布局视角
鼠标 “滑轮”:上滑放大视角,下滑缩小视角
Key “Esc”: exit
Key “W”: 视角前移
Key “A”: 视角左移
Key “S”: 视角后移
Key “D”: 视角右移
Key “UP”: 人物上移
Key “DOWN”: 人物下移
Key “LEFT”: 人物左移
Key “RIGHT”: 人物右移
Key “SPACE”: 人物跳跃
Key “ENTER”: 人物身体换色
Key “Q”: 透视投影参数宽高比增大
Key “E”: 透视投影参数宽高比减小

说明:左下角和右上角有两个传送门,人物走到对应位置可以传到相应传送门。
人物只能在棋盘内活动,超过布局大小时会移动到对面的位置

最后再说一下因为是第一次做,所以很多地方有重复的部分(比如很多个for循环),

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/625199.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试方法 -- 等价类边界值

测试用例的定义 测试用例是为了特定的目的而设计的一组测试输入、执行条件和预期的结果,以便测试是否满足某个特定需求。通过大量的测试用例来检验软件的运行效果,他是指导测试工作进行的依据。 下面我们介绍几种常用的黑盒测试方法 等价类划分法 定…

微信小程序实用工具——渐变色按钮(一)

今日推荐💁‍♂️ 2023五月天演唱会🎤🎤🎤大家一起冲冲冲🏃‍♂️🏃‍♂️🏃‍♂️ 文章目录 今日推荐💁‍♂️🏖️开头介绍 👨‍🏫1️⃣ 按钮一…

【数学建模】 非线性规划+二次规划

非线性规划概念和实例 如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。一般说来,解非线性规划要比解线性规划问题困难得多。而且,也不象线性规划有单纯形法这一通用方法,非线性规划目前还没有适于各…

大咖驾到:XR云新未来|弹性算力赋能可交互、沉浸式商业实践

活动背景 XR市场作为数字化经济的重要发展方向,成为各大企业竞相布局的焦点。技术的进步和应用场景的扩大,为企业抢占XR市场先机、实现商业化带来了巨大机遇,同时也带来了技术挑战和成本压力。如何在竞争激烈的市场中脱颖而出,成…

【每日挠头算法题(3)】字符串解码|数组中重复的数字

每日挠头算法题 一、字符串解码思路:栈具体代码如下: 二、数组中重复的数字思路1:计数法具体代码如下: 思路2:原地交换法具体代码如下: 总结 一、字符串解码 点我直达~ 思路:栈 这道题怎么看都…

python 爬虫某东网商品信息 | 没想到销量最高的是

哈喽大家好,我是咸鱼 好久没更新 python 爬虫相关的文章了,今天我们使用 selenium 模块来简单写个爬虫程序——爬取某东网商品信息 网址链接:https://www.jd.com/ 完整源码在文章最后 元素定位 我们需要找到网页上元素的位置信息&#x…

Spring内容

(195条消息) 超高频面试题系列之----Spring全家桶(面试亲测)_spring全家桶面试题_zyyn_未来可期的博客-CSDN博客 1、推断构造方法: (1)如果只有一个构造方法,没问题就用这个 (2)如…

Java学习路线(26)——XML与设计模式

一、XML (一)XML的概念: XML是可扩展标记语言(Extensible Markup Language),一种数据表示形式,可以描述非常复杂的数据结构,常用于传输和存储数据。 (二)XM…

day50|动态规划11-买卖股票的最佳实际3-4(限制买卖次数的情况)

123.买卖股票的最佳时机III 确定递归函数,当前的每一个状态都由前一天决定。 以dp[i][1]和dp[i][2]为例讲解递归函数的含义: dp[i][1]max(dp[i-1][1],dp[i-1][0]-prices[i]) 含义: 第i天的股票第一天持有状态有两种,一种是前一…

电脑msvcr100.dll丢失的解决方法(一键修复方法)

msvcr100.dll是Microsoft Visual C运行时库的组成部分之一,它是一个重要的动态链接库(DLL)文件,可在Windows操作系统上运行。它包含了许多C/C语言程序库函数的实现,常常被用于支持和调用不同软件程序的运算&#xff0c…

POSTGRES、MYSQL插入数据的UPDATE_INSERT实践

POSTGRES: 1、创建表 create table tbl_user( id serial PRIMARY KEY, name varchar(256), addr varchar(256), age int, score int, fav varchar(256) ); 2、创建唯一约束 alter table tbl_user add constraint name_add_age_unique unique(name,addr,age); 3、首先插入两条数…

Ansible自定义静态资产以及常用模块

静态资产 文件文件,一个格式类似于INI的文件 默认情况下,Ansible的资产文件位于/etc/ansible/host,如果使用pip安装的则可能没有这文件,可以自己创建。 1、自定义资产 #自定义编写inventory.ini文件 1.1.1.1 2.2.2.2 3.3.3.[1:15]…

【C++】—— 模板介绍

前言: 在之前的学习中,我们已经对几个常见的STL库容器进行了详细的讲解,并且进行了模拟实现帮助大家立即。接下来,我们要介绍的就是关于 “模板” 的基本知识。 目录 前言 (一)非类型模板参数 1、基本介…

Splashtop 推出首款专门面向创作者和创意工作室的高性能远程软件

2023年5月3日 加利福尼亚州库比蒂诺 Splashtop 在简化随处办公的远程解决方案领域处于领先地位,公司今天宣布推出 Splashtop Business Access Performance,这是一款全新的远程访问解决方案,针对独立艺术家、游戏玩家、建筑与设计以及创意公司…

Opencv项目实战:基于dlib的疲劳检测

文章目录 一、项目简介二、算法原理三、环境配置3.1、dlib人脸检测器:dlib.get_frontal_face_detector()3.2、dlib关键点定位工具:shape_predictor_68_face_landmarks.dat 四、项目实战(加载视频)五、项目实战(摄像头获…

软件测试猿和bug的爱恨情仇

对程序猿来说改bug可以位列开发过程中最讨厌的事之首了,这么讲应该没有人会反对吧?因为就连Java之父詹姆斯高斯林也很讨厌Bug。 另一方面对于测试猿来说工作职责就是尽可能多地找出bug,并确保其得以解决。所以被程序猿视为眼中钉肉中刺的bug可…

Doris半结构化数据分析(倒排索引使用)快速入门

1. 背景 Apache Doris2.0 基于Apache Doris向量化MPP引擎,增加了倒排索引和半结构化JSON数据支持,更好地满足日志存储、检索、分析需求。与基于ES的日志存储方案相比,有如下优势: 性价比提升:存储成本降低50%以上&am…

‍☠️stm32Cubemx欠采样原理讲解与实现 采集高频信号

🏴‍☠️STM32Cubemx ADCTIMDMA欠采样采集高频信号 本文主要讲解ADC借助欠采样采集高频信号,比如使用100k左右的采样率去采集1M的信号。 所需工具: 开发板:STM32F103RCT6STM32CubeMXIDE: Keil-MDK 相关文章: STM32HAL ADCTIM…

2核4G轻量服务器阿里云和腾讯云区别对比

阿里云轻量应用服务器2核4G4M带宽297.98元12个月,腾讯云轻量2核4G5M服务器168元一年,628元3年,2核4G轻量应用服务器阿里云和腾讯云怎么选择?哪个性能比较好?阿腾云分享轻量应用服务器2核4G配置阿里云和腾讯云CPU、带宽…

打破互联网思维,我们该如何思考?

在会议上,你是否流程规范讲到一半突然卡逻辑、测分会议疯狂输出周围却一脸问号?提交缺陷时,你又是否被告知看不懂,要求补充信息?受挫时捶胸顿足“表达可太太太重要了,难道我天生脑子转的就比别人慢&#xf…