aegisub可以ps平面图做出透视感觉这种透视的效果吗

AI怎么做如图这种透视效果的字我用变形.封套什么的都不行.麻烦把步骤说一下.谢谢啦~~~
没有步骤.可能你选的工具或方法不合适.上面(集点赢大奖),
效果——扭曲和变换——自由扭曲
可以做出下面那三句,
直接用工具栏中的倾斜工具即可.
为您推荐:
其他类似问题
扫描下载二维码1334人阅读
游戏优化(1)
大家好,这篇帖子我在其他论坛发过,把这篇帖子发布到这里,也是希望和更多
有共同爱好的朋友一块交流。我是5月份来到广海的,终于做出了一些自己的东
西。最近一直在弄D3D游戏的透视,被他弄得焦头烂额,很多时间都花在了解决
代码错误的问题上。不过功夫不负有心人我取得了一些成果,在编写代码的过程
当中参阅了大量的DirectX编程方面的资料。同时也在国外N多论坛做了一个名
副其实的伸手党,了解和掌握了D3D程序实现透视的一些基础知识。在这里我把
我自己在研究过程中的心得体会和一些经验大体整理了一下,只是希望能够找到
对D3D感兴趣的朋友能够共同研究,话不多说了,下面开始咱们的教程。(说明
一下,下面的内容都是我一个字一个字敲出来的,没有复制粘贴)。&&
在看这篇教程之前,你最好有一些基本的C++的知识,此外还需要一些基本的D
irectX编程的基础。我的教程呢分为两个部分,第一部分呢主要讲一些透视原
理。第二部分主要讲透视dll的制作过程。&&
&&& 首先来看第一部分,主要是讲解一些透视的原理,
在讲透视之前首先来说一下什么是Z轴缓冲&
&&&& Z轴缓冲就是DirectX中的成像元素之一 ,他是一个深度缓冲,用来决定
渲染对象的遮蔽关系 ,在计算机图形学中, 有时候通过硬件完成,有时候通过
软件完成。 在观察被渲染对象的时候就出现这样一个问题, 如果一个对象在另
一个对象的后面,并且距离观察者的距离较远那么我们是看不到他的。 Z轴缓
冲也就是深度缓冲。&
上面说的可能有点抽象我就直白的说一下吧: Z轴缓冲就是要告诉摄像机,如
果他在一个对象的后面,就不用显示它了 ,如果他在这个对象前面,就得显示
现在根据上面所说的,你可能要说把Z轴缓冲禁用来实现透视就是了。但事实情
况并不是这样。你会注意到,你会看到所有的东西甚至还有场景之外的东西也就
是说你必须找到某一个对象,再选这个对象的时候来禁用Z轴缓冲。这就是:
Strides(数据流中每个顶点所占内存的大小), NumVertices(渲染的顶点索
引的跨度),和 PrimitiveCounts(渲染的图元个数)。&&
上面这三个就决定了透视到墙(物体)后你想看到的东西,在大部分情况下就是
人物模型(也就是想弄人物透视)&
如果直接禁用Z轴缓冲的话,那就是全图透视了,玩过AVA
的都知道全图透视在冰冻工厂是可以使用的,不过在其他地图,或者可以说在其
他游戏里,全图透视效果是很差的,所以要实现人物透视就必须找到游戏中的人
物模型表示。例如,CF的人物模型表示为44和40,AVA(战地之王的人物模型
标识为32),所以我们说的人物透视是必须找到人物模
型的表示然后再禁用Z轴缓冲&&
下面我们来禁用Z轴缓冲了。首先把人物模型标识来定义一下&&
#define PlayerBody& ( Stride == 44 || Stride == 40 )// 注意这个 & ||
& 是“或”的意思。意思就是说&PlayerBody& 等价于 44或者是40。&&
//这里的Stride即为游戏中的人物模型标识,&&
好了,上面的代码是对人物模型的标识进行了定义,下面就要开始D3D9中的Dr
awIndexedPrimitive函数来修改游戏中人物模型的渲染状态&&
下面的的代码就是在hook the DrawIndexedPrimitive 这函数之中&
LPDIRECT3DVERTEXBUFFER8 Stream_D&&
& UINT Stride = 0;&&
& if (m_pD3DDev-&GetStreamSource(0, &Stream_Data, &Stride) == D3D_OK)
& Stream_Data-&Release();&&
if(Chams)//这里的chams是透视开关&&&&& if(Player)&&
&&&&&&&&& {&&
//一旦游戏中Stride的值等于所设定的值,就开始执行以下代码:&&& DrawIndexedPrim
itive(Device, Type, MinIndex,& NumVertices, StartIndex, PrimitiveCoun
//在墙后面就是绿色&&& Device-&SetRenderState( D3DRS_ZENABLE,false );&&
&&& Device-&SetTexture( 0, texGreen );&&
//禁用Z轴缓冲&&& DrawIndexedPrimitive(Device, Type, MinIndex, NumVerti
ces, StartIndex,& PrimitiveCount);&&
//游戏模型在墙前面的话(就是可以看见)&&& Device-&SetRenderState( D3DRS_ZEN
ABLE, true );&&
//打开Z轴缓冲,并填充为蓝色&&& Device-&SetTexture( 0, texBlue);&&
&&& DrawIndexedPrimitive(Device, Type,& MinIndex,& NumVertices, Start
Index, PrimitiveCount);&&
&&&&&&&&& }&&
我们继续:&
如果你想知道透视上色的代码是如何运行的,它是通过消息队列进行操作的。.&&
下面就是他的工作流程:&
如果人物要被显示:&
给人物上色为红色.&
启用Z轴缓冲, 在物体前面的时候为红色。&
禁用Z轴缓冲&
在物体后面的时候就为黄色&
Disable stencil shaders.(这个我暂时还没搞懂)
然后这样不断重复。说到重复,有人就会问了,什么是重复。我简单地说一下吧。
游戏在渲染人物模型的时候,是一帧一帧的进行渲染的,放在显存中的中的每幅
图像从后备缓冲区到前台缓冲区并呈现到屏幕上。打个形象的比喻,好比放幻灯
片。速度慢了,可以看成是一张一张的,当速度很快时,就可以看成连续的画面。
所以上面的渲染过程至少每秒要执行24次,要不然画面就会很卡。&
这是我在AVA中实现的透视效果图,当然了,最后着一张是《全球使命》的截图。
这里我是以AVA和全球使命为例子来讲解的,其他的FPS游戏都大同小异,游戏
的透视半透和全透只是一个函数的差别,就是遮盖剔除函数。加上遮盖剔除函数,
半透就可以变成全透&&
&&& 这就是透视的整个流程,其实上面只是写了最核心的人物透视,如果你还想
添加其他功能,比如说准星,透视上色、字幕显示,功能菜单等等都可往里面添
加函数,我会在教程的最后把D3D的透视模板发出来,大家想添加什么功能的话
只要往里面加入代码就可以了&&
上面只是实现人物透视的最核心的部分,也是实现人物透视的实质内容。整个实
现透视的流程为:&&
找到所需函数的地址 —& 修改函数地址(拦截API) --&写入你想修改的代码(比
如画准星,禁用Z轴缓冲,上色等操作)—& 返回正常值&&
找到你想要HOOK的函数地址,由于DirectX是COM组件,普通的函数HOOK是找
不到这些函数的,我们必须用能HOOK& COM对象的函数,这就是Detour,利用D
etour我们就可以HOOK COM对象里的函数了。&&
pEndScene =& (EndScene_)DetourFunction((PBYTE)VTable[ES],(PBYTE)pEndS
上面就是一个detour的使用例子,其实很多功能都是在这个函数里面实现的,
例如画准星,菜单显示等等。那么第一个参数是怎么来的呢,这里我们就需要找
到EndScene这个函数的地址,怎么找呢,有两种方法:&&
1、&& 修改PE导入地址表的函数地址,使游戏在调用函数的时候转到我们的函
2、& 直接找到EndScene函数的基址和偏移,然后把这个地址的函数改成我们自
己的函数&&
举个例子我们可以在EndScene里面去设置开关,画准星以及渲染方框&&
if(bTip)&&& //bTip初始化为true ,注入成功进入游戏后直接显示&
DrawFont( 600,50, D3DCOLOR_ARGB(255,0,255,255), &小键盘-& 0 文字提示,
&1 准星开关,人物透视&);&&&&&&&
&&&&&&&& DrawFont( 600,70, D3DCOLOR_ARGB(255,0,255,255), & Coded By
顶级小白QQ:&);&
&&&& if(crosshair)//画准星&
&&&&&&&& D3DVIEWPORT9 viewP;&&&&&&&&&&&&&&&&&& //先定义一个接口指针&
&&&&&&& pDevice-&GetViewport( &viewP );&&&&&& //获得屏幕宽度和高度&
&&&&&&&& DWORD ScreenCenterX = viewP.Width / 2;//屏幕中心X位置&
&&&&&&&& DWORD ScreenCenterY = viewP.Height / 2; //屏幕中心Y位置&
&&&&&&&& D3DRECT rec16 = {ScreenCenterX-15, ScreenCenterY, ScreenCenterX+ 15, Scree
nCenterY+1};//这个D3DRECT是一个结构体。就是指定了画的这条直线的范围,水平的那条线&
&&&&&&&& D3DRECT rec17 = {ScreenCenterX, ScreenCenterY-15, ScreenCenterX+ 1,ScreenC
enterY+15};& //这个是垂直的那条线的上下两个点&
&&&&&&&& pDevice-&Clear( 1, &rec16, D3DCLEAR_TARGET, D3DCOLOR_XRGB( 0, 0, 255 ),
0,& 0 );//clear方法可以指定使用某种颜色把后备缓冲区粉刷一遍(也可以是深度缓冲区,模
板缓冲区)&
&&&&&&&& pDevice-&Clear( 1, &rec17,D3DCLEAR_TARGET, D3DCOLOR_XRGB( 0, 0, 255 ),
0,& 0 );//要清空的矩形区域的数目(第一个参数)//要清空的举行的数组,和第一个参数决定了
要清除的矩形区域的组合(第二个参数)&
&& //下面开始渲染方框&
&&& DrawBox (100,100,100,100,D3DCOLOR_ARGB(255, 255, 0, 255), D3DCOLOR_XRGB( 255, 0,
&0 ),pDevice); //红色准星&
&&&& returnpEndScene(pDevice);//这里就是返回正常值&&
voidFillRGB( intx, inty, intw, inth, D3DCOLOR color, IDirect3DDevice9* pDevice )&
&&& if( w & 0 )w = 1;&
&&& if( h & 0 )h = 1;&
&&& if( x & 0 )x = 1;&
&&& if( y & 0 )y = 1;&
&&& D3DRECT rec = { x, y, x + w, y + h };&
&&& pDevice-&Clear( 1, &rec, D3DCLEAR_TARGET, color, 0, 0 );&
voidDrawBorder( intx, inty, intw, inth, intpx, D3DCOLOR BorderColor, IDirect3DDevic
e9* pDevice )&
&&& FillRGB( x, (y + h - px), w, px,&&& D3DCOLOR_XRGB( 255, 0, 0 ), pDevice ); //填
&&& FillRGB( x, y, px, h,&&&&&&&&&&&&&&& D3DCOLOR_XRGB( 255, 0, 0 ), pDevice );&
&&& FillRGB( x, y, w, px,&&&&&&&&&&&&&&& D3DCOLOR_XRGB( 255, 0, 0 ), pDevice );&
&&& FillRGB( (x + w - px), y, px, h,&&& D3DCOLOR_XRGB( 255, 0, 0 ), pDevice ); //红
voidDrawBox( intx, inty, intw, inth, D3DCOLOR BoxColor, D3DCOLOR BorderColor, IDire
ct3DDevice9* pDevice ) //渲染一个方框&
&&& DrawBorder( x, y, w, h, 1,&&& BorderColor, pDevice );// 画方框边界&
通过上面所说的就可以找到函数地址并进行HOOK..(这其中还有很多小细节需
要注意,但由于篇幅的原因,我只大概的介绍这些)&&
好了,第一部分暂且讲到这里,如果你有不明白的地方建议你多去看看DirectX
编程方面的资料。&&
下面开始第二部分来说一说透视dll的制作:&&
Dll的制作我是翻译的国外论坛的几篇帖子&&
先说明一下需要的工具:Microsoft Visual C++ 6.0&&
VS 2008也可以(本人用的就是VS2008)然后还需要DX的SDKDirectX 9.0
SDK Update - (Summer 2009)&&
D3D Starter Kit 3B&&
这份代码我会打包放到附件里在你下载并安装了C++6.0以及D3D SDK之后你
就可以使用C++ 用SDK lib 文件了好,打开C++ 6&&
打开“工具”
&选项&目录(Directories)在路径那里选择SDK的文件夹
添加Microsoft Directx 9.0 SDK include 文件夹如下图所示:(我机子上VC6.
0和9.0都安装了,第一个图这是我自己截的图)
(这是原文中的英文版的)做完这些之后, 开始添加“lib”文件了
在“目录”这里
然后选择Microsoft Directx 9.0 SDK lib文件夹(我机子上VC6.0和9.0都安
装了,原文截图已经丢失,这是我自己截的图)然后选择Microsoft Directx 9.
0 SDK lib文件夹(我机子上VC6.0和9.0都安装了,原文截图已经丢失,这是
我自己截的图
点击OK,这样工具就设置OK了现在我们可以启动starter kit这样我们就可以
用它了打开Starter kit 文件夹, 来到D3D9 文件夹如下图所示(我机子上VC6.
0和9.0都安装了,原文截图已经丢失,这是我自己截的图)
现在打开old_workspace 文件夹, 复制两个文件到D3D9 文件夹中(不知道是
哪两个文件。。。囧)然后打开VC6.0,点击“文件”----“打开工作空间”----
选择TatniumD3D.dsw&&
做完这些之后你就可以去编译dll了。&&
&&& 希望各位朋友能够多多给力,不要让这篇帖子沉下去。大家可能注意到了,
这两张截图我都渲染了一个方框,但苦于找不到人物的坐标,所以在这里我也想
找几位对D3D透视感兴趣的朋友(熟悉C++和DirectX编程)一块研究方框透视
还有CF等其他射击游戏的透视,毕竟一个人的力量有限。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:9093次
排名:千里之外
转载:19篇Aegisub教程及特效代码应用
时间: 16:13:41来源:作者:xy(0)
第 3 页 一些常见问题三. 一些常见问题Q:视频中有不想看见的字幕想遮挡A:打开样式管理器 开启界面 勾选不透明背景所有颜色改成黑色&如图所示会变成一个黑色区域 担心这个太小? 不用担心,它会随着你输入的字数变大的 输入神马都可以哦Q:我找到一些新字体,怎么让aegisub使用?A:此方法只适合xp用户&开始菜单 控制面板 字体 文件 安装新字体 找到你的字体在的目录 全选&然后就ok了&Q:如果字幕出来和原视频有时间误差,怎么办?这是aegisub的BUG 可以通过 计时 平移时间来修正这样 根据情况来修正就ok第一部分第三单元结束当以上设置都搞定了之后,保存起来属于你的字幕就完成了~~第一部分教程到此结束~~小小的补充:注释打钩,字幕就不会显示在荧幕上字幕的层 层号越高 字幕显示越表面层高的字幕会遮挡曾低的字幕说话人可以用来标记谁是主唱&多人合唱时候区分歌手第二部分开始:个人经验――字幕特效基础运用教程教程不长,几乎是把我知道的都写出来了,有遗漏的欢迎补充~光是静态字幕无法满足PV的效果? 看了这个之后相信会有所帮助1.用字幕最重要的一点,不要被现在的特效限制住你的想象力,多想想,会得到更棒的效果下面说一些要点,我用的是aegisub2.18的版本,现在已经有更好的版本,但我没有去用,部分内容可能不同原来2.18版本要打开视频,视频名字和路径是不能有中文的,必须都改成英文,但后面的版本改变了这一点,中文名的视频文件也可以直接打开ass字幕代码一般都会用到以下符号来激活使用:大括号{ }左斜杆 \&英显逗号 ,小扩号( ) 没有输入符号使用代码等于是在打字母了有的需要全部甚至更多,有的只需几个,因代码而异&其他像VFmod则需要/t这样的来激活了 在此不做介绍,因为我也不怎么会,所以只说下自己知道的了下面说几个最经常用的代码介绍一般代码的格式{\代码名(持续时间开始,持续时间结束)}或{\代码名(坐标1,坐标2,坐标3,坐标4)}&{\代码名(坐标1,坐标)}&{\代码名设置值}等等如果与多个代码我们可以依次把他们都放在输入框里面 如果觉得麻烦的话我们可以这样写{\代码名(持续时间开始,持续时间结束)\代码名2(相关内容)\代码名3(相关内容)}大括号为开始,彼此之间用斜杠和小括号链接注意,末尾不一定是小括号结尾,因代码而异 最后用大括号完成输入插入一些来自@断东河周&的补充:aeg代码的基本规则:1 所有代码前面必须加\,且必须在{}内才能生效(注意符号,所有在{}内的包括这个大括号,都必须使用英文符号),在{}外的会被认为是字幕的一部分,但有两个代码例外 分别是\h 这个代码的效果和空格键一样 另一个是\N 这个代码的效果是断行。2 用过aeg的都知道在文字框里输入文字就可以形成字幕 特效代码也在这个地方起效,而特效代码的基本规则是对后面的所有文字起效,同样的特性在后面的会覆盖掉前面的特性。举个简单的例子,{\fad(500,500)\fs18}松开{\fs30}的指尖 这个地方有两个fs(字体大小)特性 \fs18在最前面 它表示整行字幕的字体大小都是18 但在“开”字后面还有一个\fs30 所以这行字幕的最终效果会是“松开”二字会是18号的大小 而“的指尖”则会是30的大小。那么 如果我们只是想让“的”字比周围的字大一点改怎么做呢?我就只写最终代码了 相信大家结合这个规则的后半段都能理解。{\fad(500,500)\fs18}松开{\fs30}的{\fs18}指尖补充完毕。代码部分:最普遍的代码\pos它代表是你字幕输入的位置,也是坐标 注意的是在你按了提交之外他并不会马上出现,而是在你改变了它的位置或者是把它拖到到其他的地方,它才会显示出来,里面的数值不用你去管,它自己就会修正一些代码会在你编辑字幕的时候自动出现,比如\pos&在你设置字体,颜色,字号的时候都会出现相应的代码,帮你完成想要的设置,想要额外效果的话就要手动去添加其他的代码了,记住一点,一个代码不只有一个效果,要靠自己的想象力去尝试更多的效果&因为其他的这些会在你设置时自动出现所以便不再列举下面就用我现在还记得的几个代码来分别举例:1.淡入淡出 \fad(100,100)&效果顾名思意,渐渐出现和渐渐消失,最大效果时间取决于该时间轴的持续时间,一秒两秒甚至更多在 \fad(100,100)中,100,100分别是开始时间和结束时间&说个通用小巧门,1秒=1000分秒, 也就是说,你输入1000就是从一秒开始、然后持续一秒消失所以在你用持续类型的代码换算一下会方便很多&特效的时间均在该时间轴的持续时间内,太短效果显示不出来,太长责会影响下个轴。\fad(100,0)是只渐渐出现直接消失,\fad(0,100)是直接出现,渐渐消失操作的方法多种多样,我们也可以用ageisub位于左边的几个按钮来改变字幕的位置和方向,再配上淡出淡出的效果得到不同的效果下面说另一个代码2、{\move(0,0,0,0)} 0为字幕中坐标这个代码是一个很好的字幕位移效果,即字幕从一个地方以一定速度过度到另一个地方注意:速度为均速 不可改变同上,我们也可以通过将一条时间轴拆成若干条来实现不同的效果,我用的版本里括号中的数字一般以四个有效,四个以上(软件自动打入的代码)时,效果无法实现,删掉末尾两个即可\move 可以做出许多效果,只要耐心,比如可以模拟振动效果,同样是拆成若干条轴依次设置坐标,注意的是,第一个的结束最后两个坐标是下一个坐标的开始坐标,这样的效果最好。例:(1,2,3,4)那么下一个就是(3,4,5,6)这样的目的是方便字幕从上个地方直接到达下个坐标,当然,距离调整是手动的,注意别调的太大哦&我们也可以一个一个让它们出现或是让它从屏幕的四角一下冲下来重合成一个3、\blur ←觉得字体太平板?这个帮你解决它的作用是为你的字幕搭配上阴影,颜色程序随数值增加,要注意的是,一定把它放在字幕的前面,并且那条字幕都是这个效果,要是把它放在最后是不会有效果产生的具体如下\blur2 这样在代码后打上数值就好至于阴影,小窍门就是可以改变边框值开改变阴影效果代码部分到此结束 更多请自己去实践顺便稍微说下时间轴对于ass来说我觉得最重要的就是时间轴,何为时间轴?指的就是你这句字幕开始时间 结束时间 持续时间 在软件中有三个空会显示 这三个错一个都会影响整个字幕的效果 尤其是一字一句整理的制作者调整时间轴 最好是选定住播放视频时的标尺,然后按键盘上的方向键中的左右键我的补充,\t的应用:\t是一个重要的代码,它的使用是伴随其他参数的。使用\t我们可以实现字幕属性的逐渐变化(如字体、颜色、间距、透明度等等)格式\t([&t1&,&t2&,][&速度&,]&标记&) ←其中[]框住的为可选项~举几个例子:{\fs10\t(\fs88)}Thank you!!&在字幕设置的时间内字体大小由10渐变为88.{\fsp5\t(0,5000,\fsp15)}hello~~~~~由字幕开始后的第0秒到第五秒内,字体间距由5变15.{\fsp5\t(0,,\fsp15)}hello~~~~~同上,但是渐变速度越来越慢(以0.5的变化率减慢,大家可修改参数体会)。下面是一些PV的分析:第二十六秒处:{\blur20\fs150\t(\fs80)\t(0,8000,\blur0\bord0)}1.字幕开始后的第0秒到第8秒内,边框模糊度20→02.字幕的整个时长内,字体大小150→80一分二十三秒处:{\fry-60\t(\fry0)}(对齐方式为左中)与y轴夹角-60°→0° (这个看不懂可以无视~)三十八秒{\fsp6\t(\fsp15)}{\blur20\t(0,200,\blur0)}1、 0至0.2秒内字幕模糊化出现2、 字体间距增加。总结:凡是渐变的效果,都可以尝试用\t来实现,它的支持面很广,可以说,只有想不到,没有\t做不到的渐变特效。大家可以找字幕及PV自己领会。给几个练习:一、要求写出代码。提示:\fscx&percent&:字体X轴缩放 如: \fscx30%;\fscx60%\fscy&percent&:Y轴二、要求写出代码水题,不多说。三、要求讲出参与渐变的特效提示:1、绕x轴翻转(对齐方式中下)2、\fscy&percent&:Y轴缩放四、要求讲出参与渐变的特效提示:标题的出现与字幕逐渐远去:间距+大小+模糊度1:38 间距拉开2:30 模糊度变化2:53 模糊度变化+字体间距+Y轴缩放+绕轴旋转上面这个算是比较复杂的特效了。练习第一题的答案(后半段需配合自动化特效。可忽略):{\t(0,100,(\fscx70\fscy125))}{\t(100,200,(\fscx100\fscy100))}{\t(250,300,(\fscx80\fscy100))}{\t(300,400,(\fscx100\fscy100))}{\t(!$end-350!,!$end-300!,(\fscx80\fscy100))}{\t(!$end-250!,!$end-200!,(\fscx100\fscy100))}{\t(!$end-200!,!$end-100!,(\fscx70\fscy125))}{\t(!$end-100!,!$end!,(\fscx300\fscy30))}教程到此结束了。
第3页: 一些常见问题

我要回帖

更多关于 透视镜看人效果图片 的文章

 

随机推荐