+ -
当前位置:首页 → 问答吧 → DirectX怎么给一个球贴贴图呢?

DirectX怎么给一个球贴贴图呢?

时间:2011-10-23

来源:互联网

用了这样的一个方法来给创建的球体赋uv坐标

C/C++ code

if(FAILED(D3DXCreateSphere(m_pd3dDevice, 3.96, 24, 25, &g_sphere, NULL))) 
        return S_FALSE;

    if (FAILED(g_sphere->CloneMeshFVF(D3DXMESH_SYSTEMMEM, FVF_VERTEX,m_pd3dDevice,&g_sun)))
    {
        return false ;
    }

    VERTEX* pVerts ;
    if (SUCCEEDED(g_sun->LockVertexBuffer(0, (void **)&pVerts)))
    {
        // Get vertex count
        int numVerts = g_sun->GetNumVertices() ;

        for (int i = 0; i < numVerts; ++i)
        {
            // Calculates texture coordinates
            if(pVerts->norm.y >=0)
            {
                if(pVerts->norm.x >=0)
                    pVerts->tu = (asinf(pVerts->norm.y/sqrt( pow(pVerts->norm.x,2) + pow(pVerts->norm.y,2) )) / D3DX_PI )/2 ;
                else
                    pVerts->tu = -1.0f*(asinf(pVerts->norm.y/sqrt( pow(pVerts->norm.x,2) + pow(pVerts->norm.y,2) )) / D3DX_PI )/2 +0.5 ;

                pVerts->tv = asinf(pVerts->norm.z) / D3DX_PI + 0.5f ;
            }
            else
            {
                if(pVerts->norm.x >=0)
                    pVerts->tu = (asinf(pVerts->norm.y/sqrt( pow(pVerts->norm.x,2) + pow(pVerts->norm.y,2) )) / D3DX_PI )/2 ;
                else
                    pVerts->tu = -1.0f*(asinf(pVerts->norm.y/sqrt( pow(pVerts->norm.x,2) + pow(pVerts->norm.y,2) )) / D3DX_PI )/2 +0.5 ;
                pVerts->tv = asinf(pVerts->norm.z) / D3DX_PI + 0.5f ;
            }
            
            ++pVerts ;
        }

        // Unlock the vertex buffer
        g_sun->UnlockVertexBuffer() ;
    }



这样遇到的问题是第一条经线u是0,最后一条是1,转一周贴图都没错,但是从最后一条经线到第一条的部分因为uv又成了1-0,所以把整张贴图又压缩到了那一小条。

不知道用这个方法怎么才能解决这个问题,如果这种给uv的方法不行的话又该怎么做才能正确的给一个球贴图呢?

作者: guyu91047   发布时间: 2011-10-23

我原来写过opengl的版本,你参考一下:
http://blog.csdn.net/dizuo/article/details/5135440

作者: dizuo   发布时间: 2011-10-23

引用 1 楼 dizuo 的回复:
我原来写过opengl的版本,你参考一下:
http://blog.csdn.net/dizuo/article/details/5135440

这样就得完全自己写画球的方法了啊...我只是想在现有的基础上修改UV就好...

或者说还有什么办法能给DirectX创建的球贴纹理呢...

作者: guyu91047   发布时间: 2011-10-23

热门下载

更多