قم بتدوير رباعي حول نقطة مركزية في OpenGL
سؤال
أنا أصنع لعبة ثنائية الأبعاد. أريد أن أكون قادرًا على تقديم نسيج على الشاشة بعد تدويره كمية معينة حول نقطة مركز. في الأساس هذا هو التناوب حول اللاعب. موقف اللاعب هو نقطة الدوران واتجاه اللاعب كزاوية. لن يعمل هذا الرمز:
def draw_texture(texture,offset,size,a,rounded,rotation,point):
glMatrixMode(GL_MODELVIEW)
glLoadIdentity() #Loads model matrix
glColor4f(1,1,1,float(a)/255.0)
glTranslatef(point[0],point[1],0)
glRotatef(rotation,0,0,1)
glBindTexture(GL_TEXTURE_2D, texture)
if rounded == 0:
glBegin(GL_QUADS)
glTexCoord2f(0.0, 0.0)
glVertex2i(*offset) #Top Left
glTexCoord2f(0.0, 1.0)
glVertex2i(offset[0],offset[1] + size[1]) #Bottom Left
glTexCoord2f(1.0, 1.0)
glVertex2i(offset[0] + size[0],offset[1] + size[1]) #Bottom, Right
glTexCoord2f(1.0, 0.0)
glVertex2i(offset[0] + size[0],offset[1]) #Top, Right
glEnd()
else:
#Nothing important here
glEnd()
أي طريقة لجعلها تعمل؟ شكرًا لك.
المحلول
حاول الانعكاس
glTranslatef(point[0],point[1],0)
و
glRotatef(rotation,0,0,1)
أنت تترجم إلى اللاعب ، ولكن بعد ذلك تدور حول الأصل (وليس اللاعب)
توضيح من كتاب احمر:
نصائح أخرى
ما لم يكن لديك سبب وجيه للقيام بخلاف ذلك ، سأترك رمز الرسم بمفرده ، وأغير زاوية الكاميرا. ربما أسهل طريقة للقيام بذلك هي استخدام glulookat. في حالتك ، من الواضح أنك ستنظر إلى موضع اللاعب ، وتغير فقط "الاتجاه الصاعد" ، الذي يتم تقديمه في المعلمتين الأخيرين.
لا تنتمي إلى StackOverflow