游戏开发论坛

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

在写地形的法向量时遇到一点困惑,希望高人解答,谢谢

[复制链接]

9

主题

75

帖子

112

积分

注册会员

Rank: 2

积分
112
发表于 2008-7-17 19:44:00 | 显示全部楼层 |阅读模式
地形假如一共有64*64个顶点,64*64个顶点中,大多数点共享4个面,很小一部分共享2个面,如果我要在创建顶点缓冲时就写入法向量的话,需要写太多顶点,于是我把顶点的法向量计算和顶点缓冲区法向量的赋值放到索引缓冲中去,代码如下:

if(FAILED(Device->CreateIndexBuffer(this->num_col * this->num_row * 6 * sizeof(WORD), 0, D3DFMT_INDEX16,D3DPOOL_MANAGED,&m_pIndexBuffer,NULL)))
{
   MessageBox(NULL,"","",1);
}
m_pIndexBuffer->Lock(0, 0, (void**)&v, 0);
int index = 0;
for(int i=0; i<this->num_col; i++)
{
   for(int j=0; j<this->num_row; j++)
   {
    v[index] = i * (this->num_row+1) + j;
    v[index+1] = i * (this->num_row+1) + j + 1;
    v[index+2] = (i+1) * (this->num_row+1) + j;

    D3DVECTOR temp;
    ComputeTriNormal(v[index], v[index+1], v[index+2], temp);
    vertex[i*(num_row+1) + j].nx = temp.x;
    vertex[i*(num_row+1) + j].ny = temp.y;
    vertex[i*(num_row+1) + j].nz = temp.z;

    v[index+3] = (i+1) * (this->num_row+1) + j;
    v[index+4] = i * (this->num_row+1) + j + 1;
    v[index+5] = (i+1) * (this->num_row+1) + j + 1;
   
    ComputeTriNormal(v[index+3], v[index+4], v[index+5], temp);
    vertex[i*(num_row+1) + j].nx = temp.x;
    vertex[i*(num_row+1) + j].ny = temp.y;
    vertex[i*(num_row+1) + j].nz = temp.z;

    index += 6;
   }
}
m_pIndexBuffer->Unlock();

其中ComputeTriNormal()函数是计算法向量的, vertex是顶点数据指针,这段代码能够达到要求,但是很迷惑的是,顶点的数据只有在锁定了顶点缓冲区时才能修改,但是我上面的代码,只锁定了索引缓冲区,却成功修改了顶点缓冲区的数据,感觉和书上讲的有点矛盾,我想的是,可能在锁定索引缓冲的时候同样也对顶点缓冲进行了锁定,于是重新写了一个程序,在锁定索引缓冲后去修改顶点缓冲区中数据的x,y,z坐标,但是不行,感到很困惑,为什么在非锁定状态下,修改顶点缓冲区数据的法向量能成功,但是修改X,Y,Z以及纹理坐标却不行,难道是DX特许了可以在非锁定状态下对顶点缓冲中的法向量进行操作??希望高人解答~~

5

主题

755

帖子

757

积分

高级会员

Rank: 4

积分
757
发表于 2008-7-19 14:21:00 | 显示全部楼层

Re:在写地形的法向量时遇到一点困惑,希望高人解答,谢谢

怎么可能。你不lock vertexbuffer. 你的 法线冲哪里来。

9

主题

75

帖子

112

积分

注册会员

Rank: 2

积分
112
 楼主| 发表于 2008-7-19 15:15:00 | 显示全部楼层

Re:在写地形的法向量时遇到一点困惑,希望高人解答,谢谢

我也不知道,我之前把vertexbuffer lock后得到了顶点指针vertex,但是后面我写入法线数据的时候已经把 vertexbuffer unlock了

9

主题

75

帖子

112

积分

注册会员

Rank: 2

积分
112
 楼主| 发表于 2008-7-19 16:02:00 | 显示全部楼层

Re:在写地形的法向量时遇到一点困惑,希望高人解答,谢谢

额..都两天才一个朋友回答~~~希望高人赐教啊~~~~这个问题让人睡觉不塌实啊~~~~

5

主题

755

帖子

757

积分

高级会员

Rank: 4

积分
757
发表于 2008-7-19 18:45:00 | 显示全部楼层

Re:在写地形的法向量时遇到一点困惑,希望高人解答,谢谢

估计是你逻辑错误。你lock后没有unlock继续用。或者你内存越界了。数据写到了本来不够到的地方。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-21 23:54

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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