小编Fre*_*ddy的帖子

C - realloc中的动态数组

在我开始之前

  1. 我搜索了"类似标题的问题",虽然我发现了一些非常有用的信息,但我似乎无法让它为我工作.

  2. 这与家庭作业有关.虽然,不是实际的项目本身.我已经完成了我只是将它从java移植到C所以我可以测试我的教授单元测试框架.

好的,动态分配的数组.我知道如何构建它们,但不知道如何构建它们.

例如我有以下界面..

void insertVertex( vertex p1, vertex out[], int *size);
Run Code Online (Sandbox Code Playgroud)

此方法采用顶点并将其存储到out数组中.存储顶点后,我增加了未来调用的长度计数.

p1 - 是我要添加的顶点.

out [] - 是我需要存储的数组(总是满的)

length - 当前长度

顶点定义为..

typedef struct Vertex{
int x;
int y;
} Vertex;
Run Code Online (Sandbox Code Playgroud)

这就是我在java中使用的..

Vertex tempOut = new Vertex[size +1];
//Code to deep copy each object over
tempOut[size] = p1;
out = tempOut;
Run Code Online (Sandbox Code Playgroud)

这是我认为我可以用于...

out = realloc(out, (*size + 1) * sizeof(Vertex));
out[(*size)] = p1;
Run Code Online (Sandbox Code Playgroud)

但是,我继续收到一条错误消息,指出该对象未动态分配.

我发现了一个可以解决这个问题的解决方案.我没有使用Vertex*而是转向Vertex**并存储指针与顶点.但是,在切换完所有内容之后,我发现我已经看过单元测试将为我提供一个Vertex out []的事实,即必须存储所有内容.

我也试过以下没有运气.

Vertex* temp = (Vertex *)malloc((*size + 1) * sizeof(Vertex)); …
Run Code Online (Sandbox Code Playgroud)

c

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

世界空间到相机空间

我对如何将世界空间坐标转换为相机坐标感到困惑.

我目前的理解是我需要计算相机空间矢量在哪里

n =眼点 - 看

u =向上(0,1,0)X n(标准化)

v = n X u

一旦我有<U,V,N>,我会简单地将每个点乘以?

math 3d matrix

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

将两个纹理发送到GLSL着色器

向我的GLSL着色器发送两个纹理时,只有一个实际到达.奇怪的是我绑定的第一个纹理用于​​我的着色器中的两个纹理槽.这让我相信我在OpenGL中传递纹理的方式是错误的.但是,我无法追查问题.

这是我配置纹理以在我的着色器中使用的代码.

glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo2);
glPushAttrib(GL_VIEWPORT_BIT | GL_ENABLE_BIT);
glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


// Get uniforms
GLuint pass_3O  = glGetUniformLocation(blend_shader, "org");
GLuint pass_3B = glGetUniformLocation(blend_shader, "blur");

// Activate shaders
glUseProgram(blend_shader);


// Bind first texture 
glActiveTexture(GL_TEXTURE0 );
glBindTexture(GL_TEXTURE_2D, init_texture);

// Bind the second texture 
glActiveTexture(GL_TEXTURE1 );
glBindTexture(GL_TEXTURE_2D, third_texture);

// Assign index to 2d images
glUniform1i(pass_3O, 0);
glUniform1f(pass_3B, 1);
Run Code Online (Sandbox Code Playgroud)

上面的代码传递了两个纹理.第一个是3D场景的第一个渲染过程的2D图像.第三个是添加了x2级别模糊的相同纹理.最后阶段是将它们混合在一起,以实现可怜的芒.

这是我将两个纹理都绘制到四边形的代码.

// Draw to quad
glBegin(GL_QUADS);
    glMultiTexCoord2f(GL_TEXTURE0, 0.0f, 0.0f);
    glMultiTexCoord2f(GL_TEXTURE1, 0.0f, 0.0f);
    glVertex3f(-w_width/2.0,  -w_height/2.0, 0.5f);

    glMultiTexCoord2f(GL_TEXTURE0, 0.0f, 1.0f);
    glMultiTexCoord2f(GL_TEXTURE1, 0.0f, 1.0f); …
Run Code Online (Sandbox Code Playgroud)

opengl glsl

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

type_traits - 连续的内存

我有一个处理任何容器类型的接口.std::vector,std::array甚至std::basic_string.问题在于没有什么可以阻止某人传递没有连续内存的容器.

我当前的解决方案是delete我想要阻止的那些接口.

void dosoemthing(const std::list&)=delete;
void dosoemthing(const std::map&)=delete;
Run Code Online (Sandbox Code Playgroud)

但是,如果我可以根据类型特征添加静态断言,我更愿意.这引出了我的问题.它们是否存在容器的类型特征,可用于识别其内存是否连续?我一直在阅读文档,还没有找到任何东西.我想在将它标记为失败的原因之前我会向A团队查询.

c++ c++11

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

如何检查返回的项目是否为列表本身?

早上 -

我试图看看是否有办法检查从列表返回的项目是否是列表本身.

例如

(elt '(a (b c) d) 1)
Run Code Online (Sandbox Code Playgroud)

有没有办法检查返回的项目是否为列表?

我试过用长度,

(length (elt '(a (b c) d) 1))
Run Code Online (Sandbox Code Playgroud)

但如果给出的项目不是列表,则会抛出错误.

总之,我正在寻找一种方法来遍历列表中的每个元素,并检查它是否是列表.

谢谢

lisp common-lisp

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

标签 统计

3d ×1

c ×1

c++ ×1

c++11 ×1

common-lisp ×1

glsl ×1

lisp ×1

math ×1

matrix ×1

opengl ×1