函数纹理(国际象棋棋盘纹理&粗布纹理)MFC实现 源码百度云下载
- 国际象棋棋盘纹理(效果图见最后)
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++ 永不过时!