gpt4 book ai didi

c++ - 多次生成一个插入对象

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

我正在尝试为我的游戏创建 5x5x5 的立方体。现在,我有这段代码,它在相机 View 中只显示一个立方体。显然,它只被“插入”了一次。

void onIdle() override {

// Animate using time when activated
if (animationEnabled) time = (float) glfwGetTime();

// Set gray background
glClearColor(.5f, .5f, .5f, 0);

// Clear depth and color buffers
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// Create object matrices
auto cubeMat = rotate(mat4{}, time, {1.0f, 1.0f, 0.0f});
//auto cubeMat = mat4(1.0f);
auto sphereMat = rotate(mat4{}, (float)time, {0.5f, 1.0f, 0.0f});
cubeMat = scale(cubeMat, {0.2f, 0.2f, 0.2f});

// Camera position/rotation - for example, translate camera a bit backwards (positive value in Z axis), so we can see the objects
auto cameraMat = translate(mat4{}, {0, 0, -4.0f});

program.setUniform("ViewMatrix", cameraMat);

// Update camera position with perspective projection
program.setUniform("ProjectionMatrix", perspective((PI / 180.f) * 60.0f, 1.0f, 0.1f, 10.0f));

program.setUniform("LightDirection", normalize(vec3{1.0f, -1.0f, 1.0f}));
// Render objects

// Central box
program.setUniform("Texture", cubeTexture);
for (int i = 0; i < 5*5*5; ++i)
{
program.setUniform("ModelMatrix", cubeMat[i]);
cube.render();
}
}
};

如何生成 5x5x5 的立方体,这样我就不必多次手动插入它们?此外,每次插入都应为每个立方体指定其特定位置,以创建一个充满小 5x5x5 立方体(如魔方)的大型 3D 立方体,甚至更好,这里有一个很好的 example .

最佳答案

您需要一个为单个立方体生成模型矩阵的函数:

mat4 CubeMat( int x, int y, int z )
{
mat4 cubeMat;
//cubeMat = rotate(cubeMat, time, {1.0f, 1.0f, 0.0f});
//cubeMat = scale(cubeMat, {0.2f, 0.2f, 0.2f});
cubeMat = translate(cubeMat, {1.5f*(float)x-4.0f, 1.5f*(float)y-4.0f, 1.5f*(float)z-4.0f});
return cubeMat;
}

你必须调用 cube.render(); 5*5*5 次并且你必须设置 5*5*5 个单独的模型矩阵:

for (int x = 0; x < 5; ++x)
{
for (int y = 0; y < 5; ++y)
{
for (int z = 0; z < 5; ++z)
{
mat4 cubeMat = CubeMat(x, y, z);
program.setUniform("ModelMatrix", cubeMat);
cube.render();
}
}
}

关于c++ - 多次生成一个插入对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46921429/

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