您的位置:首页 > 其它

第二章 如何在VS2008里面编译CG

2013-02-23 21:01 302 查看
第一步:打开“工具”-“外部工具”



第二步:点击“添加”

添加如图所示的二个工具



其中 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

各种不认识哦,好了今天就到这里。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: