gpt4 book ai didi

c++ - 如何从显式方程构造多边形?

转载 作者:搜寻专家 更新时间:2023-10-31 01:17:56 25 4
gpt4 key购买 nike

假设我有一个可以在 OpenGL 中表示对象形状的显式方程,我应该如何从显式方程中“绘制”出形状?

例如,我有这个明确的等式: enter image description here

uv 都是实数的成员。

然后我尝试在 OpenGL C++ 中执行此操作:

float maxParts = 20;

vector<float> point(3);

glBegin(GL_QUAD_STRIP);
for(int i=0; i<=maxParts; i++) {
float u = ((float)i/maxParts)*2*M_PI;
for(int j=-maxParts; j<=maxParts; j++) {
float v = (j/maxParts) * M_PI;
point[0] = cos(u) * (4.0+3.8*cos(v));
point[1] = sin(u) * (4.0+3.8*cos(v));
point[2] = (cos(v) + sin(v) - 1.0) * (1.0 + sin(v)) * log(1.0-M_PI*v/10.0) + 7.5 * sin(v);
glVertex3f(point[0], point[1], point[2]);
}
}
glEnd();

但事实证明它真的很糟糕。上面的代码在某种程度上给出了形状的轻微印象,但多边形没有正确呈现。我应该如何遍历 x、y 和 z 坐标的显式方程以从方程构建形状?

最佳答案

您通常会朝着正确的方向前进。但是你错过了关键的一步,你必须将补丁分成更小的四边形(镶嵌它)。因此,您不仅要迭代采样点,还要迭代补丁,并且必须为每个补丁生成 4 个采样点。

您还需要提供顶点法线。顶点法线通过 vector δ{x,y,z}/δuδ{x,y,z}/δv 的叉积给出。 p>

因评论而编辑

发射独立四边形的代码示例:

const int patches_x, patches_y;
const float patch_size_x, patch_size_y;
int px, py;
for(px = 0; px < patches_x; px++) for(py = 0; py < patches_y; py++) {
const float U = px * patch_size_x;
const float V = py * patch_size_y;
{
float u, v;
u = U - patch_size_x/2.0;
v = V - patch_size_y/2.0;
emit_quad_vertex(u, v);
}
{
float u, v;
u = U + patch_size_x/2.0;
v = V - patch_size_y/2.0;
emit_quad_vertex(u, v);
}
{
float u, v;
u = U + patch_size_x/2.0;
v = V + patch_size_y/2.0;
emit_quad_vertex(u, v);
}
{
float u, v;
u = U - patch_size_x/2.0;
v = V + patch_size_y/2.0;
emit_quad_vertex(u, v);
}
}

关于c++ - 如何从显式方程构造多边形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7704528/

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