顶点渲染

Cg or C for Graphics 是由Nvidia开发的高级着色语言。和Microsoft的HLSL很像。 Cg是用C语言开发的,所以它们的定义有些很像,但是又加入了一些新的特点使之更适合处理图形。Cg只能用来开发GPU程序。
基础资料
简介

概述

顶点渲染可在功能上取代传统的变换与光照阶段,它位于镶嵌阶段之后,剔除与裁剪阶段之前。镶嵌阶段结束后,便将一个顶点数据传递给顶点渲染器,顶点可能包含位置、纹理坐标、顶点颜色、法线等数据。顶点渲染器不能创建或删除顶点,它处理结束后至少要输出顶点中的位置数据。

背景

随着显卡的开发,3D图形程序在某些方面变得越发复杂。为了简化编程,一些新的特性被加入到显卡众,包括用顶点着色程序修饰渲染管线。起先,定点渲染程序是用汇编语言开发的,虽然汇编语言给予编程者很好的灵活性,但是很难用。需要一种用于GPU开发的高级语言,于是Cg应运而生。比起汇编来Cg易学,易编,易读,易懂。另外Cg适合更广泛的硬件和系统平台。Cg的编译器可以优化代码并且自动处理低级任务,这在汇编是不可能的。

细节

数据类型

Cg 有六种基本数据类型,一些来自于C语言。float(32位浮点),half(16位浮点),int(32位整型),fixed(12位浮点),bool(布林型),sampler(代表一个材质)。

Cg还有vector(矢量)和matrix(矩阵)数值类型由基本类型二来,比如float3和float4x4。这种数据类型在处理3D图形程序中常用到。Cg还有struct(结构)和array(数组)类型,和C的用法一样。

操作符

Cg 支持算术操作符和逻辑操作符,和C中用法相同。

函数

Cg 也有if/else,while和for。另外定义函数和C语言也有相似之处。

标准Cg库

和C相同,Cg有一些GPU编程常用到的函数。有些和C相同,比如数学函数,像abs和sin。另一些只在GPU程序中才用到,比如texture mapping函数tex 1D和tex 2D。

Cg实时库

Cg 程序只是顶点和象素着色程序,它需要其它一些程序来支持以便处理渲染程序的其它部分。Cg可以用两个API: OpenGL和DirectX。每一种都有其各自的Cg函数作为和Cg程序的接口,比如设置目前的Cg程序,传递参数之类的任务。除此之外,Cg的API还有编译和执行着色程序的能力。但是,它需要着色程序的源代码为text文件,以使API可读。这也被认为是一大缺点。

例子

// input vertex

struct VertIn {

float4 pos : POSITION;

float4 color : COLOR0;

};

// output vertex

struct VertOut {

float4 pos : POSITION;

float4 color : COLOR0;

};

// vertex shader main entry

VertOut main(VertIn IN, uniform float4x4 modelViewProj) {

VertOut OUT;

OUT.pos = mul(modelViewProj, IN.pos); // calculate output coords

OUT.color = IN.color; // copy input color to output

OUT.color.z = 1.0f; // blue component of color = 1.0f

return OUT;

}

与像素渲染区别

顶点渲染&象素渲染

顶点渲染程序是一些小程序,描述如何将某个过程应用于场景中的多边形顶点。这些程序最多有128个指令,非常适用于模拟可变形的对象,如布、火、水和人脸等。开发人员也可以在场景中创造新的灯光效果。

像素渲染程序是一些小应用程序,描述帧缓冲中要应用到像素上的操作。像素渲染程序与顶点渲染程序的功能类似,但前者执行处理色彩和材质的操作,而不是处理几何体的操作。

首页
科技
#贵族
最新入驻
贾科莫·普契尼
Caroline Lufkin
翁建宇
相关阅读
华为荣耀9
内容词条·861人浏览
DSCP
内容词条·1279人浏览
荣耀X30
内容词条·3019人浏览
荣耀Play
内容词条·4284人浏览
荣耀60 SE
内容词条·7040人浏览
荣耀X2
内容词条·2248人浏览
  • 网站地图
  • |

Copyright 2023 fuwu029.com赣ICP备2022008914号-4