意外的结果用python编写的OpenGL投影矩阵和pyglet

时间:2016-07-12 02:42:46

标签: python opengl matrix pyglet

在我将模型视图空间中的投影矩阵应用于模型之前,它显示为3维。在我应用投影矩阵后,它变成了二维,如果你可以想象一个地球的线条以及它们如何包裹一个球体,我的模型将线条展平并倒置......当你甚至可以看到它时。要查看模型,我需要将其缩小到其大小的千分之一。这意味着某种放大"放大"我的投影矩阵中的问题,但我几乎在python端口中逐字复制了OpenGL编程指南vmath :: frustum(args)代码......数组以列主要形式传递给我的着色器。为了改变投影矩阵的行为,我已经退步以随机摆弄我的部分函数,​​但是......无论我改变它的代码的哪个部分都是扁平的或者似乎被吸入无穷大......在我应用投影矩阵之前它看起来绝对正确...这让我相信在pyglet指定的opengl管道中有某种自动上下文创建已弃用...我正在编写代码作为学习体验的一部分对于Opengl,并且...我不知道一些旧的规范如何工作......是否有可能是pyglet已经自动指定了投影矩阵?任何人都可以识别出这听起来像的常见逻辑错误吗?你需要检查我的代码吗?

我的着色器代码是

#version 430 core
in vec4 vertex_position;
uniform mat4 mvp_matrix;

void main ()
{
    gl_Position = mvp_matrix*vertex_position;
}

编辑这是我的实际代码...剪切和粘贴...最后一个只是我从内存中输入浏览器...并且感谢您调试它,但它以这种方式编译。 ---即vert_passthrough.vs 我的片段着色器的彻底性同样简单,将碎片颜色指定为蓝色。 7月14日补充 - matrix_projection_code

def projection_matrix(Znear = 1, Zfar = 100, Width = 400.0, Height = 300.0, camera_fov = 135):
    camera_aspect_ratio = Width/Height
    Top = (tan(radians(camera_fov*.05)))*Znear#Corrected via VMATH
    Bottom = -Top
    Right = Top*camera_aspect_ratio
    Left = -Right 
    if Right == Left or Top == Bottom or Znear == Zfar or Znear < 0.0 or Zfar < 0.0:
        return(Mat4x4())
    A = (2*Znear) / (Right - Left)
    B = (2*Znear) / (Top - Bottom)
    C = -(Zfar + Znear) / (Zfar - Znear)
    D = -(2*Zfar * Znear ) / (Zfar - Znear)
    E = (2 * (Right + Left)) / (Right - Left)
    F = (2 * (Top + Bottom)) / (Top - Bottom)
    G = -1.0
    X = 0.0
    proj_mat = Matrix(
            A,X,X,X,
            X,B,X,X,
            E,F,C,G,#Commented out to test...
#           X,X,C,G,
            X,X,D,X         
            )
    return(proj_mat)

为了获得完整的观看乐趣,一些图像......在投影矩阵应用之前和之后...我现在想知道..我不会在这个上面毒害井。 在投影矩阵之后作为线条这是真正让我思考的那个渲染的椭圆部分......

//在投影矩阵之前作为dots1 before projection matrix as lines

//在投影矩阵之前作为三角形3 //在投影矩阵之后作为dots4

after projection matrix as lines //在投影矩阵之后作为三角形6 堆栈不会让我发布所有图片抱歉。

0 个答案:

没有答案