小编The*_*ter的帖子

OpenGL - 2D纹理映射

我正在尝试将简单的纹理(64x64)渲染为64x64四边形.四边形本身是渲染,但不是纹理.(它呈现一个空白的64x64四边形.)

我正在使用SOIL加载图像.

static GLuint LoadPNG(char* filename)
{
    GLuint texture = SOIL_load_OGL_texture
    (
        filename,
        SOIL_LOAD_AUTO,
        SOIL_CREATE_NEW_ID,
        SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT
    );

    if (texture == 0)
        Log("Texture Load Error: " + string(filename));

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    return texture;
}
Run Code Online (Sandbox Code Playgroud)

这是我的渲染代码,我可能没有正确映射它,所以这也可能是问题.

// Draw Textured Quad
static void glDrawTexturedQuad(glRectF rect, GLuint tex)
{
    // Bind Texture
    glBindTexture (GL_TEXTURE_2D, tex);

    // Render Settings
    glEnable(GL_TEXTURE_2D);
    glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
    glColor3ub(255,255,255);

    glBegin(GL_QUADS);

    // Top Left
    glTexCoord2f(0, 1);
    glVertex2f(rect.X, rect.Y);

    // Top Right …
Run Code Online (Sandbox Code Playgroud)

c c++ opengl texture-mapping

6
推荐指数
2
解决办法
1万
查看次数

按地址调用函数

我试图通过地址学习一些不同的函数调用方法.

bool gl_draw_text(uint x, uint y, uint color, uint alpha, char *fmt);
Run Code Online (Sandbox Code Playgroud)

这个功能就是我所说的.以下是我现在称之为的方式.(它工作正常.)

static void glDrawText(char* text, int x, int y)
{
DWORD func = 0x10057970;

__asm
{
    push text
    push 255
    push 14
    push y
    push x
    call dword ptr [func]
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要使​​用的方法就是这个.

void Hack()
{
    bool (draw*)(uint, uint, uint, uint, char*);
    draw = 0x10057970;
    (draw)(20, 20, 14, 255, "Text");
}
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何正确地将地址转换为函数以使其工作\ compile.?

还有一种方法使用虚函数,我很好奇该方法是如何工作的.(我也可以使用MS Detours,挂钩,然后调用这样的函数,如果你知道的话,那个方法在幕后是如何工作的.)

所以要清楚,我只是要求各种方法来完成这项任务,但是在阅读了它们之后列出了一些我很好奇等等.

c++ function-pointers

2
推荐指数
1
解决办法
203
查看次数

标签 统计

c++ ×2

c ×1

function-pointers ×1

opengl ×1

texture-mapping ×1