热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

opengl中gpu与cpu交互_3D图形和OpenGL简介

一、走向3D三维(3D)表示一个正在描述或显示的物体具有3个维度:宽度、高度和深度。例如,放在书桌上的一张画是一个二维物体,因为它没有可以

一、走向3D

三维(3D)表示一个正在描述或显示的物体具有3个维度:宽度、高度和深度。例如,放在书桌上的一张画是一个二维物体,因为它没有可以令人感受得到的深度。而旁边的药瓶却能感受到它是3D,因为它具备高度、深度、宽度。

6086eead77086c2a68c400bfdfb1aa23.png

几个世纪以来,艺术家们已经知道如何让一幅画有立体感并且具有真实的深度。通过颜料在二维画布上所创作的作品,它其实本质上画的是一个二维物体。类似,计算机3D图像实质上也是平面的,它只是在计算机屏幕上所显示的二维图像,但它可以提供深度的错觉。

2D + 透视 = 3D

二、3D图形技术和术语

  • 光栅化:实际绘制或填充每个顶点之间的像素形成线程
  • 线框渲染是有它的用处,但在大多数情况下我们并不是用线程,而是使用实心三角形渲染。
  • 着色:沿着顶点之间改变颜色值,能够轻松创建关照照射子啊一个立方体上的效果。另一方面,着色器则是图形硬件上执行的单独程序,用来处理顶点和光栅化任务。
  • 纹理贴图:不过是一个用来贴到三角形或多边形上的图片。在GPU上,纹理是快捷有效的。
  • 混合:混合是将不同的颜色混在一起。

三、3D图形的常见用途

实时3D图形的应用范围包括交互式游戏和模拟以及数据的可视化显示(供科学、医学或商业应用);

在个人计算机领域,3D图形的应用几乎没有止境。目前最常见的用途,游戏、AR、VR,都是基于OpenGL 的。3D图形在科学是视觉和工程应用中非常流行,物美价廉的3D硬件大量涌现使得这些应用技术空前的流行火爆。

Mac OS X 以及 iOS 都是使用OpenGL对所有窗口和控件进行渲染,从而创建了功能强大,引人入胜的可视化界面。

例如设计时使用的3D max ,还是游戏制作的Unity 3D,Cocos2D 底层都是使用了OpenGL。而我们医学上的影像渲染也都依托于OpenGL。

三(1)2D笛卡尔坐标

在二维绘图中,最为常用的坐标系统是笛卡尔坐标系统。笛卡尔坐标由一个X坐标和Y坐标构成。x坐标测量水平方向的位置,而y坐标则测量垂直方向的位置。

三(2)3D笛卡尔坐标

现在,我们把二维坐标系统拓展到三维空间中,并增加深度分量;在2D笛卡尔标上加一个新轴,z轴。

z轴同时垂直于x轴&y轴。它代表了一条从屏幕的中心朝向你们的直线(我已经旋转了这个坐标系统的视角,把y轴向左旋转,把x轴向下和后旋转。否则,z轴将直接面向我们,无法看到)。现在我们用3个坐标(x,y,z)来指定三维空间中的一个位置。

==深度:通常表示窗口坐标z值;==

四、着色器

在实时计算机图形中,最前沿的技术是可编程着色器(Programmable Shading)。图形卡不再是低能的渲染芯片。而是功能强大的高度可编程的渲染计算机。类似CPU的术语GPU应运而生。它代表图形处理单元,特指当今图形卡上的可编程芯片。它们是高度并行,并且具有非常快的速度。同样重要的是,程序员可以进行重新配置图形卡的工作方式,几乎可以实现任何可以想得到的特殊效果。

五、3D编程的基本原则

1.并发工具包

OpenGL基本上一种底层渲染API,我们不能告诉它“在什么地方绘制什么”--我们需要自己动手,通过载入三角形,应用必要的变化和正确的纹理、着色器并在必要应用混合模式来组合一个模型。这使得我们能够大量的底层控制,与使用高层工具包,使用OpenGL这样的底层API动人之处在于,我们不能仅仅是重现许多标准3D渲染,我们可以创造自己的算法,甚至可以去发现一些新的捷径、性能技巧和艺术视觉技术

2.坐标系统

在OpenGL 或几乎所有的3D API中创建一个用于绘图窗口时,必须指定希望使用的坐标系统以及指定的坐标如何映射到实际的屏幕像素。

小结

实际上需要一个物体的2幅画面从不同角度上感知真正三维空间,我们可以通过透视、隐藏直线消除、颜色、着色和其他技巧来创建深度幻觉。



推荐阅读
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 2018年3月31日,CSDN、火星财经联合中关村区块链产业联盟等机构举办的2018区块链技术及应用峰会(BTA)核心分会场圆满举行。多位业内顶尖专家深入探讨了区块链的核心技术原理及其在实际业务中的应用。 ... [详细]
  • 尽管深度学习带来了广泛的应用前景,其训练通常需要强大的计算资源。然而,并非所有开发者都能负担得起高性能服务器或专用硬件。本文探讨了如何在有限的硬件条件下(如ARM CPU)高效运行深度神经网络,特别是通过选择合适的工具和框架来加速模型推理。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 本文将详细介绍多个流行的 Android 视频处理开源框架,包括 ijkplayer、FFmpeg、Vitamio、ExoPlayer 等。每个框架都有其独特的优势和应用场景,帮助开发者更高效地进行视频处理和播放。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 资源推荐 | TensorFlow官方中文教程助力英语非母语者学习
    来源:机器之心。本文详细介绍了TensorFlow官方提供的中文版教程和指南,帮助开发者更好地理解和应用这一强大的开源机器学习平台。 ... [详细]
  • 堆是一种常见的数据结构,广泛应用于计算机科学领域。它通常表示为一棵完全二叉树,并可通过数组实现。堆的主要特性是每个节点的值与其父节点的值之间存在特定的关系,这使得堆在优先队列和排序算法中非常有用。 ... [详细]
  • 探索电路与系统的起源与发展
    本文回顾了电路与系统的发展历程,从电的早期发现到现代电子器件的应用。文章不仅涵盖了基础理论和关键发明,还探讨了这一学科对计算机、人工智能及物联网等领域的深远影响。 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
  • 推荐几款高效测量图片像素的工具
    本文介绍了几款适用于Web前端开发的工具,这些工具可以帮助用户在图片上绘制线条并精确测量其像素长度。对于需要进行图像处理或设计工作的开发者来说非常实用。 ... [详细]
author-avatar
mbe5757086
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有