我在C中制作一个应该生成三维骰子的简单测试应用程序。我将使用OpenGL进行实际绘制,但我无法弄清楚如何实际生成顶点。当然,这个测试的重点是看我的算法是否有效,但我发现了一个我无法解决的重大逻辑错误。有人可以指点我一篇文章,网站或者解释这个概念的东西吗?如果没有,虽然我更愿意自己做实际的实现,但C代码是可以接受的。
基本上,这是我在忘记我为算法做的事情之前所做的事情:
void calculateVertices(int sides) {
BOOL isDone = FALSE;
int vectorsPerSide = 3;
VDVector3f *vertices = malloc((sizeof(VDVector3f) * (sides + 1)));
VDVector3f *normals = malloc((sizeof(VDVector3f) * (sides + 1)));
while (!isDone) {
// Start by positioning the first vertex.
vertices[0] = VDVector3fMake(0.0, 0.0, 1.0);
for (int index = 1; index <= sides; index ++) {
}
// Not a match, increase the number of vectors
vectorsPerSide ++;
}
}
基本上,它会循环,直到找到匹配项。这对我来说听起来效率低下,但我对如何做到这一点没有其他想法。第一个顶点实际上将从末尾的数组中删除;我打算用它来创建第一面,这本来可以用来正确定位其他面。
我的主要目标是能够将数字(如30)传递给它,并让它自动设置顶点。我会不对单面和双面骰子提出保护,因为我有一些特别的想法。我会将这些顶点输入其他地方。
提前感谢您的帮助!
顺便说一句,我有一个算法可以规范化完成的顶点数组。你不必费心去帮助它。
答案 0 :(得分:2)
我认为这不可能概括这一点。例如,你如何做出公平的5或9面死?我不认为我见过这样的事情。在维基百科上快速搜索表明,柏拉图固体可能就是你所追求的。 http://en.wikipedia.org/wiki/Platonic_solid