LWJGL OpenGL投影矩阵

时间:2014-11-02 01:09:51

标签: java opengl glsl lwjgl projection-matrix

我正在使用我在lwjgl wiki上为我的VBO多维数据集找到的投影矩阵。

它在大多数情况下都可以正常工作,但是当我想到的是宽高比时,事情开始变得有趣。

我的应用程序窗口分辨率为640 x 480.当我运行程序时,这会发生在多维数据集...

Stretching Problem Image

你看到的脸应该是完全正方形的,相反,它似乎会被宽高比拉伸。

这是投影矩阵的代码。

public static Matrix4f perspective(float aspect, float fov, float near, float far) {
    Matrix4f matrix = new Matrix4f();

    float y_scale = coTan(degToRad(fov/2f));
    float x_scale = y_scale / aspect;
    float frustum = far-near;

    matrix.m00 = x_scale;
    matrix.m11 = y_scale;
    matrix.m22 = -((far+near)/frustum);
    matrix.m23 = -1;
    matrix.m32 = -((2 * far * near)/frustum);
    matrix.m33 = 0;

    return matrix;
}

这是我修改和翻译所有矩阵的地方。

    Matrix4f.translate(camera.position, camera.matrix(Camera.VIEWMATRIX), 

    Matrix4f.scale(obj.scale, obj.matrix(), obj.matrix());
    Matrix4f.translate(obj.position, obj.matrix(), obj.matrix());
    Matrix4f.rotate(degToRad(obj.rotation.x), new Vector3f(1f,0f,0f), obj.matrix(), obj.matrix());
    Matrix4f.rotate(degToRad(obj.rotation.y), new Vector3f(0f,1f,0f), obj.matrix(), obj.matrix());
    Matrix4f.rotate(degToRad(obj.rotation.z), new Vector3f(0f,0f,1f), obj.matrix(), obj.matrix());

obj.matrix()是模型视图矩阵 obj.rotation,object.position和object.scale都是Vector3f' s camera.matrix(矩阵类型)将返回投影矩阵或视图矩阵

P.S。 degToRad和coTan是类似于Math.toRadians和Math.tan

的方法

这是顶点着色器。

#version 150 core

in vec4 in_Position;
in vec4 in_Color;
in vec2 in_TextureCoord;

uniform mat4 projection; 
uniform mat4 view;
uniform mat4 model;

out vec4 pass_Color;
out vec2 pass_TextureCoord;

void main(void) {
    gl_Position = projection * view * model * in_Position;

    pass_Color = in_Color;
    pass_TextureCoord = in_TextureCoord;
}

如果您需要我的代码的任何其他部分,请发表评论。

0 个答案:

没有答案