سؤال

أنا أصنع لعبة ثنائية الأبعاد. أريد أن أكون قادرًا على تقديم نسيج على الشاشة بعد تدويره كمية معينة حول نقطة مركز. في الأساس هذا هو التناوب حول اللاعب. موقف اللاعب هو نقطة الدوران واتجاه اللاعب كزاوية. لن يعمل هذا الرمز:

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)

أنت تترجم إلى اللاعب ، ولكن بعد ذلك تدور حول الأصل (وليس اللاعب)

توضيح من كتاب احمر: rotate

نصائح أخرى

ما لم يكن لديك سبب وجيه للقيام بخلاف ذلك ، سأترك رمز الرسم بمفرده ، وأغير زاوية الكاميرا. ربما أسهل طريقة للقيام بذلك هي استخدام glulookat. في حالتك ، من الواضح أنك ستنظر إلى موضع اللاعب ، وتغير فقط "الاتجاه الصاعد" ، الذي يتم تقديمه في المعلمتين الأخيرين.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top