2012-11-07 33 views
1

我开始在libgdx前一天工作。我想创建一个三角形,其点应该是这样的,两个角落应该在左下角和右下角,并且在屏幕的顶部中间点上一个点。我正在使用透视相机。我的代码示例:libgdx关于位置单元的困惑

public class Test1 implements ApplicationListener{ 

    PerspectiveCamera camera; 
    Mesh triangle; 

    @Override 
    public void create() { 
     // TODO Auto-generated method stub 
     camera = new PerspectiveCamera(67, 45, 45/(Gdx.graphics.getWidth()/(float)Gdx.graphics.getHeight())); 
     camera.near = 1; 
     camera.far = 200; 
     triangle = createTriangle(); 
    } 

    @Override 
    public void resize(int width, int height) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void render() { 
     // TODO Auto-generated method stub 
     GL10 gl = Gdx.gl10; 
     gl.glClearColor(0, 0, 0, 1); 
     gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 
     gl.glEnable(GL10.GL_DEPTH_TEST); 

     camera.update(); 
     camera.apply(gl); 

     triangle.render(Gdx.gl10.GL_TRIANGLES); 

    } 

    public Mesh createTriangle() { 
     float[] vertices = {-45f, -27f, -67, 
       45f, -27f, -67, 
       0, 27f, -67 
     }; 

     short[] indices = {0,1,2}; 
     Mesh mesh = new Mesh(true, 3, 3, new VertexAttribute(Usage.Position, 3, ShaderProgram.POSITION_ATTRIBUTE)); 
     mesh.setVertices(vertices); 
     mesh.setIndices(indices); 
     return mesh; 


    } 

    @Override 
    public void pause() { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void resume() { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void dispose() { 
     // TODO Auto-generated method stub 

    } 
} 

我读的是OpenGL是无单位的,所以我决定把45个单位宽,并相应地设置其高度。当我执行应用程序时,三角形不是我所期望的。它小于屏幕的宽度和高度。我没有3D的经验。请引导我,我错了吗? 下面是截图:

enter image description here

回答

0

你说你想创建一个矩形?你只指定了3个顶点?你的意思是三角形,如果是的话,你的结果似乎是什么问题?

干杯

编辑1: 已经重读你的问题,我对我答曰道歉。

您需要实现调整大小功能,有创建你的相机,因为它被调用一次时之前渲染被称为创建的窗口。东西沿线

@Override 
public void resize(int width, int height) { 
    float aspectRatio = (float) width/(float) height; 
    camera = new PerspectiveCamera(67,2f * aspectRatio, 2f); 
} 

应该是你在找什么。在相机部分了解更多关于here的信息。它可能是关于正交相机,但基本原理仍然适用

编辑2: OpenGl中的单元是特定于应用程序的。你必须设置你使用的单位。

但是也有约定,例如通过defualt相机将“寻找”下负Z轴,与正X的权利和正Y了。这被称为右手系统。

您已设置3D相机具有45的图的宽度(因此在相机​​45的宽度的对象将填充屏幕)和45以上的纵横比的高度。我们必须记住的一点是,3D中距离较远的物体比它们靠近时要小。所以你可能一直期待三角形填满屏幕,但是三角形的点的Z坐标很远(67相机),所以它使三角形看起来更小。

如果你只在2D兴趣然后使用一种叫做OrthographicCamera这使得它使你得出什么不随距离的大小从相机更改(它没有角度

+0

你提到的这个事情是不是我有这个问题。我想了解GL使用的屏幕单元,如何定义它们并适当使用? –

+0

我编辑了我原来的帖子 – LiamJPeters