• 大小: 2.28MB
    文件类型: .gz
    金币: 1
    下载: 0 次
    发布日期: 2023-10-27
  • 语言: 其他
  • 标签: opengl  鱼眼矫正  

资源简介

基于opengl实现鱼眼矫正,用到了球面等距模型,w,s,left,right等键可以控制视角,要引入lens K,D参数,留言继续讨论

资源截图

代码片段和文件信息

/*

    OpenGL loader generated by glad 0.1.18a0 on Wed Feb 28 04:14:42 2018.

    Language/Generator: C/C++
    Specification: gl
    APIs: gl=3.3
    Profile: core
    Extensions:
        
    Loader: True
    Local files: False
    Omit khrplatform: False

    Commandline:
        --profile=“core“ --api=“gl=3.3“ --generator=“c“ --spec=“gl“ --extensions=““
    Online:
        http://glad.dav1d.de/#profile=core&language=c&specification=gl&loader=on&api=gl%3D3.3
*/

#include 
#include 
#include 
#include 

static void* get_proc(const char *namez);

#ifdef _WIN32
#include 
static HMODULE libGL;

typedef void* (APIENTRYP PFNWGLGETPROCADDRESSPROC_PRIVATE)(const char*);
static PFNWGLGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr;

static
int open_gl(void) {
    libGL = LoadLibraryW(L“opengl32.dll“);
    if(libGL != NULL) {
        gladGetProcAddressPtr = (PFNWGLGETPROCADDRESSPROC_PRIVATE)GetProcAddress(
                libGL “wglGetProcAddress“);
        return gladGetProcAddressPtr != NULL;
    }

    return 0;
}

static
void close_gl(void) {
    if(libGL != NULL) {
        FreeLibrary((HMODULE) libGL);
    libGL = NULL;
    }
}
#else
#include 
static void* libGL;

#ifndef __APPLE__
typedef void* (APIENTRYP PFNGLXGETPROCADDRESSPROC_PRIVATE)(const char*);
static PFNGLXGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr;
#endif

static
int open_gl(void) {
#ifdef __APPLE__
    static const char *NAMES[] = {
        “../frameworks/OpenGL.framework/OpenGL“
        “/Library/frameworks/OpenGL.framework/OpenGL“
        “/System/Library/frameworks/OpenGL.framework/OpenGL“
        “/System/Library/frameworks/OpenGL.framework/Versions/Current/OpenGL“
    };
#else
    static const char *NAMES[] = {“libGL.so.1“ “libGL.so“};
#endif

    unsigned int index = 0;
    for(index = 0; index < (sizeof(NAMES) / sizeof(NAMES[0])); index++) {
        libGL = dlopen(NAMES[index] RTLD_NOW | RTLD_GLOBAL);

        if(libGL != NULL) {
#ifdef __APPLE__
            return 1;
#else
            gladGetProcAddressPtr = (PFNGLXGETPROCADDRESSPROC_PRIVATE)dlsym(libGL
                “glXGetProcAddressARB“);
            return gladGetProcAddressPtr != NULL;
#endif
        }
    }

    return 0;
}

static
void close_gl(void) {
    if(libGL != NULL) {
        dlclose(libGL);
        libGL = NULL;
    }
}
#endif

static
void* get_proc(const char *namez) {
    void* result = NULL;
    if(libGL == NULL) return NULL;

#ifndef __APPLE__
    if(gladGetProcAddressPtr != NULL) {
        result = gladGetProcAddressPtr(namez);
    }
#endif
    if(result == NULL) {
#ifdef _WIN32
        result = (void*)GetProcAddress((HMODULE) libGL namez);
#else
        result = dlsym(libGL namez);
#endif
    }

    return result;
}

int gladLoadGL(void) {
    int status = 0;

    if(open_gl()) {
        status = gladLoadGLLoader(&get_proc);
        close_gl();
    }

    return status;
}

struct gladGLversionStruct GLVersion;

#if defined(GL_E

评论

共有 条评论