Opengl在python和glut中呈现不正确的结果,有什么建议吗?
在阅读源代码时,我在一些帮助下创建了一个程序。现在我将结果与实际得到的结果进行比较 我得到的是: 结果应该是什么样的:Opengl在python和glut中呈现不正确的结果,有什么建议吗?,python,opengl,glut,Python,Opengl,Glut,在阅读源代码时,我在一些帮助下创建了一个程序。现在我将结果与实际得到的结果进行比较 我得到的是: 结果应该是什么样的: 关于输出不正确的原因,有什么建议吗?我在这一点上被难住了。谢谢。圆环体被投影的近平面夹住了 更改投影矩阵: proj_矩阵=m3dPerspective(m3dDegToRad(60.0),浮动(自宽)/浮动(自高),0.1100.0); 和视图矩阵: mv_矩阵=(GLfloat*16)(*identityMatrix) m3dRotationMatrix44(mv_矩
关于输出不正确的原因,有什么建议吗?我在这一点上被难住了。谢谢。圆环体被投影的近平面夹住了 更改投影矩阵:
proj_矩阵=m3dPerspective(m3dDegToRad(60.0),浮动(自宽)/浮动(自高),0.1100.0);
和视图矩阵:
mv_矩阵=(GLfloat*16)(*identityMatrix)
m3dRotationMatrix44(mv_矩阵,currentTime*m3dDegToRad(45.0),1.0,0.0,0.0)
M3D传输矩阵X44(mv_矩阵,0.0,0.0,-3.0)
如果要连接不同的矩阵,则必须实现矩阵“乘法”: def M3D多层(A、B): C=(GLfloat*16)(*identityMatrix) 对于范围(0,4)内的k: 对于范围(0,4)内的j: C[k*4+j]=A[0*4+j]*B[k*4+0]+A[1*4+j]*B[k*4+1]+\ A[2*4+j]*B[k*4+2]+A[3*4+j]*B[k*4+3] 返回C e、 g.围绕x轴和y轴连接平移矩阵和旋转矩阵:
T=(GLfloat*16)(*identityMatrix)
M3D传输矩阵X44(T,0,0,-4)
RX=(GLfloat*16)(*identityMatrix)
m3dRotationMatrix44(RX,currentTime*m3dDegToRad(17.0),1.0,0.0,0.0)
RY=(GLfloat*16)(*identityMatrix)
m3dRotationMatrix44(RY,currentTime*m3dDegToRad(13.0),0.0,1.0,0.0)
mv_矩阵=m3dMultiply(T,m3dMultiply(RY,RX))
注意,如果要使用而不是
m3dMultiply
,则必须将16元素数组转换为二维4x4数组。e、 g:
R=np.matmul(np.array(RX).整形(4,4),np.array(RY).整形(4,4))
mv_矩阵=np.matmul(R,np.array(T).整形(4,4))
或和*
-运算符:
mv_矩阵=np.矩阵(RX).整形(4,4)*np.矩阵(RY).整形(4,4)*np.矩阵(T).整形(4,4)
另请参见非常感谢!有没有办法让它在当前水平翻转时也绕y轴旋转?@StanS。当然,您可以使用numpy,但您必须将
.reformate()
改为4x4。请看答案的最后一部分。@StanS。提示:在glutCreateWindow
之前执行glutInitWindowSize(512,512)
。更改为scene=scene(512,512)
并添加def重塑(self,width,height):
self.width=width
self.height=height
@StanS。非常感谢。不客气。顺便说一下,这是当前的示例代码,它使用了。非常好的结果!我认为这个项目也可以使程序员社区受益,因为它的格式相对较新。泰