【发布时间】:2014-04-05 12:23:02
【问题描述】:
我陷入了这个纹理问题。我创建了一个四边形作为地面,我想用草图像填充它的纹理。但是,当我尝试设置 MultiTexCoord2f 值时,我收到 Segmentation Fault 错误。我找不到原因。我在这里做错了什么?
SetupRC(){
floorBatch.Begin(GL_QUADS, 4);
floorBatch.MultiTexCoord2f(0, 0.0f, 0.0f);
floorBatch.Vertex3f(-50.0f, 0.0f, -50.0f);
floorBatch.MultiTexCoord2f(0, 1.0f, 0.0f);
floorBatch.Vertex3f(50.0f, 0.0f, -50.0f);
floorBatch.MultiTexCoord2f(0, 0.0f, 1.0f);
floorBatch.Vertex3f(-50.0f, 0.0f, 50.0f);
floorBatch.MultiTexCoord2f(0, 1.0f, 1.0f);
floorBatch.Vertex3f(50.0f, 0.0f, 50.0f);
floorBatch.End();
glGenTextures(1, textures);
// Grass floor
pBytes = gltReadTGABits("Grass.tga", &nWidth, &nHeight, &nComponents, &format);
glBindTexture(GL_TEXTURE_2D, textures[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D,0,nComponents,nWidth, nHeight, 0,
format, GL_UNSIGNED_BYTE, pBytes);
glGenerateMipmap(GL_TEXTURE_2D);
free(pBytes);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
}
RenderScene(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
static GLfloat vFloorColor[] = { 0.0f, 1.0f, 0.0f, 1.0f};
M3DMatrix44f mCamera;
cameraFrame.GetCameraMatrix(mCamera);
mModelview.PushMatrix(mCamera);
mModelview.Translate( 0.0f, -0.3f, -2.5f);
mModelview.PushMatrix();
mModelview.Translate( 0.0f, -0.3f, 0.0f);
mModelview.PushMatrix();
glBindTexture(GL_TEXTURE_2D, textures[0]);
shaderManager.UseStockShader(GLT_SHADER_TEXTURE_REPLACE, transformPipeline.GetModelViewProjectionMatrix(), vFloorColor, 0);
floorBatch.Draw();
mModelview.PopMatrix();
mModelview.PopMatrix();
mModelview.PushMatrix();
}
main()
{
gltSetWorkingDirectory(argv[0]); //
glutInit(&argc, argv); //opengl initialization
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL); //display mode set
glutInitWindowSize(800, 600); //window size
glutCreateWindow("Neighbourhood"); // title ile pencereyi yarattik
glutReshapeFunc(ChangeSize); // pencere boyutu degisince cagrilan fonksiyonun adi
glutDisplayFunc(RenderScene); // her bir frame icin cagrilan fonksiyonun adi
glutSpecialFunc(SpecialKeys);
// Add menu entries to change filter
glutCreateMenu(ProcessMenu);
glutAddMenuEntry("GL_NEAREST",0);
glutAddMenuEntry("GL_LINEAR",1);
glutAddMenuEntry("GL_NEAREST_MIPMAP_NEAREST",2);
glutAddMenuEntry("GL_NEAREST_MIPMAP_LINEAR", 3);
glutAddMenuEntry("GL_LINEAR_MIPMAP_NEAREST", 4);
glutAddMenuEntry("GL_LINEAR_MIPMAP_LINEAR", 5);
glutAttachMenu(GLUT_RIGHT_BUTTON);
GLenum err = glewInit(); // bu ne a.q.
if (GLEW_OK != err) {
fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
return 1;
}
SetupRC(); // opengle ozel kendimizce ayarlari initialize edecegimiz fonksiyon
glutMainLoop(); // opengl calisiyor
ShutdownRC();
return 0;
}
【问题讨论】:
-
在 MultiTexCoord2d 中使用 GL_TEXTURE0 枚举作为第一个参数。还有为什么你到底要使用已弃用的 OpenGL API?
-
我会试一试,很好的问题 :) 我是一个新学习者,OpenGL 圣经书使用这个 API:/ 我试过 GL_TEXTURE0 枚举,但问题仍然存在。
-
它在 floorBatch 的方法之一内崩溃?请提供更多详细信息,即使您只是包装 OpenGL 调用。
-
GLBatch floorBatch; // 这就是它的来源,不是我实现的。它是图书馆的一部分
-
floorBatch.MultiTexCoord2f(0, 0.0f, 0.0f);// 这行导致分段错误。