游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1349|回复: 0

Draw Mesh by Triangle List

[复制链接]

414

主题

611

帖子

621

积分

高级会员

Rank: 4

积分
621
发表于 2008-1-19 01:07:00 | 显示全部楼层 |阅读模式
That is special case for my research about Adpative Shadow Maps.
I must do that first. But I encounter a problem the result is not like the one I want. I think maybe my code has some mistakes. Could somebody take some time to my source code.


  1.         struct ASM_VERTEX
  2.         {
  3.                 D3DXVECTOR3 p, n;
  4.                 float u;
  5.                 float v;
  6.         };
  7.        
  8.         ASM_VERTEX*                m_pVertices;
  9.         DWORD                        m_dwNumFaces;

  10.         WORD*       pIndices;
  11.         LPD3DXMESH pMesh;
  12.         DWORD nFVF;
  13.         DWORD dwNumFaces;

  14.         nFVF=m_MeshShip.GetLocalMesh()->GetFVF();//D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1

  15.         FAILED(m_MeshShip.GetLocalMesh()->CloneMeshFVF(
  16.                 D3DXMESH_SYSTEMMEM,
  17.                 nFVF,
  18.                 pd3dDevice,
  19.                 &pMesh
  20.                 ));

  21.         dwNumFaces=pMesh->GetNumFaces();
  22.         m_dwNumFaces = 4*dwNumFaces;

  23.         ASM_VERTEX * pVertices;
  24.         D3DXVECTOR3 *vNormal;
  25.        
  26.         m_pVertices = new ASM_VERTEX[3*m_dwNumFaces];
  27.         vNormal = new D3DXVECTOR3[dwNumFaces];

  28.         // lock buffers
  29.         pMesh->LockVertexBuffer( 0L, (LPVOID*)&pVertices );
  30.         pMesh->LockIndexBuffer ( 0L, (LPVOID*)&pIndices );

  31.         for(DWORD i=0; i< dwNumFaces; i++ )
  32.         {
  33.                 D3DXVECTOR3 v0 = pVertices[pIndices[3*i+0]].p;
  34.                 D3DXVECTOR3 v1 = pVertices[pIndices[3*i+1]].p;
  35.                 D3DXVECTOR3 v2 = pVertices[pIndices[3*i+2]].p;

  36.                 // calculate normal
  37.                 D3DXVECTOR3 vCross1(v1-v0);
  38.                 D3DXVECTOR3 vCross2(v2-v1);
  39.                 D3DXVec3Cross( &vNormal[i], &vCross1, &vCross2 );
  40.                 D3DXVec3Normalize(&vNormal[i],&vNormal[i]);

  41.                 // store a face               
  42.                 m_pVertices[pIndices[3*i+0]].p = v0;
  43.                 m_pVertices[pIndices[3*i+1]].p = v1;
  44.                 m_pVertices[pIndices[3*i+2]].p = v2;
  45.                 m_pVertices[pIndices[3*i+0]].n = vNormal[i];
  46.                 m_pVertices[pIndices[3*i+1]].n = vNormal[i];
  47.                 m_pVertices[pIndices[3*i+2]].n = vNormal[i];
  48.         }

  49.         pMesh->UnlockVertexBuffer();
  50.         pMesh->UnlockIndexBuffer();

  51.         pMesh->Release();

  52.         //render
  53.         pd3dDevice->SetFVF(nFVF);

  54.         pd3dDevice->DrawPrimitiveUP(
  55.                 D3DPT_TRIANGLELIST,
  56.                 m_dwNumFaces,
  57.                 m_pVertices,
  58.                 sizeof(ASM_VERTEX)
  59.                 );

  60.         SAFE_DELETE(m_pVertices);
  61.         SAFE_DELETE(vNormal);
复制代码


I print the result of right and error as below website:

http://www.game.csie.ndhu.edu.tw/~akira/else/space_ok.jpg
http://www.game.csie.ndhu.edu.tw/~akira/else/space_err.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-19 23:38

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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