0

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

问题是我无法让我的浮点数组为纹理工作。这是我定义数组的方式:

float* textureMap;

这是我初始化它的方式:

const int SIZE = (128*128*3);

textureMap = (float*)malloc(sizeof(textureMap)*SIZE);

for (int i =0; i<SIZE; i++) { textureMap[i] = 0.0f; }

现在使用 Glut,我创建了一个窗口,允许我使用数据绘制和填充数组,并且您可以看到所有 RGB 值都已初始化为 0.0f,所以我至少希望看到我的对象是黑色的,但它仍然存在默认的灰色,并且永远不会变成与我的纹理数组中相同的颜色。

这是我创建纹理的调用:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 130, 130, 0, GL_RGB, GL_FLOAT, textureMap);

我已经按照 OpenGl 官方网页上的指南将宽度和高度设为 2^n + 2,但考虑到我尝试构建浮点数组的方式,我不确定这是否正确。

我还尝试调用 glGetError() 没有成功(也就是说,没有引发错误,我确保可以通过将宽度和高度设置为 -1 来引发错误)。

我已确保在调用 glBegin() 之前绑定了纹理,甚至检查了这些调用是否有错误无济于事。

任何建议/指针?有没有其他人尝试过定义自己的纹理格式?

顺便说一句,目前正在使用四边形而不是三角形,这很好,对吧?

4

2 回答 2

2

首先,确保您glEnable(GL_TEXTURE_2D)在渲染之前通过调用启用了纹理映射(我假设您目前不使用着色器,否则会在那里查找错误)。

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

于 2011-05-31T12:20:46.887 回答
0

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

具有讽刺意味的是,调用glTexImage2D(...)init 函数也有效,但只是第一次,原因很明显。

谢谢大家!

于 2011-06-11T14:26:29.580 回答