이전에 게임을 개발 중이었고 약간의 문제가있었습니다! 나는 하나의 이미지로 게임을 시작했다. 각 텍스처에는 자체 파일이 있습니다. 그것은 내가 그랬던 바보가 얼마인지를 깨닫고 모든 텍스처를 포함하고있는 하나의 그림으로 바꾸려고했습니다 (어쨌든 그들은 아주 작습니다). 이제 문제가 생겼습니다. 원래 텍스처 (10 x 10)보다 큰 이미지가로드되면 거의 가장 가까운 이웃 사이징 알고리즘으로 표시되지 않는 것처럼 보입니다. 내가 얻는 것은 희미한 이미지입니다. 또한 뒤집 혔습니다 ... 왜 이런 문제가 발생합니까?OpenGL 텍스처가 거꾸로되어 흐리게 렌더링됩니다.
아래 코드와 이미지.
텍스트 및 기호가 포함 된 스프라이트 시트를 처음 보여주는 첫 번째 사례입니다. (아주 작습니다, 100 x 100) http://imgur.com/HU5zEAO.jpg
이것은 프로그램을 실행할 때 얻는 것입니다. 여기 http://i.imgur.com/HeVPdPy.jpg
지금 여기 MAIN.CPP 파일
#include <GL/glew.h>
#include <GL/glut.h>
#include "spritesheet_class.h"
#include "load_img.h"
GLuint TextSheet;
Spritesheet Test;
void LoadFiles()
{
GLuint TextSheet = LoadTexture("davetica.png", 100, 100, 0);
Test.SetTex(TextSheet, 100, 100, 10, 10);
}
void Reshape(int width, int height)
{
glViewport(0, 0, (GLsizei)width, (GLsizei)height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0f, width, 0.0f, height, 1.0f, 100.0f);
glMatrixMode(GL_MODELVIEW);
}
void Display()
{
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -1.0f);
Test.DrawSprite(1, 0, 0, 400, 400);
glutSwapBuffers();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE);
glutInitWindowPosition(200, 100);
glutInitWindowSize(512, 512);
glutCreateWindow("Sprite Sheets");
glutDisplayFunc(Display);
glutIdleFunc(Display);
glutReshapeFunc(Reshape);
LoadFiles();
glutMainLoop();
}
이다 나는 Spritesheet 클래스를 작성하는 클래스의 헤더입니다. 이 필요한 경우
#ifndef SPRITESHEET_CLASS_H_INCLUDED
#define SPRITESHEET_CLASS_H_INCLUDED
#include "load_img.h"
class Spritesheet
{
public:
void SetTex(GLuint Tex, int ImgW, int ImgH, int HorzAm, int VertAm);
void DrawSprite(int spriteNum, int xLoc, int yLoc, int width, int height);
private:
GLuint Texture;
int imageWidth, imageHeight, horiAm, vertAm;
};
void Spritesheet::SetTex(GLuint Tex, int ImgW, int ImgH, int HorzAm, int VertAm)
{
imageWidth = ImgW;
imageHeight = ImgH;
horiAm = HorzAm;
vertAm = VertAm;
Texture = Tex;
}
void Spritesheet::DrawSprite(int spriteNum, int xLoc, int yLoc, int width, int height)
{
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, Texture);
glBegin(GL_QUADS);
glTexCoord2f(1.0f, 0.0f);
glVertex2f(xLoc, yLoc);
glTexCoord2f(1.0f, 1.0f);
glVertex2f(xLoc, yLoc+height);
glTexCoord2f(0.0f, 1.0f);
glVertex2f(xLoc+width, yLoc+height);
glTexCoord2f(0.0f, 0.0f);
glVertex2f(xLoc+width, yLoc);
glEnd();
glDisable(GL_TEXTURE_2D);
}
#endif // SPRITESHEET_CLASS_H_INCLUDED
마지막으로, 여기에 내가 텍스처를로드하고 서식을 사용하는 LoadImage 함수를 처리하는 파일입니다.
편집 : 문제를 발견했습니다. 내 이미지는 2의 제곱이 아니므로 올바르게 표시되지 않았습니다.
며칠 전에이 문제가있었습니다. 말 그대로 이미지를 거꾸로 뒤집어서 문제를 해결했지만 실제로 왜 그런 일이 일어 났는지 알고 싶습니다. – hasherr
그래, 그 길로 가고 싶었어. 그러나 그것은 정직한 haha 인 것이 조금 거칠게 보인다. – DavidBittner