gpt4 book ai didi

java - 在 JOGL 中渲染纹理球体

转载 作者:行者123 更新时间:2023-11-30 07:35:39 24 4
gpt4 key购买 nike

我已经花了几个小时寻找在 JOGL 中绘制纹理球体的好方法。我所需要的只是一个正确的方向或一些对某人有用的代码。到目前为止我能找到的只是 helloTexture (虽然它有效,但它显然不是一个球体),是否有办法将其转换为球体,或者我应该在其他地方碰碰运气?

最佳答案

这是我为您写的,自从我修改它以与 GL_TRIANGLES 一起使用以来,它尚未经过测试,请尝试让我知道

radius 是球体半径,rings 是水平切片,sectors 是垂直切片

private void createGeometry(float radius, short rings, short sectors)   {

float R = 1f / (float)(rings - 1);
float S = 1f / (float)(sectors - 1);
short r, s;
float x, y, z;

points = new float[rings * sectors * 3];
normals = new float[rings * sectors * 3];
texcoords = new float[rings * sectors * 2];

int t = 0, v = 0, n = 0;
for(r = 0; r < rings; r++) {
for(s = 0; s < sectors; s++) {
x = (float) (Math.cos(2 * Math.PI * s * S) * Math.sin(Math.PI * r * R ));
y = (float) Math.sin(-Math.PI / 2 + Math.PI * r * R );
z = (float) (Math.sin(2 * Math.PI * s * S) * Math.sin(Math.PI * r * R ));

texcoords[t++] = s * S;
texcoords[t++] = r * R;

points[v++] = x * radius;
points[v++] = y * radius;
points[v++] = z * radius;

normals[n++] = x;
normals[n++] = y;
normals[n++] = z;
}


}
int counter = 0;
indices = new short[rings * sectors * 6];
for(r = 0; r < rings - 1; r++){
for(s = 0; s < sectors-1; s++) {
indices[counter++] = (short) (r * sectors + s);
indices[counter++] = (short) (r * sectors + (s + 1));
indices[counter++] = (short) ((r + 1) * sectors + (s + 1));
indices[counter++] = (short) ((r + 1) * sectors + (s + 1));
indices[counter++] = (short) (r * sectors + (s + 1));
indices[counter++] = (short) ((r + 1) * sectors + s);
}
}
}

关于java - 在 JOGL 中渲染纹理球体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35436736/

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