OpenGL边用边学------2 经典照相机模型

2024-01-13 23:58

本文主要是介绍OpenGL边用边学------2 经典照相机模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 实际照相步骤
    • 1 布置场景和调整照相机位置
    • 3 选择镜头对焦Focus
    • 4 按下快门
    • 5 在电脑窗口中欣赏图片
  • OpenGL的相机模型
    • 0 确定胶片位置
    • 1 确立场景世界坐标系
    • 2 在世界坐标系中确定相机位置与方向
    • 3 在世界坐标系中建立物理世界模型
    • 4 视图变换与模型变换的抉择
    • 5 在照相机坐标系中确定可视范围对焦投影变换
    • 6 调用glBegin glEnd拍照
  • OpenGL相机模型与实际相机的不同
    • 1 物体和相机都可以任意移动
    • 2 最终的照片可以是多次拍摄合成的
    • 3 特殊的投影方式正投影
  • 相机模型使用建议
    • 1 尽量让编程符合这个模型
    • 2 注意区分两大坐标系世界坐标系和相机坐标系
    • 3 实例

学习OpenGL必须要有一个感性的认识,最经典的类比就是照相机照相模型。现在几乎人人都有一部自带照相功能的手机了,所以这个模型对于绝大多数人来说都是非常容易理解的。

1 实际照相步骤

1.1 布置场景和调整照相机位置

照相模型
之所以把布置场景和调整相机位置放到了一起,是因为这两个步骤的顺序不是固定的,摄影师既可以自己移动相机,也可以指挥被拍的人移动位置。

1.3 选择镜头,对焦(Focus)

镜头的选择主要是为了达到合适的视角范围,镜头确定以后,焦距就确定了。

一般来说,调焦(Focus)并不是改变镜头的焦距,而是改变镜头与胶片的距离(像距)。

凸透镜能成像,一般用凸透镜做照相机的镜头时,它成的最清晰的像一般不会正好落在焦点上,或者说,最清晰的像到光心的距离(像距)一般不等于焦距,而是略大于焦距。具体的距离与被照的物体与镜头的距离(物距)有关,物距越大,像距越小,(但实际上总是大于焦距)。

这里写图片描述

1.4 按下快门

一切都调整好了,就可以拍照了。按下快门的那一刻,相机位置、场景布置都定格了,不再改变。感光器件(胶片)会记录下这一时刻的场景,绘制成一个矩形的二位像素图。

1.5 在电脑窗口中欣赏图片

然后就可以把照片转移到电脑中,使用看图软件把图片放到合适的位置进行欣赏了。

2 OpenGL的相机模型

2.0 确定胶片位置

OpenGL中没有真正的胶片,必须把拍摄到的图像放到一个指定的地方显示,这个地方就是视口。在上篇博文中已经专门介绍了视口的设置方法了,这里不再累述。

2.1 确立场景(世界)坐标系

与实际照相不同的是,OpenGL默认的物理世界里是没有任何物体的。需要程序员通过代码来建立场景中的物体。建模的最基本要素是确定物体的位置,而要描述物体位置首先要做的就是确定一个世界(场景)坐标系。这个坐标系必须是标准的笛卡尔右手坐标系,而其原点和长度单

这篇关于OpenGL边用边学------2 经典照相机模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选