我想在Opengl中渲染一个圆柱体。为此,我写了一个简单的算法,那 通过参数radius,height,xSubDivisions和ySubDivisions为我生成点网格: (Java)的
for(int yDivision = 0; yDivision < yDivisionCount; yDivision++){
for(int xDivision = 0; xDivision < xDivisionCount; xDivision++){
float line[] = getVboLine(xDivision, yDivision, radius, height, xDivisionCount, yDivisionCount);
string.append(line[0] + ", " + line[1] + ", " + line[2] + ", " + line[3] + ", " + line[4] + ", ");
}
}
public float[] getVboLine(int xDivision, int yDivision, float radius, float height, int xDivisionCount, int yDivisionCount){
float xDegrees = 360.0f / xDivisionCount * xDivision;
float xRadian = (float) Math.toRadians(xDegrees);
float x = (float) Math.sin(xRadian) * radius;
float z = (float) Math.cos(xRadian) * radius;
float y = (float) yDivision * (height / (yDivisionCount - 1));
float s = xDegrees * (1.0f / 360.0f);
float t = yDivision * (1.0f / (yDivisionCount - 1));
return new float[]{
x, y, z, s, t
};
}
结果实际上是一个圆柱体,(我创建了一个IBO来渲染这个点),但有时候,x和yDivisions的输入不同,它有一个奇怪的差距。 我找不到规则,但我发现这个错误的值是200,100。 要调试我只渲染点。结果是:
这怎么可能?缺少一点(我用油漆添加了芦苇圈)。 算法的问题在哪里?
答案 0 :(得分:1)
我不是JAVA编码器,但你正在混合int和float一起
xDegrees = 360.0f / xDivisionCount * xDivision
[float] [float] [int] [int]
xDegrees = float(360*xDivision)/float(xDivisionCount)
xDivisionCount
而不是较大的一个错误断点
if (|distance-some_avg_distance|>1e-10)
Blending