首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将iphone代码转换为libgdx代码

将iphone代码转换为libgdx代码
EN

Stack Overflow用户
提问于 2012-01-22 19:02:17
回答 1查看 554关注 0票数 1

在这篇文章中,http://www.badlogicgames.com/wordpress/?p=504先生libgdx写道:

从底层开始的

OpenGL :在OpenGL ES 1.x上编写得非常好的教程系列。涵盖了开始使用OpenGL所需的所有基础知识。请注意,本教程是为IPhone编写的,使用的是目标C/C++。但这不应该是个大问题,因为API是一样的。

令我遗憾的是,我无法获得一个libgdx,这相当于该教程运行中的第一个示例,即:

代码语言:javascript
复制
- (void)drawView:(GLView*)view;
{
    Vertex3D    vertex1 = Vertex3DMake(0.0, 1.0, -3.0);
    Vertex3D    vertex2 = Vertex3DMake(1.0, 0.0, -3.0);
    Vertex3D    vertex3 = Vertex3DMake(-1.0, 0.0, -3.0);
    Triangle3D  triangle = Triangle3DMake(vertex1, vertex2, vertex3);

    glLoadIdentity();
    glClearColor(0.7, 0.7, 0.7, 1.0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnableClientState(GL_VERTEX_ARRAY);
    glColor4f(1.0, 0.0, 0.0, 1.0);
    glVertexPointer(3, GL_FLOAT, 0, &triangle);
    glDrawArrays(GL_TRIANGLES, 0, 9);
    glDisableClientState(GL_VERTEX_ARRAY);
}

我的密码..。

代码语言:javascript
复制
public void render () {
    Gdx.gl11.glLoadIdentity();
    Gdx.gl11.glRotatef(rotation, 0.0f, 0.0f, 1.0f);
    Gdx.gl11.glClearColor((float)0.7, (float)0.7, (float)0.7, (float)1.0);
    Gdx.gl11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
    Gdx.gl11.glEnableClientState(GL11.GL_VERTEX_ARRAY);
    Gdx.gl11.glColor4f((float)1.0, (float)0.0, (float)0.0, (float)1.0);
    Gdx.gl11.glVertexPointer(3, GL11.GL_FLOAT, BYTES_PER_VERTEX, vertices);
    Gdx.gl11.glDrawArrays(GL11.GL_TRIANGLES, 0, 9);
    Gdx.gl11.glDisableClientState(GL11.GL_VERTEX_ARRAY);
}

这里的问题是“顶点”。我不知道那应该是什么。在搜索了很多次之后,我想出了如下几点:

代码语言:javascript
复制
final int BYTES_PER_VERTEX = (3 + 4) * 4;

public void create () {
    ByteBuffer buffer = ByteBuffer.allocateDirect(BYTES_PER_VERTEX * 3);
    buffer.order(ByteOrder.nativeOrder());
    vertices = buffer.asFloatBuffer();

    float[] verts = {
            0.0f, 1.0f, 0.0f, 1, 0, 0, 0,
            1.0f, 0.0f, 0.0f, 0, 1, 0, 0,
            -1.0f, 0.0f, 0.0f, 0, 0, 1, 0};

    vertices.put(verts);
    vertices.flip();
}

。这似乎显示了一个三角形,但是顶点的值与原始示例中的值不一样(z值是0,而不是-3,在这种情况下,我什么也看不到)。

有人能为顶点提供任何线索吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-04 03:16:13

这是我所拥有的。我创造了一个正方形而不是一个三角形,但是你得到了jist。iphone教程中的许多随机代码都是内部处理的。如果您想知道(在java中)它是如何内部调用的(相机管理、网格管理等),那么您实际上可以剖析libgdx的来源。

在create()中:

代码语言:javascript
复制
mesh = new Mesh(true, 4, 4, 
            new VertexAttribute(Usage.Position, 3, "a_position"),
            new VertexAttribute(Usage.ColorPacked, 4, "a_color"));

mesh.setVertices(new float[] {
             -1.0f, -1.0f, -3.0f, Color.toFloatBits(255, 0, 0, 255),
              1.0f, -1.0f, -3.0f, Color.toFloatBits(255, 0, 0, 255),
             -1.0f,  1.0f, -3.0f, Color.toFloatBits(255, 0, 0, 255),
              1.0f,  1.0f, -3.0f, Color.toFloatBits(255, 0, 0, 255)});

mesh.setIndices(new short[] { 0, 1, 2, 3 });

调整大小()

代码语言:javascript
复制
float aspectRatio = (float) width / (float) height;
camera = new PerspectiveCamera(67, 2f * aspectRatio, 2f);
camera.near = 0.1f;
camera.translate(0, 0, 0);

在渲染()

代码语言:javascript
复制
Gdx.gl11.glClearColor(0.7f, 0.7f, 0.7f, 1.0f);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
mesh.render(GL10.GL_TRIANGLE_STRIP, 0, 4);

希望这能有所帮助。

资源:

http://dpk.net/2011/03/07/libgdx-cubes-handling-inputs-in-applicationlistener-render/

http://www.badlogicgames.com/wordpress/?p=2032

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8963729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档