我正在尝试通过挂钩 OpenGl 调用来破解和修改旧的 opengl 固定管道游戏的几个渲染功能,而我目前的任务是实现着色器照明。我已经创建了一个合适的着色器程序,可以正确地照亮我的大部分对象,但是这个游戏的地形是在没有提供正常数据的情况下绘制的。
游戏调用:
void glVertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer);
和
void glDrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices);`
定义和绘制地形,因此我将这些函数都钩住了,我希望在指针处循环遍历给定的顶点数组,并在每个 DrawElements 调用或 VertexPointer 调用上计算每个表面的法线,但我有想出一种方法来做到这一点 - 具体来说,如何读取、迭代和理解指针处的数据。在这种情况下,glVertexPointer
调用的常用参数是size = 3, type = GL_float, stride = 16, pointer = some pointer
. 挂钩 glVertexPointer,我不知道如何遍历指针并获取网格的所有顶点,因为我不知道所有顶点的总数,也不了解指针处的数据结构给定步幅 - 同样我应该如何构造普通数组
尝试为索引数组中的每个指定索引计算drawelements中的法线会更好吗?