小编Sho*_*wav的帖子

C语言中结构多态的最佳方法

我正在写一个简单的2d矢量对象.它将具有x和y组件,以及长度,交叉产品等方法.问题是,我希望结构具有许多可能的类型(char,int,float,double等).我想知道什么是最好的选择,设计明智,与对象互动?这是我目前正在考虑的事情:

1.让用户将矢量对象传递给专门的函数,例如:

Vector2Dt_Dot(Vec2Dt* vector1, Vec2Dt* vector2);
Run Code Online (Sandbox Code Playgroud)

其中't'是向量的类型.然而,这种方法的问题在于它不允许不同类型相互交互,所以我不能说计算float vector2d和double vector2d的点积.第二种方法,以及我倾向于:

2.让用户将矢量对象作为void指针及其类型传递,例如:

Vector2D_Dot(void* vector1, unsigned vector1_type, void* vector2, unsigned vector2_type);
Run Code Online (Sandbox Code Playgroud)

显然,这种方法在API方面更紧凑,并且还解决了上述问题,但代价是一些额外的参数和类型安全性.

可能还有其他我不了解的解决方案,但这些是我目前正在考虑的解决方案.你觉得最好的方法是什么?

c

9
推荐指数
1
解决办法
5587
查看次数

glClearBufferData - 用法示例?

void glClearBufferData(GLenum target, GLenum internalformat, GLenum format, 
      GLenum type, const void* data);
Run Code Online (Sandbox Code Playgroud)

我不太确定如何正确使用这种方法.更具体地说,是内部格式格式参数.在官方文件是关于什么的,这些都是非常模糊的,我无法找到这些可用目标的列表.这些是设定的目标,还是只需传递数据的大小或其他东西?我也无法在网上找到这个功能的任何用法示例...任何人都可以提供一个,或者可能是一个目标列表?

c++ opengl

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

这种"类型狡猾"是否定义明确?

我想知道,是否指向一个不完整类型的未定义行为的指针?

struct _obj;
typedef _obj obj;

typedef struct{
    int val;
} obj_int;

void print_stuff(obj* o){
    printf("%d\n", ((*obj_int)(o)) -> val);
}
Run Code Online (Sandbox Code Playgroud)

c

4
推荐指数
1
解决办法
188
查看次数

为什么这个功能会发生故障?

这让我困扰了一段时间; 这个功能甚至没有返回,它只是段错误.我指定了正确的文件位置,我在函数的每个可能的点检查错误,我不明白?

GLchar* getShaderString(const GLchar* file_path){
    FILE* srcfile = NULL;
    if(!(srcfile = fopen(file_path, "r")))
        return(NULL);
    fseek(srcfile, 0l, SEEK_END);
    long len;
    if((len = ftell(srcfile)) == -1)
        return (NULL);
    fseek(srcfile, 0l, SEEK_SET);
    GLchar* buff;
    if(!(buff = malloc(len + 1)))
        return (NULL);
    fread((GLvoid*)buff, len, 1, srcfile);
    fclose(srcfile);
    buff[len + 1] = '\0';
    return (buff);
}
Run Code Online (Sandbox Code Playgroud)

c file-io segmentation-fault

3
推荐指数
1
解决办法
116
查看次数

OpenGL GL_POLYGON无法正常运行

我有一个与OpenGL相关的问题.每当我尝试使用顶点缓冲区中的四个顶点绘制一个简单的多边形时......没有任何反应.但是,它会以GL_TRIANGLES或GL_TRIANGLE_STRIP模式绘制形状,尽管是扭曲的.难道我做错了什么?

相关代码:

顶点阵列:http://i.imgur.com/nEcbw.png

GL_POLYGON:http://i.imgur.com/idfFT.png

GL_TRIANGLES:http://imgur.com/84ey3,idfFT,nEcbw#0

GL_TRIANGLE_STRIP:http://i.imgur.com/JU3Zl.png

opengl polygon glsl vertex-buffer fragment-shader

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

纹理图集的正确实现

我目前正在与一块软件一起工作,该软件通过拍摄几张图像然后将它们拼接成游戏地图来生成游戏地图.现在我正在使用OpenGL来绘制这些地图.如您所知,在OpenGL中切换状态并进行多次绘制调用的成本很高.我决定实现一个纹理图集系统,它允许我在没有状态切换的单个绘图调用中绘制整个地图.但是,我在实现纹理图集方面遇到了问题.首先,将每个TILE存储在纹理图集或图像本身中会更好吗?其次,并非所有图像都保证是方形的,甚至是2的幂.我是否将它们填充到最接近的2,正方形或两者的功率?我担心的另一件事是图像可能变得非常大,我担心超出纹理的OpenGL大小限制,这会迫使我分割地图,破坏整个概念.

到目前为止,这是我的概念:

- 生成纹理

- 绑定纹理

- 生成足够大的图像来保存纹理(考虑填充?)

- 纹理?

-Upload subtexture为空白纹理,存储偏移量

- 取消纹理

c++ opengl texture2d

0
推荐指数
1
解决办法
2906
查看次数