Я уже закодировал список отображения ... и когда я открыл его снова на следующий день -> ушел ... я подумал ... я потратил часы впустую, и следующая проблема ... я не могу получитьэто работает больше, список отображения фактически работает, но не так, как должен .. текстуры растягиваются как-то
я получаю свой мир из текстового файла .. каждая платформа определяется начальным количеством x .. конечным количеством xy количество нижней части платформы .. u и v (которую я не использую) и фильтр для выбора текстуры.setupworld - это функция, которая читает текстовый файл и записывает мои переменные в структуру.Да, и numblocks - это количество отображаемых платформ
void setupworld(){
float xstart,xend,ystart,u,v;
unsigned int filter;
FILE *filein;
char oneline[255];
filein=fopen("data/world.txt","rt");
readstr(filein,oneline);
sscanf(oneline, "Anzahl %d\n",&numblocks);
for (int loop=0;loop<numblocks; loop++)
{
readstr(filein,oneline);
sscanf(oneline,"%f %f %f %f %f %d",&xstart,&xend,&ystart,&u,&v,&filter);
block.data[loop].xstart=xstart;
block.data[loop].xend=xend;
block.data[loop].ystart=ystart;
block.data[loop].u=u;
block.data[loop].v=v;
block.data[loop].filter=filter;
}
fclose(filein);
return;}
BuildLists () создает мой список отображения, но сначала загружает файлы png и весь мир, потому что они влияют на мой список отображения ... iМне пришлось переписать эту часть кода, и я просто не знаю, где я допустил ошибку. Первый цикл предназначен для создания платформ, а второй - для блоков. Каждая платформа состоит из нескольких блоков 2х2, расположенных рядом друг с другом
GLvoid BuildLists(){
texture[0]=LoadPNG("data/rock_gnd.png");
texture[1]=LoadPNG("data/rock_wall2.png");
texture[2]=LoadPNG("data/pilz_test.png");
setupworld();
quad[0]=glGenLists(numblocks);
for(int loop=0;loop<numblocks;loop++)
{
GLfloat xstart,xend,ystart,u,v;
xstart=block.data[loop].xstart;
xend=block.data[loop].xend;
ystart=block.data[loop].ystart;
u=block.data[loop].u;
v=block.data[loop].v;
GLuint filter=block.data[loop].filter;
GLfloat blocks=(xend-xstart)/2.0f;
glNewList(quad[loop],GL_COMPILE);
glBindTexture(GL_TEXTURE_2D, texture[filter]);
for(int y=0;y<blocks;y++)
{
glBegin(GL_QUADS);
glTexCoord2f(0.0f,0.0f);
glVertex3f(xstart,ystart,-1.0f);
glTexCoord2f(1.0f,0.0f);
glVertex3f(xstart+((y+1)*2.0f),ystart,-1.0f);
glTexCoord2f(1.0f,1.0f);
glVertex3f(xstart+((y+1)*2.0f),ystart+2.0f,-1.0f);
glTexCoord2f(0.0f,1.0f);
glVertex3f(xstart,ystart+2.0f,-1.0f);
glEnd();
}
glEndList();
quad[loop+1]=quad[loop]+1;
}
}
список отображения компилируется во время инициализации непосредственно перед включением двухмерных текстур, так я его называю во время фактического кода
int DrawWorld(GLvoid){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
GLfloat camtrans=-xpos;
glTranslatef(camtrans,0,0);
glPushMatrix();
for(int i=0;i<numblocks;i++)
{
glCallList(quad[i]);
}
glPopMatrix();
return TRUE; }
, вот и все ... я думаю, чтоошибка в функции BuildLists (), но я больше не уверен ..
Вот ссылка на мой скриншот ... как вы видите, текстуры почему-то выглядят странно http://www.grenzlandzocker.de/test.png