GPU中各种测试功能分类
- 格式:docx
- 大小:68.69 KB
- 文档页数:16
一、GPGPU的定义与原理GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”。
GPU计算或GPGPU 就是利用图形处理器(GPU)来进行通用科学与工程计算。
GPU专用于解决可表示为数据并行计算的问题——在许多数据元素上并行执行的程序,具有极高的计算密度(数学运算与存储器运算的比率)。
GPU计算的模式是,在异构协同处理计算模型中将CPU与GPU结合起来加以利用。
应用程序的串行部分在CPU上运行,而计算任务繁重的部分则由GPU来加速。
从用户的角度来看,应用程序只是运行得更快了。
因为应用程序利用了GPU的高性能来提升性能。
在过去几年里,GPU的浮点性能已经上升到Teraflop级的水平。
GPGPU的成功使CUDA 并行编程模型相关的编程工作变得十分轻松。
在这种编程模型中,应用程序开发者可修改他们的应用程序以找出计算量繁重的程序内核,将其映射到GPU上,让GPU来处理它们。
应用程序的剩余部分仍然交由CPU处理。
想要将某些功能映射到GPU上,需要开发者重新编写该功能,在编程中采用并行机制,加入“C”语言关键字以便与GPU之间交换数据。
开发者的任务是同时启动数以万计的线程。
GPU硬件可以管理线程和进行线程调度。
英伟达™ Tesla(NVIDIA® Tesla)20系列GPU基于“Fermi”架构,这是最新的英伟达™ CUDA(NVIDIA® CUDA)架构。
Fermi专为科学应用程序而进行了优化、具备诸多重要特性,其中包括:支持500 gigaflop以上的IEEE标准双精度浮点硬件、一级和二级高速缓存、ECC存储器错误保护、本地用户管理的数据高速缓存(其形式为分布于整个GPU中的共享存储器)以及合并存储器访问等等。
"GPU(图形处理器)已经发展到了颇为成熟的阶段,可轻松执行实际应用程序并且其运行速度已远远超过了使用多核系统时的速度。
未来计算架构将是并行核心GPU与多核CPU串联运行的混合型系统。
gpu关系的指标【原创版】目录1.GPU 的基本概念2.GPU 关系的指标3.常用 GPU 关系指标及其含义4.GPU 关系的指标如何选择5.总结正文一、GPU 的基本概念GPU,全称为 Graphics Processing Unit,即图形处理单元,是一种专门用于处理图形和图像任务的硬件设备。
GPU 在现代计算机中扮演着越来越重要的角色,除了用于图形渲染外,还广泛应用于科学计算、深度学习等领域。
二、GPU 关系的指标在讨论 GPU 性能时,通常会涉及到一些关系指标。
这些指标可以帮助我们更好地了解 GPU 的性能和特点,从而更有针对性地进行优化和选择。
三、常用 GPU 关系指标及其含义1.浮点运算能力:GPU 的浮点运算能力是衡量其性能的一个重要指标。
通常情况下,浮点运算能力越高,GPU 的性能越强。
2.显存容量:显存容量是指 GPU 内部用于存储数据的内存容量。
显存容量越大,GPU 可以处理的数据量就越多,性能也会相对更强。
3.显存带宽:显存带宽是指 GPU 与显存之间的数据传输速率。
显存带宽越高,GPU 可以更快地从显存中读取和写入数据,从而提高性能。
4.纹理单元:纹理单元是指 GPU 中用于处理纹理的专用单元。
纹理单元数量越多,GPU 处理纹理的能力越强,对图像渲染质量的提升也越明显。
5.核心频率:核心频率是指 GPU 的工作频率。
核心频率越高,GPU 的运算速度就越快,性能也会相对更强。
四、GPU 关系的指标如何选择在选择 GPU 时,我们需要根据实际需求来选择合适的关系指标。
例如,如果您需要进行大量的浮点运算,那么选择浮点运算能力较高的 GPU 会更合适。
如果您需要处理大量的纹理,那么选择纹理单元较多的 GPU 会更合适。
五、总结了解 GPU 关系的指标有助于我们更好地选择和使用 GPU。
在选择GPU 时,我们需要根据实际需求和预算来权衡各个关系指标,从而选择最适合自己的 GPU。
以下是由GPU 加速的Photoshop CS4 和Bridge CS 4 功能的列表。
要了解这些功能的详细信息, 请参阅“GPU accelerated features in Photoshop and Bridge CS4”(TechNotekb405745*)。
Adobe Photoshop CS4 中的OpenGL/GPU 功能包括:∙任意缩放级别的平滑显示∙带动画效果的缩放工具∙执行一步缩放时的动画过渡∙手掷图像∙鸟瞰视图∙旋转画布∙非方形像素图的平滑显示∙像素网格∙移动色彩匹配G P U∙通过G P U绘制画笔尖编辑反馈∙3D G P U功能包括:3D加速∙3D轴∙3D光源W i d g e t∙通过直接显示加速3D交互Bridge CS4 中的GPU 功能包括:∙预览面板∙全屏预览∙幻灯片放映∙“审阅”模式返回页首支持的GPU 和操作系统已经过测试的Photoshop CS4 支持的显卡列在“List of tested graphics display cards in Photoshop CS4” (TechNote kb405711*) 中。
注意: 即使显卡上有多个GPU, Photoshop CS4 也只使用其中一个GPU。
操作系统GPU 支持和限制:操作系统GPU 支持和限制Mac OS PPC 当计算机使用支持的显卡、“启用OpenGL 绘图”可用且已在“Photoshop”>“首选项”>“性能” (Mac OS) 或“编辑”>“首选项”>“性能” (Windows) 中选定时, Photoshop即可在PowerPC 上支持OpenGL 功能, 其中包括: 任意缩放级别的平滑显示、鸟瞰视图、旋转画布、通过GPU 绘制画笔笔尖编辑反馈以及手掷图像。
即使具有支持的显卡, PowerPC 上也不支持高级绘图功能。
高级设置中的“高级绘图”选项不可用时, Photoshop 将停用“移动色彩匹配GPU”、3D GPU 功能以及大小一致的棋盘复合。
常见的性能测试方法介绍今天我们一起来聊聊性能测试,那首先我们说说什么是性能呢?性能是应用程序的一种特性,其包括了时间特性和资源特性。
时间特性是指系统反应快慢,持续稳定运行时间长短;资源特性是指在进行性能测试过程中,系统资源的消耗情况,常见的系统资源包括处理器(CPU)、内存(memory)、磁盘(disk)等。
那什么是性能测试呢?关于性能测试没有一个统一的定义,不同人对性能测试有不同的理解,因此不同人对性能测试的概念也有不同的看法。
经过查阅资料和自身理解,我认为性能测试是借助性能测试功能模拟用户并发操作,检查系统性能是否满足客户要求,系统是否存在性能瓶颈,进一步定位瓶颈问题,最终使系统性能满足要求,系统资源使用达到最优的结果。
接下来是今天的重点问题,性能测试有哪些类型,它们的测试目的、方法是怎样的呢?性能测试大致分为以下六类:1.验收性能测试:通过模拟生产运行的业务压力量和使用场景组合,测试系统的性能是否满足生产性能要求。
目的:验收系统性能是否满足需求。
方法:按照性能需求设置对应的用户并发数,观察各项指标是否满足需求。
2.负载测试:有时又叫可置性测试。
在被测系统上不断增加压力,直到性能指标超过预定指标或者某种资源使用已经达到饱和状态。
目的:找到系统处理能力的极限。
方法:不断增加虚拟用户来不断给系统增加压力,直到系统中部分资源达到饱和。
3.压力测试:测试系统在一定饱和状态下,例如CPU、内存等在饱和使用情况下,系统能够处理会话的能力,以及系统是否回出现错误。
目的:测试系统在一定饱和状态时,系统处理业务的能力。
方法:不断增加虚拟用户数来不断给系统增加压力,直到系统中部分资源达到饱和,持续运行一段时间,看系统是否会出错。
4.配置测试:通过对被测系统软硬件环境的调整,了解各种不同环境对系统性能影响的程度,从而找到系统各项资源的最优分配原则。
一般用于性能调优。
目的:通过调整环境了解不同因素对系统性能的影响情况,从而找到调优的方法。
软件性能测试包含哪些测试类型?权威第三方软件测评中心分享性能测试是体现软件产品质量的重要因素,它是一种非功能性,不关心系统是否可以完成某项功能,只关心软件系统在运行时的速度是否快,是否消耗足够少的资源。
是测试人员通过自动化测试工具来模拟多种正常、峰值及异常情况下对系统的各项性能指标进行测试。
一、软件性能测试包含哪些测试类型?性能测试是一个统称,包含了多种测试类型,主要有负载测试、压力测试、并发测试、配置测试等1.负载测试通过在被测系统中不断增加压力,直到达到性能指标极限要求。
主要目的是找到特定的环境下系统处理能力的极限。
2.压力测试通过对软件系统不断施加压力,识别系统性能拐点,从而获得系统提供的最大服务界别的测试活动,主要目的是检查系统处于压力情况下的表现。
3.并发测试指当测试多用户并发访问同一个应用、模块、数据时是否产生隐藏的并发问题,如内存泄漏、线程锁、资源争用问题,几乎所有的性能测试都会涉及并发测试。
主要目的并非是为了获得性能指标,而是为了发现引起的问题。
4.配置测试主要是对被测试系统的软硬件配置进行的测试,找到系统各项资源的最优分配原则。
配置测试能充分利用有限的软硬件资源,发挥系统的最佳处理能力。
5.容量测试通过运行一种或者多种业务场景,测试在一定量级的数据量下的性能情况。
6.稳定性测试指给系统增加一定负载,使系统持续运行一段时间,测试系统是否稳定,是否存在内存溢出等问题。
二、权威第三方软件测评中心分享卓码软件测评,专业的第三方软件测评中心,具备CMA、CNAS资质认证。
专注于软件测试服务行业多年,测试团队经验丰富,技术成熟,价格优惠,服务周到,服务范围覆盖全国各地,各类软件测试类型线上线下均可进行,出具客观公正的软件测试报告。
软件测试中常见的测试类型在软件测试中,各种测试类型被广泛应用,以确保软件的质量和可靠性。
本文将介绍一些常见的软件测试类型,包括黑盒测试、白盒测试、灰盒测试、功能测试、性能测试、安全测试、兼容性测试和用户界面测试。
黑盒测试是一种测试方法,测试人员对软件系统进行测试,而无需了解其内部结构和实现细节。
黑盒测试注重测试系统的功能和输入输出之间的关系,以揭示系统是否按照规格要求进行操作。
白盒测试是一种测试方法,测试人员具备对软件系统的内部结构和实现细节的了解。
白盒测试通过检查代码的逻辑路径和覆盖率来评估系统的质量和可靠性。
灰盒测试结合了黑盒测试和白盒测试的特点。
测试人员部分了解系统的内部结构和实现细节,以更全面地评估软件系统的功能和质量。
功能测试是一种测试方法,测试人员验证软件系统的功能是否满足规格要求。
这种测试类型关注系统的功能是否正确、完整和可用。
性能测试用于评估软件系统在各种负载情况下的性能表现。
测试人员主要关注系统的响应时间、吞吐量、资源利用和稳定性。
安全测试旨在评估软件系统的安全性,以揭示潜在的安全漏洞和弱点。
测试人员通过模拟攻击和测试系统的防护机制来评估系统的安全性。
兼容性测试用于验证软件系统在不同平台、操作系统、浏览器和设备上的兼容性。
测试人员着重测试系统在各种环境下的稳定性和一致性。
用户界面测试是一种测试方法,测试人员验证软件系统的用户界面是否符合用户需求和期望。
测试人员关注系统的易用性、可理解性和可访问性。
结论:软件测试中的常见测试类型包括黑盒测试、白盒测试、灰盒测试、功能测试、性能测试、安全测试、兼容性测试和用户界面测试。
每个测试类型都有其独特的目的和方法,以确保软件系统的质量和可靠性。
在进行软件测试时,测试人员可以根据具体需求选择适当的测试类型,并结合多种测试方法进行综合评估,以获得可靠的测试结果。
电脑硬件性能测试指南如何评估硬件的性能电脑硬件性能测试指南:如何评估硬件的性能在现代科技发展的今天,电脑硬件性能对于用户的体验至关重要。
无论是日常使用还是进行专业任务,了解如何评估电脑硬件的性能对于选择合适的设备具有重要意义。
本文将为您介绍一些常见的电脑硬件性能测试指南,帮助您全面了解如何准确评估硬件的性能。
一、中央处理器(CPU)性能测试中央处理器(CPU)是电脑的核心组件之一,负责执行所有运算和计算任务。
评估CPU的性能对于判断电脑整体性能至关重要。
以下是一些常见的CPU性能测试指南:1. 常用测试工具:在评估CPU性能时,我们可以使用一些常见的测试工具,例如Cinebench、PassMark等。
这些工具可以进行多项CPU性能测试,包括单核性能、多核性能等。
通过对比测试结果,可以更直观地了解CPU的性能表现。
2. 考虑核心数和处理器频率:在选择CPU时,我们需要关注其核心数和处理器频率。
核心数越多,意味着整体运算能力越强;处理器频率越高,意味着单个核心的运算能力越强。
综合考虑这两个因素可以更好地评估CPU的性能水平。
二、图形处理器(GPU)性能测试图形处理器(GPU)在处理图形和显像相关任务时发挥着至关重要的作用,尤其是在游戏和设计领域。
以下是一些常见的GPU性能测试指南:1. 常用测试工具:与CPU性能测试类似,我们可以使用一些常见的测试工具,例如3DMark、FurMark等,来评估GPU的性能。
这些工具可以进行图形渲染和计算任务,检测GPU的性能水平。
2. 考虑显存容量和核心频率:在选择GPU时,我们需要关注其显存容量和核心频率。
显存容量越大,意味着可以处理更大规模的图像,提供更顺畅的游戏或设计体验;核心频率越高,意味着单个核心的计算能力越强。
综合考虑这两个因素可以更好地评估GPU的性能水平。
三、存储设备性能测试存储设备对于电脑的响应速度和数据读写能力有着直接影响。
以下是一些常见的存储设备性能测试指南:1. 常用测试工具:评估存储设备性能时,我们可以使用一些常见的测试工具,例如CrystalDiskMark、ATTO Disk Benchmark等。
硬件的性能测试和评估方法在计算机领域中,硬件性能测试和评估是非常重要的部分。
无论是在开发新的硬件组件时,还是在选择购买合适的设备时,硬件性能测试和评估都是必不可少的步骤。
本文将介绍一些硬件性能测试和评估的方法。
一、CPU性能测试CPU性能测试主要是测试CPU的处理器速度和性能。
最常用的测试方法是使用一些基准测试软件,如Cinebench和Geekbench。
这些软件可以执行一些标准的测试,并将结果与其他CPU进行比较,以测量其性能。
除了基准测试软件之外,还可以使用压力测试工具,如Prime95,来测试CPU的性能。
Prime95可以让CPU运行在最大负载下,以测量CPU的热量和稳定性。
二、GPU性能测试GPU性能测试主要是测试GPU的图形处理能力。
最常用的测试方法是使用3DMark和Unigine Heaven等基准测试软件。
这些软件可以模拟各种游戏场景,并测试GPU的处理速度和帧数。
除了基准测试软件之外,还可以使用压力测试工具,如FurMark,来测试GPU的性能。
FurMark可以让GPU运行在最大负载下,以测量GPU的热量和稳定性。
三、硬盘性能测试硬盘性能测试主要是测试硬盘的读写速度和性能。
最常用的测试方法是使用CrystalDiskMark和ATTO Disk Benchmark等基准测试软件。
这些软件可以测试硬盘的顺序读写和随机读写速度,并将结果与其他硬盘进行比较,以测量其性能。
除了基准测试软件之外,还可以使用磁盘工具,如HDTune和Hard Disk Sentinel,来测试硬盘的健康状态。
四、内存性能测试内存性能测试主要是测试内存的读写速度和稳定性。
最常用的测试方法是使用MemTest和Prime95等基准测试软件。
这些软件可以测试内存的稳定性,并在测试中发现内存错误。
除了基准测试软件之外,还可以使用内存检测工具,如Windows自带的Memory Diagnostic和Memtest86,来测试内存的健康状态。
显卡性能测试常用的显卡性能评测工具介绍显卡是计算机硬件中的重要组成部分,它负责计算机图形处理、视频输出等任务。
对于电脑爱好者、游戏玩家或专业从事计算机图形工作的人来说,显卡性能的测试和评测是非常重要的。
通过性能测试,我们可以客观地了解显卡的运行状态,找到问题并进行优化。
因此,本文将介绍几种常用的显卡性能评测工具,供大家参考使用。
1. 3DMark3DMark是一款由Futuremark公司开发的显卡性能评测工具,在电脑硬件测试领域有着广泛的应用。
它能够测试显卡在不同场景下的性能表现,包括图形渲染、物理模拟、颜色处理等方面。
用户可以通过3DMark来评估显卡的3D性能,了解显卡的图形处理能力和稳定性。
2. Unigine HeavenUnigine Heaven是一款专业的显卡性能评测工具,它采用了Unigine 引擎,可以提供逼真的图形和丰富的特效。
通过运行Unigine Heaven,用户可以测试显卡在高强度的图形运算下的性能表现,如纹理质量、光影效果、渲染帧率等。
该工具还提供了实时的性能监控功能,方便用户对显卡的性能进行监测和调整。
3. FurMarkFurMark是一款专业的GPU稳定性测试工具,也可以用来测试显卡的性能。
它通过运行高强度的图形和计算任务来测试显卡的稳定性和温度表现。
用户可以通过FurMark来评估显卡在长时间高负载情况下的稳定性,并检测显卡在极限运行状态下的温度变化。
4. MSI KombustorMSI Kombustor是微星公司推出的一款显卡压力测试工具。
它可以通过运行GPU负载测试、温度测试、风扇速度测试等功能来评估显卡的性能和稳定性。
该工具还提供了实时的监控功能和图形化的界面,方便用户对显卡性能进行分析和调整。
5. GPU-ZGPU-Z是一款简单实用的显卡信息工具,它可以准确显示显卡的主要参数和性能状态。
用户可以通过GPU-Z来了解显卡的型号、技术规格、驱动版本、核心频率、显存频率等信息。
显卡性能测试与评测的参考指标显卡作为电脑硬件中的重要组成部分,在提供图像处理能力的同时,也直接影响了计算机的整体性能表现。
为了衡量显卡的性能,以及将不同的显卡进行对比和评估,我们需要参考一些常见的指标。
本文将介绍显卡性能测试与评测时常用的参考指标。
一、3D性能指标1. 帧率(FPS)帧率是指显卡每秒渲染图像的帧数。
通常以FPS(Frames Per Second)作为衡量显卡性能的重要指标。
帧率越高,图像刷新越流畅,游戏或者其他图形应用的流畅度也会提升。
2. 分辨率分辨率是指显示器上显示的图像的像素密度。
常见的分辨率包括720p、1080p、2K、4K等。
对于同一款游戏或者应用,在更高的分辨率下,需要更强大的显卡性能来保持帧率的稳定。
3. 渲染质量渲染质量指的是显卡在渲染图像时所采用的算法和技术,以及对图像细节的还原程度。
较高的渲染质量意味着更逼真的图像效果,但也对显卡的性能要求更高。
二、计算性能指标1. CUDA核心数量CUDA核心数量是指显卡中集成的CUDA核心的数量。
CUDA是NVIDIA开发的一种并行计算平台和编程模型,可以利用显卡的计算能力进行通用计算。
CUDA核心数量越多,显卡在进行并行计算时的效率也越高。
2. GPU主频GPU主频指的是显卡中图形处理器的运行频率。
主频越高,显卡的计算能力越强。
3. 显存带宽显存带宽是指显卡显存与GPU之间的数据传输速率。
较高的显存带宽可以提高显卡在存取数据时的效率,从而提升计算性能。
三、功耗和散热指标1. 功耗功耗是指显卡在正常工作状态下消耗的电功率。
功耗较高的显卡需要更大的电源支持,同时也会加大机箱散热的需求。
2. 散热设计散热设计是指显卡中的散热系统,包括散热风扇、散热片、散热管等。
良好的散热设计可以有效地降低显卡的工作温度,保证显卡在高负载下的稳定工作。
四、接口和多显示器支持1. 显示接口常见的显示接口包括HDMI、DVI、DisplayPort等。
App专项测试之GPU过度渲染⼀、简介1. 过度绘制:某些组件在屏幕像素点上绘制次数超过⼀次2. 帧率:屏幕刷新率3. 帧⽅差:屏幕刷新帧间隔⽅差⼆、GPU测试项1. 界⾯过度绘制2. 屏幕滑动帧速率3. 屏幕滑动平滑度三、GPU测试⽅法3.1 Show GPU Overdraw开发者选项-调试GPU过度绘制-显⽰过度绘制区域(只有Android 4.2及以上版本的⼿机才具备该功能)不同颜⾊代表含义(⽆⾊:⽆过度绘制,即该像素点只绘制1次;蓝⾊:1x过度绘制,即该像素点绘制了2次;绿⾊:2x过度绘制;浅红:3x过度绘制;红⾊:4x过度绘制)验收标准:不允许出现⿊⾊像素;不允许存在4x过度绘制;不允许存在⾯积超过屏幕1/4区域的3x过度绘制(淡红⾊区域)3.2 Profile GPU Rendering法⼀:开发者选项-GPU呈现模式分析-在屏幕上显⽰条形图,只要不超过屏幕绿线,都可以视为⾜够流畅。
当响应速度⼤幅增加,曲线瞬间突破绿线时也不能说明系统不流畅各android系统下不同颜⾊代表的含义:android 4.x:蓝⾊-代表绘制时间,即创建和更新display lists的时间;红⾊-代表执⾏时间,即系统进⾏2D选软Display list的时间;橙⾊-代表处理时间,即CPU等待GPU完成渲染处理的时间android 5.x:新增紫⾊-代表渲染线程写⼊资源所需时间android 6.x:变成9种颜⾊,将渲染过程中的⼏⼤步骤进⼀步细分,可以通过Android Studio上的GPU Monitor可以看到各个颜⾊含义更新Swap Buffers:对应原来的橙⾊,表⽰处理任务的时间,线程越⾼,表⽰GPU做的事情越多Command Issue:对应原来的红⾊,表⽰执⾏任务的时间,为了将内容绘制到屏幕上,Android 需要使⽤Open GL ES 的API接⼝来绘制显⽰列表,红⾊线条越⾼表⽰需要绘制的视图更多。
来,即使我们先绘制比较近的物体,再绘制比较远的物体,则远的物体也不会覆盖近的物体了。
实际上,只要存在深度缓冲区,无论是否启用深度测试,OpenGL在像素被绘制时都会尝试将深度数据写入到缓冲区内,除非调用了glDepthMask(GL_FALSE)来禁止写入。
这些深度数据除了用于常规的测试外,还可以有一些有趣的用途,比如绘制阴影等等。
除了深度测试,OpenGL还提供了剪裁测试、Alpha测试和模板测试。
1、剪裁测试剪裁测试用于限制绘制区域。
我们可以指定一个矩形的剪裁窗口,当启用剪裁测试后,只有在这个窗口之内的像素才能被绘制,其它像素则会被丢弃。
换句话说,无论怎么绘制,剪裁窗口以外的像素将不会被修改。
有的朋友可能玩过《魔兽争霸3》这款游戏。
游戏时如果选中一个士兵,则画面下方的一个方框内就会出现该士兵的头像。
为了保证该头像无论如何绘制都不会越界而覆盖到外面的像素,就可以使用剪裁测试。
可以通过下面的代码来启用或禁用剪裁测试:glEnable(GL_SCISSOR_TEST); // 启用剪裁测试glDisable(GL_SCISSOR_TEST); // 禁用剪裁测试可以通过下面的代码来指定一个位置在(x, y),宽度为width,高度为height的剪裁窗口。
glScissor(x, y, width, height);注意,OpenGL窗口坐标是以左下角为(0, 0),右上角为(width, height)的,这与Windows 系统窗口有所不同。
还有一种方法可以保证像素只绘制到某一个特定的矩形区域内,这就是视口变换(在第五课第3节中有介绍)。
但视口变换和剪裁测试是不同的。
视口变换是将所有内容缩放到合适的大小后,放到一个矩形的区域内;而剪裁测试不会进行缩放,超出矩形范围的像素直接忽略掉。
2、Alpha测试在前面的课程中,我们知道像素的Alpha值可以用于混合操作。
其实Alpha值还有一个用途,这就是Alpha测试。
当每个像素即将绘制时,如果启动了Alpha测试,OpenGL会检查像素的Alpha值,只有Alpha值满足条件的像素才会进行绘制(严格的说,满足条件的像素会通过本项测试,进行下一种测试,只有所有测试都通过,才能进行绘制),不满足条件的则不进行绘制。
这个“条件”可以是:始终通过(默认情况)、始终不通过、大于设定值则通过、小于设定值则通过、等于设定值则通过、大于等于设定值则通过、小于等于设定值则通过、不等于设定值则通过。
如果我们需要绘制一幅图片,而这幅图片的某些部分又是透明的(想象一下,你先绘制一幅相片,然后绘制一个相框,则相框这幅图片有很多地方都是透明的,这样就可以透过相框看到下面的照片),这时可以使用Alpha测试。
将图片中所有需要透明的地方的Alpha值设置为0.0,不需要透明的地方Alpha值设置为1.0,然后设置Alpha测试的通过条件为:“大于0.5则通过”,这样便能达到目的。
当然也可以设置需要透明的地方Alpha值为1.0,不需要透明的地方Alpha值设置为0.0,然后设置条件为“小于0.5则通过”。
Alpha测试的设置方式往往不只一种,可以根据个人喜好和实际情况需要进行选择。
可以通过下面的代码来启用或禁用Alpha测试:glEnable(GL_ALPHA_TEST); // 启用Alpha测试glDisable(GL_ALPHA_TEST); // 禁用Alpha测试可以通过下面的代码来设置Alpha测试条件为“大于0.5则通过”:glAlphaFunc(GL_GREATER, 0.5f);该函数的第二个参数表示设定值,用于进行比较。
第一个参数是比较方式,除了GL_LESS(小于则通过)外,还可以选择:GL_ALWAYS(始终通过),GL_NEVER(始终不通过),GL_LESS(小于则通过),GL_LEQUAL(小于等于则通过),GL_EQUAL(等于则通过),GL_GEQUAL(大于等于则通过),GL_NOTEQUAL(不等于则通过)。
现在我们来看一个实际例子。
一幅照片图片,一幅相框图片,如何将它们组合在一起呢?为了简单起见,我们使用前面两课一直使用的24位BMP文件来作为图片格式。
(因为发布到网络上,为了节约容量,我所发布的是JPG格式。
大家下载后可以用Windows XP自带的画图工具打开,并另存为24位BMP格式)注:第一幅图片是著名网络游戏《魔兽世界》的一幅桌面背景,用在这里希望没有涉及版权问题。
如果有什么不妥,请及时指出,我会立即更换。
在24位的BMP文件格式中,BGR三种颜色各占8位,没有保存Alpha值,因此无法直接使用Alpha测试。
注意到相框那幅图片中,所有需要透明的位置都是白色,所以我们在程序中设置所有白色(或很接近白色)的像素Alpha值为0.0,设置其它像素Alpha值为1.0,然后设置Alpha测试的条件为“大于0.5则通过”即可。
这种使用某种特殊颜色来代表透明颜色的技术,有时又被成为Color Key技术。
利用前面第11课的一段代码,将图片读取为纹理,然后利用下面这个函数来设置“当前纹理”中每一个像素的Alpha值。
/* 将当前纹理BGR格式转换为BGRA格式* 纹理中像素的RGB值如果与指定rgb相差不超过absolute,则将Alpha设置为0.0,否则设置为1.0*/void texture_colorkey(GLubyte r, GLubyte g, GLubyte b, GLubyte absolute){GLint width, height;GLubyte* pixels = 0;// 获得纹理的大小信息glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &height);// 分配空间并获得纹理像素pixels = (GLubyte*)malloc(width*height*4);if( pixels == 0 )return;glGetTexImage(GL_TEXTURE_2D, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, pixel s);// 修改像素中的Alpha值// 其中pixels[i*4], pixels[i*4+1], pixels[i*4+2], pixels[i*4+3]// 分别表示第i个像素的蓝、绿、红、Alpha四种分量,0表示最小,255表示最大{GLint i;GLint count = width * height;for(i=0; i<count; ++i){if( abs(pixels[i*4] - b) <= absolute&& abs(pixels[i*4+1] - g) <= absolute&& abs(pixels[i*4+2] - r) <= absolute )pixels[i*4+3] = 0;elsepixels[i*4+3] = 255;}}// 将修改后的像素重新设置到纹理中,释放内存glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0,GL_BGRA_EXT, GL_UNSIGNED_BYTE, pixels);free(pixels);}有了纹理后,我们开启纹理,指定合适的纹理坐标并绘制一个矩形,这样就可以在屏幕上将图片绘制出来。
我们先绘制相片的纹理,再绘制相框的纹理。
程序代码如下:void display(void){static int initialized = 0;static GLuint texWindow = 0;static GLuint texPicture = 0;// 执行初始化操作,包括:读取相片,读取相框,将相框由BGR颜色转换为BGRA,启用二维纹理if( !initialized ){texPicture = load_texture("pic.bmp");texWindow = load_texture("window.bmp");glBindTexture(GL_TEXTURE_2D, texWindow);texture_colorkey(255, 255, 255, 10);glEnable(GL_TEXTURE_2D);initialized = 1;}// 清除屏幕glClear(GL_COLOR_BUFFER_BIT);// 绘制相片,此时不需要进行Alpha测试,所有的像素都进行绘制glBindTexture(GL_TEXTURE_2D, texPicture);glDisable(GL_ALPHA_TEST);glBegin(GL_QUADS);glTexCoord2f(0, 0); glVertex2f(-1.0f, -1.0f);glTexCoord2f(0, 1); glVertex2f(-1.0f, 1.0f);glTexCoord2f(1, 1); glVertex2f( 1.0f, 1.0f);glTexCoord2f(1, 0); glVertex2f( 1.0f, -1.0f);glEnd();// 绘制相框,此时进行Alpha测试,只绘制不透明部分的像素glBindTexture(GL_TEXTURE_2D, texWindow);glEnable(GL_ALPHA_TEST);glAlphaFunc(GL_GREATER, 0.5f);glBegin(GL_QUADS);glTexCoord2f(0, 0); glVertex2f(-1.0f, -1.0f);glTexCoord2f(0, 1); glVertex2f(-1.0f, 1.0f);glTexCoord2f(1, 1); glVertex2f( 1.0f, 1.0f);glTexCoord2f(1, 0); glVertex2f( 1.0f, -1.0f);glEnd();// 交换缓冲glutSwapBuffers();}其中:load_texture函数是从第11课中照搬过来的(该函数还使用了一个power_of_two函数,一个BMP_Header_Length常数,同样照搬),无需进行修改。
main函数跟其它课程的基本相同,不再重复。
程序运行后,会发现相框与相片的衔接有些不自然,这是因为相框某些边缘部分虽然肉眼看上去是白色,但其实RGB值与纯白色相差并不少,因此程序计算其Alpha值时认为其不需要透明。