小编Jek*_*asG的帖子

C++ Windows32 GDI 填充三角形

GDI 中 FillRect 的标准方式是

Rectangle(hdc, x_, y_, x_ + width_, y_ + height_);
Run Code Online (Sandbox Code Playgroud)

但是我如何填充三角形?如果不使用其他资源,我将如何解决这个问题?

c++ windows gdi

2
推荐指数
1
解决办法
4199
查看次数

对任何对象进行 OpenGL 光线投射

我只是想知道是否有任何方法可以对任何对象执行鼠标拾取检测。无论是生成的对象还是导入的对象。

[想法] - 我的想法是,场景中的每个对象都会进行迭代。检查鼠标射线是否与对象相交。为了检查相交,它将检查鼠标拾取光线与构成对象的三角形。

[优点] - 我相信这种方法的好处是,每个对象都可以通过鼠标拾取来检测,因为它们都继承自检测方法。

[缺点] - 我认为这个缺点主要是速度和方法非常昂贵。所以需要微调优化。

[情况] - 过去我读过有关鼠标拾取的内容,并且我也实现了鼠标拾取的一些基本形式。但所有这些都是蹩脚的工作,我并不为此感到自豪。今天又重新看了一些网上的资料。现在我看到很多使用颜色 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)

c++ opengl math 3d game-engine

1
推荐指数
1
解决办法
1万
查看次数

标签 统计

c++ ×2

3d ×1

game-engine ×1

gdi ×1

math ×1

opengl ×1

windows ×1