LWJGL2 projectionMatrix对我不起作用

时间:2018-04-14 12:30:53

标签: java lwjgl vertex-shader projection-matrix

在显示我的代码之前我想解释一下这个情况。我正在尝试使用Lwjgl2制作FlappyBird克隆。现在我能够创建一个纹理四边形,它只能在x和y方向上移动并围绕所有轴旋转。我即将设置projectionMatrix,所以我也可以进行3D移动和Z轴工作。 我在youtube上做了一个教程,做了完全相同的事情,但它根本不适用于我。

当试图在不使用projectionMatrix的情况下移动Object时,它很快就会消失,因为Z&gt; 1或Z <1 -1由于某种原因,虽然什么都不应该发生。一旦我在vertexShader中添加了projectionMatrix,它就会为我渲染的每个坐标消失......它只会消失在虚空中。

以下是所有相关代码:

Model model = loader.loadToVAO(vertices, textureCoords, indices);
    ModelTexture texture = new ModelTexture(loader.loadTexture("Flappy2")); 
    TexturedModel texturedModel = new TexturedModel(model, texture);        
    Entity entity = new Entity(texturedModel, new Vector3f(0,0,0),0,0,0,1 );

    float y = 0;
    float x = 0;


    //Main loop which renders stuff
    while(!Display.isCloseRequested()) {                        
        while(Keyboard.next()) {
            if (Keyboard.getEventKey() == Keyboard.KEY_SPACE) {
                if (Keyboard.getEventKeyState()) {
                    y = 0.1f;
                }    
            }
        }
        y -= 0.005f;

        entity.increasePosition(x, y, 0);
        entity.increaseRotation(0, 0,0 );
        renderer.prepare();
        shader.start();
        renderer.render(entity, shader);
        shader.stop();

        DisplayManager.updateDisplay();
    }
    shader.cleanUp();
    loader.cleanUp();
    DisplayManager.closeDisplay();

}

这是主循环,没什么特别的。

#version 400 core           

在vec3位置;
在vec2 textureCoords;

out vec2 pass_textureCoords;
vec3颜色;

均匀的mat4 transformationMatrix; 统一mat4 projectionMatrix;

void main(void){

gl_Position = projectionMatrix * transformationMatrix * vec4(position,1.0);     
pass_textureCoords = textureCoords;     
color = vec3(position.x +0.5,0.0,position.y+0.5);

} 那是顶点着色器。

private void createProjectionMatrix() {
    float aspectRatio = (float) Display.getDisplayMode().getWidth() / (float) Display.getDisplayMode().getHeight();
    float y_scale = (float)(1f / Math.tan(Math.toRadians(FOV / 2f))) * aspectRatio;
    float x_scale = y_scale / aspectRatio;
    float frustum_length = FAR_PLANE - NEAR_PLANE;

    projectionMatrix = new Matrix4f();
    projectionMatrix.m00 = x_scale;
    projectionMatrix.m11 = y_scale;
    projectionMatrix.m22 = -((FAR_PLANE + NEAR_PLANE) / frustum_length);
    projectionMatrix.m23 = -1;
    projectionMatrix.m32 = -((2 * NEAR_PLANE * FAR_PLANE) / frustum_length);
    projectionMatrix.m33 = 0;
}

这里我在Rendering类中设置了projectionMatrix。 正如我所说的,大部分是从youtube教程中复制的,因为我是LWJGL2的新手。所以,如果它适合他,为什么不适合我?

1 个答案:

答案 0 :(得分:0)

我尝试复制整个教程代码,而不是自己键入它,它确实以某种方式解决了我的问题。

我可能已经在某处切换了变量名称或者像阻止投影矩阵工作的小错误。

无需再发表评论:)忽略这篇文章