当前位置: 首页 > news >正文

输出图元(四)8-1 图元、屏幕坐标、指定二维世界坐标系统

 
        用于图形应用的通用软件包称为计算机图形应用编程接口(CCAPI)它提供可以在C++等程序设计语言中用来创建图形的函数库。如第3 章所指出的,函数库可以分成几种类型。创建图形时最先要做的一件事就是要描述显示场景的组成部分。图形的组成部分可以是树木和地形家具和墙壁、商店铺面和街景、汽车和广告牌、原子和分子或者星星和银河。对于每一类场景要描述每一对象的结构及其在场景中的坐标位置。图形软件包中用来描述各种图形元素的函数称为图形输出原语(graphicsoutput primitive),或简称为图元(primitive)。描述对象几何要素的输出图元一般称为几何图元(geometric primitive)。点的位置和直线段是最简单的几何图元。图形软件包中另外的几何图元有圆和其他二次曲线、二次曲面、样条曲线和曲面及多边形填色区域。多数图形系统还提供某些显示字符串的函数。在选定的坐标系中指定一个图形的几何要素后,输出图元投影到与该输出设备显示区域对应的二维平面上,并扫描转换到帧缓存的整数像素位置。本章将介绍OpenGL中的输出图元并讨论它们的应用。第6章再讨论实现输出图元的设备级算法。


4.1 坐标系统

        为了描述图形,必须首先确定一个称为世界坐标系的合适的二维或三维笛卡儿坐标系。接着通过给出世界坐标系中的位置等几何描述来定义图形中的对象。例如,通过两个端点定义一条直线段,通过一组顶点位置定义一个多边形。这些坐标位置与该对象的颜色、坐标范围(coordinate extent)即对象标y的最小值和最大值等其他信息一起存储在场景描述中。坐标范围也称为对象的包围盒(bounding box)。对于二维图形来说坐标范围也称为对象的包围矩形(bounding rectangle)。通过将场景信息传送给观察函数由观察函数识别可见面将对象映射到视频监视器上来实现对象的显示。扫描转换过程将颜色值等场景信息保存到帧缓存的相应位置,从而在输出设备上显示场景中的对象。
4.1.1 屏幕坐标
        视频监视器上的位置使用与缓存中的像素位置相对应的整数屏幕坐标(screen coordinate)进行描述。像素的坐标值给出扫描行号(y 值)和列号(扫描行的 值)。屏幕刷新等硬件处理一般从屏幕的左上角开始对像素进行编址。从屏幕最上面的0行到屏幕最下面的某整数值行对扫描行进行编号,每一行中像素位置从左到右、从0到xm进行编号。但是使用软件命令可以按照任何方式设定屏幕位置的参考系统。例如,我们可以设定屏幕区域左下角为原点,用整数坐标(参见图4.1)或非整数笛卡儿坐标来描述图形。描述场景几何要素的坐标值由观察函数转换为顿缓存中的整数像素位置。

        图元的扫描转换算法使用定义的坐标描述来确定要显示像素的位置。例如,给定一直线段的两个端点,其显示函数必须计算出两端点间位于线段上所有像素的位置。由于一个像素位置占有屏幕上的一个有限范围,因此实现算法必须考虑像素的有限大小。目前,我们假设每一整数屏幕位置代表像素区域的中心。(我们将在6.8节考虑其他的像素编址方法。一旦确定了一个对象的像素位置,必须将合适的颜色值存人帧缓存。为此,我们要使用一个底层函数
setPixel (x,y);
该函数将当前颜色设定值存入帧缓存的整数坐标位置(x,y)处该位置相对于屏幕坐标原点而选定。有时我们也希望获得一个像素位置的当前帧缓存设置。使用下列底层函数可以获得帧缓存的
颜色值:getPixel (x,y,color);在这一函数中参数color 得到一个与存储在位置(xy)的像素中的红色、绿色和蓝色(RGB)组合对应的整数值。

        对于二维图形来说,仅需在(x,y)位置指定颜色值;但是对于三维图形来说,还需要其他的屏幕坐标信息。这时,屏幕坐标按三维值来存储,第三维表示对象位置相对于观察位置的深度。在二维场景中,深度值均为0。

4.1.2绝对和相对坐标描述
        到目前为止,我们讨论的坐标均为绝对坐标(absolute coordinate)值。这表示指定的值是所在
坐标系统中的实际位置。

        然而,有些图形软件包还允许使用相对坐标(relative cordinate)来描述位置。该方法在许多图形应用中很有用,比如用笔式绘图仪、艺术家绘画系统进行绘图及出版和印刷应用的图形软件包。使用这一方法,我们可以使用从离开最后一次引用的位置(称为当前位置,current position)的位移量来指定坐标位置。例如,如果位置(3,8)是应用程序刚刚引用的位置,则相对坐标描述(2,-1)与绝对位置(57)相对应。有一个函数专门用来在指定任何图元坐标前设定当前位置。在描述一串首尾相连的直线段场景时,我们可以在建立开始位置后仅给出一串相对坐标(位移)。图形系统中会给出指定位置时使用相对坐标还是绝对坐标的选项。在此后的讨论中,除非特别声明,我们假定都使用绝对坐标。

4.2OpenGL中指定二维世界坐标系统
        第一个示例程序(在3.5 节讨论过了)介绍了 gluortho2D 命令,我们可以利用该命令设定一个二维笛卡儿坐标系。该函数的变量是指定显示图形的和y坐标范围的四个值。由于gluortho2D函数指定正交投影,因此我们也要确定坐标值放进了OpenCL投影矩阵中。此外,我们可以将世界坐标范围设定前的投影矩阵定义为一个单位矩阵。这样可保证坐标值不会受以前设置的投影矩阵的影响。因此,对于最初的二维例子,我们可以通过下列语句定义屏幕显示窗口的坐标系统:
        g1MatrixMode (GL PROJECTION):
        glLoadIdentity():
        gluOrtho2D (xmin,xmax, ymin, ymax);
  如图4.2所示,显示窗口被指定为其左下角位于坐标(xmin,ymin)处右上角位于坐标(xmax,ymax)处。
        我们随后可使用gluortho2D语句描述的坐标系统来指定一个或多个要显示的图元。如果个图元的坐标范围完全在显示窗口的坐标范围内,则该图元将完整地显示出来。否则,仅仅在显示窗口坐标范围内的图元部分被显示。同样,在建立图形的几何描述时,所有 OpenGL图元的位置必须用gluortho2D函数定义的坐标系统中的绝对坐标给出。

相关文章:

输出图元(四)8-1 图元、屏幕坐标、指定二维世界坐标系统

用于图形应用的通用软件包称为计算机图形应用编程接口(CCAPI)它提供可以在C等程序设计语言中用来创建图形的函数库。如第3 章所指出的,函数库可以分成几种类型。创建图形时最先要做的一件事就是要描述显示场景的组成部分。图形的组成部分可以是树木和地形家具和墙壁…...

机器学习---决策树的划分依据(熵、信息增益、信息增益率、基尼值和基尼指数)

1. 熵 物理学上,熵 Entropy 是“混乱”程度的量度。 系统越有序,熵值越低;系统越混乱或者分散,熵值越⾼。 1948年⾹农提出了信息熵(Entropy)的概念。 从信息的完整性上进⾏的描述:当系统的有序…...

java解析json

1. 解析根节点为“{}”的json {"id": 1525490,"name": "有缘网" }代码: String jsonString "{\"id\":1525490\",\"name\":\"有缘网\"}";JSONObject jsonObject JSONObject.…...

PAT 1163 Dijkstra Sequence

个人学习记录,代码难免不尽人意。 Dijkstra’s algorithm is one of the very famous greedy algorithms. It is used for solving the single source shortest path problem which gives the shortest paths from one particular source vertex to all the other v…...

嵌入式学习之进程

1.进程间通信概述 UNIX系统IPC是各种进程通信方式的统称。 2.管道通信原理 特点: 1.它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。 2.它只能用于具有亲缘关系的进程之间通信(也是父子进程或者…...

C#-单例模式

文章目录 单例模式的概述为什么会有单例模式如何创建单例模式1、首先要保证,该对象 有且仅有一个2、其次,需要让外部能够获取到这个对象 示例通过 属性 获取单例 单例模式的概述 总结来说: 单例 就是只有 一个实例对象。 模式 说的是设计模式…...

WSNs 安全技术

WSNs 多用于军事,特殊现场的警戒保护、商业区域的安防,作为任务型网 络,不仅要进行数据传输,而且要进行数据采集和融合,任务的协同控制等,如何 保证任务执行的机密性,数据产生的可靠性数据融合…...

H5如何做页面下拉刷新和上拉加载

这里以vant为例 结构 <van-pull-refreshv-model"isLoading"success-text"刷新成功"refresh"onRefresh"><van-liststyle"height:100%"v-model"loading":finished"finished"finished-text"没有更多了…...

Camunda 7.x 系列【42】事件子流程

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 概述2. 案例演示2.1 流程模型2.2 测试1. 概述 事件子流程是由事件触发的子流程,可存在…...

JVM类的加载过程

加载过程 JVM的类的加载过程分为五个阶段&#xff1a;加载、验证、准备、解析、初始化。 加载   加载阶段就是将编译好的的class文件通过字节流的方式从硬盘或者通过网络加载到JVM虚拟机当中来。&#xff08;我们平时在Idea中书写的代码就是放在磁盘中的&#xff0c;也可以通…...

Jmeter如何设置中文版

第一步&#xff1a;找到 apache-jmeter-5.4.3\bin目录下的 jmeter.properties 第二步:打开 三&#xff0c;ctrf 输入languageen&#xff0c;注释掉&#xff0c;增加以行修改如下 四&#xff0c;ctrs 保存修改内容&#xff0c;重新打开jmeter就可以了...

flutter自定义按钮-文本按钮

目录 前言 需求 实现 前言 最近闲着无聊学习了flutter的一下知识&#xff0c;发现flutter和安卓之间&#xff0c;页面开发的方式还是有较大的差异的&#xff0c;众所周知&#xff0c;android的页面开发都是写在xml文件中的&#xff0c;而flutter直接写在代码里&#xff08;da…...

无涯教程-Android - CheckBox函数

CheckBox是可以由用户切换的on/off开关。为用户提供一组互不排斥的可选选项时,应使用复选框。 CheckBox 复选框属性 以下是与CheckBox控件相关的重要属性。您可以查看Android官方文档以获取属性的完整列表以及可以在运行时更改这些属性的相关方法。 继承自 android.widget.T…...

[Go版]算法通关村第十五关青铜——用4KB内存寻找重复元素

目录 题目&#xff1a;用4KB内存寻找重复元素思路分析&#xff1a;使用位存储如何存储这32000个整数&#xff1f;每个整数对应在位图中的存储状态举例如何判断是重复的&#xff1f;具体的步骤 复杂度&#xff1a;时间复杂度 O ( n ) O(n) O(n)、空间复杂度 O ( 1 ) O(1) O(1)Go…...

OJ练习第159题——消灭怪物的最大数量

消灭怪物的最大数量 力扣链接&#xff1a;1921. 消灭怪物的最大数量 题目描述 你正在玩一款电子游戏&#xff0c;在游戏中你需要保护城市免受怪物侵袭。给你一个 下标从 0 开始 且长度为 n 的整数数组 dist &#xff0c;其中 dist[i] 是第 i 个怪物与城市的 初始距离&#…...

Prometheus-Rules(规则)

文章目录 一、介绍二、配置 Prometheus 使用规则文件三、 规则文件语法规则文件语法全局Recording rules(记录规则)2 Alerting rules(警报规则)3 模板化如何使用四、检查规则文件语法五、发送警报通知一、介绍 Prometheus规则是一种逻辑表达式,可用于定义有关监控数据的逻…...

打卡智能中国(六):村里出了“飞行员”

提起返乡青年&#xff0c;你的第一印象是什么&#xff1f;失败、躺平、卷不动了&#xff1f; 我们在浙江、福建、青海等地&#xff0c;参观一些农业智能化项目时&#xff0c;陪同参观的“飞手”&#xff0c;高兴地跟我们分享自己的心路历程&#xff1a; 在家门口做农业无人机操…...

自动化运维工具Ansible之playbooks剧本

自动化运维工具Ansible之playbooks剧本 一、playbooks1.playbooks简述2.playbooks剧本格式3.playbooks组成部分 二、实例1.编写脚本2.运行playbook3.定义、引用变量4.指定远程主机sudo切换用户5.when条件判断6.迭代7.Templates 模块8.tags 模块9.Roles 模块 三、编写应用模块1.…...

K8S访问控制------认证(authentication )、授权(authorization )、准入控制(admission control )体系

一、账号分类 在K8S体系中有两种账号类型:User accounts(用户账号),即针对human user的;Service accounts(服务账号),即针对pod的。这两种账号都可以访问 API server,都需要经历认证、授权、准入控制等步骤,相关逻辑图如下所示: 二、authentication (认证) 在…...

开开心心带你学习MySQL数据库之第三篇上

学校的项目组有必要加入吗? 看你的初心. ~~如果初心是通过这个经历能够提高自己的技术水平 ~~是可以考虑的 ~~如果初心是通过这个经历提高自己找工作的概率 ~~这个是不靠谱的,啥用没有 ~~如果初心是通过这个体验更美好的大学生活 ~~靠谱的 秋招,应届生,找工作是非常容易的!!! …...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...