函数纹理国际象棋棋盘纹理&粗布纹理)MFC实现  源码百度云下载

  1. 国际象棋棋盘纹理(效果图见最后)
 1 //国际象棋纹理函数  2 //g(u, v) = a , 向下取整(8u)+向下取整(8v) 为 偶数  3 //g(u, v) = b ,向下取整(8u)+向下取整(8v) 为 奇数
 4 void CChessGiagView::DrawChess(double a, double b, double step)  5 {  6     CDC * pDC = GetDC();  7     //自定义二维坐标系
 8  CRect rect;  9     GetClientRect(&rect); 10     pDC->SetMapMode(MM_ANISOTROPIC); 11     pDC->SetWindowExt(rect.Width(), rect.Height()); 12     pDC->SetViewportExt(rect.Width(), -rect.Height()); 13     pDC->SetViewportOrg(rect.Width()/2, rect.Height()/2); 14     rect.OffsetRect(-rect.Width()/2, -rect.Height()/2); 15     pDC->TextOut(-350, 200, "国际象棋棋盘纹理"); 16 
17     double u, v; 18     for(u=0; u<=1.0; u+=step) 19  { 20         for(v=0; v <= 1.0; v+=step) 21  { 22             if((int(floor(u*8)) + int(floor(v*8))) %2 == 0)//偶数颜色a
23  { 24                 pDC->SetPixelV(Round(u*200-400), Round(v*200-100), RGB(a*255, a*255, a*255));//u系数修改大小,减数调节显示位置
25  } 26             else//奇数颜***
27  { 28                 pDC->SetPixelV(Round(u*200-400), Round(v*200-100), RGB(b*255, b*255, b*255));//u系数修改大小,减数调节显示位置
29  } 30  } 31  } 32     //输出相关参数
33  CString str_a, str_b; 34     str_a.Format("%.1f", a); 35     str_b.Format("%.1f", b); 36     pDC->TextOut(-350, -200, "a="+ str_a+", b="+str_b); 37 }

  2. 粗布纹理 (效果图见最后) 

 1 //粗布纹理函数: f(u, v) = A((cos(pu) + cos(qv)))  2 //u, v=[0, 1]; A=[0, 1]随机变量; p, q频率系数
 3 void CChessGiagView::DrawCloth(int p, int q)  4 {  5     CDC * pDC = GetDC();  6     //自定义二维坐标系
 7  CRect rect;  8     GetClientRect(&rect);  9     pDC->SetMapMode(MM_ANISOTROPIC); 10     pDC->SetWindowExt(rect.Width(), rect.Height()); 11     pDC->SetViewportExt(rect.Width(), -rect.Height()); 12     pDC->SetViewportOrg(rect.Width()/2, rect.Height()/2); 13     rect.OffsetRect(-rect.Width()/2, -rect.Height()/2); 14     pDC->TextOut(200, 200, "粗布纹理"); 15 
16     double u, v; 17     for(u=0; u<=1; u+=0.001) 18  { 19         for(v=0; v<=1.0; v+=0.001) 20  { 21             double A = double(rand())/RAND_MAX; // A=[0, 1]
22             double f = A*((cos(p*u) + (cos(q*v)))); //颜色
23             pDC->SetPixelV(Round(u*200 + 150), Round(v*200-100), RGB(f*255, f*255, f*255)); 24  } 25  } 26     //输出相关参数
27  CString str_p, str_q; 28     str_p.Format("%d", p); 29     str_q.Format("%d", q); 30     pDC->TextOut(200, -200, "p="+ str_p+", q="+str_q); 31 }

  3. 效果

  4. 补充说明:如果需要调节图像的颜色(示例仅为灰度图像), 那么就将RGB 的一个分量置为固定值,比如要红色的图像,就将R=255.

        

VC++ 6.0 编译通过,VC++ 永不过时!