gpt4 book ai didi

android - 矩阵调色板,模型 View 矩阵时的绘图问题

转载 作者:行者123 更新时间:2023-11-30 04:40:15 25 4
gpt4 key购买 nike

使用 OpenGL 1.1 和 Matrix Palette 扩展。我遇到的问题是,并非每个加载的模型都需要动画,所以我认为我不需要启用这些客户端状态,也不需要提供权重或权重索引数组。例如,我在我的绘图代码中正在尝试这样的事情......

glMatrixMode(GL_MATRIX_PALETTE_OES);

glBindBuffer(GL_ARRAY_BUFFER, dataBuffers[0]);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, dataBuffers[1]);

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_WEIGHT_ARRAY_OES);
glEnableClientState(GL_MATRIX_INDEX_ARRAY_OES);

//Code to modify the palettes... works fine...
for(i = 0; i < mech.boneCount; ++i){
glCurrentPaletteMatrixOES(i);
glLoadPaletteFromModelViewMatrixOES();

GenerateBoneMatrixPalette(bones, i);
}

glVertexPointer(3, GL_FLOAT, sizeof(VertexData), (char*)(NULL + 0));
glNormalPointer(GL_FLOAT, sizeof(VertexData), (char*)(NULL + 12));
glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(VertexData), (char*)(NULL + 24));
glWeightPointerOES(1, GL_FLOAT, sizeof(VertexData), (char*)(NULL + 28));
glMatrixIndexPointerOES(1, GL_UNSIGNED_BYTE, sizeof(VertexData), (char*)(NULL + 32));
glDrawElements(GL_TRIANGLES, mech.indexsize, GL_UNSIGNED_SHORT, (char*)(NULL + 0));

glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_WEIGHT_ARRAY_OES);
glDisableClientState(GL_MATRIX_INDEX_ARRAY_OES);

glBindBuffer(GL_ARRAY_BUFFER, dataBuffers[2]);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, dataBuffers[3]);

glMatrixMode(GL_MODELVIEW);

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);

//pardon the hard 28 value here, it's the correct offset for this test
glVertexPointer(3, GL_FLOAT, 28, (char*)(NULL + 0));
glNormalPointer(GL_FLOAT, 28, (char*)(NULL + 12));
glColorPointer(4, GL_UNSIGNED_BYTE, 28, (char*)(NULL + 24));
glDrawElements(GL_TRIANGLES, indexsize, GL_UNSIGNED_SHORT, (char*)(NULL + 0));

glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

但它不起作用。第一部分显示正确,但第二部分根本不显示。如果我在第二部分中添加一个感觉上不必要的重量和重量索引元素,根据需要修改步幅,而不是将矩阵设置为模型 View ...那么它会显示我所期望的。

感觉最奇怪的测试是,如果我根本不启用 Matrix Palette 扩展,只绘制第二部分,它就可以正常工作。但是,仅启用 Matrix Palette 扩展会导致第二部分根本无法工作,看起来我无法在模式设置为 ModelView Matrix 时简单地绘制...尽管这似乎有些不寻常,因为 ModelView 仍然绝对是受转换影响。

所以...在使用此扩展时是否可以在 ModelView 是当前矩阵时切换到并绘制?或者我必须使用/重复使用单个调色板才能使其正常工作。

最佳答案

我没有在扩展注册表中找到 OES 矩阵调色板扩展,而是 ARB 扩展,我想它的工作原理类似。在此扩展中,您必须启用 GL_MATRIX_PALETTE 和/或 GL_VERTEX_BLEND(使用 glEnable)才能使用矩阵调色板蒙皮并禁用它才能不使用它。

但是 glMatrixMode 与启用或禁用它没有任何关系。它只是选择矩阵修改函数应用到的矩阵(如 glLoadIdentityglTranslate、...)。

编辑: 在谷歌搜索这个扩展后(我没有 ES 经验)我发现,你肯定必须启用 GL_MATRIX_PALETTE_OES 才能使用它(通过 glEnable) 然后再次禁用它让你的第二部分不使用它。正如我在上面所写的,glMatrixMode 并没有按照您的预期进行。

关于android - 矩阵调色板,模型 View 矩阵时的绘图问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6106152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com