游戏开发论坛

 找回密码
 立即注册
搜索
楼主: gosix

最近做的地表

[复制链接]

20

主题

398

帖子

398

积分

中级会员

Rank: 3Rank: 3

积分
398
发表于 2006-4-9 13:58:00 | 显示全部楼层

Re:最近做的地表

楼主强人~强烈向楼主学习!

25

主题

145

帖子

341

积分

中级会员

Rank: 3Rank: 3

积分
341
 楼主| 发表于 2006-4-19 09:18:00 | 显示全部楼层

Re:最近做的地表

Sorry!我开始看你的头像认为的。

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2010-9-13 14:46:00 | 显示全部楼层

Re:最近做的地表

楼主做的很不错!

11

主题

27

帖子

27

积分

注册会员

Rank: 2

积分
27
发表于 2010-9-16 14:13:00 | 显示全部楼层

Re:最近做的地表

我最近也在学习Terrain制作,现在弄到根据高度贴上不同的纹理这步出错了··我单步调试时取到的高度都没问题,各个层次的都有,但是结果是同一层的高度会显示不同层的纹理···我是用D3D弄的。。想请问楼主这到底是怎么回事呢。。

11

主题

27

帖子

27

积分

注册会员

Rank: 2

积分
27
发表于 2010-9-16 14:19:00 | 显示全部楼层

Re:最近做的地表

我的生成大纹理的代码这样
HRESULT hr;
        //创建一个空的纹理
        hr = :3DXCreateTexture( m_pDevice,
                                      m_iWidth, m_iDepth, //纹理宽和高
                                                          0,
                                                          0,
                                                          D3DFMT_X8R8G8B8, //32位XRGB
                                                          D3DPOOL_MANAGED,
                                                          &m_TerrainTex.m_pTerrainTex);
        terrain::Failed(hr, L"创建纹理失败");
        D3DSURFACE_DESC textureDesc;
        m_TerrainTex.m_pTerrainTex->GetLevelDesc( 0, &textureDesc);
        //检测是否支持32位像素
        if(textureDesc.Format != D3DFMT_X8R8G8B8)
                return false;
        D3DLOCKED_RECT lockedRect;
        m_TerrainTex.m_pTerrainTex->LockRect( 0, &lockedRect, 0, 0);
        //纹理的像素数据
        //boost::shared_array<DWORD> dwImagedata = boost::shared_array<DWORD>((DWORD*)lockedRect.pBits);
        DWORD* dwImagedata = (DWORD*)lockedRect.pBits;

        //初始化小纹理图
        if( !m_TerrainTex.InitTexMap() )
                return false;

        D3DXCOLOR Finalcolor;//最终像素颜色
        D3DXCOLOR color;//叠加颜色
        float fHeight = 0;//高度
        float fBlend = 0;//混合因子

        //遍历大纹理图的每个像素
        for( int iz = 0; iz < m_iDepth; iz++){
                for( int ix = 0; ix < m_iWidth; ix++){
                        //将像素坐标转换为顶点坐标(因为只有顶点坐标有高度值)
                        float fx = (float)ix / m_iCellSpacing;
                        float fz = (float)iz / m_iCellSpacing;
                           fHeight = GetScaleHeightAtPoint<float>( fx, fz);
                        //获取纹理当前像素的颜色
                        Finalcolor = dwImagedata[ iz * lockedRect.Pitch/4 + ix ];
                        //遍历小纹理图
                        for( int i = 0; i < MAX_TEXTURE_NUM ; i++){               
                            fBlend = m_TerrainTex.GetRegion( fHeight, i);
                            if(fBlend != 0)
                                color = m_TerrainTex.GetTexColor( ix, iz,  i);
                            //叠加颜色
                            Finalcolor += color * fBlend;
                        }//end for i

                        dwImagedata[ iz * lockedRect.Pitch/4 + ix ] = (D3DXCOLOR)Finalcolor;
                }//end for ix
        }//end for iz

请楼主赐教。。。。卡在这里好几天了。。找不出啥原因。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-6 14:50

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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