在我将模型视图空间中的投影矩阵应用于模型之前,它显示为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 堆栈不会让我发布所有图片抱歉。