游戏开发论坛

 找回密码
 立即注册
搜索
查看: 13531|回复: 3

Direct9学习之 - 天空盒

[复制链接]

17

主题

44

帖子

271

积分

中级会员

Rank: 3Rank: 3

积分
271
发表于 2013-11-28 22:56:32 | 显示全部楼层 |阅读模式
一. 天空盒的应用:
     

      天空盒用于表现游戏中的天空或者环境。

二. 天空盒基本原理:

      天空盒就是一个包含场景所有元素的长方体盒子,该盒子的六个面附有环境贴图,所有游戏行为均是在盒子中进行,在盒子内看来,附有贴图的盒子既是整体天空环境。

三. 天空盒实现方式及相关代码:

由天空盒的基本原理可以将其实现归纳为以下步骤:
        1. 初始化天空盒长方体并将其放置到场景中
        2. 设置纹理分别渲染长方体各个面(如要绘制动态云则需每帧改变纹理UV)

        具体相关代码如下:

        1. 初始化天空盒长方体定点信息

          a. 定义定点格式
            struct SkyboxVertices
           {
              enum
             {
               FVF  = D3DFVF_XYZ |D3DFVF_DIFFUSE| D3DFVF_TEX1,
             };
             VECTOR3  vPos;
             DWORD  nColor;
             float  fu;
             float  fv;
           };


         b. 初始化顶点数据(由于代码相似,只用一个面代码做例子)

         m_Verts[TOP][0].vPos = D3DXVECTOR3( - m_fSize/2 ,  + m_fSize/2 ,  -m_fSize/2);m_Verts[TOP][0].fu = 0.0f;m_Verts[TOP][0].fv = 0.0f;m_Verts[TOP][0].nColor = 0xffA283b0;
         m_Verts[TOP][1].vPos = D3DXVECTOR3( + m_fSize/2 ,  + m_fSize/2 ,  -m_fSize/2);m_Verts[TOP][1].fu = 1.0f;m_Verts[TOP][1].fv = 0.0f;m_Verts[TOP][1].nColor = 0xffA283b0;
         m_Verts[TOP][2].vPos = D3DXVECTOR3( - m_fSize/2 ,  + m_fSize/2 ,  +m_fSize/2);m_Verts[TOP][2].fu = 0.0f;m_Verts[TOP][2].fv = 1.0f;m_Verts[TOP][2].nColor = 0xffA283b0;
         m_Verts[TOP][3].vPos = D3DXVECTOR3( + m_fSize/2 ,  + m_fSize/2 ,  +m_fSize/2);m_Verts[TOP][3].fu = 1.0f;m_Verts[TOP][3].fv = 1.0f;m_Verts[TOP][3].nColor = 0xffA283b0;


       2. 设置纹理贴图绘制天空盒

         pDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );
         pDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );
         pDevice->SetTexture( 1 , NULL );

         // 渲染
         if ( m_Texture[TOP] )
        {      
           pDevice->SetTexture( 0 , m_Texture[TOP] );
        }
        pDevice->DrawPrimitiveUP( D3DPT_TRIANGLESTRIP , 2 , &m_Verts[TOP] , sizeof(SkyboxVertices) );



四. 效果展示:

               

天空盒

天空盒
           

UV动画实现动态云

UV动画实现动态云

            天空盒                   UV动画实现的天空盒


五. 其他:

          关于动态云的实现方式可用UV动画实现。  







           

13

主题

36

帖子

301

积分

中级会员

Rank: 3Rank: 3

积分
301
发表于 2013-11-29 00:11:38 | 显示全部楼层
本帖最后由 书径尘 于 2013-11-29 00:13 编辑

如果是天空穹就好了,
魔兽世界用的就是这种,就是上半圆是天空,下半圆是固定色.

17

主题

44

帖子

271

积分

中级会员

Rank: 3Rank: 3

积分
271
 楼主| 发表于 2013-11-29 09:47:44 | 显示全部楼层
天空穹表现效果更高不存在接缝问题,基本原理都类似的

5

主题

84

帖子

229

积分

中级会员

Rank: 3Rank: 3

积分
229
发表于 2013-12-2 20:41:57 | 显示全部楼层
其实接缝问题很容易解决,纹理环绕模式设定一下就可以了
不过天空球的确比天空盒真实
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-5-4 08:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表