游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4091|回复: 4

DirectX 3D中,如果要贴纹理,u,v坐标怎么设置?

[复制链接]

2

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2006-11-3 11:55:00 | 显示全部楼层 |阅读模式
DirectX 3D中,如果要贴纹理,u,v坐标怎么设置?
有这样一段Code:
        _device->CreateVertexBuffer(
                24 * sizeof(Vertex),
                D3DUSAGE_WRITEONLY,
                FVF_VERTEX,
                D3DPOOL_MANAGED,
                &_vb,
                0);

        Vertex* v;
        _vb->Lock(0, 0, (void**)&v, 0);

        // build box

        // fill in the front face vertex data
        v[0] = Vertex(-1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f);
        v[1] = Vertex(-1.0f,  1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f);
        v[2] = Vertex( 1.0f,  1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f);
        v[3] = Vertex( 1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f);

        // fill in the back face vertex data
        v[4] = Vertex(-1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f);
        v[5] = Vertex( 1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f);
        v[6] = Vertex( 1.0f,  1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
        v[7] = Vertex(-1.0f,  1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f);

        // fill in the top face vertex data
        v[8]  = Vertex(-1.0f, 1.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f);
        v[9]  = Vertex(-1.0f, 1.0f,  1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f);
        v[10] = Vertex( 1.0f, 1.0f,  1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f);
        v[11] = Vertex( 1.0f, 1.0f, -1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f);

        // fill in the bottom face vertex data
        v[12] = Vertex(-1.0f, -1.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f);
        v[13] = Vertex( 1.0f, -1.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f);
        v[14] = Vertex( 1.0f, -1.0f,  1.0f, 0.0f, -1.0f, 0.0f, 1.0f, 1.0f);
        v[15] = Vertex(-1.0f, -1.0f,  1.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f);

        // fill in the left face vertex data
        v[16] = Vertex(-1.0f, -1.0f,  1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f);
        v[17] = Vertex(-1.0f,  1.0f,  1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f);
        v[18] = Vertex(-1.0f,  1.0f, -1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f);
        v[19] = Vertex(-1.0f, -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f);

        // fill in the right face vertex data
        v[20] = Vertex( 1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f);
        v[21] = Vertex( 1.0f,  1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f);
        v[22] = Vertex( 1.0f,  1.0f,  1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f);
        v[23] = Vertex( 1.0f, -1.0f,  1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f);

        _vb->Unlock();

其中,Vertex structure为:
struct Vertex
{
        Vertex(){}
        Vertex(
                float x, float y, float z,
                float nx, float ny, float nz,
                float u, float v)
        {
                _x  = x;  _y  = y;  _z  = z;
                _nx = nx; _ny = ny; _nz = nz;
                _u  = u;  _v  = v;
        }
    float _x, _y, _z;
    float _nx, _ny, _nz;
    float _u, _v; // texture coordinates
};
我不明白_x, _y, _z与_u, _v怎么对应?
比如:
        // fill in the front face vertex data
        v[0] = Vertex(-1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f);
        v[1] = Vertex(-1.0f,  1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f);
        v[2] = Vertex( 1.0f,  1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f);
        v[3] = Vertex( 1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f);
_u, _v项:
0.0f, 0.0f
0.0f, 1.0f
1.0f, 1.0f
1.0f, 0.0f
是什么意思呢?请知道的兄弟指点指点。。。谢谢!!

15

主题

129

帖子

129

积分

注册会员

Rank: 2

积分
129
QQ
发表于 2006-11-3 12:17:00 | 显示全部楼层

Re: DirectX 3D中,如果要贴纹理,u,v坐标怎么设置?

_u, _v项:
0.0f, 0.0f 用的就是贴图的左上角
0.0f, 1.0f 左下角
1.0f, 1.0f 右下角
1.0f, 0.0f 右上角

一个指x方向 一个y方向
sf_2006113121712.jpg

15

主题

129

帖子

129

积分

注册会员

Rank: 2

积分
129
QQ
发表于 2006-11-3 12:19:00 | 显示全部楼层

Re:DirectX 3D中,如果要贴纹理,u,v坐标怎么设置?

如果改成
0.0 0.0
0.0 0.5
0.5 0.5
0.5 0.0
就只使用了左上角的四分之一的图,换句话说贴图被放大了。

5

主题

54

帖子

62

积分

注册会员

Rank: 2

积分
62
发表于 2006-11-3 16:00:00 | 显示全部楼层

Re:DirectX 3D中,如果要贴纹理,u,v坐标怎么设置?

怎么设置看你香怎么贴那个图啊~上面说的恨清楚了,如果你想完整把一个图贴倒一个矩型上用你自己代码那个,如果有其他用其他

2

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2006-11-6 12:43:00 | 显示全部楼层

Re:DirectX 3D中,如果要贴纹理,u,v坐标怎么设置?

感谢ddoq2008,lusuo两位的热情帮助,我在机子上反复试了几次,现在已经清楚了,谢谢!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 19:26

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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