网站导航网学 原创论文 网站设计 最新系统 最新研究 原创论文 获取论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计下载 > 其他类别 > 正文

基于DirectX3D技术的俄罗斯方块程序设计与实现

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/05/06

【编者按】网学网其他类别频道为大家收集整理了“基于DirectX 3D技术的俄罗斯方块程序设计与实现“提供大家参考,希望对大家有所帮助!

QQ交谈客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn

 


 
5.2 环境映射贴图
在本系统中,游戏的渲染过程没有使用规定渲染管道流水线,而是使用Vertex Shader(顶点着色单元) 和Pixel Shader(像素着色单元)的技术。由于在这方面我也是初学者,也没有用什么很高深的东西,我只写了两段简单的代码,一个是Vertex Shader,另一个是Pixel Shader,分别保存到文件BoxVS.txt和 BoxPS.txt两个文本文件中。
这两个文件的代码是在程序运行过程中被编译,然后在显卡的 GPU上执行,分别用来处理顶点和像素。所以我们可以在修改这两个文件中的代码,而不必在次编译游戏程序的情况下,改变图像的渲染效果。
下面是Vertex Shader程序片段:
// Globals
extern matrix WorldViewMatrix;   // 视空间的变换矩阵
extern matrix WorldViewProjMatrix;// 裁减空间的变换矩阵
 
extern vector EyePos;          // 光源以及摄像头位置
extern vector Color;           // 光线颜色
 
// Structures
struct VS_INPUT
{
    vector position : POSITION;
    vector normal   : NORMAL;
};
 
struct VS_OUTPUT
{
    vector position : POSITION;
    float3 uvCoords : TEXCOORD;
    vector diffuse : COLOR;
};
 
// Main
VS_OUTPUT BoxVS(VS_INPUT input)
{
    VS_OUTPUT output = (VS_OUTPUT)0;
 
 // 转换顶点位置到裁减空间
 output.position = mul(input.position, WorldViewProjMatrix);
 
    //光线方向,光线与视线一致
    vector lightdir = EyePos - input.position;
 
    // 转换光线和法线到视空间
    lightdir.w       = 0.0f;
    input.normal.w   = 0.0f;
    lightdir         = mul(lightdir, WorldViewMatrix);
    input.normal     = mul(input.normal, WorldViewMatrix);
 
    // 光线方向与法线点积
    //float Dist = length(lightdir.xyz);
    input.normal = normalize( input.normal );//归一化
lightdir     = normalize( lightdir );
float u = dot(lightdir, input.normal);//向量点积,u的值与角度相//关即u与光照强度相关
    // 入射光线反射向量作为环境贴图的纹理坐标
    output.uvCoords = normalize(2*u*input.normal-lightdir).xyz;
    // 如果u<0.0f,则表示法线与光线夹角大于90度,即该表面没有接受到// 光照
    if( u < 0.0f )
        u = 0.0f;
 
    // 计算diffuse,顶点颜色
    output.diffuse = u*Color;
    return output;
}
 
下面是Pixel Shader程序片段,他的输入是下面Vertex Shader主函数的输出:
half4 BoxPS(vector position : POSITION,
       float3 uvCoords : TEXCOORD,
       vector diffuse : COLOR,
   uniform samplerCUBE tex0) : COLOR
{
   float4 color0 = texCUBE(tex0,uvCoords.xyz);//对环境贴图采样
   return diffuse*0.25 + color0*0.75;//最终颜色
}
5.3 飘雪场景实现
       程序中的飘雪场景是通过3D粒子系统模拟产生的效果。这个是我自己写的一个简单的3D粒子系统,跟网上一些高手写的粒子系统相比,效果差很多。该系统使用的粒子可以支持点、线、三角形、四边形这四种基本图元,到目前为此能够成功模拟,并且效果差强人意的有雨、烟雾、雪花、火焰这几种特效。
下面简要说明以下粒子系统中结构以及类的定义。
    5-3列出了粒子结构的成员
Particle结构

数据类型
属性成员
意义
D3DXVECTOR3
m_position
粒子的起始位置
D3DXVECTOR3
m_velocity
粒子的当前速度
float
m_lifeTime
粒子的生命期
float
m_age
粒子已存在时间
D3DXCOLOR
m_color
粒子的当前颜色
D3DXCOLOR
m_colorFade
粒子的最终颜色
float
m_width
粒子宽
float
m_height
粒子长
float
m_weight
重量

                                              表 5-3
 
PSystem类的主要成员函数

返回值类型
函数名
参数及类型
功能
void
genParticles
int numpar, int maxpar,
生成粒子
bool
isAlive
判断粒子是否死亡
void
reset
重设粒子系统
bool
addParticle
const Particle* p = NULL
添加一些特殊的粒子
bool
addParticle
const  Particle* p
添加粒子由系统自己生成
void
update
float  timeDelta
更新粒子系统
void
render
渲染粒子系统
void
preRender
设置渲染状态
void
postRender
恢复渲染状态
void
resetParticle
Particle* p
自动初始化粒子状态,由genParticles函数调用
void
fillParticle
char* &v,Particle* p
填充顶点数据到 Vertex Buffer中

本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT

本文选自计算机毕业设计http://myeducs.cn
论文文章部分只是部分简介,如需了解更多详情请咨询本站客服!QQ交谈QQ3710167

原创论文

设为首页 | 加入收藏 | 论文首页 |原创论文 |
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师