- 最后登录
- 2021-7-6
- 注册时间
- 2012-12-27
- 阅读权限
- 90
- 积分
- 76145
![Rank: 8](static/image/common//star_level3.gif) ![Rank: 8](static/image/common//star_level3.gif)
- 纳金币
- 53464
- 精华
- 316
|
- Vector3ForNew A(64.0f,0.0f,1.0f);//三角形定点坐标
- Vector3ForNew B(0.0f,128.0f,1.0f);//三角形定点坐标
- Vector3ForNew C(128.0f,128.0f,1.0f);//三角形定点坐标
- for (int a=0;a<128;a++)
- {
- for (int b=0;b<128;b++)
- {
- COLORREF kcolor = GetPixel(test.GetDC(),a,b);
- if (CLR_INVALID==kcolor)
- {
- //获取像素颜色失败
- }
- else
- {
- float af = (float)a;
- float bf = (float)b;
- Vector3ForNew P(af,bf,1.0f);
- if (PointinTriangle(A,B,C,P))
- {
- test.SetPixelRGB(a,b,255,0,0);//替换红色,让三角形为红色
- }
- else
- {
- test.SetPixelRGB(a,b,0,0,0);//黑色
- }
- }
- }
- }
- bool UserDefinedMenu::PointinTriangle(Vector3ForNew A, Vector3ForNew B, Vector3ForNew C, Vector3ForNew P)
- {
- Vector3ForNew v0 = C - A ;
- Vector3ForNew v1 = B - A ;
- Vector3ForNew v2 = P - A ;
-
- float dot00 = v0.Dot(v0) ;
- float dot01 = v0.Dot(v1) ;
- float dot02 = v0.Dot(v2) ;
- float dot11 = v1.Dot(v1) ;
- float dot12 = v1.Dot(v2) ;
-
- float inverDeno = 1 / (dot00 * dot11 - dot01 * dot01) ;
-
- float u = (dot11 * dot02 - dot01 * dot12) * inverDeno ;
- if (u < 0 || u > 1) // if u out of range, return directly
- {
- return false ;
- }
-
- float v = (dot00 * dot12 - dot01 * dot02) * inverDeno ;
- if (v < 0 || v > 1) // if v out of range, return directly
- {
- return false ;
- }
-
- return u + v <= 1 ;
- }
- // 3D vector
- class Vector3ForNew
- {
- public:
- Vector3ForNew(float fx, float fy, float fz)
- :x(fx), y(fy), z(fz)
- {
- }
-
- // Subtract
- Vector3ForNew operator - (const Vector3ForNew& v) const
- {
- return Vector3ForNew(x - v.x, y - v.y, z - v.z) ;
- }
-
- // Dot product
- float Dot(const Vector3ForNew& v) const
- {
- return x * v.x + y * v.y + z * v.z ;
- }
-
- // Cross product
- Vector3ForNew Cross(const Vector3ForNew& v) const
- {
- return Vector3ForNew(
- y * v.z - z * v.y,
- z * v.x - x * v.z,
- x * v.y - y * v.x ) ;
- }
-
- public:
- float x, y, z ;
- };
复制代码 |
|