当前位置: 首页 > 知识库问答 >
问题:

使用LWJGL OpenGL制作球体?

高增
2023-03-14

我想画一个球体并对它进行纹理,我用三角形来画它,当我试图对它进行纹理时,有些三角形没有被覆盖

我用这个函数来生成坐标

public void createSolidSphere()
    {
        float R = (float) (1./(float)(rings-1));
        float S = (float) (1./(float)(sectors-1));
        int r, s;
        int texCoordsIndex = -1;
        int verticesIndex = -1;
        int normalsIndex = -1;
        int indicesIndex = -1;
        for(r = 0; r < rings; r++) for(s = 0; s < sectors; s++) {
            float y = (float)Math.sin( -Math.PI/2 + Math.PI * r * R );
            float x = (float)Math.cos(2*Math.PI * s * S) * (float)Math.sin( Math.PI * r * R );
            float z = (float)Math.sin(2*Math.PI * s * S) * (float)Math.sin( Math.PI * r * R );

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

            vertices[++verticesIndex] = x * radius;
            vertices[++verticesIndex] = y * radius;
            vertices[++verticesIndex] = z * radius;

            normals[++normalsIndex] = x;
            normals[++normalsIndex] = y;
            normals[++normalsIndex] = z;
        }
        for(r = 0; r < rings; r++) for(s = 0; s < sectors; s++) {


            indices[++indicesIndex] = r * sectors + (s+1);
            indices[++indicesIndex] = (r+1) * sectors + (s+1);
            indices[++indicesIndex] = (r+1) * sectors + s;
        }
    }

共有1个答案

薛彭薄
2023-03-14

你必须画四角而不是三角形。一个四边形可以由2个三角形组成。
每个四边形由4个点组成:

0: r * sectors + (s+1)
1: (r+1) * sectors + (s+1)
2: (r+1) * sectors + s
3: r * sectors + s

这4个点可以排列成2个三角形:

    2           1
     + +-------+
     | \ \     |
     |   \ \   |
     |     \ \ |
     +------+  +
    3           0

您必须为每个四方添加6个索引,而不是3个:

for(r = 0; r < rings; r++) for(s = 0; s < sectors; s++) {

    // triangle 1
    indices[++indicesIndex] = r * sectors + (s+1);
    indices[++indicesIndex] = (r+1) * sectors + (s+1);
    indices[++indicesIndex] = (r+1) * sectors + s;

    // triangle 2
    indices[++indicesIndex] = r * sectors + (s+1);
    indices[++indicesIndex] = (r+1) * sectors + s;
    indices[++indicesIndex] = r * sectors + s+;
}
 类似资料:
  • 问题内容: 有人有绘制椭球体的样例代码吗?球体有一个 在“matplotlib”网站上,但椭球体没有。我正试图策划 其中“c”是定义椭球体的常量(如10)。我试过了 route,修改了公式,使’z’在一边,但是 `sqrt是个问题。“matplotlib”球体示例适用于角度“u,v”, 但我不知道如何计算椭球体。 问题答案: 下面是如何通过球坐标实现的: 上面的程序实际上生成了一个更好看的“正方形

  • 最近,我试图用pyplot/julia绘制一个球体,不幸的是,它比我想象的要难。可能积分生成有问题,但我不明白为什么我的实现不起作用。尽管使用原始python代码一切都很好。 我已经尝试将matplotlib曲面图doc中的demo2改编为MWE: 那么,我的Julia实现到底出了什么问题?

  • 我是一个相当新开发的新泽西客户,在一些测试中遇到了一些问题。首先,我可能应该提到,我的应用程序都是客户端的,根本没有服务器端的东西。 我的问题是,我想创建实例< code > InboundJaxrsResponse 的< code>Response对象,到目前为止,我一直试图通过使用< code>Mockito和< code > Response builder . build()模拟< cod

  • 本文向大家介绍python pygame实现球球大作战,包括了python pygame实现球球大作战的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python pygame球球大作战的具体代码,供大家参考,具体内容如下 球球大作战:(大球吃小球,代码如下:) 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍jquery制作 随机弹跳的小球特效,包括了jquery制作 随机弹跳的小球特效的使用技巧和注意事项,需要的朋友参考一下 以下是源码:

  • 问题内容: 谁能帮我解释为什么Java代码出现问题并一次性打印所有数据,而不是将每个数据块都作为javascript代码优先 Java代码: JavaScript :(打开页面http://jerseyexample- ravikant.rhcloud.com/rest/jws ,然后按F12并在控制台中运行以下内容,不允许其他域进行javascript调用) 编辑:只是为了帮助它也将正常的Jav