本文共 3498 字,大约阅读时间需要 11 分钟。
第一步:打开“工具”-“外部工具”
第二步:点击“添加”
添加如图所示的二个工具
其中 CG Vertex Compile的各个参数为:
标题:CG Vertex Complie
命令:D:\Program Files (x86)\NVIDIA Corporation\Cg\bin.x64\cgc.exe
参数:$(ItemPath) -profile vp40 -entry MyVertexEntry -o MyVertex.asm
初始目录:$(ItemDir)
CG Fragment Compile的各个参数为:
标题:CG Fragment Complie
命令:D:\Program Files (x86)\NVIDIA Corporation\Cg\bin.x64\cgc.exe
参数:$(ItemPath) -profile fp40 -entry MyFragmentEntry -o MyFragment.asm
初始目录:$(ItemDir)
解释下:
命令里填的就是cgc这个程序的路径,如何不知道cgc在哪里,去第一章提供的网址下下来Cg Toolkit 3.1的里面。
安装过后我的在D:\Program Files (x86)\NVIDIA Corporation\Cg\bin.x64里面。注意.x64表示64位系统用的,我用的64位的WIN7
参数需要解释下$(ItemPath) -profile vp40 -entry MyVertexEntry -o MyVertex.asm
$(ItemPath)表示需要编译哪个文件 $(ItemPath)这个宏代替了当前编译对象(也就是你VS里面打开的哪个文件)的绝对路径(包含目录和文件名以及扩展名)
我的解决方案如图所示:
我的这个解决方案中$(ItemPath)在我的电脑里面代替了
E:\My Tutorial\《The Cg Turorial》\chap3\chap3_exercise4_quadruple_version_texture\chap3_exercise4_quadruple_version_texture\MyVertex.cg
-profile vp40 用什么格式来编译
-entry MyVertexEntry 入口函数
-o MyFragment.asm 输出的文件名
我的MyVertex.cg文件如下:
void MyVertexEntry(
float2 position:POSITION, float2 texCoord:TEXCOORD0, out float4 oPosition:POSITION, out float2 leftTexCoord:TEXCOORD0, out float2 rightTexCoord:TEXCOORD1, out float2 upTexCoord:TEXCOORD2, out float2 downTexCoord:TEXCOORD3, uniform float2 leftSeparation, uniform float2 rightSeparation, uniform float2 upSeparation, uniform float2 downSeparation) { oPosition=float4(position,0,1); leftTexCoord=texCoord+leftSeparation; rightTexCoord=texCoord+rightSeparation; upTexCoord=texCoord+upSeparation; downTexCoord=texCoord+downSeparation; }初始目录:$(ItemDir)也解释下
他表示相对文件名接在这之后,后面你会看到它的用处
MyFragment以此类推
第三步:在VS的工作区里面切换到MyVertex.cg文件(这样ItemPath才指向它)
选择“工具”-“CG Vertex Compile”
最后在vs的窗口里面显示
e:\My Tutorial\《The Cg Turorial》\chap3\chap3_exercise4_quadruple_version_texture\chap3_exercise4_quadruple_version_texture\MyVertex.cg
19 lines, 0 errors.MyFragment.cg编译以此类推
最终将后在当前编译目录下生成(因为我们的初始目录:$(ItemDir)代表了当前编译对象所在的目录)
MyVertex.asm 和 MyFragment.asm 两个文件
其中MyVertex.asm文件内容如下:
!!ARBvp1.0
OPTION NV_vertex_program3; # cgc version 3.1.0013, build date Apr 18 2012 # command line args: -profile vp40 # source file: e:\My Tutorial\《The Cg Turorial》\chap3\chap3_exercise4_quadruple_version_texture\chap3_exercise4_quadruple_version_texture\MyVertex.cg #vendor NVIDIA Corporation #version 3.1.0.13 #profile vp40 #program MyVertexEntry #semantic MyVertexEntry.leftSeparation #semantic MyVertexEntry.rightSeparation #semantic MyVertexEntry.upSeparation #semantic MyVertexEntry.downSeparation #var float2 position : $vin.POSITION : POSITION : 0 : 1 #var float2 texCoord : $vin.TEXCOORD0 : TEXCOORD0 : 1 : 1 #var float4 oPosition : $vout.POSITION : HPOS : 2 : 1 #var float2 leftTexCoord : $vout.TEXCOORD0 : TEX0 : 3 : 1 #var float2 rightTexCoord : $vout.TEXCOORD1 : TEX1 : 4 : 1 #var float2 upTexCoord : $vout.TEXCOORD2 : TEX2 : 5 : 1 #var float2 downTexCoord : $vout.TEXCOORD3 : TEX3 : 6 : 1 #var float2 leftSeparation : : c[0] : 7 : 1 #var float2 rightSeparation : : c[1] : 8 : 1 #var float2 upSeparation : : c[2] : 9 : 1 #var float2 downSeparation : : c[3] : 10 : 1 #const c[4] = 0 1 PARAM c[5] = { program.local[0..3], { 0, 1 } }; TEMP RC, HC; BB0: MOV result.position.xy, vertex.position; MOV result.position.zw, c[4].xyxy; ADD result.texcoord[0].xy, c[0], vertex.texcoord[0]; ADD result.texcoord[1].xy, c[1], vertex.texcoord[0]; ADD result.texcoord[2].xy, c[2], vertex.texcoord[0]; ADD result.texcoord[3].xy, c[3], vertex.texcoord[0]; END # 6 instructions, 0 R-regs各种不认识哦,好了今天就到这里。
转载地址:http://soxdi.baihongyu.com/