gpt4 book ai didi

c++ - 旋转一个二维圆函数

转载 作者:行者123 更新时间:2023-11-30 04:46:09 25 4
gpt4 key购买 nike

我正在尝试将旋转添加到我的函数中。

我不知道如何在我的函数中旋转它

void draw_filled_circle(const RenderListPtr& render_list, const Vec2& position, float radius, CircleType type, Color color, float rotate){
float pi;
if (type == FULL) pi = D3DX_PI; // Full circle
if (type == HALF) pi = D3DX_PI / 2; // 1/2 circle
if (type == QUARTER) pi = D3DX_PI / 4; // 1/4 circle

const int segments = 32;
float angle = rotate * D3DX_PI / 180;
Vertex v[segments + 1];

for (int i = 0; i <= segments; i++){
float theta = 2.f * pi * static_cast<float>(i) / static_cast<float>(segments);
v[i] = Vertex{
position.x + radius * std::cos(theta),
position.y + radius * std::sin(theta),
color
};
}
add_vertices(render_list, v, D3DPT_TRIANGLEFAN);
}

最佳答案

一般来说,您不会通过直接修改顶点来旋转任何东西。相反,您使用矩阵(模型- View -投影矩阵)来转换数据。 3 个组合矩阵归结为:

  • 模型矩阵:这是用于在世界空间中定位和定向几何体的矩阵。如果只是旋转,则将此矩阵设置为旋转矩阵。
  • View 矩阵:这是相机位置的逆矩阵。
  • 投影矩阵:这会将 3D 顶点位置展平为屏幕上的 2D 坐标。

您通常将所有 3 个矩阵组合成一个 MVP 矩阵,您可以使用该矩阵在单个操作中执行所有 3 个转换。本文档解释了一些基础知识:https://learn.microsoft.com/en-us/windows/win32/dxtecharts/the-direct3d-transformation-pipeline

D3DXMATRIX proj_mat; //< set with projection you need
D3DXMATRIX view_mat; //< invert the matrix for the camera position & orientation
D3DXMATRIX model_mat; //< set the rotation here
D3DXMATRIX MVP;
MVP = model_mat * view_mat * proj_mat; //< combine into a single MVP to set on your shader

如果您真的想要旋转缓冲区中的顶点数据,那么您可以将 model_mat 设置为某个旋转矩阵,然后将每个顶点乘以 model_mat。这样做的问题是更新速度非常慢(您需要每帧重建整个缓冲区,并且 GPU 具有通过矩阵转换顶点的电路设计)

关于c++ - 旋转一个二维圆函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56944398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com