【发布时间】:2022-02-03 04:11:16
【问题描述】:
我想绘制两个用作“机械臂”的矩形。这些应该能够围绕自己的轴单独旋转。矩形应位于坐标系的原点。使用“a”和“d”键,绿色臂应左右旋转,使用“w”和“s”键,蓝色臂应左右旋转。 这是它应该如何旋转的视觉表示: rotating robot arms
我已经画了两个矩形,也可以用键移动它们。 但是,我无法正确旋转。我不能单独旋转矩形,它们总是同时旋转,也不绕自己的轴旋转。 有谁知道我该怎么做以及我的代码中缺少什么? 我只发现有关如何旋转单个对象的问题,但从来没有在一个窗口中找到两个单独的对象。 (尤其不适用于 python + opengl)
到目前为止,这是我的代码:
import pygame
from OpenGL.GL import *
from OpenGL.GLU import *
from pygame.locals import *
def makeQuad(x, y, width, height):
glBegin(GL_QUADS)
glVertex2f(0, 0) # x,y
glVertex2f(0, 50)
glVertex2f(50, 50)
glVertex2f(50, 0)
glEnd()
def main():
pygame.init()
window = (1200, 800)
display = pygame.display.set_mode(window, DOUBLEBUF | OPENGL)
pygame.display.set_caption('Roboterarm')
gluOrtho2D(0, 400, 0, 300)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a: # green arm left
glRotatef(180, 0, 0, 1) # angle, x,y,z
glTranslatef(-1, 0, 0)
if event.key == pygame.K_d: # green arm right
glRotatef(-180, 0, 0, 1)
glTranslatef(1, 0, 0)
if event.key == pygame.K_w: # blue arm left
glTranslatef(0, 1, 0)
if event.key == pygame.K_s: # blue arm right
glTranslatef(0, -1, 0)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
# glMultMatrixf(modelMatrix)
# modelMatrix = glGetFloatv(GL_MODELVIEW_MATRIX)
# glLoadIdentity()
# glTranslatef(0, 0, -5)
# glMultMatrixf(modelMatrix)
# blue arm
glPushMatrix()
glTranslated(150, 100, 0)
# glRotated(5, 0, 0, 1)
glColor3fv((0, 0, 1)) # blue
makeQuad(0, 0, 300, 100)
glPopMatrix()
# green arm
glPushMatrix()
glTranslated(250, 100, 0)
# glRotated(10, 0, 0, 1)
# glScale()
glColor3fv((0, 1, 0)) # green
makeQuad(0, 0, 300, 100)
glPopMatrix()
# a1 += 1
# a2 += 0.5
pygame.display.flip()
if __name__ == "__main__":
main()
有一些行被注释掉了,因为我用这些贡献尝试了一些东西:How can I rotate multiple quads separately? (Pygame, PyOpengl)How to rotate a cube using mouse in pyopengl
【问题讨论】:
标签: python opengl pygame rotation