通过Glut为OpenGl定制纹理映射

通过Glut为OpenGl定制纹理映射,opengl,texture-mapping,glteximage2d,Opengl,Texture Mapping,Glteximage2d,我试图做的是创建易于加载和使用的自定义模型和纹理文件。基本上,这些文件是表示XYZ和RGB值的浮点列表。 就像: 0.5 0.234 0.1 ... 问题是我无法让我的浮动数组用于纹理。 下面是我如何定义数组的: float*纹理映射 以下是我如何初始化它: const int SIZE=(128*128*3) textureMap=(float*)malloc(sizeof(textureMap)*大小) 对于(int i=0;i首先,请确保在渲染之前通过调用glEnable(GL_text

我试图做的是创建易于加载和使用的自定义模型和纹理文件。基本上,这些文件是表示XYZ和RGB值的浮点列表。 就像: 0.5 0.234 0.1 ...

问题是我无法让我的浮动数组用于纹理。 下面是我如何定义数组的:

float*纹理映射

以下是我如何初始化它:

const int SIZE=(128*128*3)

textureMap=(float*)malloc(sizeof(textureMap)*大小)


对于(int i=0;i首先,请确保在渲染之前通过调用
glEnable(GL_texture_2D)
启用了纹理贴图(我假设您目前不使用着色器,否则请查看是否存在错误)


其次,创建大小为130x130的纹理并用大小为128x128的数据填充它肯定是错误的。您似乎误解了这些指导原则(也许他们说了一些关于纹理边界的内容,但在您的示例中,您没有任何边界,所以128x128应该可以).

解决了!问题是我需要在绘制多边形的同一个函数中调用
glTexImage2D(…)
。我一直在做的是每当在绘制窗口中编辑纹理时,我调用
glTexImage2D(…)
在同一个函数中,然后告诉3D窗口使用
glutPostWindowRedisplay(…)
刷新

具有讽刺意味的是,在init函数中调用
glTexImage2D(…)
也可以工作,但由于明显的原因,这只是第一次


谢谢大家!

谢谢大家的回复,我确实在init函数中调用了glEnable,并尝试使用128(将切换回),在进入glut的主循环之前,我在init中还有以下几行:
glTexParameteri(GL\u TEXTURE\u 2D,GL\u TEXTURE\u MIN\u FILTER,GL\u LINEAR);glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
不,我没有使用着色器,还有其他你能想到的吗?这里有一些关于我如何创建/使用纹理的更多信息:
glint纹理[1];
glGenTextures(1,&textures[0]);glBindTexture(GL TEXTURE_TEXTURE_2D,textures[0])
(GL_纹理_2D,纹理[0])
宽度和高度为2^n+2*边框。但是,您没有边框,因此宽度和高度仅为128。也许我应该提到,我使用mac osX,在绘制四边形之前,已经尝试使用glTexImage2D重新加载纹理,并在调用绘制四边形之前和之后启用和禁用gl_texture_2d,但均未成功我可能没有设置的y参数?我正在尝试使用在线示例,但到目前为止,没有任何东西正常工作,我们一直在调整学校的代码,但我们在那里使用linux机器,并且以前来回运行时遇到问题。我正在考虑删除我的一些其他调用,以尝试修复此问题。看到最小的工作(或者在您的情况下已损坏)完整代码中的示例可能会说上千字。否则,这只是胡乱猜测,这可能不是真正的问题,而是一种症状。只要OpenGL上下文处于活动状态且纹理当前已绑定(通过
glBindTexture
),调用
glTexImage2D
,在何处都无所谓.所以我想情况并非如此。在绘制前在每一帧中设置纹理图像对于性能来说绝对不是一个好主意。