Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl在python和glut中呈现不正确的结果,有什么建议吗?_Python_Opengl_Glut - Fatal编程技术网

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。非常感谢。不客气。顺便说一下,这是当前的示例代码,它使用了。非常好的结果!我认为这个项目也可以使程序员社区受益,因为它的格式相对较新。泰