gpt4 book ai didi

python - 如何在opengl中制作坐标Y的动画

转载 作者:行者123 更新时间:2023-12-01 08:51:18 24 4
gpt4 key购买 nike

我有一个圆柱体,我想根据定律 Y = Y*cos(t+Y) 制作坐标 Y 的动画。我怎样才能只用OpenGL来实现呢?我应该使用哪些功能?也许一些例子?

def init():
global xrot
global yrot
global ambient
global cylcolor
global lightpos

xrot = 0.0
yrot = 0.0
ambient = (1.0, 1.0, 1.0, 1)
cylcolor = (0, 0, 1, 0.8)
lightpos = (2.0, 2.0, 0)

glClearColor(0.5, 0.5, 0.5, 1.0)
gluOrtho2D(-1.0, 1.0, -1.0, 1.0)
glRotatef(-90, 1.0, 0.0, 0.0)
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient)
glEnable(GL_LIGHTING)
glEnable(GL_LIGHT0)
glLightfv(GL_LIGHT0, GL_POSITION, lightpos)

def draw():
global xrot
global yrot
global lightpos
global greencolor
global cylcolor
glClear(GL_COLOR_BUFFER_BIT)
glPushMatrix()
glRotatef(xrot, 1.0, 0.0, 0.0)
glRotatef(yrot, 0.0, 1.0, 0.0)
glLightfv(GL_LIGHT0, GL_POSITION, lightpos)
glMaterialfv(GL_FRONT, GL_DIFFUSE, cylcolor)
glTranslatef(0.0, 0.0, -0.7)
glutSolidCylinder(0.5, 1, 20, 20)
glPopMatrix()
glutSwapBuffers()

然后是程序的主要部分

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB)
glutInitWindowSize(300, 300)
glutInitWindowPosition(50, 50)
glutInit(sys.argv)
glutDisplayFunc(draw)
init()
glutMainLoop()

最佳答案

请注意,该图由 glBegin 绘制/glEnd序列和固定功能管道矩阵堆栈几十年来已被弃用。了解 Fixed Function Pipeline并参见Vertex SpecificationShader最先进的渲染方式。

<小时/>

无论如何,你必须调用 glutPostRedisplay ,用于连续重新显示窗口。
使用 glutGet(GLUT_ELAPSED_TIME) 获取自 glutInit 以来的毫秒数被叫了。
可以通过 glTranslate 执行翻译.

此外,我建议设置深度缓冲区(重点关注 GLUT_DEPTH ):

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH)

并启用 depth test 。不要忘记也清除深度缓冲区:

glEnable(GL_DEPTH_TEST) 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

将以下行添加到您的代码中,以沿视口(viewport)的 y 轴执行上下移动:

import math

def draw():
global xrot, yrot, lightpos, greencolor, cylcolor

timeSinceStart = glutGet(GLUT_ELAPSED_TIME)

glEnable(GL_DEPTH_TEST)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

glPushMatrix()
glTranslatef(0.0, 0.0, math.cos(timeSinceStart*0.002))
glRotatef(xrot, 1.0, 0.0, 0.0)
glRotatef(yrot, 0.0, 1.0, 0.0)

glLightfv(GL_LIGHT0, GL_POSITION, lightpos)
glMaterialfv(GL_FRONT, GL_DIFFUSE, cylcolor)
glutSolidCylinder(0.5, 1, 20, 20)
glPopMatrix()

glutSwapBuffers()
glutPostRedisplay()

我将更改应用于原始代码,创建了以下动画,并更改了以下参数:

xrot = 10.0  
lightpos = (2.0, -2.0, 1.0)

另请参阅Immediate mode and legacy OpenGL

关于python - 如何在opengl中制作坐标Y的动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53105959/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com