⑴ 什么是GIS 的三维结构
此类GIS应用软件通常多建立在OpenGL平台之上,本系统也不例外。在实现其他特殊功能之前,必须首先正确配置、安装好OpenGL环境,然后才能进行各种实用功能的开发。下面将对OpenGL做一个简短的介绍,并开始OpenGL应用程序框架的搭建工作。
OpenGL概述
OpenGL是一种到图形硬件的软件接口。从本质上说,它是一个完全可移植并且速度很快的3D图形和建模库。通过使用OpenGL,可以创建视觉质量接近射线跟踪程序的精致漂亮的3D图形。但是它在执行速度上要比射线跟踪程序快好几个数量级。OpenGL使用的是由Silicon Graphcs(SGI)公司精心开发的优化算法,这家公司在计算机图形和动画领域是公认的业界领袖。开发者可以利用OpenGL提供的150多个图形函数轻松建立三维模型并进行三维实时交互。这些函数并不要求开发者将三维物体模型的数据写成固定的数据格式,这样一 来开发者就不仅可以直接使用自己的数据,而且还可以利用其他格式的数据源,能在很大程度上缩短软件的开发周期。
OpenGL不仅可对整个三维模型进行渲染并绘制出逼真的三维景象,而且还可以进行三维交互、动作模拟等处理。其提供的基本功能具体包含以下几方面的内容:
(1)模型绘制。在OpenGL中通过对点、线和多边形等基本形体的绘制可以构造出非常复杂的三维模型。OpenGL经常通过使用模型的多边形及其顶点来描述三维模型。
(2)模型观察。在建立了三维模型后,可以通过OpenGL的描述来观察此模型。此观察过程是通过一系列的坐标变换来实现的。这种变换使得观察者能够在视点位置得到与之相适应的三维模型场景。投影变换的类型对模型的观察有很大的影响,在不同投影变换下得到的三维模型场景也是不同的。在模型观察过程的最后还要对场景进行裁剪和缩放,以决定整个三维模型场景在屏幕上的显示。
(3)颜色模式的指定。在OpenGL中可以指定模型的颜色模式(RGBA模式和颜色表模式)。除此之外,还可以通过选择模型的着色方式(平面着色和光滑着色)来对整个三维场景进行着色处理。
(4)光照效果。为使OpenGL绘制的三维模型更加逼真还必须增加光照效果。目前OpenGL仅提供了对辐射光、环境光、镜面光和漫反射光的管理方法,另外还可以指定模型表面的反射特性。
(5)图象效果增强。在增强三维场景图象效果方面,OpenGL也提供了一系列相关函数。这些函数通过反走样、混合和雾化等处理来增强图象效果。其中,反走样用于改善图象中线形图形的锯齿使其更平滑;混合用于处理模型的半透明效果;雾化使场景图象从视点到远处逐渐褪色,使其更接近现实情况。
(6)位图和图象处理。OpenGL提供有专门进行位图和图象处理的函数。
(7)纹理映射。真实物体的表面普遍存在纹理,如果建立的三维模型场景缺少此细节将显得不够真实,为更逼真地表现三维场景,OpenGL提供了纹理映射的功能。OpenGL提供的纹理映射函数可以很方便地把纹理图象贴到场景多边形上。
(8)双缓存技术。OpenGL提供的双缓存技术主要用于实时动画,为获得平滑的动画效果,需要先在内存中生成下一帧图象,然后再将其从内存拷贝到屏幕。
(9)人机交互。OpenGL提供了方便的三维图形人机交互接口,通过此接口用户可以选择修改三维景观中的物体。
OpenGL应用程序框架的建立
首先建立一个单文档应用程序,并将需要用到的头文件和导入库添加到工程,以便能够顺利通过编译。在VC++中,OpenGL的头文件一般是存放在系统头文件目录的子目录GL中,所以在指定包含的时候要指定一下相对路径:
#include <gl\gl.h> // OpenGL32库的头文件
#include <gl\glu.h> // GLu32库的头文件
#include <gl\glaux.h> // GLaux库的头文件
这里的gl.h是基本头文件,glu.h是应用头文件,大多数应用程序都需要同时包含这两个头文件,glaux.h是辅助头文件,只在需要使用的情况下包含。接下来调出"Project Settings"对话框并在"Link"选项页中添加glu32.lib、glaux.lib和OpenGL win32实现的标准导入库opengl32.lib到工程。
接下来初始化OpenGL,这也是本文最重要的部分。先大致讲一下基本步骤:首先获取需要在上面绘图的设备环境(DC)并为该设备环境设置像素格式,然后创建基于该设备环境的OpenGL设备。最后,初始化OpenGL绘制场景及状态设置。前三步的实现过程在SetOpenGLInterface()函数中实现:
PIXELFORMATDESCRIPTOR pfd = {
// 初始化象素存储格式
sizeof(PIXELFORMATDESCRIPTOR), // pfd的大小
1, // 版本号
PFD_DRAW_TO_WINDOW | // 支持窗口
PFD_SUPPORT_OPENGL | // 支持OpenGL
PFD_DOUBLEBUFFER, // 支持双缓存
PFD_TYPE_RGBA, // RGBA类型
24, // 24位色深度
0, 0, 0, 0, 0, 0, // 各颜色位(忽略)
0, // 无alpha缓存
0, // 忽略转换位
0, // 无累计位
0, 0, 0, 0,
32, // 32位深度缓存
0, // 无模版缓存
0, // 无辅助缓存
PFD_MAIN_PLANE, // 主绘制层
0, // 保留
0, 0, 0 // 忽略的层掩模
};
m_pDC = GetDC(); // 得到设备环境句柄
int iFormat = ChoosePixelFormat(m_pDC->m_hDC, &pfd); // 设置象素格式
SetPixelFormat(m_pDC->m_hDC, iFormat, &pfd);
m_hGlrc = wglCreateContext(m_pDC->m_hDC); // 创建渲染上下文
wglMakeCurrent(m_pDC->m_hDC, m_hGlrc); // 设置一个线程的当前绘图描述表
这里首先对描述像素存储格式的PIXELFORMATDESCRIPTOR结构变量进行了填充,在得到设备环境句柄后调用ChoosePixelFormat()和SetPixelFormat()函数以返回并设置最佳匹配的像素格式。最后调用wglCreateContext()创建一个渲染上下文RC并将其作为参数通过wglMakeCurrent()来建立一个当前的绘图描述表,并在绘制完毕后(通常在WM_DESTORY消息发出后执行)将其释放:
ReleaseDC(m_pDC); // 释放DC
if (m_hGlrc != NULL) // 释放RC
wglDeleteContext(m_hGlrc);
经过上面的处理OpenGL就已经初始化完毕了,但为了达到逼真的视觉效果还有必要进一步设置一下场景,这在InitOpenGL()函数中完成。具体的工作包括对光源的各种定义:
GLfloat light_position[] = {0.0, 0.0, 1.0, 0.0}; // 定义光源的位置坐标
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
GLfloat light_ambient[] = {0.0, 0.0, 0.0, 1.0}; // 定义环境反射光
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 1.0}; // 定义漫反射光
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
GLfloat light_specular[] = {1.0, 1.0, 1.0, 1.0}; // 定义镜面反射光
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
GLfloat light_model_ambient[] = {0.4f, 0.4f, 0.4f, 1.0f}; // 定义光模型参数
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, light_model_ambient);
GLfloat local_view[] = {0.0};
glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, local_view);
以及各项相关功能的使能设置:
glEnable(GL_LIGHTING); // GL_LIGHTING有效
glEnable(GL_LIGHT0); // GL_LIGHT0有效
glEnable(GL_DEPTH_TEST); // 允许深度比较
glDepthFunc(GL_LESS); // 激活深度比较
glClearColor(0.1f, 0.1f, 0.5f, 0.0f); // 设置蓝色背景
glHint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE); // 权衡图像质量与绘制速度
通常,SetOpenGLInterface()和InitOpenGL()在WM_CREATE消息发出后即被执行,以确保在程序启动之初完成对OpenGL的环境设置。在视图初始化更新完毕后,还要进行最后的处理--进行视口的定义,下面给出的这段InitViewPort()函数实现代码将完成此功能:
CRect rect; // 得到绘图客户区的大小
GetClientRect(rect);
glMatrixMode(GL_PROJECTION); // 设置投影模式
glLoadIdentity(); // 装载单位矩阵
if (m_nViewMode == 0) // 建立一个透视投影矩阵
gluPerspective(90.0, rect.Width() / rect.Height(), 1.0, 10000.0);
if (m_nViewMode == 1) // 建立一个正射投影矩阵
glOrtho(-0.5 * 10000.0, 0.5 * 10000.0, -0.5 * 10000.0, 0.5 * 10000.0, 1.0, 10000.0); glViewport(0, 0, rect.Width(), rect.Height()); // 重定视口
glMatrixMode(GL_MODELVIEW); // 确定当前矩阵模式
glLoadIdentity(); // 装载单位矩阵
这里完成的主要工作有对投影模式的设置与对投影矩阵的建立以及对视口的重定等。其中,控制变量m_nViewMode的取值决定了投影模式(透视投影还是正射投影),并根据不同的投影模式调用函数gluPerspective()或glOrtho()建立相应的投影矩阵。函数gluPerspective()用于创建一个对称透视视景体,第一个参数定义了视野在X-Z平面的角度,取值范围为[0.0, 180.0];第二个参数是投影平面宽度与高度的比率;后两个参数分别为远近裁剪面沿Z负轴到视点的距离,总为正值。glOrtho()用于创建一个平行视景体(实际是创建一个正射投影矩阵,并以此矩阵乘以当前矩阵)。其近裁剪、远裁剪平面均为矩形,近裁剪矩形左下角点和右上角点的三维空间坐标分别为(left,bottom,-near)和(right,top,-near);远裁剪平面的相应空间坐标分别为(left,bottom,-far)和(right,top,-far)。这里所有的near、far值同时为正或同时为负。若未进行其他变换,正射投影的方向将平行于Z轴、视点朝向Z负轴。
视口确定之后就可以着手对场景的绘制了。这主要在ReDraw()中完成,并在OnSize()、OnDraw()等需要重绘的地方被调用。由于这部分不属于OpenGL框架搭建的内容,因此该函数的实现将在后续的文章中进行详细介绍,这里不再赘述
⑵ 3DMAX渲染速度取决于什么
3DMAX渲染是三维制图的重要步骤,制图过程中主要靠显卡的性能,渲染时显卡几乎停止工作,主要依赖以下几方面:
CPU的处理能力,3D渲染时CPU的占用率通常达到100%,所以在其他条件均衡的情况下,处理器核心数越多,性能越强,渲染速度就会越快。
内存的空间大小,3D渲染时通常会占用比较大的机器运行内存,所以足够大的内存是渲染速度畅快的必要条件。
散热方面,3D渲染时电脑温度会特别高,CPU散热不良会直接影响性能发挥,从而导致渲染速度变慢,所以保持电脑良好的散热也会提高3DMAX的渲染速度。
⑶ 守望先锋要开垂直同步和三维缓冲吗 浅谈显卡
垂直同步 , 开了锁定60FPS , 不开画面有撕裂出现!
三维缓冲在开了垂直同步下 , 能使游戏保持更加流畅!
⑷ Z缓冲谁知道是什么。说简单点,
Z缓冲指在3D环境中每个像素中会利用一组数据资料来定义像素在显示时的纵深度(Z轴座标值)。Z缓冲所用的位数越高,则代表该显示卡所提供的物件纵深感也越精确。这样,当画面中的视角发生变化时,可以即时地将这些变化反映出来,从而避免了由于运算速度缓慢所造成的图形失真。
(4)三维数据缓存原理扩展阅读:
当三维图形卡渲染物体的时候,每一个所生成的像素的深度(即z坐标)就保存在z缓冲区中。这个缓冲区通常组织成一个保存每个屏幕像素深度的x-y二维数组。如果场景中的另外一个物体也在同一个像素生成渲染结果,那么图形处理卡就会比较二者的深度,并且保留距离观察者较近的物体。
然后这个所保留的物体点深度会覆盖保存到z缓冲区中。最后,图形卡就可以根据深度缓冲区正确地生成通常的深度感知效果:较近的物体遮挡较远的物体。
参考资料来源:
网络——Z缓冲
网络——Z缓存
网络——深度缓冲
⑸ 正常吗
CPU的工作原理是:
1. 从存储单元读取数据(程序指令),
2. 交由控制单元进行调度分配,
3. 然后传送到逻辑运算单元处理,
4. 再将处理后的结果数据写入存储单元,最后交由应用程序使用。
如图所示。
控制单元
控制单元是整个CPU的指挥控制中心,由指令寄存器(IR--Instruction Register)、指令译码器(ID--Instruction Decoder)和操作控制器(OC--Operation Controller)三个部件组成,对协调整个微型计算机有序工作极为重要。
它根据用户预先编好的程序,依次从存储器中取出各条指令,放在指令寄存器IR中,通过指令译码(分析)确定应该进行什么操作,然后通过操作控制器OC,按确定的时序,向相应的部件发出微操作控制信号。操作控制器OC中主要包括有节拍脉冲发生器、控制矩阵、时钟脉冲发生器、复位电路和启停电路等控制逻辑。
寄存器组RS(Register Set或Registers)
RS实际是CPU暂时存放数据的地方,里面保存着那些等待处理的数据,或已经处理过的数据,CPU访问寄存器所用时间要比访问内存的时间短。采用寄存器,可减少CPU 访问内存次数,从而提高CPU的工作速度。但因受到芯片面积和集成度所限,寄存器组容量不可能很多。
寄存器组又可分为专用寄存器和通用寄存器。专用寄存器的作用是固定的,分别寄存相应数据。而通用寄存器用途广泛并可由程序员规定其用途。通用寄存器的数目因微处理器而异,如80486有EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP共8个32位通用寄存器等。
逻辑运算单元ALU
ALU(Arithmetic Logic unit)是运算器核心。它是以全加器为基础,辅之以移位寄存器及相应控制逻辑组合而成的电路,在控制信号的作用下可完成加、减、乘、除四则运算和各种逻辑运算。
CPU工作模式
CPU工作模式是指各种影响CPU可以执行的指令和芯片功能的操作环境。不同的工作模式决定了CPU如何看到并管理内存。
目前CPU有三种工作模式:实模式、保护模式和虚拟实模式。
所有的Intel和Intel兼容(如AMD和Cyrix)的CPU在系统上电时都处于实模式。如果加载了一个32位操作系统,它自动将CPU切换到32位模式。
五. CPU的性能指标
(1) CPU的时钟频率称为主频, 主频越高, 则计算机工作速度越快; 主板的频率称为外频; 主频与外频的关系为:
(2) 内部缓存(cache), 也叫一级缓存(L1 cache). 这种存储器由SRAM制作, 封装于CPU内部, 存取速度与CPU主频相同. 内部缓存容量越大, 则整机工作速度也越快. 一般容量为KB.
主频=外频×倍频数
(3) 二级缓存(L2 cache). 集成于CPU外部的高速缓存, 存取速度与CPU主频相同或与主板频率相同. 容量一般为KB~MB.
(4) MMX(Multi-Media extension)指令技术. 增加了多媒体扩展指令集的CPU, 对多媒体信息的处理能力可以提高60%左右.
(5) 3D指令技术. 增加了3D扩展指令集的CPU, 可大幅度提高对三维图象的处理速度.
----------------------------------
CPU的英文全称是Central Processing Unit,即中央处理器。CPU从雏形出现到发展壮大的今天,由于制造技术的越来越先进,其集成度越来越高,内部的晶体管数达到几百万个。虽然从最初的CPU发展到现在其晶体管数增加了几十倍,但是CPU的内部结构仍然可分为控制单元,逻辑单元和存储单元三大部分。CPU的性能大致上反映出了它所配置的那部微机的性能,因此CPU的性能指标十分重要。 CPU主要的性能指标有以下几点:
第一:主频,也就是CPU的时钟频率,简单地说也就是CPU的工作频率。一般说来,一个时钟周期完成的指令数是固定的,所以主频越高,CPU的速度也就越快了。不过由于各种CPU的内部结构也不尽相同,所以并不能完全用主频来概括CPU的性能。至于外频就是系统总线的工作频率;而倍频则是指CPU外频与主频相差的倍数。用公式表示就是:主频=外频×倍频。我们通常说的赛扬433、PIII 550都是指CPU的主频而言的。
第二:内存总线速度或者叫系统总路线速度,一般等同于CPU的外频。内存总线的速度对整个系统性能来说很重要,由于内存速度的发展滞后于CPU的发展速度,为了缓解内存带来的瓶颈,所以出现了二级缓存,来协调两者之间的差异,而内存总线速度就是指CPU与二级(L2)高速缓存和内存之间的工作频率。
第三:工作电压。工作电压指的也就是CPU正常工作所需的电压。早期CPU(386、486)由于工艺落后,它们的工作电压一般为5V,发展到奔腾586时,已经是3.5V/3.3V/2.8V了,随着CPU的制造工艺与主频的提高,CPU的工作电压有逐步下降的趋势,Intel最新出品的Coppermine已经采用1.6V的工作电压了。低电压能解决耗电过大和发热过高的问题,这对于笔记本电脑尤其重要。
第四:协处理器或者叫数学协处理器。在486以前的CPU里面,是没有内置协处理器的。由于协处理器主要的功能就是负责浮点运算,因此386、286、8088等等微机CPU的浮点运算性能都相当落后,自从486以后,CPU一般都内置了协处理器,协处理器的功能也不再局限于增强浮点运算。现在CPU的浮点单元(协处理器)往往对多媒体指令进行了优化。比如Intel的MMX技术,MMX是“多媒体扩展指令集”的缩写。MMX是Intel公司在1996年为增强Pentium CPU在音像、图形和通信应用方面而采取的新技术。为CPU新增加57条MMX指令,把处理多媒体的能力提高了60%左右。
第五:流水线技术、超标量。流水线(pipeline)是 Intel首次在486芯片中开始使用的。流水线的工作方式就象工业生产上的装配流水线。在CPU中由5~6个不同功能的电路单元组成一条指令处理流水线,然后将一条X86指令分成5~6步后再由这些电路单元分别执行,这样就能实现在一个CPU时钟周期完成一条指令,因此提高了CPU的运算速度。超流水线是指某型 CPU内部的流水线超过通常的5~6步以上,例如Pentium pro的流水线就长达14步。将流水线设计的步(级)数越多,其完成一条指令的速度越快,因此才能适应工作主频更高的CPU。超标量是指在一个时钟周期内CPU可以执行一条以上的指令。这在486或者以前的CPU上是很难想象的,只有Pentium级以上CPU才具有这种超标量结构;这是因为现代的CPU越来越多的采用了RISC技术,所以才会超标量的CPU。
第六:乱序执行和分枝预测,乱序执行是指CPU采用了允许将多条指令不按程序规定的顺序分开发送给各相应电路单元处理的技术。分枝是指程序运行时需要改变的节点。分枝有无条件分枝和有条件分枝,其中无条件分枝只需要CPU按指令顺序执行,而条件分枝则必须根据处理结果再决定程序运行方向是否改变,因此需要“分枝预测”技术处理的是条件分枝。
第七:L1高速缓存,也就是我们经常说的一级高速缓存。在CPU里面内置了高速缓存可以提高CPU的运行效率。内置的L1高速缓存的容量和结构对CPU的性能影响较大,不过高速缓冲存储器均由静态RAM组成,结构较复杂,在CPU管芯面积不能太大的情况下,L1级高速缓存的容量不可能做得太大。采用回写(Write Back)结构的高速缓存。它对读和写操作均有可提供缓存。而采用写通(Write-through)结构的高速缓存,仅对读操作有效。在486以上的计算机中基本采用了回写式高速缓存。
第八:L2高速缓存,指CPU外部的高速缓存。Pentium Pro处理器的L2和CPU运行在相同频率下的,但成本昂贵,所以Pentium II运行在相当于CPU频率一半下的,容量为512K。为降低成本Intel公司曾生产了一种不带L2的CPU名为赛扬。
第九:制造工艺, Pentium CPU的制造工艺是0.35微米, PII和赛扬可以达到0.25微米,最新的CPU制造工艺可以达到0.18微米,并且将采用铜配线技术,可以极大地提高CPU的集成度和工作频率。
六.多媒体指令集
CPU依靠指令来计算和控制系统,每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统。指令的强弱也是CPU的重要指标,指令集是提高微处理器效率的最有效工具之一。从现阶段的主流体系结构讲,指令集可分为复杂指令集和精简指令集两部分,而从具体运用看,如Intel的MMX(Multi Media Extended)、SSE、 SSE2(Streaming-Single instruction multiple data-Extensions 2)和AMD的3DNow!等都是CPU的扩展指令集,分别增强了CPU的多媒体、图形图象和Internet等的处理能力。我们通常会把CPU的扩展指令集称为"CPU的指令集"。
1、精简指令集的运用
在最初发明计算机的数十年里,随着计算机功能日趋增大,性能日趋变强,内部元器件也越来越多,指令集日趋复杂,过于冗杂的指令严重的影响了计算机的工作效率。后来经过研究发现,在计算机中,80%程序只用到了20%的指令集,基于这一发现,RISC精简指令集被提了出来,这是计算机系统架构的一次深刻革命。RISC体系结构的基本思路是:抓住CISC指令系统指令种类太多、指令格式不规范、寻址方式太多的缺点,通过减少指令种类、规范指令格式和简化寻址方式,方便处理器内部的并行处理,提高VLSI器件的使用效率,从而大幅度地提高处理器的性能。
RISC指令集有许多特征,其中最重要的有:
指令种类少,指令格式规范:RISC指令集通常只使用一种或少数几种格式。指令长度单一(一般4个字节),并且在字边界上对齐,字段位置、特别是操作码的位置是固定的。
寻址方式简化:几乎所有指令都使用寄存器寻址方式,寻址方式总数一般不超过5个。其他更为复杂的寻址方式,如间接寻址等则由软件利用简单的寻址方式来合成。
大量利用寄存器间操作:RISC指令集中大多数操作都是寄存器到寄存器操作,只以简单的Load和Store操作访问内存。因此,每条指令中访问的内存地址不会超过1个,访问内存的操作不会与算术操作混在一起。
简化处理器结构:使用RISC指令集,可以大大简化处理器的控制器和其他功能单元的设计,不必使用大量专用寄存器,特别是允许以硬件线路来实现指令操作,而不必像CISC处理器那样使用微程序来实现指令操作。因此RISC处理器不必像CISC处理器那样设置微程序控制存储器,就能够快速地直接执行指令。
便于使用VLSI技术:随着LSI和VLSI技术的发展,整个处理器(甚至多个处理器)都可以放在一个芯片上。RISC体系结构可以给设计单芯片处理器带来很多好处,有利于提高性能,简化VLSI芯片的设计和实现。基于VLSI技术,制造RISC处理器要比CISC处理器工作量小得多,成本也低得多。
加强了处理器并行能力:RISC指令集能够非常有效地适合于采用流水线、超流水线和超标量技术,从而实现指令级并行操作,提高处理器的性能。目前常用的处理器内部并行操作技术基本上是基于RISC体系结构发展和走向成熟的。
正由于RISC体系所具有的优势,它在高端系统得到了广泛的应用,而CISC体系则在桌面系统中占据统治地位。而在如今,在桌面领域,RISC也不断渗透,预计未来,RISC将要一统江湖。
2、CPU的扩展指令集
对于CPU来说,在基本功能方面,它们的差别并不太大,基本的指令集也都差不多,但是许多厂家为了提升某一方面性能,又开发了扩展指令集,扩展指令集定义了新的数据和指令,能够大大提高某方面数据处理能力,但必需要有软件支持。
MMX 指令集
MMX(Multi Media eXtension,多媒体扩展指令集)指令集是Intel公司于1996年推出的一项多媒体指令增强技术。MMX指令集中包括有57条多媒体指令,通过这些指令可以一次处理多个数据,在处理结果超过实际处理能力的时候也能进行正常处理,这样在软件的配合下,就可以得到更高的性能。MMX的益处在于,当时存在的操作系统不必为此而做出任何修改便可以轻松地执行MMX程序。但是,问题也比较明显,那就是MMX指令集与x87浮点运算指令不能够同时执行,必须做密集式的交错切换才可以正常执行,这种情况就势必造成整个系统运行质量的下降。
SSE指令集
SSE(Streaming SIMD Extensions,单指令多数据流扩展)指令集是Intel在Pentium III处理器中率先推出的。其实,早在PIII正式推出之前,Intel公司就曾经通过各种渠道公布过所谓的KNI(Katmai New Instruction)指令集,这个指令集也就是SSE指令集的前身,并一度被很多传媒称之为MMX指令集的下一个版本,即MMX2指令集。究其背景,原来"KNI"指令集是Intel公司最早为其下一代芯片命名的指令集名称,而所谓的"MMX2"则完全是硬件评论家们和媒体凭感觉和印象对"KNI"的 评价,Intel公司从未正式发布过关于MMX2的消息。
而最终推出的SSE指令集也就是所谓胜出的"互联网SSE"指令集。SSE指令集包括了70条指令,其中包含提高3D图形运算效率的50条SIMD(单指令多数据技术)浮点运算指令、12条MMX 整数运算增强指令、8条优化内存中连续数据块传输指令。理论上这些指令对目前流行的图像处理、浮点运算、3D运算、视频处理、音频处理等诸多多媒体应用起到全面强化的作用。SSE指令与3DNow!指令彼此互不兼容,但SSE包含了3DNow!技术的绝大部分功能,只是实现的方法不同。SSE兼容MMX指令,它可以通过SIMD和单时钟周期并行处理多个浮点数据来有效地提高浮点运算速度。
在后来Intel为了应对AMD的3Dnow!指令集,又在SSE的基础上开发了SSE2,增加了一些指令,使得其P4处理器性能有大幅度提高。到P4设计结束为止,Intel增加了一套包括144条新建指令的SSE2指令集。像最早的SIMD扩展指令集,SSE2涉及了多重的数据目标上立刻执行一单个的指令(即SIMD,一个计算低工控最好的方法是让每指令执行更多的工作)。最重要的是SSE2能处理128位和两倍精密浮点数学运算。处理更精确浮点数的能力使SSE2成为加速多媒体程序、3D处理工程以及工作站类型任务的基础配置。但重要的是软件是否能适当的优化利用它。
3D Now!(3D no waiting)指令集
3DNow!是AMD公司开发的SIMD指令集,可以增强浮点和多媒体运算的速度,并被AMD广泛应用于其K6-2 、K6-3以及Athlon(K7)处理器上。3DNow!指令集技术其实就是21条机器码的扩展指令集。
与Intel公司的MMX技术侧重于整数运算有所不同,3DNow!指令集主要针对三维建模、坐标变换 和效果渲染等三维应用场合,在软件的配合下,可以大幅度提高3D处理性能。后来在Athlon上开发了Enhanced 3DNow!。这些AMD标准的SIMD指令和Intel的SSE具有相同效能。因为受到Intel在商业上以及Pentium III成功的影响,软件在支持SSE上比起3DNow!更为普遍。Enhanced 3DNow!AMD公司继续增加至52个指令,包含了一些SSE码,因而在针对SSE做最佳化的软件中能获得更好的效能。
七.CPU常见的故障及排除
⑹ 等值面的等值面生成算法
Cuberille方法
· Cuberrille等值面方法又称Opaque Cube算法,最初由Herman等人提出,后来又多次改进。算法主要分为两个步骤:
· (1) 确定边界单元
对于规则网格数据,其网格单元可看成是正六面体单元,整个三维数据就是由这种正六面体组成的,这种组成三维图象的基本正六面体单元称为体元。对于给定的阈值Ft,遍历体数据中的各个单元,将组成体元8个顶点上的值与Ft进行比较,找出顶点值跨越Ft的所有体元,即体元中有的顶点值大于阈值,有的顶点值小于阈值,因此体元内包含等值面片,这就是边界单元。
(2) 绘制各边界单元的6个多边形面,即将等值面看成是由各单元的六个外表面拼合而成
每个单元均为一正六面体,包括6个多边形面。对组成所有边界体元的多边形面进行绘制,即可产生最终的图象结果。在绘制多边形过程中应采用合适的光照模型和消隐技术。
如果在具有硬件深度缓存(Z-buffer)功能的计算机上运行立方体方法,可以将这组多边形不分次序地提交给硬件,由硬件完成消除隐藏面的任务。如果以软件方式执行立方体方法,在算法中必须考虑多边形的遮挡问题。一个有效的方法是把遍历体元集合与显示两个步骤合二为一,遍历体元集合时采用从后至前的次序。发现一个边界体元,就立刻显示它的6个面。后显示到屏幕上去的多边形将覆盖先显示的多边形,这样就达到了消除隐藏面的目的,这就是画家算法的思想。
Marching Cubes(MC)方法
Marching Cubes(移动立方体)方法是由W.E.Lorenson和H.E.Cline在1987年提出来的。由于这一方法原理简单,易于实现,目前已经得到了较为广泛的应用,成为三维数据等值面生成的经典算法,Marching Cubes算法又简称为MC算法。MC方法的原理如下:
在Marching Cubes方法中,假定原始数据是离散的三维空间规则数据,一个体元定义为由相邻层上的8个顶点组成的一个长方体。为了在三维数据中构造等值面,应先给定所求等值面的值,该方法的基本原理是逐个处理所有的体元,将体元各顶点处的值与给定的阈值进行比较,首先找出与等值面相交的体元,然后通过插值求等值面与体元棱边的交点,并将各交点连成三角形来构成等值面片,所有体元中的三角形集合就构成了等值面。由于这一方法是逐个处理所有的体元,因此被称为Marching Cubes方法。 在W.E.Lorenson和H.E.Cline于1987年提出Marching Cubes方法之后不久,他们就发现,当离散三维数据的密度很高时,由Marching Cubes方法在体元中产生的小三角面片常常很小,在图像空间中的投影面积与屏幕上一个像素点的大小差不多,甚至还要小,因此,通过插值来计算小三角面片是不必要的。随着新一代CT和MRI等设备的出现,二维切片中图象的分辨率不断提高,断层不断变薄,已经接近并超过计算机屏幕显示的分辨率。在这种情况下,常用于三维表面生成的Marching Cubes方法已不适用。于是,在1988年,仍由W.E.Lorenson和H.E.Cline两人提出了剖分立方体(Dividing Cubes)方法。
⑺ blender建模一下午,c盘竟然满了!!!卡死要命,我的天这是怎么一回事
三维立体建模是需要占用大量空间的,也会产生大量数据缓存。
你可以按照以下Windows系统清理优化方法尝试清理瘦身:
另附:系统查看并显示隐藏文件的方法:打开“我的电脑”,点击菜单栏“工具”-“文件夹选项”,在新出现的窗口点击“查看”,去掉“隐藏受保护的操作系统文件(推荐)”前面复选框的钩,在弹出的窗口点击“是”;在“隐藏文件和文件夹”选项里选择“显示所有文件和文件夹”,然后“确定”即可。
⑻ 启用渲染缓存会卡吗
启用渲染缓存不会卡。
启用渲染缓存,强制全部渲染缓存,开启渲染优化,全部关掉因为渲染时CPU需要读取的是你各个素材的原本的位置的文件。
而磁盘缓存只是一个提升内存和硬盘之间的数据交换速度,在一定程度上能提升你在制作一个合成时的实时预览速度而已。渲染缓存不会卡。因为实时预览相当于是把你原本的素材复制到了一个你给AE指定的一个缓存文件夹。
相关信息
渲染在电脑绘图中是指用软件从模型生成图像的过程。模型是用严格定义的语言或者数据结构对于三维物体的描述,它包括几何、视点、纹理以及照明信息。
将三维场景中的模型,按照设定好的环境、灯光、材质及渲染参数。二维投影成数字图像的过程。渲染这个术语被用作“艺术家或作家对于场景的渲染”。另外渲染也用于描述“计算视频编辑文件中的效果以生成最终视频输出的过程”。
⑼ 三维地理信息系统的C Earth
ConverseEarth三维数字地球系统是由北京中天灏景网络科技有限公司于2011年推出的三维数据和地理信息(GIS)集成的软件平台,该平台从三维场景创建、地图数据加工到互联网发布都提供了成熟的商业解决方案;它集中体现了VR行业和GIS行业完美结合的优势,是单一VR软件或GIS软件无可比拟的;并开放了完整的API,在多功能集成性项目开发上,给用户提供了按需定制的良好支持;通过三维交互的方式来展示海量的三维场景和空间地理数据,让一切虚拟活动具有了真实的时空背景。
传统的虚拟现实软件追求极致的光影效果,虚拟地球三维渲染技术脱胎于Converse3D VR技术,具有一脉相承的理念和技术优势,不过此时的三维场景不再是微观的局部区域,而是可以赋上经纬度坐标后放置在虚拟地球表面的宏观场景,即具有微观场景的精致细节又有全局范围的数据叠加,使VR和GIS此刻变得密不可分,相得益彰,能在其上施加的应用也变得丰富起来。
Converse3D三维数字地球打开了一扇通往虚拟的真实世界之门。能够基于地表卫星影像、航空影像创建高分辨率的地球场景,不需要数据预处理,能够快速融合不同的、分布式的实时传输源数据快速构建实时三维交互式环境。同时具备C/S、B/S两种发布形式,采用瘦客户端模式,数据可全部来源于地图、三维模型服务器,客户端具有缓存机制,多次浏览场景时可提高速度。
在虚拟地球表面展示的三维世界可能是整个城市抑或是广域的地形地貌,这无疑需要提供
对海量三维模型的支持,作为成熟的VR软件开发商,我们成功的做到了这一点,我们综合运用动态资源调度、渲染线和加载线程同步工作、LOD等关键技术使地球表面承载大型地物成为可能。VR软件逼真的光影效果被移植进该系统,场景效果逼真而平滑。
多种格式的卫星影像图均可加载到球体上,对TB级贴图进行切割使其具有金字塔式组织结构,可表达20级高清影像。支持OGC标准,可以流数据方式连接WMS、WFS服务器读取数据。
支持高程数据(DEM)的叠加,表达地表起伏变化的丰富特性。同时支持矢量数据的导入,支持GoogleEarth格式的KML文件的导入。
ConverseEarthEditor场景编辑器
1、快速创建、编辑、获取三维场景数据库
ConverseEarthEditor能够如同照片般逼真地创建三维场景,并提供配准工具将三维场景精准的放置到地球表面。作为开发过成熟的虚拟现实软件的公司,我们在已有产品的基础上构建ConverseEarthEditor,继承了原有技术的优势并加入新的理念。放置到地球表面的三维场景不再是微观的局部区域,而是可以赋上经纬度坐标后放置在虚拟地球表面的宏观场景,即具有微观场景的精致细节又有全局范围的数据叠加,使VR和GIS此刻变得密不可分,相得益彰。
2、帮助客户压缩制作成本
压缩制作成本是客户所看重的,ConverseEarthEditor支持多人协作,每人分别编辑整个项目部分场景,最后分别配准后在地球表面拼合成一个大的宏观场景,并可将3dMax制作的三维模型一次性导入到编辑器中,中间并不需要冗余环节,协同作业和批量处理大大提高了工作效率节约了制作成本。
ConverseEarthEditor提供建筑、小品等多种类型的模型库,方便用户快速组建场景,减少建模工作量。
简单易用的操作界面使学习周期大大缩短,可视化面板进行材质、模型属性、交互功能编辑,所见即所得。三维模型可批量导入也可分次导入,灵活性强。
3、具有高安全性
直接或间接支持3dMax、CAD、Maya等多种数据格式,最终导出成自身格式,自身格式经过加密和压缩,数据量小且保密性强,适应互联网流式加载三维场景的需要。
4、逼真光影效果,让您的三维场景看上去赏心悦目
支持RTT技术,纹理可预先存储在纹理内,实时渲染预处理纹理图片,能达到效果图级渲染效果。
5、让三维世界搭载人类活动
该软件带有角色动画系统和粒子特效系统等高级模块,可实现多人互动虚拟社区的应用,来开发多人协同作业、多人在线安全应急演练等高端项目。
6、模型数据密不可分
模型不带数据,数据不挂接模型是传统项目开发的弊端,现在我们让模型一诞生就具有各种基础数据(经纬度、高程等信息),同时还可整合各种用户业务层数据,便于快速构建基于三维场景的信息化管理系统;三维模型体系具有地面、空间两种模式,两种模式分别具有各自不同的坐标系,二者可以相互转化,方便用户取用。
ConverseEarthExplorer浏览器
ConverseEarthExplorer打开了通往三维数字化地球的大门。使用它用户能够浏览和操作基于地表的卫星影像、航空影像、高程数据模型、三维模型创建的高分辨率的三维虚拟地球场景,用户可以通过互联网、局域网充分体验交互式三维地球漫游的乐趣。它是分布式应用的客户端软件,同时又是全球虚拟社区服务的一个充满生机的节点。
在家里或在办公室里你可以通过Explorer浏览用户分享的三维地球数据或处理生产相关的企业级数据,它支持各种IE内核的浏览器项目部署。
基于Explorer能够开发的项目类别包括设备管理、工艺流程模拟、单人技能级心理素质培训、多人在线安全应急演练,可实施的项目范围广,功能全面,具有良好的可扩展性和强大的升级能力。
1、软件特性:
在任何网络上都能够以流方式传输影像、地形和三维数据
支持交互式绘图工具,可以在地球表面绘制几何图形、用户自定义对象、建筑物、位图等
可以创建和导入静态或动态的标注,并支持来自GoogleEarth的标注文件。
支持OGC标准,可以连接任意符合该标准的WMS、WFS数据服务器进行读取数据。
支持矢量数据的叠加,可以本地或从服务器端获取矢量数据。
自动导航功能可以创建预定义飞行路径,并在浏览器中回放
使用鼠标、键盘、位置跟踪器、飞行控制器对三维地球进行操控
在三维视窗中截取快照并输出成图片
集成视频、网页、Flash等多媒体信息,对地物进行描述
2、协同作业模式
不同地域的用户可以通过TCP/IP架构进行场景漫游和数据操作的交互,用户可以发起、加入一个实时互动式协同操作环境。
3、GPS跟踪
采用NMEA协议,通过读取实时或记录的GPS数据控制单个或多个对象的移动、转向,可以绘制对象运动的历时轨迹。数据源可以是GPS、Socket、USB、COM、Database、无线网络位置跟踪器等。
4、天体运行模拟
可以用于火箭发射、卫星调度项目的开发,能实时模拟天体运行状态也运行轨迹,可以选取任意时空片段查看天体运行状态,能够绘制卫星与地面站通讯电波示意图形和星下条带。
ConverseEarthSDK二次开发工具包
ConverseEarthSDK提供了一套强大的接口来为用户提供三维地球核心功能服务,这些本来内嵌的功能可以以简单易用接口的形式被外界程序调用,可广泛用于传统二维信息系统的三维化升级、软硬件结合的集成项目的研发。
SDK提供了一套ActiveX控件,将三维窗口、导航图以控件对象的方式嵌入到用户系统的可视化界面中。这些以COM协议为基础的API接口都可以通过脚本语言超作(例如JavaScript),也可以通过非脚本语言来控制操作(例如:C++VBDelphi.net)。
基于B/S的项目可以将控件打包后放到服务器端,使用网页访问时会自动安装控件,免去安装客户端的繁琐步骤。
我们的大量SDK客户来至于石油、电力、水利、安防等领域,SDK的价值在于对业务数据和三维模型数据的整合,使得三维场景成为生产或业务流程中最直观的数据部份而不是单纯的场景展现。
SDK提供的API大类可以分为:
二三维图层操作
几何体的绘制
标注及地面物件的绘制
物体的位移、旋转、缩放等变换操作
事件触发处理
数据分析功能
角色骨骼动画
粒子特效模块
系统参数设置
相机控制
天体运行控制
GPS地物运动控制
数学计算
⑽ 什么是显存缓存和显存有什么区别它们属不属于电脑配置
1、显存的种类:
显存的种类有EDORAM、MDRAM、SDRAM、SGRAM、VRAM、WRAM、DDR等许多种。EDO显存曾用在Voodoo、Voodoo 2等显卡上,但目前已消声匿迹。SGRAM显存支持块写和掩码,可以看作是SDRAM的加强版,曾流行一时,但由于价格较SDRAM稍高,现在也已甚少采用。目前显卡上被广泛使用的显存就是SDRAM和DDR SDRAM了。SDRAM可以与CPU同步工作,无等待周期,减少数据传输延迟。优点是价格低廉,在中低端显卡上得到了广泛的应用。DDR是Double Data Rate是缩写,它是现有的SDRAM内存的一种进化。在设计和操作上,与SDRAM很相似,唯一不同的是DDR在时钟周期的上升沿和下降沿都能传输数据,而SDRAM则只可在上升沿传输数据,所以DDR的带宽是SDRAM的两倍,而DDR比SDRAM的数据传输率也快一倍。如果SDRAM内存的频率是133MHz,则DDR内存的频率是266MHz,因此在中高档显卡上应用广泛。
2、显存的容量:
显存与系统内存一样,也是多多益善。显存越大,可以储存的图像数据就越多,支持的分辨率与颜色数也就越高。以下计算显存容量与分辨率关系的公式:
所需显存=图形分辨率×色彩精度/8
例如要上16bit真彩的1024×768,则需要1024×768×16/8=1.6M,即2M显存。
对于三维图形,由于需要同时对Front buffer、Back buffer和Z buffer进行处理,因此公式为:所需显存(帧存)=图形分辨率×3×色彩精度/8
例如一帧16bit、1024×768的三维场景,所需的帧缓存为1024×768×3×16bit/8=4.71M,即需要8M显存。
3、显存的数据位数与带宽:
数据位数指的是在一个时钟周期之内能传送的bit数,它是决定显存带宽的重要因素,与显卡性能息息相关。当显存种类相同并且工作频率相同时,数据位数越大,它的性能就越高。
显存带宽的计算方法是:运行频率×数据带宽/8。以目前的GeForce3显卡为例,其显存系统带宽=230MHz×2(因为使用了DDR显存,所以乘以2)×128/8=7.36GB。
数据位数是显存也是显卡的一个很重要的参数。在显卡工作过程中,Z缓冲器、帧缓冲器和纹理缓冲器都会大幅占用显存带宽资源。带宽是3D芯片与本地存储器传输的数据量标准,这时候显存的容量并不重要,也不会影响到带宽,相同显存带宽的显卡采用64MB和32MB显存在性能上区别不大。因为这时候系统的瓶颈在显存带宽上,当碰到大量像素渲染工作时,显存带宽不足会造成数据传输堵塞,导致显示芯片等待而影响到速度。目前显存主要分为64位和128位,在相同的工作频率下,64位显存的带宽只有128位显存的一半。这也就是为什么Geforce2 MX200(64位SDR)的性能远远不如Geforce2 MX400(128位SDR)的原因了。
4、显存的速度:
显存的速度一般以ns为单位。常见的显存有7ns、6ns、5.5ns、5ns、4ns甚至3.8ns的显存。其对应的额定工作频率分别是143MHz、166MHz、183MHz、200MHz和250MHz。额定工作频率=1/显存速度。当然,对于一些质量较好的显存来说,显存的实际最大工作频率是有一定的余量的。显存的超频就是基于这一原理,列如将额定频率为6ns的显存超至190MHz的运行频率。
这里还要说一说显存的实际运行频率和等效工作频率。DDR显存因为能在时钟的上升沿和下降沿都能传送数据,因此,在相同的时钟频率和数据位宽度的情况下显存带宽是普通SDRAM的两倍。换句话说,在显存速度相同的情况下,DDR显存的实际工作频率是普通SDRAM显存的2倍。同样,DDR显存达到的带宽也是普通SDRAM显存的2倍。例如,5ns的SDRAM显存的工作频率为200MHZ,而5ns的DDR显存的等效工作频率就是400MHZ。