OpenGL钩子,如何修改三维模型颜色?

0lvr5msh  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(98)

钩子游戏是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);
    }
}
9q78igpj

9q78igpj1#

我不熟悉这种GL黑客,所以我可能是错的...但是

**您所说的代码无效是什么意思?**编译时或运行时是否有任何错误消息?也许您只需要添加:


# include <gl.h>


# include <gl\gl.h>

或任何其他与编译器相关的缩写...
我不认为glEnable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_2D);是允许的glBegin/glEnd内部...
如果钩子在glBegin之前,那么启用和禁用纹理将禁用纹理,如果钩子不调用原始glBegin,您可能也想添加它...
所以我会只留下glColor,并删除纹理声明,他们与颜色无关反正...
如果它不工作,它可能表明CS是overiding它与自己的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
   }

相关问题