首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 平面设计 > 图形图像 >

图形学 Direct3D的3D模型处置1

2013-10-25 
图形学 Direct3D的3D模型处理1 用A[n]代表Attibute Buffer, 那么三角形0属于子网0,其Attribute Buffer号为

图形学 Direct3D的3D模型处理1

 
用A[n]代表Attibute Buffer, 那么三角形0属于子网0,其Attribute Buffer号为0,即A[0],三角形1属于子网4,因为A[1]=4……三角形n属于子网2,A[n]=2;

Attibut Buffer同样可以锁定读取的:

DWORD* buffer = 0;Mesh->LockAttributeBuffer(lockingFlags, &buffer);      // Read or write to attribute buffer...Mesh->UnlockAttributeBuffer();

 

下面看看如何在Direct3D中画模型

DrawSubset就是个画三角形几何图形的函数,可以带一个参数,这个参数为子网号。

Mesh->DrawSubset(0);//画子网号为0的所有三角形

所以我们可以用一个简单的循环就把所有模型都画出来。下面是个例子,而且每个子网都有自己的材质和纹理。

HR(mFX->BeginPass(0));for(int j = 0; j < mMtrl.size(); ++j){      HR(mFX->SetValue(mhMtrl, &mMtrl[j], sizeof (Mtrl)));      if(mTex[j] != 0)      {            HR(mFX->SetTexture(mhTex, mTex[j]));      }      else      {            HR(mFX->SetTexture(mhTex, mWhiteTex));      }      HR(mFX->CommitChanges());      HR(mMesh->DrawSubset(j));}HR(mFX->EndPass());

如果子网没有纹理的话,我们就把纹理设置为纯白色。因为材质颜色和光照颜色是作与运算的,所以白色值相当于1,1与任何数作与运算都等于任何数,也就是说没有纹理颜色的物体等于光照颜色。

// Combine the color from lighting with the texture color.float3 color = (ambient + diffuse)*texColor.rgb + spec;

 

热点排行