【小沐学GIS】基于C++绘制三维数字地球Earth(OpenGL、glfw、glut、QT)第三期

🍺三维数字地球系列相关文章如下🍺:
1【小沐学GIS】基于C++绘制三维数字地球Earth(456:OpenGL、glfw、glut)第一期
2【小沐学GIS】基于C++绘制三维数字地球Earth(456:OpenGL、glfw、glut)第二期
3【小沐学GIS】基于C++绘制三维数字地球Earth(456:OpenGL、glfw、glut)第三期
4【小沐学GIS】基于C++OpenSceneGraph(OSG)绘制三维数字地球Earth(7:OpenGL)
5【小沐学GIS】基于C++QT绘制三维数字地球Earth(8:OpenGL)
6【小沐学GIS】基于C++绘制太阳系SolarSystem(9:OpenGL、glfw、glut)
7【小沐学GIS】基于C#绘制三维数字地球Earth(10:OpenGL)
8【小沐学GIS】基于Python绘制三维数字地球Earth(11:OpenGL)
9【小沐学GIS】基于Android绘制三维数字地球Earth(12:OpenGL)
10【小沐学GIS】基于WebGL绘制三维数字地球Earth(13:OpenGL)

文章目录

  • 1、简介
  • 2、相关公式
  • 3、实现步骤
  • 4、运行结果(3d整体地球)
    • 4.21 opengl / glfw / glew / c++ / 白天黑夜大气层 (3d)
    • 4.22 opengl / glfw / glew / c++ / 云层 (3d)
    • 4.23 opengl / glfw / glew / c++ / obj(3d)
    • 4.24 opengl / glfw / glad / c++ / 发光太阳和地球(3d)
    • 4.25 opengl / glfw / glew / c++ / 天空盒(3d)
    • 4.26 opengl / win32 / glew / FreeImage / c++ / 动态天空(3d)
    • 4.27 opengl / freeglut / glew / c++ / 白天夜晚(3d)
    • 4.28 opengl / freeglut / glad / c++ / 太阳地球天空盒(3d)
    • 4.29 opengl / sdl / glad / c++ / 文字/网格(3d)
    • 4.30 opengl / glfw / glad / c++ / 白天黑夜法线(3d)
  • 结语

1、简介

在现代计算机图形学中,OpenGL(Open Graphics Library)是一个广泛使用的跨平台的图形API,它允许开发者在各种操作系统上渲染二维和三维矢量图形。实现一个三维地球模型是OpenGL应用的一个经典案例,涉及到球体的建模、纹理映射、光照和视角控制等多个方面。

2、相关公式

在这里插入图片描述

3、实现步骤

首先,创建一个球体模型来代表地球。定义球体的顶点和索引,使用球坐标系下的参数方程来生成球体的顶点数据。然后,为球体创建纹理,这是一张全球的地图图片,或者是分割成多个区域的瓦片地图。纹理映射是将二维图像包裹到三维模型上的过程,它使得地球模型看起来更加真实。

光照是另一个重要的环节,它能够模拟不同光照条件下地球的明暗变化。OpenGL提供了多种光照模型,包括环境光、漫反射光和镜面反射光等,通过合理配置这些光照参数,可以增强地球模型的立体感。

视角控制是实现用户交互的关键。通过监听鼠标事件,可以实现对地球的旋转和平移操作,让用户可以从不同角度观察地球。这通常涉及到一些矩阵变换,如旋转矩阵和平移矩阵,它们被用来更新模型视图矩阵,从而改变相机的位置和方向。

最后,渲染循环是OpenGL程序的核心,它不断地清除屏幕、设置绘图状态、绘制地球模型,并交换前后缓冲区以更新显示。在这个循环中,处理所有的绘图命令,包括设置纹理、应用光照和执行绘制调用。

4、运行结果(3d整体地球)

4.21 opengl / glfw / glew / c++ / 白天黑夜大气层 (3d)

在这里插入图片描述
在这里插入图片描述

4.22 opengl / glfw / glew / c++ / 云层 (3d)

在这里插入图片描述
在这里插入图片描述

4.23 opengl / glfw / glew / c++ / obj(3d)

在这里插入图片描述

4.24 opengl / glfw / glad / c++ / 发光太阳和地球(3d)

在这里插入图片描述
在这里插入图片描述

4.25 opengl / glfw / glew / c++ / 天空盒(3d)

在这里插入图片描述
在这里插入图片描述

4.26 opengl / win32 / glew / FreeImage / c++ / 动态天空(3d)

在这里插入图片描述

在这里插入图片描述

4.27 opengl / freeglut / glew / c++ / 白天夜晚(3d)

在这里插入图片描述
在这里插入图片描述

4.28 opengl / freeglut / glad / c++ / 太阳地球天空盒(3d)

在这里插入图片描述
在这里插入图片描述

4.29 opengl / sdl / glad / c++ / 文字/网格(3d)

在这里插入图片描述
在这里插入图片描述

4.30 opengl / glfw / glad / c++ / 白天黑夜法线(3d)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以上章节所有地球代码,均在VS2017及以上、或QT5、QT6等开发环境编译通过。工程文件基于CMake构建。

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

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

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

相关文章

实景视频与模型叠加融合?

[视频GIS系列]无人机视频与与实景模型进行实时融合_无人机视频融合-CSDN博客文章浏览阅读1.5k次,点赞28次,收藏14次。将无人机视频与实景模型进行实时融合是一个涉及多个技术领域的复杂过程,主要包括无人机视频采集、实景模型构建、视频与模型…

MySQL通过binlog日志进行数据恢复

记录一次阿里云MySQL通过binlog日志进行数据回滚 问题描述由于阿里云远程mysql没有做安全策略 所以服务器被别人远程攻击把数据库给删除,通过查看binlog日志可以看到进行了drop操作,下面将演示通过binlog日志进行数据回滚操作。 1、查询是否开始binlog …

IDEA 修改格式化仅格式化本次改动代码

最近总是发现格式化的时候会格式化文件所有代码,提交Git 后再看提交日志,就很不清晰。修改方式如下 中文: 格式化代码快捷键[中文配置]: 英文: 格式化代码快捷键[英文配置]:

el-table ToggleRowSelection实现取消选中没效果(virtual-scroll)

场景: 就是在虚拟列表el-table选中之后 点击查询 默认之前选中的 现象: 就是实现选中, 但是无法去除勾选等等 问题发现: 看定位的数据 有多个一样的,我想着勾选之前 先去掉勾选 ,但是没效果或者说“相同的…

【含开题报告+文档+PPT+源码】基于微信小程序的点餐系统的设计与实现

开题报告 随着互联网技术的日益成熟和消费者生活水平与需求层次的显著提升,外卖点餐平台在中国市场上迅速兴起并深深植根于民众日常生活的各个角落。这类平台的核心在于构建了一个基于互联网的强大订餐服务系统,它无缝整合了餐饮商户资源与广大消费者的…

解决 MyBatis 中空字符串与数字比较引发的条件判断错误

问题复现 假设你在 MyBatis 的 XML 配置中使用了如下代码&#xff1a; <if test"isCollect ! null"><choose><when test"isCollect 1">AND exists(select 1 from file_table imgfile2 where task.IMAGE_SEQimgfile2.IMAGE_SEQ and im…

SpringBoot 手动实现动态切换数据源 DynamicSource (中)

大家好&#xff0c;我是此林。 SpringBoot 手动实现动态切换数据源 DynamicSource &#xff08;上&#xff09;-CSDN博客 在上一篇博客中&#xff0c;我带大家手动实现了一个简易版的数据源切换实现&#xff0c;方便大家理解数据源切换的原理。今天我们来介绍一个开源的数据源…

ASCII码简介以及在php中的使用

什么是 ASCII&#xff1f; ASCII&#xff08;American Standard Code for Information Interchange&#xff0c;美国信息交换标准代码&#xff09;是一种字符编码标准&#xff0c;用于在计算机、通信设备及其他设备中表示文字、符号和控制信息。它最早于 1963 年由美国国家标准…

前端学习一

一 进程与线程 线程是进程执行的最小单位&#xff0c;进程是系统分配任务的最小单位。 一个进程可执行最少一个线程。线程分为子线程和主线程。 主线程关闭则子线程关闭。 二 浏览器进程 浏览器是多进程多线程应用。 进程包括&#xff1a; 浏览器进程 负责程序交互渲染…

Go vendor

博主在编写Go代码时&#xff0c;遇到了这样一个问题&#xff1a;想要修改某个外部包&#xff0c;添加几个函数&#xff0c;而其余功能继续使用&#xff0c;经过调研&#xff0c;发现可以将Go的外部包源码复制到项目本地&#xff0c;对包的代码进行修改&#xff0c;从而达到目的…

EasyExcel 动态设置表格的背景颜色和排列

项目中使用EasyExcel把数据以excel格式导出&#xff0c;其中设置某一行、某一列单元格的背景颜色、排列方式十分常用&#xff0c;记录下来方便以后查阅。 1. 导入maven依赖&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easy…

概率论得学习和整理23:EXCEL 数据透视表基础操作

目录 1 选择数据&#xff0c;插入数据透视表 2 选择数据透视表生成位置 3 出现了数据透视表的面板 4 数据透视表的基本结构认识 4.1 交叉表/列联表 4.2 row, column, cell 一个新增的筛选器&#xff0c;就这么简单 4.3 可以只添加 rowcell/值 &#xff0c;也可以colu…

计算机网络从诞生之初到至今的发展历程

前言 "上网"&#xff0c;相信大家对这个动词已经不再陌生&#xff0c;网 通常指的是网络&#xff1b;在 2024 年的今天&#xff0c;网络已经渗透到了每个人的生活中&#xff0c;成为其不可或缺的一部分&#xff1b;你此时此刻在看到我的博客&#xff0c;就是通过网络…

C# 读取EXCEL的数据批量插入单个PDF里的多个位置

C# 读取EXCEL的数据批量插入单个PDF里的多个位置 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Reflection; usin…

图论笔记1

1.1邻接矩阵储存法 //创建:二维数组vector<vector<int>> graph(n,vector<int>(n,0));//储存for(int i0;i<m;i){int x1,x2;cin>>x1>>x2;graph[x1-1][x2-1]1;}1.2邻接表储存法 补充&#xff1a;c中的list是链表 链接 //创建&#xff1a;数组…

GB28181系列三:GB28181流媒体服务器ZLMediaKit

我的音视频/流媒体开源项目(github) GB28181系列目录 目录 一、ZLMediaKit介绍 二、 ZLMediaKit安装、运行(Ubuntu) 1、安装 2、运行 3、配置 三、ZLMediaKit使用 一、ZLMediaKit介绍 ZLMediaKit是一个基于C11的高性能运营级流媒体服务框架&#xff0c;项目地址&#xf…

iPhone恢复技巧:如何从 iPhone 恢复丢失的照片

在计算机时代&#xff0c;我们依靠手机来捕捉和存储珍贵的回忆。但是&#xff0c;如果您不小心删除或丢失了手机上的照片怎么办&#xff1f;这真的很令人沮丧和烦恼&#xff0c;不是吗&#xff1f;好吧&#xff0c;如果您在 iPhone 上丢失了照片&#xff0c;您不必担心&#xf…

如何将你的 Ruby 应用程序从 OpenSearch 迁移到 Elasticsearch

作者&#xff1a;来自 Elastic Fernando Briano 将 Ruby 代码库从 OpenSearch 客户端迁移到 Elasticsearch 客户端的指南。 OpenSearch Ruby 客户端是从 7.x 版 Elasticsearch Ruby 客户端分叉而来的&#xff0c;因此代码库相对相似。这意味着当将 Ruby 代码库从 OpenSearch 迁…

LeetCode 283.移动零(超简单讲解)

283.移动零 题目示例示例1示例2 解题思路快慢指针实现设计 详细代码 题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 示例1 …

Day8 神经网络中的导数基础

Day8 神经网络中的导数基础 导数的定义 导数&#xff08;Derivative&#xff09;是微积分中的一个核心概念&#xff0c;用于描述函数在某一点的变化率。简单来说&#xff0c;导数就是函数值随自变量微小变化而产生的变化量&#xff0c;即斜率或变化率。假设有一个函数 f ( x…