gpt4 book ai didi

C++ OpenGL : How to make a second circle over the cylinder?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:39:53 24 4
gpt4 key购买 nike

所以基本上我有一个带底座的圆柱体(圆柱体下面有一个圆圈),但上面没有圆圈。我想让它成为一个封闭的圆柱体。

这是我的 bool CMyApp::Init() 函数的重要部分:

Vertex vert[(N+1)*(M+1) + N+2];   //NxM rectangle for our parametric equation
for (int i=0; i<=N; ++i)
for (int j=0; j<=M; ++j)
{
float u = i/(float)N;
float v = j/(float)M;

vert[i + j*(N+1)].p = GetUV(u, v);
vert[i + j*(N+1)].c = glm::normalize( vert[i + j*(N+1)].p );
}

vert[(N + 1)*(M + 1)].p = glm::vec3(0, 0, 0); //center point for cone base
vert[(N + 1)*(M + 1)].c = glm::vec3(0, 0, 0);
for (int i = 0; i <= N; i++) {
vert[(N + 1)*(M + 1) + 1 + i].p = vert[(N)-i].p; //cone base
vert[(N + 1)*(M + 1) + 1 + i].c = vert[(N)-i].c;
}

渲染函数:

glDrawElements( GL_TRIANGLES,       
3*2*(N)*(M),
GL_UNSIGNED_SHORT,
0);

glDrawArrays(GL_TRIANGLE_FAN, (N + 1)*(M + 1) + 1, (N + 2)); //draw cone base

“圆锥底”是因为我从“绘制圆锥”项目开始这个项目。

如何在圆柱体上方制作第二个圆圈?

编辑:M,N: 常量数(20 和 10)

我的参数方程(这是一个名为 GetUV() 的函数):

u *= 2*3.1415f;
float cu = cosf(u), su = sinf(u), cv = cosf(v), sv = sinf(v);
float M = 2.f;
float r = 0.5;
float m = v*M;

return glm::vec3(r*sinf(u), m, r*cosf(u));

我如何创建索引(在 Init() 函数内):

 GLushort indices[3*2*(N)*(M)];
for (int i=0; i<N; ++i)
for (int j=0; j<M; ++j)
{
indices[6*i + j*3*2*(N) + 0] = (i) + (j)* (N+1);
indices[6*i + j*3*2*(N) + 1] = (i+1) + (j)* (N+1);
indices[6*i + j*3*2*(N) + 2] = (i) + (j+1)*(N+1);
indices[6*i + j*3*2*(N) + 3] = (i+1) + (j)* (N+1);
indices[6*i + j*3*2*(N) + 4] = (i+1) + (j+1)*(N+1);
indices[6*i + j*3*2*(N) + 5] = (i) + (j+1)*(N+1);
}

最佳答案

绘制另一个圆帽的最简单方法是仅更改圆的模型矩阵并再次进行绘制调用。所以如果你在调用 glDrawArrays() 之前做这样的事情:

glm::mat4 modelViewMatrix = calculateModelViewMatrix();
glUniformMatrix4fv(modelViewLocation, 1, FALSE, modelViewMatrix);

做同样的事情,但转换 modelViewMatrix 使其位于圆柱体的另一端。

关于C++ OpenGL : How to make a second circle over the cylinder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53354308/

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