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

球体上的OpenGL纹理

梁嘉祥
2023-03-14

有了这个功能,我可以在Android系统的OpenGL ES 1.0中创建一个球体:

public Ball(GL10 gl, float radius) 
{
    ByteBuffer bb = ByteBuffer.allocateDirect(40000);
    bb.order(ByteOrder.nativeOrder());

    sphereVertex = bb.asFloatBuffer();
    points = build();
}

private int build() 
{
    double dTheta = STEP * Math.PI / 180;
    double dPhi = dTheta;

    int points = 0;

    for(double phi = -(Math.PI/2); phi <= Math.PI/2; phi+=dPhi)
    {
        for(double theta = 0.0; theta <= (Math.PI * 2); theta+=dTheta)
        {
            sphereVertex.put((float) (raduis * Math.sin(phi) * Math.cos(theta)));
            sphereVertex.put((float) (raduis * Math.sin(phi) * Math.sin(theta)));
            sphereVertex.put((float) (raduis * Math.cos(phi)));

            points++;
        }
    }

    sphereVertex.position(0);
    return points;
}

public void draw() 
{
    texture.bind();

    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, sphereVertex);

    gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, points);
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}

我现在的问题是,我想在球体上使用这个纹理,但是只创建了一个黑色的球(当然,因为右上角是黑色的)。我使用这个纹理坐标是因为我想使用整个纹理:

0|0    0|1    1|1    1|0

要正确使用纹理,我需要做什么?

共有2个答案

夏侯昊明
2023-03-14

只需下载并使用代码,您就可以用所需的图像更改图像

https://docs.google.com/file/d/0By5c3cOVKbFpVTFpUlFlV2pGVWM/edit?pli=1
席俊达
2023-03-14

您需要为球体上与您提供的纹理匹配的每个点设置UV(纹理线)。以下是有关UV贴图的一些信息的链接。

UV映射球体

 类似资料:
  • 我有一个OpenGL程序,我想用地球的位图对球体进行纹理处理。我在搅拌器中准备了网格,并将其导出到OBJ文件。该程序加载适当的网格数据(顶点、uv和法线)和正确的位图-我已经用骨骼位图检查了它的纹理立方体。 我的程序是纹理球体,但不正确(或以我不期望的方式)。这个球体的每个三角形都包括这个位图的变形副本。我检查了位图,uv似乎没问题。我尝试了多种尺寸的位图(2的幂,2的倍数等)。 纹理是这样的:

  • 我已经创建了两个球体,目前正在尝试对它们进行纹理处理。然而,纹理坐标似乎有点偏离。 纹理应用于两个球体的结果(你可以忽略不在正方形周围的黑线,这只是相机-是的,这是AR应用程序): 现在,我使用perl脚本导出球体,我发现它将obj文件转换为顶点和纹理代码列表OBJ2OPENGL。obj文件已转换为2160顶点。 当我渲染球体时:

  • 我能够使用javascript和three.js库创建一个球体。然而,我有一个图像,我想覆盖在球体的顶部,每当我这样做,球体变成一个黑色的球体,没有图像投射在上面。下面是我如何实现它:var渲染器=new THREE. WebGL渲染器();renderer.set大小(window.inner宽度,window.inner高度);document.body.append(renderer.dom

  • 我一直致力于渲染一个球体使用三角形条在OpenGL ES 2.0为Android。我有一个问题,当球体旋转时,它似乎自己重叠了。 我创建顶点列表的代码是 我的渲染代码将多个查看矩阵和透视矩阵相乘,然后执行以下操作: 显然,渲染过程中涉及到很多不同的部分。然而,我认为问题在于顶点生成。

  • 我想画一个球体并对它进行纹理,我用三角形来画它,当我试图对它进行纹理时,有些三角形没有被覆盖 我用这个函数来生成坐标

  • 我正试图在Android上创建一个360视频球体(就像纸板上的那个)。我在OpenGL ES1中绘制了一个球体,并用一张照片完成了这项工作。0,然后将纹理附加到它。之后,我可以使用传感器值来旋转球体。 然而,我不知道如何将图片更改为视频。我尝试过使用texSubImage2D()逐帧渲染,但速度非常慢。我的视频可能会达到4k左右的密度,因为我需要一个好的质量,即使只显示了一小部分。 我读过一些关于