游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3424|回复: 6

[请教]用三角带方式绘正方体,但顶点法线设置不正确

[复制链接]

1

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2006-12-27 14:14:00 | 显示全部楼层 |阅读模式
顶点为:
CustomVertex Vertices[] =
{
        // STRIP 124 356
               
        { -1.0f,-1.0f, -1.0f, -1.0f,-1.0f, -1.0f, 0xffffffff, 0, 1 }, // 1
        { -1.0f, 1.0f, -1.0f, -1.0f, 1.0f, -1.0f, 0xffffffff, 0, 0 }, // 2

        {  1.0f,-1.0f, -1.0f,  1.0f,-1.0f, -1.0f, 0xffffffff, 1, 1 }, // 3
        {  1.0f, 1.0f, -1.0f,  1.0f, 1.0f, -1.0f, 0xffffffff, 1, 0 }, // 4
               
        {  1.0f,-1.0f,  1.0f,  1.0f,-1.0f,  1.0f, 0xffffffff, 0, 1 }, // 5
        {  1.0f, 1.0f,  1.0f,  1.0f, 1.0f,  1.0f, 0xffffffff, 0, 0 }, // 6

        { -1.0f,-1.0f,  1.0f, -1.0f,-1.0f,  1.0f, 0xffffffff, 1, 1 }, // 7
        { -1.0f, 1.0f,  1.0f, -1.0f, 1.0f,  1.0f, 0xffffffff, 1, 0 }, // 8

        { -1.0f,-1.0f, -1.0f, -1.0f,-1.0f, -1.0f, 0xffffffff, 0, 1 }, // 1
        { -1.0f, 1.0f, -1.0f, -1.0f, 1.0f, -1.0f, 0xffffffff, 0, 0 }, // 2

        {  1.0f, 1.0f, -1.0f,  1.0f, 1.0f, -1.0f, 0xffffffff, 1, 0 }, // 4
        { -1.0f, 1.0f,  1.0f, -1.0f, 1.0f,  1.0f, 0xffffffff, 1, 0 }, // 8

        {  1.0f, 1.0f,  1.0f,  1.0f, 1.0f,  1.0f, 0xffffffff, 0, 0 }, // 6
        {  1.0f,-1.0f,  1.0f,  1.0f,-1.0f,  1.0f, 0xffffffff, 0, 1 }, // 5

        {  1.0f,-1.0f, -1.0f,  1.0f,-1.0f, -1.0f, 0xffffffff, 1, 1 }, // 3
        { -1.0f,-1.0f,  1.0f, -1.0f,-1.0f,  1.0f, 0xffffffff, 1, 1 }, // 7
        { -1.0f,-1.0f, -1.0f, -1.0f,-1.0f, -1.0f, 0xffffffff, 0, 1 }, // 1
}

        // cube box
        /*

      8
     /-----------/|6
   2/______/ |
    |           4  | |
    |               | |
    | 7         3  | |5
  1|_______|/

        */
顶点格式为: (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE | D3DFVF_TEX1)
打开灯光显示不正确,应该是法线设置错了,请高手指教.

0

主题

18

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2006-12-28 19:22:00 | 显示全部楼层

Re:[请教]用三角带方式绘正方体,但顶点法线设置不正确

你顶点一样的定2次做什么????

1

主题

12

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2006-12-29 16:14:00 | 显示全部楼层

Re:[请教]用三角带方式绘正方体,但顶点法线设置不正确

你怎么知道打开灯光显示不正确就是法线的问题呢????

我昨天画了个正四面体,灯光,材质,都按人家的教程上设置的,可还是没找到有灯的感觉,要么黑忽忽一片,要么白茫茫一片,反正是感觉不到明暗的变化,郁闷ing ....

楼主交个朋友吧,

1

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
 楼主| 发表于 2006-12-29 17:36:00 | 显示全部楼层

Re:[请教]用三角带方式绘正方体,但顶点法线设置不正确

使用两个以上同样的顶点是因为我没有使用顶点索引(index buffer).

楼上的应该是显示正确的,设置着色模式看看,应该有渐变过渡.
Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);
我的显示错误是正方体的一个面的对角线很明显,没有过渡.

我QQ是3220356,刚开始学3D,有时间一起聊聊,共同进步.

0

主题

18

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2006-12-31 22:28:00 | 显示全部楼层

Re:[请教]用三角带方式绘正方体,但顶点法线设置不正确

你不用顶点索引 也不用定2次啊!


你最好把 渲染那里都发上来看看 光一个顶点坐标看不出什么的!

19

主题

73

帖子

73

积分

注册会员

Rank: 2

积分
73
发表于 2007-1-1 16:10:00 | 显示全部楼层

Re:[请教]用三角带方式绘正方体,但顶点法线设置不正确

   m_lp3DDivice->SetRenderState(D3DRS_NORMALIZENORMALS, TRUE);
加上这个看看

1

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
 楼主| 发表于 2007-1-2 10:06:00 | 显示全部楼层

Re:[请教]用三角带方式绘正方体,但顶点法线设置不正确

顶点不用定2次?不明白,我用两种方式画正方体,三角列(D3DPT_TRIANGLELIST)和三角带(D3DPT_TRIANGLESTRIP),三角列方式的灯光显示是正确的,三角带的显示不正确,Chiyer说的自动归一化我加上去的.

渲染部分如下:
void CGraphics::Render3DObject()
{
        D3DMATERIAL9 mtrl;
        ZeroMemory(&mtrl, sizeof(D3DMATERIAL9));
        mtrl.Diffuse.r = mtrl.Ambient.r = 1.0f;
        mtrl.Diffuse.g = mtrl.Ambient.g = 1.0f;
        mtrl.Diffuse.b = mtrl.Ambient.b = 1.0f;
        mtrl.Diffuse.a = mtrl.Ambient.a = 1.0f;
        m_pD3DDevice->SetMaterial(&mtrl);

        D3DXVECTOR3 vecDir;
        D3DLIGHT9 light;
        ZeroMemory(&light, sizeof(D3DLIGHT9));
        light.Type       = D3DLIGHT_DIRECTIONAL;
        light.Diffuse.r  = 1.0f;
        light.Diffuse.g  = 1.0f;
        light.Diffuse.b  = 1.0f;
        vecDir = D3DXVECTOR3(0.5f, -1.0f, 1.0f);
        D3DXVec3Normalize((D3DXVECTOR3*)&light.Direction, &vecDir);
        light.Range       = 1000.0f;
        m_pD3DDevice->SetLight(0, &light);
        m_pD3DDevice->LightEnable(0, TRUE);
        m_pD3DDevice->SetRenderState(D3DRS_LIGHTING, TRUE);
        m_pD3DDevice->SetRenderState(D3DRS_AMBIENT, 0xff505050);
        m_pD3DDevice->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);

        D3DXMATRIXA16 matWorld;
        D3DXMatrixIdentity(&matWorld);
        m_pD3DDevice->SetTransform( D3DTS_WORLD, &matWorld );
        D3DXMATRIX matcamera;
        camera.GetViewMatrix(&matcamera);
        m_pD3DDevice->SetTransform(D3DTS_VIEW, &matcamera);
        D3DXMATRIXA16 matProj;
        D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/4, (float)(800)/600, 1.0f, 1000.0f);
        m_pD3DDevice->SetTransform( D3DTS_PROJECTION, &matProj );

        D3DVIEWPORT9 vp = { 0, 0, 800, 600, 0.0f, 1.0f };
        m_pD3DDevice->SetViewport(&vp);

        CTexture* pTexture = m_pTextureManager->GetTexture(1004);
        if(!pTexture)
                return;
        if(pTexture->AutoLoad())
        {
                m_pD3DDevice->SetTexture(0, pTexture->GetTexture());
        }
        m_pD3DDevice->SetRenderState(D3DRS_NORMALIZENORMALS, true);
        m_pD3DDevice->SetStreamSource(0, g_pVB, 0, sizeof(CustomVertex));
        m_pD3DDevice->SetFVF(CUSTOMFVF);
        m_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 15);
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 04:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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