我已经编码显示列表..当我第二天再次打开它 - >去.. niiice我想..我浪费了小时没有 和接下来的问题是..我不能得到它的工作 显示列表实际工作,但不是它应该如何..纹理拉伸某种程度显示列表不正常工作
我从文本文件得到我的世界..每个平台定义开始金额x ..结束金额× 平台底部的金额.. 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文件和世界,因为他们影响我的显示列表...我有重写这部分代码,我只是不知道我犯了什么错误。 第一个循环用于创建平台和第二个用于块..每个平台由多个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;
}
}
显示列表只是使2D纹理 这就是我称之为我的实际代码中
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前初始化期间编制()功能,但我不知道了..
这里是链接到我的截图..如u看到纹理看起来很怪异出于某种原因 http://www.grenzlandzocker.de/test.png
请您上传截图?乍一看,代码看起来很好,但图像可以胜过千言万语。另外,我可以问你,为什么你使用显示列表?它们自OpenGL-3以来已弃用,不应在新代码中使用。改为使用顶点缓冲区对象。 – datenwolf 2011-04-12 11:37:24
numblocks有哪些数字?也许你打破了极限。 – 2011-04-12 11:46:28
每次opengl调用之后使用glGetError,看看是否所有的都正确传递。 – 2011-04-12 11:50:14