我想旋轉玩家的圖像到他們指向的位置。從技術上講,這工作正常。它在轉換到中心後沿着Z軸旋轉圖像,然後轉換回去,沒問題。與glRotatef旋轉導致翹曲
但是,當渲染時,由於角度指向窗口的寬部分,圖像被擠壓,就好像它試圖按比例歸一化圖像。如果我將分辨率設置爲正方形(1080x1080,1440x1440等),那麼它可以正常工作,但任何不是正方形的矩形分辨率都會導致播放器圖像扭曲。
我原本在嘗試讓環境繞着玩家的x/y座標旋轉時遇到了同樣的問題,但是通過將glViewport設置爲正方形來解決此問題。
glViewport(0,0,width,width);
Warped when rotated 90 degrees
這些效果分別爲鏡像270度和180度,並且在彼此之間逐漸去所有其它角度。
代碼Player.render()
glPushMatrix();
glTranslatef(
x/Main.width*2,
y/Main.height*2,
0);
glRotatef((float)angle,0f,0f,1f);
glTranslatef(
-x/Main.width*2,
-y/Main.height*2,
0);
drawTexture(t,x-w/2,y-w/2,w,w); //t = texture, w = width in pixels for texture to be mapped to
glPopMatrix();
而且drawTexture方法:
public static void drawTexture(Texture in,float x, float y,float w, float h) {
//Main.width and Main.height are the window window width and height.
float nx = x*2/Main.width;
float ny = y*2/Main.height;
float nw = w*2/Main.width;
float nh = h*2/Main.height;
in.bind(0);
glTexEnvf(GL_TEXTURE_2D,GL_TEXTURE_ENV_MODE,GL_MODULATE);
glDepthMask(false);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glColor4f(1.0f,1.0f,1.0f,1.0f);
glBegin(GL_QUADS);
glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);
glTexCoord2f(0, 1);
glVertex2f(nx,ny);
glTexCoord2f(1, 1);
glVertex2f(nx+nw,ny);
glTexCoord2f(1, 0);
glVertex2f(nx+nw,ny+nh);
glTexCoord2f(0, 0);
glVertex2f(nx,ny+nh);
glEnd();
glDisable(GL_BLEND);
glDepthMask(true);
}
不完全知道從哪裏去嘗試解決這個問題,我自己的研究別人,顯然沒有發生過這個問題剛剛導致脫髮。如果需要更多代碼或更多圖片,請相信我,我會跪下尋求幫助。
drawTexture(t,x-w/2,y-w/2,w,w);這是你的代碼。最後一個參數是高度,但似乎是寬度。 –
不知道你是什麼,但發現它很奇怪,因爲你的算法適用於平方分辨率,並且你傳遞的參數與寬度和高度相同。 –
我使用它以防我爲了視覺效果任意拉伸紋理,或者紋理不是方形。紋理是正方形的,drawTexture的寬度和高度只是指定了我希望紋理映射到的矩形。所以我可以擁有相同的紋理,並使它在任何方向上變得更小或更大。 'w'用在兩者中,因爲我希望矩形在任一方向都是正方形,並將其設置爲寬度和高度相同的變量使得它更簡單。 – user7109452