barriers / 阅读 / 详情

可以用 笔记本内存条的内存 弥补 显卡内存的不足 不

2023-07-09 11:44:23
共2条回复
小教板

可以把一部分内存分配成共享显存,具体如何分配不同的显卡设置方法不同。

Intel移动显卡篇

目前,多数笔记本采用Intel的集成显卡,而其中大部分是集成GMA950/X3100显卡。下面我们先来谈谈这两款产品的显存分配问题。GMA950/X3100虽然规格不一样,但它们都采用英特尔的动态内存管理技术(Dynamic Video Memory Technology,简称DVMT)来管理显存,只不过GMA 950支持DVMT 3.0,而GMA X3100支持DVMT 4.0,两者可以调用的内存容量有所区别: GMA 950最高可调用224MB内存来充当显存,而GMA X3100最大可以调用384MB的系统内存。

要为显卡分配显存需要进入BIOS的“OnBoard VGA share momory”选项中设置(不同品牌的本本,选项名称可能有所出入,有的本本没有这个选项),自己可以根据需要为显卡划分共享内存。在这里,共有三个DVMT模式:“Fixed”模式、“DVMT”模式、“Fixed+DVMT”模式。其中“Fixed”模式,一部分固定容量的系统内存将被分配到图形核心;而 “DVMT”模式则由显示核心自动根据实际需要使用系统内存;“Fixed+DVMT”模式,则是固定为显卡划分一定的内存与动态共享内存相结合的模式,比如在这种模式下图形处理器可独占64MB的固定内存 (包括第一部分中专为GPU配备的内存空间),并动态共享64MB内存。

如果你本本的内存较大的话,比如1GB以上,可以设置为DVMT,让系统自动分配显存容量的大小,从而在针对不同的应用中都可以有不错的表现。

内存容量不定,能为显卡固定分配的共享内存是不一样的 。集成显卡是否能共享到最大显存容量要由你本本的物理内存及操作系统来决定。在Windows XP下,当系统内存小于512MB时,GMA950、GMA X3100都只能调用128MB内存来当显存,但当内存在512MB以上时,GMA950则可以实现最大显存容量;而GMA X3100在系统内存在512MB~1GB之间时最大可以调用256MB内存,在内存为1GB以上时最大可以调用384MB内存(图1)。Vista系统中加入一项动态增加显存的技术,在Vista的DVMT模式下,动态共享内存是随着内存容量的增加而自动增加的,并不由我们所控制,为了避免显卡过多调用内存导致系统性能下降,我们建议大家采用“Fixed+DVMT”模式,为显卡划分128MB的固定内存,另外动态共享128MB(这需要主板BIOS的支持,目前不少本本BIOS都默认为DVMT模式)。

AMD-ATI移动显卡篇

AMD-ATI在它的移动整合芯片组中也拥有相当灵活的共享显存设置,它采用HyperMemory技术,其原理与英特尔的DVMT差不多,只不过HyperMemory支持板载显存,可以直接在本本主板上集成一定容量的物理显存(可支持16MB、32MB、64MB、128MB、256MB)提供给整合的图形核心,因此在性能及灵活性上更胜一筹。

例如Radeon Xpress 1150、Radeon Xpress 1250都支持HyperMemory动态显存技术,其显存配置方案也有三种模式:

1.“SIDEPORT”模式,在这种模式下,整合图形核心会使用板载物理显存,这要看你的本本是否配有物理显存。

2.“UMA”模式,在此模式下,整合图形核心完全通过动态分配的方式共享系统内存。其中分配的内存大小可以在BIOS中进行设置,最高可调用显存由物理内存及操作系统决定。

3.“UMA+SIDEPORT”模式,在此模式下整合图形核心将会一起使用板载显存+共用的系统内存作为显存, 这时显卡就会有足够容量的内存可以使用,并有较快的速度。

Radeon Xpress 1150、Radeon Xpress 1250可调用的内存也随着系统及内存的不同而有着不同的配置方案,比如在Vista下,如果你的本本配备2GB内存,最高可以调用895MB的内存,比高端的独立显卡显存还要多!

如果你要对集成显卡显存进行设置的话,可以在进入BIOS后找到“Internal Graphics Configuration”,进入集成显卡的设置界面,用户在这里可以对显存的分配进行设定。

如果你本本的主板板载有显存,那么建议大家在开启板载显存后,选择“UMA+SIDEPORT”模式,再根据需要单独从内存中划分128MB或256MB来与板载显存搭配(比如板载的显存在128MB以上,则划分的内存就设为128MB),这样可以让显示系统的性能稳定维持在一个比较好的状态下。

由于低端整合图形核心性能较低,划分256MB以上内存作为显存是完全没有必要的,调用的内存过大,反而会导致系统性能的下降。而由于共享系统内存,所以系统内存的频率决定了显存的频率高低,当系统内存频率不同时,显存的频率取决于其中配备的较低频率的内存。

除了移动集成显卡外,AMD-ATI的低端独立移动显卡也支持HyperMemory技术。不过,与移动集成显卡不同,独立移动显卡所调用的动态内存是无法手动分配的,只是随着内存容量的增加而增加。而且对于升级内存的用户来说,如果你升级的内存兼容性不佳,独立显卡所支持的HyperMemory功能往往会增加内存的奇偶校验出错可能,提高系统死机的概率。因此,在这种情况下,最好的办法就是关闭本本独立显卡的HyperMemory功能。不过,目前AMD-ATI没有提供在BIOS或驱动中关闭/开启HyperMemory功能的选项,这时我们就要借助第三方软件——ATI Tray Tools来实现。

安装运行ATI Tray Tools后,打开“Tools & Options(工具及选项)”,点击“General→Advanced(通常→高级)”,取消选中“Enable ATT Shared Memory(开启ATT共享内存)”,重新启动电脑,这时显卡就无法再从系统调用内存了!

NVIDIA移动显卡篇

除了Intel、AMD外,NVIDIA也为它的移动显卡产品引入了类似的共享显存技术——TurboCache。不过,目前采用NVIDIA移动整合芯片组的本本较少,大家可以接触到的主要是NVIDIA的独立移动显卡产品,比如GeForce Go 7400/7600 、GeForce 8400M GS/8600M GS等产品。和AMD-ATI的移动独立显卡一样,支持TurboCache技术的移动独立显卡产品也是自动从系统调用内存,因此也着实让不少朋友感到郁闷,特别是板载256MB显存的GeForce 8600M GS,很少能用完256MB的显存。因此,在这种情况下关闭TurboCache功能,也是不少本本用户最佳的选择。

和AMD-ATI的显卡一样,关闭NVIDIA显卡的TurboCache功能也需要借助第三方软件——RivaTuner。在进行操作前,最好将你显卡的驱动升级到最新版本及下载最新版本的RivaTuner。安装运行RivaTuner后,打开“Power Users”标签,点击下侧的“Open Database”(打开数据)按钮,进入“Databases/NVIDIA/win2K”文件夹,根据你安装的驱动版本来选择相应的“Forceware *****.rtd”文件(如果你安装ForceWare 174.31版驱动,相应的文件就是Forceware 174.31.rtd),展开“NVIDIA……System”项(NVIDIA……System中间的是驱动的版本号,我这里是“NVIDIAForceware 174.31 2K ystem”),从下面找到“RMDisableRenderToSysMem”,将值设置为“1”,重启电脑就可以了。

okok云

不知你的本本是集显还是独显,老点的本本都是集显,那么就可以加内存,把显存划多一点~!

相关推荐

js中renderTo是什么意思

那是extjs里面的吧,请看ext的文档
2023-07-09 09:24:204

highcharts的renderTo什么作用

参数renderTo 作用:图表放置的容器,一般在html中放置一个DIV,获取DIV的id属性值默认值:null
2023-07-09 09:24:351

刚开始学习ExtJs,在onReady中渲染组件时,renderTo后面跟的是body中定义的div的id,但却不能显示出效果

进入我们的网页设计群把,我们群讲这个的额
2023-07-09 09:24:435

3dsmax如何烘焙法线导入sp才没有uv接缝

在3dsMax中烘焙法线贴图,需要先为模型创建UVW贴图坐标,然后再将高模和低模或者不同层次的模型进行渲染烘焙,生成法线贴图。具体步骤如下:1、在3dsMax中打开高模和低模模型,分别创建UVW贴图坐标,可以使用3dsMax自带的UVWMapping工具。2、在3dsMax中选中低模模型,打开渲染设置对话框,设置好输出文件格式、大小、路径等参数。3、在渲染设置对话框中,选择“Processing”选项卡,勾选“RendertoTexture”选项,并点击“Add”按钮,添加需要烘焙的高模模型。4、在“RendertoTexture”对话框中,选择需要烘焙的贴图类型,如法线贴图,并设置好其他参数。5、点击“Render”按钮,开始渲染烘焙过程。完成后,将生成的法线贴图导入到SP中,即可应用到模型上。
2023-07-09 09:24:561

什么是烘焙?

烘焙是用面粉、酵母等一些食材为原料,加上一些添加剂,经过一系列工艺制作的,这种食品种类繁多,而且口感较好,比如面包、常温蛋糕这类都是烘焙食品
2023-07-09 09:25:062

三维软件中的烘焙材质是什么意思,尽量详细点~~~

3ds max的烘焙工具是Render To Texture。因为3ds max 5和6两个版本中的这个工具有所不同,所以我们分别对其烘焙过程进行讲述。 VRP在导出的时候,能自动处理绝大多数RenderToTexture的设置:如支持tga,bmp,jpg,png,dds格式的贴图,支持批量tBaker,不需指定特定的channel等。在3ds max 5中烘焙在3dsmax中全选所有物体(Ctrl+A),点击3dsmax菜单的RenderingRender To Texture(或按快捷键“0”)可打开其设置面板。按下图所示调节参数,请重点注意下图中带文字注释的部分,其它维持3ds max默认值即可,但如果默认值已经被误修改,那么请根据下图对照恢复这些默认值,对于这些参数的含义和设置,我们会在以后的教程中详细介绍。 设置完毕后点击Render开始烘焙。
2023-07-09 09:25:212

VB.NET图片的黑白处理法(二值化)

原始图片黑白处理后图片原始图片:黑白处理后图片:部分处理代码:codeDim ts2 As IThresholder = New GlobalMeanThreshold(inbmp)Dim tsBMP As New Bitmap(PictureBox1.Width, PictureBox1.Height)ts2.RenderToBitmap(tsBMP)PictureBox6.Image = tsBMPPictureBox6.Height = PictureBox1.HeightPictureBox6.Width = PictureBox1.WidthPictureBox6.Left = 0PictureBox6.Top = 0理论知识:灰度图像的二值化处理就是讲图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,特别是在实用的图像处理中,以二值图像处理实现而构成的系统是很多的,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像,这样子有利于再对图像做进一步处理时,图像的集合性质只与像素值为0或255的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的处理和压缩量小。为了得到理想的二值图像,一般采用封闭、连通的边界定义不交叠的区域。所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。如果某特定物体在内部有均匀一致的灰度值,并且其处在一个具有其他等级灰度值的均匀背景下,使用阀值法就可以得到比较的分割效果。如果物体同背景的差别表现不在灰度值上(比如纹理不同),可以将这个差别特征转换为灰度的差别,然后利用阀值选取技术来分割该图像。动态调节阀值实现图像的二值化可动态观察其分割图像的具体结果。灰度图像的二值化没有固定的算法,根据图像区域中目标物体的不同而有不同的二值化算法.目前最主要的方法有:最大值法,平均值法,加权平均值法如下边代码:Private Function SetBitMapToBlackAndWhite(bmp As Bitmap) As BitmapTryDim height As Integer = bmp.HeightDim Width As Integer = bmp.WidthDim newBitMap As New Bitmap(Width, height)Dim pixel As ColorFor x As Integer = 0 To Width - 1For y As Integer = 0 To height - 1pixel = bmp.GetPixel(x, y)Dim r As IntegerDim g As IntegerDim b As IntegerDim Result As IntegerResult = 0r = pixel.Rg = pixel.Gb = pixel.BDim iType As Integer = 2Select Case iTypeCase 0"平均值法Result = (r + g + b) / 3Exit SelectCase 1"最大值法If (rg) ThenResult = rElseResult = gEnd IfIf (Resultb) ThenResult = ResultElseResult = bEnd IfExit SelectCase 2"加权平均值#p#副标题#e#Result = CInt(0.7) * r + CInt(0.2) * g + CInt(0.1) * bExit SelectEnd SelectnewBitMap.SetPixel(x, y, Color.FromArgb(Result, Result, Result))NextNextReturn newBitMapCatch ex As ExceptionReturn NothingEnd TryEnd Function该函数实现的简单的图像2值化。实际使用中最简单的二值化算法就是根据每个像素的灰度值做舍入处理,比如二值化阀值可以设置为0-255的中值127,但是这种的二值化没有根基图像的整体灰度值所在范围做考虑,所以效果很差.网上流传较广的是根据图像的直方图求取阀值:可以到网上搜索,我就不重复了介绍我的方法:public override unsafe void DoThresholding(){System.Drawing.Imaging.BitmapData indata = InBMP.LockBits(new Rectangle(0, 0, InBMP.Width, InBMP.Height),System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);byte* ptr = (byte*)indata.Scan0.ToPointer();Histogram his = new Histogram(indata, ptr, 0, 0, InBMP.Width, InBMP.Height);int mean = Math.Max((int)his.Mean, 0) * 3;//图像阀值int stride = indata.Stride;for (int x = this.Width - 1; x = 0; x--){for (int y = this.Height - 1; y = 0; y--){int average = (ptr[(y * stride) + (x * 3)] +ptr[(y * stride) + (x * 3) + 1] +ptr[(y * stride) + (x * 3) + 2]);//byte average = (byte)((ptr[(y * indata.Stride) + (x * 3) + 2]));if (averagemean)Data[x, y] = 255;elseData[x, y] = 0;}}InBMP.UnlockBits(indata);}}byte[] HistogramData;unsafe public Histogram(System.Drawing.Imaging.BitmapData indata, byte* ptr,int left, int top, int width, int height){HistogramData = new byte[256];for (int i = 0; i256; i++)HistogramData[i] = 0;int right = Math.Min(left + width, indata.Width);int bottom = Math.Min(top + height, indata.Height);int stride = indata.Stride;for (int x = left; xright; x++){for (int y = top; ybottom; y++){HistogramData[ptr[(y * stride) + (x * 3)]] += 1;HistogramData[ptr[(y * stride) + (x * 3) + 1]] += 1;HistogramData[ptr[(y * stride) + (x * 3) + 2]] += 1;}}CalculateMean();CalculateMinMax();}unsafe public Histogram(byte* ptr, int stride, int imgWidth, int imgHeight,int left, int top, int width, int height){HistogramData = new byte[256];int right = Math.Min(left + width, imgWidth);int bottom = Math.Min(top + height, imgHeight);for (int x = left; xright; x++){for (int y = top; ybottom; y++){byte average = (byte)((ptr[(y * stride) + (x * 3)] +ptr[(y * stride) + (x * 3) + 1] +ptr[(y * stride) + (x * 3) + 2]) / 3);HistogramData[average] += 1;}}CalculateMean();CalculateVariance();}public byte Mean;private int Sum;private int WeightedSum;private void CalculateMean(){int sum = 0;int weightedSum = 0;for (int i = 0; i256; i++){sum += HistogramData[i];weightedSum += HistogramData[i] * i;}Sum = sum;WeightedSum = weightedSum;if (sum0)Mean = (byte)(weightedSum / sum);elseMean = 0;}生成黑白图像public unsafe void RenderToBitmap(Bitmap bmp){if (Data == null)DoThresholding();System.Drawing.Imaging.BitmapData outdata = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height),System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);byte* ptr = (byte*)outdata.Scan0.ToPointer();for (int x = bmp.Width - 1; x = 0; x--){for (int y = bmp.Height - 1; y = 0; y--){if (this.Data[x, y]0){ptr[(y * outdata.Stride) + (x * 3)] = this.Data[x, y];ptr[(y * outdata.Stride) + (x * 3) + 1] = this.Data[x, y];ptr[(y * outdata.Stride) + (x * 3) + 2] = this.Data[x, y];}else{ptr[(y * outdata.Stride) + (x * 3)] = 0;ptr[(y * outdata.Stride) + (x * 3) + 1] = 0;ptr[(y * outdata.Stride) + (x * 3) + 2] = 0;}}}bmp.UnlockBits(outdata);}考虑到图像处理速度问题,所有图像都锁定在内存中进行操作。这样比直接操作速度快了几倍。#p#副标题#e#
2023-07-09 09:25:281

extjs中,我要将内容导入到某个地方,为什么只有renderTo: Ext.getBody(),会有效,而且位置不对?

你导入的地方 如果不是body 就需要指明 要导入的某个容器, 如果自身是一个容器的话 需要指明要渲染到布局的某个部分才行
2023-07-09 09:25:441

unity cubemap怎么生成

Use Assets->Create->Cubemap, set its properties, and drag six Texture assets onto corresponding Cubemap "faces". Note that the textures must be re-applied if changed because the textures are baked into the Cubemap Asset and are in no way linked to the textures. 用资源>创建 - > 立方图(Assets->Create->Cubemap),设置其属性,并拖6个纹理资源到相应立方图的"面"。注意纹理如果改变了,必须重新指派,因为纹理烘焙成立方图资源就与纹理没有关系了。Use the Texture Import Settings to create a Cubemap from a single imported texture asset. 使用纹理导入设置(Texture Import Settings)从一个单独导入的纹理资源创建立方图。Render your scene into a cubemap from script. Code example in Camera.RenderToCubemap page contains a script for rendering cubemaps straight from the editor. 用脚本把你的场景渲染成立方图(cubemap)。 Camera.RenderToCubemap页包含直接从编辑器渲染立方图的脚本代码示例。
2023-07-09 09:25:531

如何设置显卡缓存

开机的时候按DEL进入BIOS,集显调节位置在 Chipset - North Bridge子项里面;IGD Memory项就是设置显存大小的;根据自己的需要,调整显存大小就可以了,一般不超过电脑内存的四分之一比较合适;‘因为显卡将一部分内存虚拟成显存了,要更改可以在bios内修改。
2023-07-09 09:26:173

萌新求教,Unity5.1 替换FBX模型问题,烘焙问题

首先Unity不支持VRay的材质,所谓材质=shader(GPU程序)+数据(包括贴图、混合百分比、颜色和各种调节参数),而具体的视觉表现=材质+光照Unity只支持它自己的材质和光照,你也可以自己写shader来扩展Unity的材质,除非VRay的制作商给Unity写了shader,否则Unity是不能支持VRay的。但是VRay的渲染后效果还是可以在Unity里表现的,就是用烘培贴图的方法。首先备份一份你的.max文件。在工作.max里,把模型塌成可编辑多边形,这是为了容易导出fbx。导入Unity最好用标准交换模型fbx或collada(虽然它也支持.max但最好不要用)。然后在Max里烘培光照贴图(rendertotexture),这个网上的视频教程很多,你可以把光照(包括阴影在内)全部烘培到漫反射贴图里(另外一种方法烘培一张漫反射贴图+一张高光贴图,对应Unity里的漫反射+高光材质)。烘培完先在Max里用普通光照和标准材质测试一下(你可以把原来的VRay材质删了,新建个标准材质,把烘培后贴图载入漫反射通道),应该和用VRay的相差不大。然后导出fbx和贴图(不用把贴图嵌入fbx)。最后把fbx和包含光照的漫反射贴图全部导入Unity里,Unity里也用普通的漫反射材质,然后把漫反射贴图拖到给材质的Texture框里就可以了。
2023-07-09 09:26:521

highcharts报错 错误#13,说是没有对应renderTo的DIV容器,但是我确实写了依然报错。

$("TmLine")少写了个#号,应该是$("#TmLine")
2023-07-09 09:26:592

显卡打开tc功能共享内存的软件

和AMD-ATI的显卡一样,关闭和打开NVIDIA显卡的TurboCache功能也需要借助第三方软件——RivaTuner。在进行操作前,最好将你显卡的驱动升级到最新版本及下载最新版本的RivaTuner。安装运行RivaTuner后,打开“Power Users”标签,点击下侧的“Open Database”(打开数据)按钮,进入“Databases/NVIDIA/win2K”文件夹,根据你安装的驱动版本来选择相应的“Forceware *****.rtd”文件(如果你安装ForceWare 174.31版驱动,相应的文件就是Forceware 174.31.rtd),展开“NVIDIA……System”项(NVIDIA……System中间的是驱动的版本号,我这里是“NVIDIA Forceware 174.31 2K System”),从下面找到“RMDisableRenderToSysMem”,将值设置为“1”,重启电脑就可以了。设置1 是关闭TC 要共享就设置其他数字 自己去慢慢研究吧
2023-07-09 09:27:081

pro tools 导入波形文件后,怎样导出成音频文件

将编辑的波形音频文件另存为,选择保存格式,即可导出成音频文件。
2023-07-09 09:27:183

react render为什么只能写map函数

这个是react最新版api,也就是0.14版本做出的改变。主要是为了使React能在更多的不同环境下更快、更容易构建。于是把react分成了react和react-dom两个部分。这样就为web版的react和移动端的React Native共享组件铺平了道路。也就是说我们可以跨平台使用相同的react组件。 新的react包包含了React.createElement,.createClass,.Component,.PropTypes,.children以及其他元素和组件类。这些都是你需要构建组件时助手。 而react-dom包包括ReactDOM.render,.unmountComponentAtNode和.findDOMNode。在 react-dom/server ,有ReactDOMServer.renderToString和.renderToStaticMarkup服务器端渲染支持。总的来说,两者的区别就是:ReactDom是React的一部分。ReactDOM是React和DOM之间的粘合剂,一般用来定义单一的组件,或者结合ReactDOM.findDOMNode()来使用。更重要的是ReactDOM包已经允许开发者删除React包添加的非必要的代码,并将其移动到一个更合适的存储库。
2023-07-09 09:28:411

iOS原生框架Vision实现瘦脸大眼特效

一般短视频项目中会使用类似 Face++ 这样的商业sdk实现瘦脸大眼特效,想到苹果的原生框架 Vision 也可以进行人脸识别,提取人脸特征点,应该也能实现。没想到挺顺利,参考了网上的相关算法,个把小时就实现了效果。 Vision 与 Face++ 对比: 1. Vision 原生框架,体积小,免费; Face++ 需要付费,包大概50M左右。 2. Vision 要求在ios11以上, Face++ 貌似没有。 3. Vision 检测人脸关键点数量在iphone 5S,iphone7上为74个,iphone XS上为87个。 Face++ 检测人脸关键点数量为106个。 4. Vision 特征点貌似有点飘(稳定性一般),边缘检测不是很准。 Face++ 特征点相对贴合的要准一点。 Vision官方文档 Face++官方文档 1.使用 GPUImageVideoCamera 采集摄像头数据。 2.将采集到的数据 CVPixelBufferRef 送入 Vision 处理,拿到人脸特征点。 3.自定义的瘦脸大眼滤镜,添加到 GPUImage 的滤镜链上。 4.在自定义滤镜中重写 - (void)renderToTextureWithVertices:(const GLfloat *)vertices textureCoordinates:(const GLfloat *)textureCoordinates 方法,将特征点送入片元着色器中处理。 5.着色器中使用瘦脸大眼相关算法:圆内放大算法,圆内缩小算法,定点拉伸算法。 算法原理解析 6.最后通过 GPUImageView 展示。 1.将采集到的图像原始数据 CVPixelBufferRef 送入 Vision 处理 2. Vision 提取人脸特征点,需要注意的是特征点的坐标转换。 3.在 FaceBeautyThinFaceFilter 滤镜中处理特征点。 4.在片元着色器处理特征点数据。 第一张为原图,第二张为瘦脸大眼效果。可以看到,大眼效果不太自然,原因是系数设置的较大。 1.如图所示,取出左眼瞳孔特征点72的坐标和上方特征点13的坐标。 2.以瞳孔72为圆心,以72和13的距离的5倍为半径,确定放大范围。 3.按照圆内放大算法,离圆心越近的像素向圆圈外部偏移量越大,离圆心越远的像素偏移量越小。所以眼睛的纵向被拉伸的程度比较明显。而且又能让放大区域和未放大区域实现平滑过渡。 4.其他圆内缩小,定点拉伸的算法其实也是类似,就不再赘述。 Github:Demo地址 欢迎留言或私信探讨问题及Star,谢谢~
2023-07-09 09:28:561

创建代码生成器可以很简单:如何通过T4模板生成代码?[下篇]

但是这是一种基于单个文件的解决方案,即我们必须为每一个生成的存储过程建立一个模板。如果我们提供一种基于多文件的代码生成方式,将会为编程人员带来极大的便利。借助于T4 ToolBox这个开源工具箱,多文件的SQL Generator的实现变得异常简单。[文中的例子可以从这里下载]目录 二、创建自定义的Generator 三、ProcedureGenerator如何被使用?一、多文件代码生成器会带来多大的便利?我们先来直观的感受一下较之《上篇》提供的单一文件的代码生成器,基于多文件的代码生成解决方案会为开发人员带来多大的便利。 同样对于《上篇》创建的数据表T_PRODUCT,之前我们为了生成三个不同的存储过程,我们不得已需要创建3个不同的T4模板文件。实际上我们更需要的方式只需要创建一个T4模板,让我们的SQL Generator自动为我们生成3个包含相应存储过程的.sql附属文件,如左图所示(点击看大图)。有的时候,基于单个数据表的存储过程生成方式我们依然觉得不方便。如果我们能够在T4模板文件中指定的数据表的列表,让我们的SQL Generator为列表的每一个数据表都生成CUD三个存储过程,这样的方式更加具有吸引力。如右图所示(点击看大图),一个订单模块包含两个具有主子关系的两张表(T_ORDER和T_ORDER_DETAIL),现在我们在一个T4模板中指定这两个表明,通过SQL Generator可以帮助我们生成6个包含存储过程的.sql附属文件。甚至有的时候我们连数据表列表都无需指定,让SQL Generator为所有的表都生成相应的存储过程。我的例子中没有提供这样的功能,但是实现自来不会存在任何问题。二、创建自定义的Generator在《上篇》中我创建了一个抽象的ProcedureTemplate类,以及三个基于生成CUD存储过程的具体ProcedureTemplate:InsertProcedureTemplate、UpdateProcedureTemplate和DeleteProcedureTemplate。它们都将直接服务于我们今天将要提供的基于多文件的SQL Generator。在《上篇》中,这四个Template分别定义在4个不同的TT文件中,3个具体的ProcedureTemplate通过<#@include>指令将抽象ProcedureTemplate模板文件包含过来。由于我们将要创建的T4模板将会使用到这四个类,如果我们用四个<#@include>指令将四个TT文件包含过来,由于T4引擎将会导致对ProcedureTemplate的4次包含,最好将会导致变异问题。个人觉得这应该算是T4引擎解析包含关系的一个局限性,为了解决这个问题我们不得不抽象的ProcedureTemplate和三个具体的ProcedureTemplate都合并成一个TT文件。T4 ToolBox为类库中为了提供了一个抽象的T4Toolbox.Generator类用于实现多文件的代码生成。为此我们创建一个TT模板文件,定义了如下一个继承自该类的ProcedureGenerator。ProcedureGenerator的核心是通过属性Templates定义的类型为IEnumerable<ProcedureTemplate>的ProcedureTemplate列表,这个列表在存储过程中进行初始化。而对于ProcedureGenerator的构造函数,处理定义了一个表示数据库连接字符串的databaseName的参数外,并以数组参数的形式指定了生成的存储过程基于的数据表名的列表。<#@ import namespace="System.Collections.Generic" #><#@ include file="ProcedureTemplate.tt" #><#@ include file="T4Toolbox.tt" #><#+publicclass ProcedureGenerator : Generator{public IEnumerable<ProcedureTemplate> Templates{get; private set;}public ProcedureGenerator(string databaseName, paramsstring[] tableNames) {if(null == tableNames || tableNames.Length == 0) {thrownew ArgumentNullException("tableNames"); } this.Templates = InitlizeTemplates(databaseName,tableNames); }private IEnumerable<ProcedureTemplate> InitlizeTemplates(string databaseName, string[] tableNames) { foreach(string tableName in tableNames) {yieldreturnnew InsertProcedureTemplate(databaseName, tableName);yieldreturnnew UpdateProcedureTemplate(databaseName, tableName);yieldreturnnew DeleteProcedureTemplate(databaseName, tableName); } }protectedoverridevoid RunCore() {foreach(ProcedureTemplate tempalte inthis.Templates) { tempalte.RenderToFile(tempalte.GetProcedureName() + ".sql"); } }}#>真正的存储过程的T-SQL脚本实现在重写的RunCore中。由于具体的文本转化逻辑都定义在了ProcedureTemplate中了,所以在这里我们需要遍历的ProcedureTemplate集合中每一个Template对象,调用RenderToFile方法将相应的存储过程的脚本写入以存储过程命名同名的.sql文件中。三、ProcedureGenerator如何被使用?我们最后来看看我们创建的ProcedureGenerator最终如何被应用于具体的代码生成。其实很简单,我们只需要创建相应的模板文件,通过<#@include>将定义ProcedureGenerator类的TT文件包含近来,最后以代码语句调用块(<#StatementCode#>)的形式实力化该对象,并调用Run方法即可。在构造函数中指定数据库连接字符串的名称和数据表名的列表。下面是基于但表的T4模板。<#@ template language="C#" hostSpecific="true" debug="true" #><#@ include file="TemplatesProcedureGenerator.tt" #><#new ProcedureGenerator("TestDb","T_PRODUCT").Run();#>下面是基于多表的T4模板:<#@ template language="C#" hostSpecific="true" debug="true" #><#@ include file="TemplatesProcedureGenerator.tt" #><#new ProcedureGenerator("TestDb","T_ORDER","T_ORDER_DETAIL").Run();#>当你代码生成工作执行之后,会多出一个与TT文件同名的附属文件,你需要手工删除掉它。从数据到代码——通过代码生成机制实现强类型编程[上篇]从数据到代码——通过代码生成机制实现强类型编程[下篇]从数据到代码——基于T4的代码生成方式
2023-07-09 09:29:141

unity3D中要怎样制作表现玻璃和镜面材质?

透明玻璃材质和镜面反射材质都是需要光影技术(Shader)配合的,属于特效材质。转给你个车身、玻璃材质的shader:Shader "Reflective/Glass" { Properties { _Color ("Main Color", Color) = (1,1,1,1) _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1) _Shininess ("Shininess", Range (0.01, 1)) = 0.078125 _ReflectColor ("Reflect Strength", Color) = (1,1,1,0.5) _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {} _Parallax ("Height", Range (0.005, 0.08)) = 0.02 _Cube ("Reflection Cubemap", Cube) = "_Skybox" { TexGen CubeReflect } } SubShader { LOD 300 Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"} Blend one OneMinusDstColor ZWrite Off // First pass does reflection cubemap Pass { Name "BASE" Tags {"LightMode" = "Always"} CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma fragmentoption ARB_fog_exp2 #pragma fragmentoption ARB_precision_hint_fastest #include "UnityCG.cginc" struct v2f { V2F_POS_FOG; float2 uv : TEXCOORD0; float3 I : TEXCOORD1; }; uniform float4 _MainTex_ST; v2f vert(appdata_tan v) { v2f o; PositionFog( v.vertex, o.pos, o.fog ); o.uv = TRANSFORM_TEX(v.texcoord,_MainTex); // calculate object space reflection vector float3 viewDir = ObjSpaceViewDir( v.vertex ); float3 I = reflect( -viewDir, v.normal ); // transform to world space reflection vector o.I = mul( (float3x3)_Object2World, I ); return o; } uniform sampler2D _MainTex; uniform samplerCUBE _Cube; uniform float4 _ReflectColor; half4 frag (v2f i) : COLOR { half4 texcol = tex2D (_MainTex, i.uv); half4 reflcol = texCUBE( _Cube, i.I ); reflcol *= texcol.a; return reflcol * _ReflectColor; } ENDCG } UsePass "Parallax Specular/PPL" } FallBack "Reflective/VertexLit", 1 } Shader "Reflective/Glass" { Properties { _Color ("Main Color", Color) = (1,1,1,1) _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1) _Shininess ("Shininess", Range (0.01, 1)) = 0.078125 _ReflectColor ("Reflect Strength", Color) = (1,1,1,0.5) _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {} _Parallax ("Height", Range (0.005, 0.08)) = 0.02 _Cube ("Reflection Cubemap", Cube) = "_Skybox" { TexGen CubeReflect } } SubShader { LOD 300 Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"} Blend one OneMinusDstColor ZWrite Off // First pass does reflection cubemap Pass { Name "BASE" Tags {"LightMode" = "Always"}CGPROGRAM#pragma vertex vert#pragma fragment frag#pragma fragmentoption ARB_fog_exp2#pragma fragmentoption ARB_precision_hint_fastest#include "UnityCG.cginc"struct v2f { V2F_POS_FOG; float2 uv : TEXCOORD0; float3 I : TEXCOORD1;};uniform float4 _MainTex_ST;v2f vert(appdata_tan v){ v2f o; PositionFog( v.vertex, o.pos, o.fog ); o.uv = TRANSFORM_TEX(v.texcoord,_MainTex); // calculate object space reflection vector float3 viewDir = ObjSpaceViewDir( v.vertex ); float3 I = reflect( -viewDir, v.normal ); // transform to world space reflection vector o.I = mul( (float3x3)_Object2World, I ); return o; }uniform sampler2D _MainTex;uniform samplerCUBE _Cube;uniform float4 _ReflectColor;half4 frag (v2f i) : COLOR{ half4 texcol = tex2D (_MainTex, i.uv); half4 reflcol = texCUBE( _Cube, i.I ); reflcol *= texcol.a; return reflcol * _ReflectColor;} ENDCG } UsePass "Parallax Specular/PPL" } FallBack "Reflective/VertexLit", 1} 车身shader用Reflective/Specular中的一种然后加入以下脚本:RenderToCubemap.js:// Attach this script to an object that uses a Reflective shader. // Realtime reflective cubemaps! @script ExecuteInEditMode var cubemapSize = 128; var oneFacePerFrame = false; private var cam : Camera; private var rtex : RenderTexture; function Start () { // render all six faces at startup UpdateCubemap( 63 ); } function LateUpdate () { if (oneFacePerFrame) { var faceToRender = Time.frameCount % 6; var faceMask = 1 << faceToRender; UpdateCubemap (faceMask); } else { UpdateCubemap (63); // all six faces } } function UpdateCubemap (faceMask : int) { if (!cam) { var go = new GameObject ("CubemapCamera", Camera); go.hideFlags = HideFlags.HideAndDontSave; go.transform.position = transform.position; go.transform.rotation = Quaternion.identity; cam = go.camera; cam.farClipPlane = 100; // don"t render very far into cubemap cam.enabled = false; } if (!rtex) { rtex = new RenderTexture (cubemapSize, cubemapSize, 16); rtex.isPowerOfTwo = true; rtex.isCubemap = true; rtex.hideFlags = HideFlags.HideAndDontSave; renderer.sharedMaterial.SetTexture ("_Cube", rtex); } cam.transform.position = transform.position; cam.RenderToCubemap (rtex, faceMask); } 有兴趣的im可以百jjop度搜:编,程,回,忆,录,之unity3d,都是从零基础开始讲解的 function OnDisable () { DestroyImmediate (cam); DestroyImmediate (rtex); }
2023-07-09 09:29:221

VB TV3D 代码问题

很愿意协助你完成!但是是有偿服务
2023-07-09 09:29:304

显存共享怎么关闭????

集成显卡的话没办法关!!
2023-07-09 09:29:394

VB怎么做3D程序 本人就一VB小白

第一章 熟悉vb和tv3dVb就是Visualbasic,是一种可视化的基础编程语言。为什么用vb呢?因为它简单嘛,学得快的人几个小时就能学会。有人说我只会C++,没关系,原理都是相通的,你学vb只会更快。有人说,我不会vb怎么办?既然是从零开始的教程,我自然已经考虑到了这个问题。既然只是做游戏,又不是制作应用软件,所以我们只需要知道几个常用的命令就可以了。下面列出来就是vb在游戏制作中常用的命令,有vb基础的同学可以直接跳过这里了。 1、 变量:用来储存数据或文字常用的变量类型 Long 整数Single 浮点,也就是有小数点的数String 文字实际上制作游戏只需要用到这3种类型,甚至连long都可用single代替。 举例:dim aaa as singleAaa=100就是定义了一个名为aaa的小数变量,且aaa的值为100 2、 条件命令格式:If 条件 then结果Else没达到条件的结果End if举例:if aaa=100 then aaa= aaa+1End if当条件a=100时,运行结果aaa=aaa+1,这样aaa的值就变为101了。3、 重复命令For next格式: dim i as longfor i= 1 to 重复次数重复内容Next举例:for i=1 to 10aaa=aaa+1next也就是把aaa+1重复10次,这样也就相当于是aaa+10了 这里顺便提一个命令格式:Do重复内容Loop until 条件这个就是无限循环了,不达到条件是不会停止的,这个游戏中只有主循环才会用一次,所以大家知道一下就可以了。4、 随机函数 rnd*最大范围游戏中会用到很多的随机事件,实际上,世界上根本就没有随机,我们是不知道原理或者不想去细致的讨论全部因素才会用随机来代替。比如敌方的子弹射过来,子弹的路径之所以不同,主要是由枪的后座力、稳定性,子弹的规整度,风力、空气密度,敌人的瞄准能力、反应能力、手臂肌肉强度,以及敌人在射击的一瞬间的心理活动……总之,我们不想,也没必要去考虑这些问题,所以在游戏中干脆就把敌人的命中率设为30%就ok啦。代码如下,你可以好好研究下Dim aaa as longAaa=rnd*100If aaa<=30 then命中Else没命中End if基本就是这么几个常用的东西啦,只要熟练掌握这几个命令,简单的游戏都可以做了。不过我还是建议你能系统的自学一下vb,这样会更熟悉Vb一些。 我们把这几个命令用猜数字的游戏实际应用一下,这是代码,直接全部替换到vb的窗口代码中。里面有些命令我们是用不到的,所以不需要记住。“"”符号后面的内容是注释,不影响代码。 Option Explicit "这条语句是表示所用到的变量必须先定义,建议每次开头都加上这条语句,养成好习惯。Private Sub Form_Load()Dim a As LongDim b As Long "定义a,b两个整数型变量Randomize Time "这个语句是让每次的随机值都不一样,如果不加,你测试的时候会发现,每次随机的值都是一样的,但是生成exe以后不会,所以只用于测试。 b = Int(Rnd * 99) + 1 "rnd是随机函数,游戏中非常常用,大家记住Int(Rnd * 99)这条语句是随机取0—98共99个整数,而我们要1—99的数,所以后边要加1。 Do"循环 a = InputBox("请猜一个数,此数为1-99之间。") "这条语句是让你输入一个数然后储存到变量a中。 If a = b Then "a=b自然就是猜对了MsgBox "猜对了!"End "然后结束程序End If If a > b Then MsgBox "大了" "if语句写在一行之内可以省去结尾的end if If a < b Then MsgBox "小了" Loop End Sub 也许有人会问了,vb不是效率很低么?不是很多人都认为vb不能制作大型游戏么?我要说的是,直接用vb来制作游戏,确实效率很低,这本没有错。这样就必须引出vb亲密的伙伴tv3d了。Tv3d全名TrueVision3D,是美国的一款免费的商业3d游戏引擎。其实tv3d也支持c++,Delphi等编程语言,只不过你学习别的编程语言至少也要1个月。Tv3d是以微软发布的dx作为底层,也就是运行效率和vb没有多少关系,vb只需要调用tv3d命令和一些表层数据的计算就可以了,其余的包括渲染,碰撞都是由tv3d完成,所以制作大型游戏完全没有问题,而且tv3d的效率还是相当高的。Tv3d的官方网站是 http://www.truevision3d.com6.3版本下载(特点,直接支持cs的bsp地图,以及mdl骨骼动画,并且附带很多基础的教程和例子)http://www.truevision3d.com/downloads/download.php?go=2&file=16&mirror=236.5版本下载(特点,拥有更强大的特效,如水面反射、动态阴影、泛光、物理引擎等。支持win7)http://www.truevision3d.com/downloads/download.php?file=28 我要教大家的就是6.5版本,一个更加高效率,更强大特效的版本。之前的6.3版本使用的人已经很多了,也有很多人制作出了很棒的游戏。比如《梦幻战争》系列,这可是一个人制作的哦。但是用6.5制作的游戏确不多见,主要原因就是因为例子和教程比较少,所以希望我的教程能够填补这一空白,使大家对6.5能有个进一步的了解。我们也来看看6.5强大的特效。好,我们下载完成后安装,然后打开vb,点上面菜单中的工程,然后点引用。注意这是很重要的一步,如图,把tv3d的dll引用了,点确定,这样才能让vb能够调用tv3d。像往常一样,我们先来个helloworld吧,来做我们的第一个tv3d程序。下面是全部代码,直接复制替换即可,运行后我们会看到一个旋转的白色茶壶。看出来了么?这可是3D的哦,可不是那种不入流的2D了,我们已经步入了3D时代。 Option ExplicitDim Tv As New TVEngine "调用tv3d所必需的Dim Scene As New TVScene "调用tv3d所必需的Dim Mesh As TVMesh "定义一个网格物体 Private Sub Form_Load()Me.Show "显示当前窗口,每次都加上错不了Tv.Init3DWindowed Form1.hWnd "用窗口模式启动tv3d Set Mesh = Scene.CreateMeshBuilder "网格物体初始化,必加Mesh.CreateTeapot "建立一个茶壶Mesh.SetPosition 0, 0, 3 "设定物体的位置坐标 Do "主循环 Tv.Clear "清屏 Mesh.RotateY 0.001 "沿y轴以0.001每帧的速度转动 Mesh.Render "渲染茶壶 Tv.RenderToScreen "把所得最终结果渲染到屏幕DoEvents "这句是把线程空出来,使其他的的程序能运行,必加Loop End Sub
2023-07-09 09:29:461

VRay渲染不出现效果图是怎么回事啊,求高人指教。。急。。。谢谢啦!!

你去掉了“V-ray::Framebuffer”卷展栏下的“Rendertomemoryframebuffer”这个选项前面的勾。中文大致意思是::“帧缓存”卷展栏下的“在帧缓存中创建图像”打勾后,下面的“渲染到内存帧缓存”这个勾你又给去掉了。。。不好意思我一直用英文的,希望上面翻译的没有问题并对你有所帮助。
2023-07-09 09:29:551

怎样关闭铭瑄GT220TC显卡的共享内存?

无法关闭
2023-07-09 09:30:043

安装了TV3D6.5,给vb6.0用的

在vb中取消引用tv3d65.dll,关闭vb,然后你在dll目录下新建一个文本文档,命名为111.bat(注意把txt改成bat扩展名)里面写regsvr32.exe .TV3D65.dll保存后双击运行然后再运行vb,引用dll运行即可。如果不行的话就再取消引用-关闭vb-重新引用。你也在用tv3d啊,我也一直在研究,有机会我们一起探讨啊!!
2023-07-09 09:30:121

CS鼠标敏感度问题

很简单啊 进入游戏 然后在控制台输入SENSITIVE 写下你合适的速度 接着WRITE CONFIG 就可以了
2023-07-09 09:30:213

cs 起源脚本

☆☆ ☆☆ ☆☆ ☆☆ ★★ ★ ★★ ☆☆ 祝你快乐! ☆☆ ★★ ★★ ☆☆ ☆☆ ★★ ★★ ☆☆ ☆☆ ★★ ★★ ☆☆
2023-07-09 09:30:414

renderTo:Ext.getBody()什么意思

简单的说就是将你这个组件渲染到页面上
2023-07-09 09:31:032

3dmax2014怎么烘焙灯光贴图

贴图烘焙技术也叫rendertotextures,简单地说就是一种把max光照信息渲染成贴图的方式,而后把这个烘焙后的贴图再贴回到场景中去的技术。这样的话光照信息变成了贴图,不需要cpu再去费时的计算了,只要算普通的贴图就可以了,所以速度极快。由于在烘焙前需要对场景进行渲染,所以贴图烘焙技术对于静帧来讲意义不大,这种技术主要应用于游戏和建筑漫游动画里面,这种技术实现了我们把费时的光能传递计算应用到动画中去的实用性,而且也能省去讨厌的光能传递时动画抖动的麻烦。贴图烘焙技术是在max5时加入进来的技术,在max6中界面稍作了改动。下面就让我们来看一下max6的贴图烘焙技术吧!http://www.game798.com/html/2010-02/9423.htm
2023-07-09 09:31:151

怎么在render里面写style

这个是react最新版api,也就是0.14版本做出的改变。主要是为了使React能在更多的不同环境下更快、更容易构建。于是把react分成了react和react-dom两个部分。这样就为web版的react和移动端的React Native共享组件铺平了道路。也就是说我们可以跨使用相同的react组件。新的react包包含了React.createElement,.createClass,ponent,.PropTypes,.children以及其他元素和组件类。这些都是你需要构建组件时助手。 而react-dom包包括ReactDOM.render,.unmountComponentAtNode和.findDOMNode。在 react-dom/server ,有ReactDOMServer.renderToString和.renderToStaticMarkup服务器端渲染支持。总的来说,两者的区别就是:ReactDom是React的一部分。ReactDOM是React和DOM之间的粘合剂,一般用来定义单一的组件,或者结合ReactDOM.findDOMNode()来使用。更重要的是ReactDOM包已经允许开发者删除React包添加的非必要的代码,并将其移动到一个更合适的存储库。
2023-07-09 09:31:241

maya烘焙

74135733 jia讨论
2023-07-09 09:31:353

react 判断dom元素有没有class

  react 判断dom元素没有class.  这个是react最新版api,也就是0.14版本做出的改变。主要是为了使React能在更多的不同环境下更快、更容易构建。于是把react分成了react和react-dom两个部分。这样就为web版的react和移动端的React Native共享组件铺平了道路。也就是说我们可以跨平台使用相同的react组件。  新的react包包含了React.createElement,.createClass,.Component,.PropTypes,.children以及其他元素和组件类。这些都是你需要构建组件时助手。  而react-dom包包括ReactDOM.render,.unmountComponentAtNode和.findDOMNode。在 react-dom/server ,有ReactDOMServer.renderToString和.renderToStaticMarkup服务器端渲染支持。  总的来说,两者的区别就是:ReactDom是React的一部分。ReactDOM是React和DOM之间的粘合剂,一般用来定义单一的组件,或者结合ReactDOM.findDOMNode()来使用。更重要的是ReactDOM包已经允许开发者删除React包添加的非必要的代码,并将其移动到一个更合适的存储库。
2023-07-09 09:31:431

unity3D中怎么表现玻璃和镜面材质

透明玻璃材质和镜面反射材质都是需要光影技术(Shader)配合的,属于特效材质。转给你个车身、玻璃材质的shader:Shader "Reflective/Glass" { Properties { _Color ("Main Color", Color) = (1,1,1,1) _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1) _Shininess ("Shininess", Range (0.01, 1)) = 0.078125 _ReflectColor ("Reflect Strength", Color) = (1,1,1,0.5) _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {} _Parallax ("Height", Range (0.005, 0.08)) = 0.02 _Cube ("Reflection Cubemap", Cube) = "_Skybox" { TexGen CubeReflect } } SubShader { LOD 300 Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"} Blend one OneMinusDstColor ZWrite Off // First pass does reflection cubemap Pass { Name "BASE" Tags {"LightMode" = "Always"} CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma fragmentoption ARB_fog_exp2 #pragma fragmentoption ARB_precision_hint_fastest #include "UnityCG.cginc" struct v2f { V2F_POS_FOG; float2 uv : TEXCOORD0; float3 I : TEXCOORD1; }; uniform float4 _MainTex_ST; v2f vert(appdata_tan v) { v2f o; PositionFog( v.vertex, o.pos, o.fog ); o.uv = TRANSFORM_TEX(v.texcoord,_MainTex); // calculate object space reflection vector float3 viewDir = ObjSpaceViewDir( v.vertex ); float3 I = reflect( -viewDir, v.normal ); // transform to world space reflection vector o.I = mul( (float3x3)_Object2World, I ); return o; } uniform sampler2D _MainTex; uniform samplerCUBE _Cube; uniform float4 _ReflectColor; half4 frag (v2f i) : COLOR { half4 texcol = tex2D (_MainTex, i.uv); half4 reflcol = texCUBE( _Cube, i.I ); reflcol *= texcol.a; return reflcol * _ReflectColor; } ENDCG } UsePass "Parallax Specular/PPL" } FallBack "Reflective/VertexLit", 1 } Shader "Reflective/Glass" { Properties { _Color ("Main Color", Color) = (1,1,1,1) _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1) _Shininess ("Shininess", Range (0.01, 1)) = 0.078125 _ReflectColor ("Reflect Strength", Color) = (1,1,1,0.5) _MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {} _Parallax ("Height", Range (0.005, 0.08)) = 0.02 _Cube ("Reflection Cubemap", Cube) = "_Skybox" { TexGen CubeReflect } } SubShader { LOD 300 Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"} Blend one OneMinusDstColor ZWrite Off // First pass does reflection cubemap Pass { Name "BASE" Tags {"LightMode" = "Always"}CGPROGRAM#pragma vertex vert#pragma fragment frag#pragma fragmentoption ARB_fog_exp2#pragma fragmentoption ARB_precision_hint_fastest#include "UnityCG.cginc"struct v2f { V2F_POS_FOG; float2 uv : TEXCOORD0; float3 I : TEXCOORD1;};uniform float4 _MainTex_ST;v2f vert(appdata_tan v){ v2f o; PositionFog( v.vertex, o.pos, o.fog ); o.uv = TRANSFORM_TEX(v.texcoord,_MainTex); // calculate object space reflection vector float3 viewDir = ObjSpaceViewDir( v.vertex ); float3 I = reflect( -viewDir, v.normal ); // transform to world space reflection vector o.I = mul( (float3x3)_Object2World, I ); return o; }uniform sampler2D _MainTex;uniform samplerCUBE _Cube;uniform float4 _ReflectColor;half4 frag (v2f i) : COLOR{ half4 texcol = tex2D (_MainTex, i.uv); half4 reflcol = texCUBE( _Cube, i.I ); reflcol *= texcol.a; return reflcol * _ReflectColor;} ENDCG } UsePass "Parallax Specular/PPL" } FallBack "Reflective/VertexLit", 1} 车身shader用Reflective/Specular中的一种然后加入以下脚本:RenderToCubemap.js:// Attach this script to an object that uses a Reflective shader. // Realtime reflective cubemaps! @script ExecuteInEditMode var cubemapSize = 128; var oneFacePerFrame = false; private var cam : Camera; private var rtex : RenderTexture; function Start () { // render all six faces at startup UpdateCubemap( 63 ); } function LateUpdate () { if (oneFacePerFrame) { var faceToRender = Time.frameCount % 6; var faceMask = 1 << faceToRender; UpdateCubemap (faceMask); } else { UpdateCubemap (63); // all six faces } } function UpdateCubemap (faceMask : int) { if (!cam) { var go = new GameObject ("CubemapCamera", Camera); go.hideFlags = HideFlags.HideAndDontSave; go.transform.position = transform.position; go.transform.rotation = Quaternion.identity; cam = go.camera; cam.farClipPlane = 100; // don"t render very far into cubemap cam.enabled = false; } if (!rtex) { rtex = new RenderTexture (cubemapSize, cubemapSize, 16); rtex.isPowerOfTwo = true; rtex.isCubemap = true; rtex.hideFlags = HideFlags.HideAndDontSave; renderer.sharedMaterial.SetTexture ("_Cube", rtex); } cam.transform.position = transform.position; cam.RenderToCubemap (rtex, faceMask); } function OnDisable () { DestroyImmediate (cam); DestroyImmediate (rtex); }
2023-07-09 09:31:511

3DMAX的快捷键有哪些?快告诉我

主界面【Q】选择循环改变方式【W】移动【E】旋转【R】缩放循环改变方式【7】物体面数【8】Environment【9】Advancedlighting【0】RendertoTextures【1】【2】【3】【4】【5】分别对应5个次物体级别,例如EditMesh中的点、线、面、多边形、【F2】切换在面次物体级别选择面的显示方式(红色线框或红色表面)【F3】切换线框和实体两种显示方式【F4】在实体显示时切换线面显示的开关【F5】【F6】【F7】约束到X轴、Y轴、Z轴【F8】在xy/yz/zx锁定中循环改变【F11】脚本编辑器【F12】精确输入转变量【F9】用前一次的参数进行渲染【F10】渲染配置【Shift+Q】快速(Quick)渲染【Alt+A】对齐到物体【Ctrl+H放置高光(Highlight)】【Alt+N】法线(Normal)对齐【S】打开/关闭捕捉(Snap)【A】角度捕捉(开关)【Shift+Ctrl+P】百分比(Percent)捕捉(开关)【M】材质(Material)编辑器【DEL】删除物体【Ctrl+L】默认灯光(开关)【+】加大动态坐标【-】减小动态坐标【X】激活动态坐标(开关)【N】动画模式(开关)【.】前一时间单位【,】下一时间单位【END】跳到最后一帧【HOME】跳到第一帧【/】播放/停止动画【o】自动阶级显示开关【T】改变到上(Top)视图【B】改变到底(Bottom)视图【C】改变到相机(Camera)视图【F】改变到前(Front)视图【U】改变到等大的用户(User)视图【R】改变到右(Right)视图【P】改变到透视(Perspective)图【$】改变到光线视图【V】视图切换快捷菜单【Ctrl+P】平移视图【I】交互式平移视图【D】当前视图暂时失效【Alt+W】最大化当前视图(开关)【Ctrl+X】专家模式全屏(开关)【Ctrl+C】匹配到相机(Camera)视图【Z】将当前选择的物体最大化显示在激活的视图上【Alt+Q】将当前选择的物体隔离并最大化显示在视图上【[】视窗放大1倍【]】视窗缩小1倍【Shift+Z】【Shift+Y】撤消和恢复视图操作【:】刷新视图【Ctrl+R】弧形旋转【Ctrl+W】区域放大【Alt+B】视图背景(Background)【Alt+Ctrl+B】背景锁定(开关)【Shift+C】显示/隐藏相机(Cameras)【G】显示/隐藏网格(Grids)【Shift+H】显示/隐藏帮助(Helpers)物体【Shift+L】显示/隐藏光源(Lights)【Shift+P】显示/隐藏粒子系统(ParticleSystems)【Shift+W】显示/隐藏空间扭曲(SpaceWarps)物体【Shift+G】显示/隐藏所有视图物体(开关)【Shift+F】显示/隐藏安全框【Y】显示/隐藏工具条【Alt+X】隐藏并透明显示所选物体(开关)【PageUp】选择父物体【PageDown】选择子物体【H】根据名称选择物体【空格】选择锁定(开关)【Ctrl+I】选择集中心【Ctrl+Z】撤消场景操作
2023-07-09 09:31:592

react怎么在render里面写style

这个是react最新版api,也就是0.14版本做出的改变。主要是为了使React能在更多的不同环境下更快、更容易构建。于是把react分成了react和react-dom两个部分。这样就为web版的react和移动端的React Native共享组件铺平了道路。也就是说我们可以跨使用相同的react组件。新的react包包含了React.createElement,.createClass,ponent,.PropTypes,.children以及其他元素和组件类。这些都是你需要构建组件时助手。 而react-dom包包括ReactDOM.render,.unmountComponentAtNode和.findDOMNode。在 react-dom/server ,有ReactDOMServer.renderToString和.renderToStaticMarkup服务器端渲染支持。总的来说,两者的区别就是:ReactDom是React的一部分。ReactDOM是React和DOM之间的粘合剂,一般用来定义单一的组件,或者结合ReactDOM.findDOMNode()来使用。更重要的是ReactDOM包已经允许开发者删除React包添加的非必要的代码,并将其移动到一个更合适的存储库。
2023-07-09 09:32:321

关于3DMAX模型导出到Unity中的模型材质的失真问题

首先Unity不支持VRay的材质,所谓材质=shader(GPU程序)+数据(包括贴图、混合百分比、颜色和各种调节参数),而具体的视觉表现=材质+光照Unity只支持它自己的材质和光照,你也可以自己写shader来扩展Unity的材质,除非VRay的制作商给Unity写了shader,否则Unity是不能支持VRay的。但是VRay的渲染后效果还是可以在Unity里表现的,就是用烘培贴图的方法。首先备份一份你的.max文件。在工作.max里,把模型塌成可编辑多边形,这是为了容易导出fbx。导入Unity最好用标准交换模型fbx或collada(虽然它也支持.max但最好不要用)。然后在Max里烘培光照贴图(rendertotexture),这个网上的视频教程很多,你可以把光照(包括阴影在内)全部烘培到漫反射贴图里(另外一种方法烘培一张漫反射贴图+一张高光贴图,对应Unity里的漫反射+高光材质)。烘培完先在Max里用普通光照和标准材质测试一下(你可以把原来的VRay材质删了,新建个标准材质,把烘培后贴图载入漫反射通道),应该和用VRay的相差不大。然后导出fbx和贴图(不用把贴图嵌入fbx)。最后把fbx和包含光照的漫反射贴图全部导入Unity里,Unity里也用普通的漫反射材质,然后把漫反射贴图拖到给材质的Texture框里就可以了。关于3DMAX模型导出到Unity中的模型材质的失真问题
2023-07-09 09:32:411

vue中如何将遍历出来的数据按id归类分别渲染

const context = { url: req.url } const renderStream = renderer.renderToStream(context)
2023-07-09 09:32:491

dom上面挂太多class会影响吗性能吗

这个是react最新版api,也就是0.14版本做出的改变。主要是为了使React能在更多的不同环境下更快、更容易构建。于是把react分成了react和react-dom两个部分。这样就为web版的react和移动端的React Native共享组件铺平了道路。也就是说我们可以跨平台使用相同的react组件。 新的react包包含了React.createElement,.createClass,.Component,.PropTypes,.children以及其他元素和组件类。这些都是你需要构建组件时助手。 而react-dom包包括ReactDOM.render,.unmountComponentAtNode和.findDOMNode。在 react-dom/server ,有ReactDOMServer.renderToString和.renderToStaticMarkup服务器端渲染支持。总的来说,两者的区别就是:ReactDom是React的一部分。ReactDOM是React和DOM之间的粘合剂,一般用来定义单一的组件,或者结合ReactDOM.findDOMNode()来使用。更重要的是ReactDOM包已经允许开发者删除React包添加的非必要的代码,并将其移动到一个更合适的存储库。
2023-07-09 09:32:581

reactdom.render 怎么添加class

这个是react最新版api,也就是0.14版本做出的改变。主要是为了使React能在更多的不同环境下更快、更容易构建。于是把react分成了react和react-dom两个部分。这样就为web版的react和移动端的React Native共享组件铺平了道路。也就是说我们可以跨平台使用相同的react组件。 新的react包包含了React.createElement,.createClass,.Component,.PropTypes,.children以及其他元素和组件类。这些都是你需要构建组件时助手。 而react-dom包包括ReactDOM.render,.unmountComponentAtNode和.findDOMNode。在 react-dom/server ,有ReactDOMServer.renderToString和.renderToStaticMarkup服务器端渲染支持。总的来说,两者的区别就是:ReactDom是React的一部分。ReactDOM是React和DOM之间的粘合剂,一般用来定义单一的组件,或者结合ReactDOM.findDOMNode()来使用。更重要的是ReactDOM包已经允许开发者删除React包添加的非必要的代码,并将其移动到一个更合适的存储库。
2023-07-09 09:33:061

高手帮忙;关于CS的config优化 怎么做?

现在的主流配置机器打1.5基本都不需要config上的优化了。显卡足以支持。
2023-07-09 09:33:155

如何优雅的设计 React 组件

这个是react最新版api,也就是0.14版本做出的改变。主要是为了使React能在更多的不同环境下更快、更容易构建。于是把react分成了react和react-dom两个部分。这样就为web版的react和移动端的React Native共享组件铺平了道路。也就是说我们可以跨使用相同的react组件。新的react包包含了React.createElement,.createClass,ponent,.PropTypes,.children以及其他元素和组件类。这些都是你需要构建组件时助手。而react-dom包包括ReactDOM.render,.unmountComponentAtNode和.findDOMNode。在 react-dom/server ,有ReactDOMServer.renderToString和.renderToStaticMarkup服务器端渲染支持。总的来说,两者的区别就是:ReactDom是React的一部分。ReactDOM是React和DOM之间的粘合剂,一般用来定义单一的组件,或者结合ReactDOM.findDOMNode()来使用。更重要的是ReactDOM包已经允许开发者删除React包添加的非必要的代码,并将其移动到一个更合适的存储库。
2023-07-09 09:33:591

为什么我们需要使用React提供的Children API而不是JavaScript的map?

这个是react最新版api,也就是0.14版本做出的改变。主要是为了使React能在更多的不同环境下更快、更容易构建。于是把react分成了react和react-dom两个部分。这样就为web版的react和移动端的React Native共享组件铺平了道路。也就是说我们可以跨平台使用相同的react组件。 新的react包包含了React.createElement,.createClass,.Component,.PropTypes,.children以及其他元素和组件类。这些都是你需要构建组件时助手。 而react-dom包包括ReactDOM.render,.unmountComponentAtNode和.findDOMNode。在 react-dom/server ,有ReactDOMServer.renderToString和.renderToStaticMarkup服务器端渲染支持。总的来说,两者的区别就是:ReactDom是React的一部分。ReactDOM是React和DOM之间的粘合剂,一般用来定义单一的组件,或者结合ReactDOM.findDOMNode()来使用。更重要的是ReactDOM包已经允许开发者删除React包添加的非必要的代码,并将其移动到一个更合适的存储库。
2023-07-09 09:34:061

怎样opengl es渲染到纹理

你去查FBO相关文件.大致做法是:glGenFramebuffers(1, &m_uFBO);glBindFramebuffer(GL_FRAMEBUFFER, m_uFBO);生成一个framebuffer,然后glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_uiTextureToRenderTo, 0);// Attach the depth buffer we created earlier to our FBO.glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_uDepthBuffer);绑定上要渲染到的纹理ID,然后渲染时:glBindFramebuffer(GL_FRAMEBUFFER, m_uFBO);先绑定FrameBuffer,然后开始绘制你的场景..glDrawElement........然后,你这次绘制的内容,都会弄到那张纹理上,之后再:glBindFramebuffer(GL_FRAMEBUFFER, 0);就能正常绘制到屏幕上了
2023-07-09 09:34:131

Nvidia GeForce GT 240M的问题

兄的,你机子什么配置?多少钱?别买赔了。。。240m应该是去年这个时候的主流显卡。。。这共享技术对游戏作用不大。说白了,就是个512显卡,而且性能不怎么样。但是市面上的游戏都能玩,不过不能开特效。现在市面上主流笔记本显卡是500m系列的
2023-07-09 09:34:442

c#怎么创建excel文件并写入数据

#region 从DataTable读取内容来创建Workbook对象: public static MemoryStream RenderToExcel(DataTable table) { MemoryStream ms = new MemoryStream(); using (table) { IWorkbook workbook = new HSSFWorkbook(); ISheet sheet = workbook
2023-07-09 09:35:041

华硕k42jc 如何在BIOS调显存

多数笔记本采用Intel的集成显卡,而其中大部分是集成GMA950/X3100显卡。下面我们先来谈谈这两款产品的显存分配问题。GMA950/X3100虽然规格不一样,但它们都采用英特尔的动态内存管理技术(Dynamic Video Memory Technology,简称DVMT)来管理显存,只不过GMA 950支持DVMT 3.0,而GMA X3100支持DVMT 4.0,两者可以调用的内存容量有所区别: GMA 950最高可调用224MB内存来充当显存,而GMA X3100最大可以调用384MB的系统内存。  要为显卡分配显存需要进入BIOS的“OnBoard VGA share momory”选项中设置(不同品牌的本本,选项名称可能有所出入,有的本本没有这个选项),自己可以根据需要为显卡划分共享内存。在这里,共有三个DVMT模式:“Fixed”模式、“DVMT”模式、“Fixed+DVMT”模式。其中“Fixed”模式,一部分固定容量的系统内存将被分配到图形核心;而 “DVMT”模式则由显示核心自动根据实际需要使用系统内存;“Fixed+DVMT”模式,则是固定为显卡划分一定的内存与动态共享内存相结合的模式,比如在这种模式下图形处理器可独占64MB的固定内存 (包括第一部分中专为GPU配备的内存空间),并动态共享64MB内存。  如果你本本的内存较大的话,比如1GB以上,可以设置为DVMT,让系统自动分配显存容量的大小,从而在针对不同的应用中都可以有不错的表现。内存容量不定,能为显卡固定分配的共享内存是不一样的  集成显卡是否能共享到最大显存容量要由你本本的物理内存及操作系统来决定。在Windows XP下,当系统内存小于512MB时,GMA950、GMA X3100都只能调用128MB内存来当显存,但当内存在512MB以上时,GMA950则可以实现最大显存容量;而GMA X3100在系统内存在512MB~1GB之间时最大可以调用256MB内存,在内存为1GB以上时最大可以调用384MB内存。Vista系统中加入一项动态增加显存的技术,在Vista的DVMT模式下,动态共享内存是随着内存容量的增加而自动增加的,并不由我们所控制,为了避免显卡过多调用内存导致系统性能下降,我们建议大家采用“Fixed+DVMT”模式,为显卡划分128MB的固定内存,另外动态共享128MB(这需要主板BIOS的支持,目前不少本本BIOS都默认为DVMT模式)。  如何调显存设置-AMD-ATI移动显卡篇  AMD-ATI在它的移动整合芯片组中也拥有相当灵活的共享显存设置,它采用HyperMemory技术,其原理与英特尔的DVMT差不多,只不过HyperMemory支持板载显存,可以直接在本本主板上集成一定容量的物理显存(可支持16MB、32MB、64MB、128MB、256MB)提供给整合的图形核心,因此在性能及灵活性上更胜一筹。例如Radeon Xpress 1150、Radeon Xpress 1250都支持HyperMemory动态显存技术,其显存配置方案也有三种模式:  1.“SIDEPORT”模式,在这种模式下,整合图形核心会使用板载物理显存,这要看你的本本是否配有物理  显存。  2.“UMA”模式,在此模式下,整合图形核心完全通过动态分配的方式共享系统内存。其中分配的内存大  小可以在BIOS中进行设置,最高可调用显存由物理内存及操作系统决定。  3.“UMA+SIDEPORT”模式,在此模式下整合图形核心将会一起使用板载显存+共用的系统内存作为显存,这时显卡就会有足够容量的内存可以使用,并有较快的速度。  Radeon Xpress 1150、Radeon Xpress 1250可调用的内存也随着系统及内存的不同而有着不同的配置方案,比如在Vista下,如果你的本本配备2GB内存,最高可以调用895MB的内存,比高端的独立显卡显存还要多。  如果你要对集成显卡显存进行设置的话,可以在进入BIOS后找到“Internal Graphics Configuration”,进入集成显卡的设置界面,用户在这里可以对显存的分配进行设定。  如果你本本的主板板载有显存,那么建议大家在开启板载显存后,选择“UMA+SIDEPORT”模式,再根据需要单独从内存中划分128MB或256MB来与板载显存搭配(比如板载的显存在128MB以上,则划分的内存就设为128MB),这样可以让显示系统的性能稳定维持在一个比较好的状态下。  由于低端整合图形核心性能较低,划分256MB以上内存作为显存是完全没有必要的,调用的内存过大,反而会导致系统性能的下降。而由于共享系统内存,所以系统内存的频率决定了显存的频率高低,当系统内存频率不同时,显存的频率取决于其中配备的较低频率的内存。  除了移动集成显卡外,AMD-ATI的低端独立移动显卡也支持HyperMemory技术。不过,与移动集成显卡不同,独立移动显卡所调用的动态内存是无法手动分配的,只是随着内存容量的增加而增加。而且对于升级内存的用户来说,如果你升级的内存兼容性不佳,独立显卡所支持的HyperMemory功能往往会增加内存的奇偶校验出错可能,提高系统死机的概率。因此,在这种情况下,最好的办法就是关闭本本独立显卡的HyperMemory功能。不过,目前AMD-ATI没有提供在BIOS或驱动中关闭/开启HyperMemory功能的选项,这时我们就要借助第三方软件——ATI Tray Tools来实现。   安装运行ATI Tray Tools后,打开“Tools & Options(工具及选项)”,点击“General→Advanced(通常→高级)”,取消选中“Enable ATT Shared Memory(开启ATT共享内存)”,重新启动电脑,这时显卡就无法再从系统调用内存了!  NVIDIA移动显卡篇  除了Intel、AMD外,NVIDIA也为它的移动显卡产品引入了类似的共享显存技术——TurboCache。不过,目前采用NVIDIA移动整合芯片组的本本较少,大家可以接触到的主要是NVIDIA的独立移动显卡产品,比如GeForce Go 7400/7600 、GeForce 8400M GS/8600M GS等产品。和AMD-ATI的移动独立显卡一样,支持TurboCache技术的移动独立显卡产品也是自动从系统调用内存,因此也着实让不少朋友感到郁闷,特别是板载256MB显存的GeForce 8600M GS,很少能用完256MB的显存。因此,在这种情况下关闭TurboCache功能,也是不少本本用户最佳的选择。  和AMD-ATI的显卡一样,关闭NVIDIA显卡的TurboCache功能也需要借助第三方软件——RivaTuner。在进行操作前,最好将你显卡的驱动升级到最新版本及下载最新版本的RivaTuner。安装运行RivaTuner后,打开“Power Users”标签,点击下侧的“Open Database”(打开数据)按钮,进入“Databases/NVIDIA/win2K”文件夹,根据你安装的驱动版本来选择相应的“Forceware *****.rtd”文件(如果你安装ForceWare 174.31版驱动,相应的文件就是Forceware 174.31.rtd),展开“NVIDIA……System”项(NVIDIA……System中间的是驱动的版本号,我这里是“NVIDIAForceware 174.31 2K ystem”),从下面找到“RMDisableRenderToSysMem”,将值设置为“1”,重启电脑就可以了。
2023-07-09 09:35:161

C#如何将数据流导入excel2007,xlsx格式

建议使用NPOI
2023-07-09 09:35:302

耕升 Nvidia GeForce GT 430

RivaTuner好像可以——————(转载)首先要确认你的驱动程序是最新版本(或93.71以后的版本),然后打开RivaTuner,打开“PowerUsers”标签,点击下侧的“OpenMatchedDatabase”(打开匹配数据)按钮,展开“NVIDIA……System”项,从下面找到“RMDisableRenderToSysMem”,将值设置为“1”,重启电脑就可以了。——其实假如你电脑的内存有2G以上的话TC不会太影响性能显卡只是在显存不够用的时候才会去共享内存现在的游戏显存要求一般不会超过1G(除非你玩的大型单机而且还特效猛开)
2023-07-09 09:35:531

这张图片是哪部动漫或漫画里的人物?有高清大图的童鞋请发一个,谢谢!!

少女骑士物语
2023-07-09 09:36:102

如何评价 React 实现的前端 UI 库 material-ui

Material UI 源码很多地方比较偏激,但是亮点和优化非常明显偏激:比如 通篇样式使用style和context(个人感觉用styled-components似乎是更好的选择)亮点优化:比如 很小的细节优化,Overlay里利用了css的willChange,RenderToLayer unstable_renderSubtreeIntoContainer 挂在到domtree 放到body后面解决z-index 等等问题,很用心很细心。反正是一款很值得尊敬和学习的优秀UI库
2023-07-09 09:36:361

rather是加好的形容词还是坏的

都可以,不一定的,结合语境来看。rather的用法可从以下几点掌握:  一、rather作副词,意为"宁愿;宁可"。作此意解的rather常和would / had连用,构成固定短语。would / had rather…than译为"宁愿……而不愿" ,应该特别注意此短语的否定构成及其后接的动词形式。如:  He would rather have the small one than the large one. 他宁愿要一个小的,而不要大的。  I"d rather take the slowest train than go there by air. 我宁愿坐最慢的火车,也不乘飞机去那里。  I would rather not tell you the secret right now. 我现在不愿把那个秘密告诉你。  would / had rather 后接从句时,从句中的谓语动词用虚拟语气。如:  I would / had rather you posted the letter right away, 我倒希望你把这封信立即发出。  I would / had rather that she had stayed at home. 她那时要是留在家里就好了。  二、rather作副词用时,意为"更确切地"。 此用法的rather常用在or rather这一短语中,表示想要纠正已经说过的话,或欲使已说过的话更确切。如:  He worked till late last night, or rather, early in the morning. 他一直工作到深夜,或者更确切地说,到今天凌晨。  The building is like a palace, or rather a temple. 这幢建筑物像一座宫殿,或者更确切地说像一座寺庙。  三、rather作副词用时, 还可作"相当;颇;有点儿"解。如:  You"ve done rather well.你做得相当好。  The way he is living is rather strange to me. 他的生活方式我觉得很怪。  rather, fairly, quite, pretty的区别:  1. 从程度上说, fairly是最轻的一个;quite比fairly 语气稍强;rather 在程度上比quite更重一些;pretty 和rather 差不多,但大多数情况下用于非正式文体。如:  They were getting along fairly well with each other. 他们相处还不错。  He was quite polite, but he wasn"t ready to help me. 他相当有礼貌,但他并不愿意帮助我。  There"s something rather strange about the way he talks to you. 他跟你说话的样子真有点怪。  Twenty-five is pretty old to take up ballet dancing.二十五岁才学跳芭蕾,年纪就太大了。  2. rather 和quite可放在不定冠词前,也可放在不定冠词之后,还可以和动词连用,而fairly 和pretty没有这些用法。如:  That is quite / rather a surprising result. =That is a quite / rather surprising result. 那是一个相当惊人的结果。   I rather / quite like to go for a walk after supper. 我颇喜欢在晚饭后出去散步。  3. 只有rather可以修饰比较级,还可和too连用。如:  This computer is rather more expensive than that one.这部电脑比那部昂贵一些。  This book is rather too difficult for the beginners.这部书对初学者来说太难了。  四、rather than 的用法。  rather 不仅是一个表示程度的副词,还能用来表示选择,意为"而非;(与其……)倒不如"。rather than 经常用在"平行结构"里,即连接两个对等成分。  I"d prefer to go in August rather than July. 我愿八月去,不愿七月去。  I"d call her hair chestnut rather than brown. 我宁愿说她的头发是栗色,而不是棕色。  We ought to invest in new machines rather than buildings. 我们应该在新的机器上而不是在房屋上投资。  I decided to write rather than telephone. 我决定写信而不打电话。  Rather than get money in such a dishonest way, he would beg in the streets. 他宁愿在街上乞讨,也不愿以这种不正当的手段挣钱。  I always prefer starting early, rather than leaving everything to the last minute. 我总是愿意早开始而不愿意把所有事情都留到最后。
2023-07-09 09:34:391