钩子游戏是cs 1.6
钩子的glbegin函数
我想为角色模型渲染分配颜色,但代码无效
请求帮助
void APIENTRY hkGLBegin(GLenum mode)
{
if (mode==5)
{
glEnable(GL_TEXTURE_2D);
glColor4f(0, 0, 0, 0); //TODO FIXME failed
glDisable(GL_TEXTURE_2D);
}
}
我不熟悉这种GL黑客,所以我可能是错的…然而
代码无效是什么意思?编译时或运行时是否有任何错误信息?也许你只需要加上:
#include <gl.h>
或
#include <glgl.h>
或任何其他与编译器相关的缩写…
我认为glEnable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_2D);
不允许在glBegin/glEnd
内…
如果钩子在glBegin
之前,那么启用和禁用纹理也会禁用纹理,如果钩子不调用原始的glBegin
,你可能也想添加它…
所以我将只留下glColor
并删除纹理语句,它们与颜色无关…
如果它不工作,它可能表明CS正在覆盖它与自己的glColor
调用或照明没有启用glEnable(GL_COLOR_MATERIAL);
,所以尝试添加它…
为什么用mode == 5
代替mode == GL_TRIANGLE_STRIP
?这是摘自gl.h
#define GL_POINTS 0x0000
#define GL_LINES 0x0001
#define GL_LINE_LOOP 0x0002
#define GL_LINE_STRIP 0x0003
#define GL_TRIANGLES 0x0004
#define GL_TRIANGLE_STRIP 0x0005
#define GL_TRIANGLE_FAN 0x0006
#define GL_QUADS 0x0007
#define GL_QUAD_STRIP 0x0008
#define GL_POLYGON 0x0009
你确定CS只使用那个原语吗?如果没有,你也应该处理其他的……
所以我要改成:
#include <gl.h> // optional if compile errors present
void APIENTRY hkGLBegin(GLenum mode)
{
if (mode==GL_TRIANGLE_STRIP)
{
glEnable(GL_COLOR_MATERIAL); // optional if color is not changed by glColor on textured surfaces
glColor4f(0, 0, 0, 0);
}
glBegin(mode); // optional if nothing is rendered
}