我的第一个CG

本人学习NVIDIA的C for Graphic (CG)的理论知识已经有2个月了,关于为什么选择CG,这就不说了.目前在国内<Cg教程_可编程实时图形权威指南(扫描清晰版)> , <GPU编程与CG语言之阳春白雪下里巴人>及<[GPU精粹3].(GPU.Gems.3).(美)Hubert.Nguyen.扫描版>都需要看看,也只有这些了,由于国内人对图形编程的误解,国内的GPU编程发展要晚于国外.不过,对于通用高级编程熟悉的我,再去写GPU上的程序确实有些淡淡的忧伤,还好大学的时候学过C,而CG和C很像,至少NVIDIA宣传说很像.

对于高级的语言,一般以main作 为入口,或者设置一个入口.但是很明显,CG程序一般有2个入口,顶点和片段.在C++中可以设.

另外 , 我学习的时候用的是FX Composer 2.5 ,里面也可以设.但是,这里仅仅够学习,测试效果及调试.

/*
% Description of my shader. 
% Second line of description for my shader.
keywords: material classic
date: YYMMDD
*/
/*
void main_v( float4 position : POSITION ,
    float4 normal : NORMAL,
    
    out float4 oPosition : POSITION,
    out float4 color : COLOR,
    
    uniform float4x4 modelViewProj,
    uniform float4x4 worldMatrix,
    uniform float4x4 worldMatrix_IT,
    uniform float3 globalAmbient,
    uniform float3 lightPosition,
    uniform float3 lightColor,
    uniform float3 Kd){
     oPosition = mul(modelViewProj , position );
     float3 worldPos = mul( worldMatrix , position).xyz;
     float3 N = mul( worldMatrix_IT,normal).xyz;
     N = normalize( N );
     //计算入射光方向
     float3 L = lightPosition - worldPos ;
     L = normalize( L );     
     //计算方向光漫反射光强
     float3 diffuseColor = Kd * lightColor*max(dot(N,L),0);
     //计算环境光漫发射光强
     float3 ambientColor = Kd * globalAmbient;
     
     color = diffuseColor+ambientColor;
     color.w = 1;
}
*/
float4x4 WorldViewProj : WorldViewProjection;
   texture diffuse  <
   string ResourceName = "";//Optional default file name
   string UIName =  "diffuse Texture";
   string ResourceType = "2D";
   >;
   sampler2D diffuseSampler = sampler_state {
   Texture = <diffuse>;
   MinFilter = Linear;
   MagFilter = Linear;
   MipFilter = Linear;
   AddressU = Wrap;
   AddressV = Wrap;
   };
   
struct VS_OUTPUT
 {
     float4 pos : POSITION;
     float2 tex : TEXCOORD0;
 };
 
VS_OUTPUT mainVS(float4 pos : POSITION,float2 tex : TEXCOORD0){
     VS_OUTPUT vsOut;
     vsOut.pos = mul(pos,WorldViewProj);
     vsOut.tex = tex;
     return vsOut;
 }   
float4 mainPS(float2 tex : TEXCOORD0) : COLOR {
     return tex2D(diffuseSampler, tex);
}  
technique technique0 {
     pass p0 {
              VertexShader = compile vs_3_0 mainVS();
              PixelShader = compile ps_3_0 mainPS();
     }
 }
   
   
   
   
   
   
   
   
   
   
   
   
/** 
struct VertexIn
{
 float4 position : POSITION;
 float4 normal : NORMAL;
};
struct VertexScreen
{
 float4 oPosition : POSITION;
 float4 color : COLOR;
};
void main_v( VertexIn posIn , out VertexScreen posOut,
    
    uniform float4x4 modelViewProj,
    uniform float4x4 worldMatrix,
    uniform float4x4 worldMatrix_IT,
    uniform float3 globalAmbient,
    uniform float3 lightPosition,
    uniform float3 lightColor,
    uniform float3 Kd)
    {
     posOut.oPosition = mul( modelViewProj , posIn.position);
     
     float3 worldPos = mul( worldMatrix , posIn.position).xyz;
     float3 N = mul( worldMatrix_IT,posIn.normal).xyz;
     
     N = normalize(N);
     
     float3 L = lightPosition - worldPos;
     L = normalize(L);
     
     float3 diffuseColor = Kd * lightColor*max( dot(N,L) , 0 );
     
     float3 ambientColor = Kd*globalAmbient;
     
     posOut.color.xyz = diffuseColor + ambientColor;
     posOut.color.w = 1;
    }
    */

注 : 程序内容出自 : <GPU编程与CG语言之阳春白雪下里巴人> 及 http://www.shangxueba.com/jingyan/85012.html.本人目前菜鸟,自然写不出如此NB的代码.
     另外 : Material用的是FX Composer自带的

供各位CG爱好者交流,希望各位大神给予学习建议.

时间: 2024-12-27 19:46:13

我的第一个CG的相关文章

NeHe OpenGL教程 第四十七课:CG顶点脚本

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第四十七课:CG顶点脚本 CG 顶点脚本 nVidio的面向GPU的C语言,如果你相信它就好好学学吧,同样这里也只是个入门.记住,类似的语言还有微软的HLSL,OpenGL的GLSL,ATI的shaderMonker.不要选错哦:)

Cg与RenderMonkey 之旅

http://news.mydrivers.com/1/15/15020_all.htm [前言] 您可能还没有意识到---您手头的这块显卡(或者说这块GPU)---它不仅仅是一个应用工具(游戏.平面设计或诸如此类)---它还是一个开发工具. 游戏开发者的硬件配置似乎总比我们普通用户的要高(当然是指3D游戏的开发者,现在没有游戏不是3D的了吧?抛开多如牛毛的FPS不说,一直是2D唱主角的RTS,如魔兽争霸III到命令与征服-将军也都已毫不例外的转到了3D),在"ATi的魔咒日-程序员的训练课程&

在CG/HLSL中访问着色器属性(Properties)

在CG/HLSL中访问着色器属性 Shader在Properties块中访问材质属性.如果你想在一个着色程序中访问一些属性,你需要声明一个Cg/HLSL具有相同的名称和一个匹配的类型的变量. Properties 例如这些材质属性: _MyColor ("Some Color", Color) = (1,1,1,1) _MyVector ("Some Vector", Vector) = (0,0,0,0) _MyFloat ("My float"

Unity3d游戏开场CG动画播放方式

1.在一个plane上播放 1 2 3 4 5 6 7 8 9 10 11 12 using UnityEngine; using System.Collections; public class MobileMovieTexture : MonoBehaviour { public MovieTexture movTexture;   void Start() { GetComponent<Renderer>().material.mainTexture = movTexture; movT

HEVC逆扫描之四:CG内部逆扫描过程

注:HM代码版本为HM-16.2+SCM-3.0rc1/. 在HEVC逆扫描之三:TU逆扫描过程中介绍了TU的逆扫描过程,这里继续介绍CG内部的逆扫描过程. 4x4CG内部的逆扫描流程如下图所示. 图14  4x4CG逆扫描流程 对于每一个4x4块,也是按照与扫描顺序相反的顺序进行逆扫描的.首先通过熵解码解出CG标识(如果是TU内的第一个或者最后一个CG那么CG标识一定为1),如果CG标识为0那么该CG的所有系数全部为0,可以直接跳过该CG:如果CG标识为1,那么首先通过熵解码解出所有非零系数的

cg语言学习&amp;&amp;阳春白雪GPU编程入门学习

虽然所知甚少,但康大的<GPU编程与Cg编程之阳春白雪下里巴人>确实带我入了shader的门,在里面我第一次清晰地知道了"语义"的意思,非常感谢. 入门shader,我觉得可以先读3本书:<GPU编程与Cg编程之阳春白雪下里巴人>=><cg教程>=><Real-Time Rendering 3rd>(在读,最近忙,搁下了),打下理论基础. 下面是<cg教程>的读书笔记. 1.基本cg函数 1)数学函数:abs,ac

网上搜集第三方

iOS开发-常用第三方开源框架介绍 为了了解一下目前第三方库的普及程度,下面列举一些知名App对第三方库的依赖. 网易新闻 AppleReachability ASIHTTPRequest EGOTableViewPullRefresh GTMNSString+HTML MGTemplateEngine MPOAuth RegexKitLite SDWebImage SSZipArchive wax Garageband MurmurHash libpng zlib SBJson (json-f

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 2015-04-05 15:25 2482人阅读 评论(1) 收藏 举报开源框架 图像: 1.图片浏览控件MWPhotoBrowser       实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作.      下载:https://github.com/mwaterfall/MWPhotoBrowser目前比较活跃的社区仍旧是Github,

(译)Minimal Shader(最小的着色器)

(原文:https://en.wikibooks.org/wiki/Cg_Programming/Unity/Minimal_Shader) This tutorial covers the basic steps to create a minimal Cg shader in Unity. 本节课包含了在Unity中创建一个最小的Cg着色器的基本步骤. Starting Unity and Creating a New Project(打开Unity创建一个新工程) After downlo