在我开始之前
我搜索了"类似标题的问题",虽然我发现了一些非常有用的信息,但我似乎无法让它为我工作.
这与家庭作业有关.虽然,不是实际的项目本身.我已经完成了我只是将它从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) 我对如何将世界空间坐标转换为相机坐标感到困惑.
我目前的理解是我需要计算相机空间矢量在哪里
n =眼点 - 看
u =向上(0,1,0)X n(标准化)
v = n X u
一旦我有<U,V,N>,我会简单地将每个点乘以?
向我的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) 我有一个处理任何容器类型的接口.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团队查询.
早上 -
我试图看看是否有办法检查从列表返回的项目是否是列表本身.
例如
(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)
但如果给出的项目不是列表,则会抛出错误.
总之,我正在寻找一种方法来遍历列表中的每个元素,并检查它是否是列表.
谢谢