GDI 中 FillRect 的标准方式是
Rectangle(hdc, x_, y_, x_ + width_, y_ + height_);
Run Code Online (Sandbox Code Playgroud)
但是我如何填充三角形?如果不使用其他资源,我将如何解决这个问题?
我只是想知道是否有任何方法可以对任何对象执行鼠标拾取检测。无论是生成的对象还是导入的对象。
[想法] - 我的想法是,场景中的每个对象都会进行迭代。检查鼠标射线是否与对象相交。为了检查相交,它将检查鼠标拾取光线与构成对象的三角形。
[优点] - 我相信这种方法的好处是,每个对象都可以通过鼠标拾取来检测,因为它们都继承自检测方法。
[缺点] - 我认为这个缺点主要是速度和方法非常昂贵。所以需要微调优化。
[情况] - 过去我读过有关鼠标拾取的内容,并且我也实现了鼠标拾取的一些基本形式。但所有这些都是蹩脚的工作,我并不为此感到自豪。今天又重新看了一些网上的资料。现在我看到很多使用颜色 ID 和着色器的鼠标选取。我不太热衷于这种方法。我更喜欢数学方面。
这是我用鼠标拾取的 ray thingamajig。
maths::Vector3 Camera::Raycast(s32 mouse_x, s32 mouse_y)
{
// Normalized Device Coordinates
maths::Vector2 window_size = Application::GetApplication().GetWindowSize();
float x = (2.0f * mouse_x) / window_size.x - 1.0f;
float y = 1.0f;
float z = 1.0f;
maths::Vector3 normalized_device_coordinates_ray = maths::Vector3(x, y, z);
// Homogeneous Clip Coordinates
maths::Vector4 homogeneous_clip_coordinates_ray = maths::Vector4(normalized_device_coordinates_ray.x, normalized_device_coordinates_ray.y, -1.0f, 1.0f);
// 4D Eye (Camera) Coordinates
maths::Vector4 camera_ray = maths::Matrix4x4::Invert(projection_matrix_) * homogeneous_clip_coordinates_ray;
camera_ray = …Run Code Online (Sandbox Code Playgroud)