小编Axa*_*alo的帖子

可以从纹理生成法线贴图吗?

如果我有纹理,那么可以为这个纹理生成法线贴图,那么它可以用于凹凸贴图吗?

或者通常如何制作法线贴图?

c c++ opengl

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

为什么将C++中的整数初始化为010与初始化为10不同?

当一个整数初始化为int a = 010,a实际上设置为8,但是,for int a = 10,a设置为10.任何人都可以告诉我为什么a不设置为10 int a = 010

c++

5
推荐指数
4
解决办法
1323
查看次数

Visual Studio 2013:如何将文件名添加到代码片段的输出中?

我需要将代码片段插入到输出中的文件名包括在内。我查看了代码片段函数 ( http://msdn.microsoft.com/en-us/library/ms242312%28v=vs.80%29.aspx ) 并且选择是有限的。

有什么方法可以将要插入代码段的文件名插入到代码段输出中吗?

visual-studio code-snippets

5
推荐指数
2
解决办法
3599
查看次数

由 bug 引起的 MSVC 错误 C2753(部分专业化无法匹配主模板的参数列表)?

以下代码使用 C++17 在 Clang 15.0.7 和 GCC 12.2.0 编译器上成功编译:

template<typename T, std::size_t s = 0u>
struct A: std::false_type {};

template<typename T>
struct A<T, sizeof(T)>: std::true_type {};

static_assert(A<int, sizeof(int)>::value);
Run Code Online (Sandbox Code Playgroud)

但 MSVC 19.35.32215 失败并显示:

error C2753: 'A<T,sizeof(T)>': partial specialization cannot match argument list for primary template
error C2607: static assertion failed
Run Code Online (Sandbox Code Playgroud)

我已经有一个解决方法:

template<typename T, typename S>
struct B: std::false_type {};

template<typename T>
struct B<T, std::integral_constant<std::size_t, sizeof(T)>>: std::true_type {};

template<typename T, std::size_t s = 0u>
using A = B<T, std::integral_constant<std::size_t, s>>;

static_assert(A<int, sizeof(int)>::value); …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors template-specialization visual-c++ c++17

5
推荐指数
0
解决办法
118
查看次数

释放一个指针

我想知道free()指针是否可以转换为另一种类型.例如,如果我这样做:

char *p = malloc (sizeof (int));
int *q = (int *)p;
free (q);
Run Code Online (Sandbox Code Playgroud)

我没有收到关于gcc(-Wall)的警告.

在linux上,free上的手册页说,在malloc(),calloc()或realloc()没有返回的指针上调用free是违法的.但是如果指针被转换为中间的另一种类型会发生什么?

我问这个是因为我读到C标准不要求不同的指针类型(例如int*和char*)具有相同的大小,我不明白这是如何可能的,因为它们都需要可转换为void*为了调用malloc/free函数.

以上代码是否合法?

c

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

序列化可变状态并通过网络异步发送,几乎为零拷贝(Cap'n Proto + ZeroMQ)

我有一个应用程序,我希望通过网络将其部分可变状态发送到另一台机器(将有一组这些机器)对其进行一些CPU密集型计算并获取结果.像异步RPC一样.这样的调用将在程序执行期间多次发生,因此我希望尽量减少开销,例如最小化数据冗余副本的数量.数据大小从几十字节到几百KB不等,甚至可能只有几MB.它的结构相对复杂,它由一组对象树组成,但是叶子只包含原始类型,而内部节点包含最少的元数据.

我正在考虑Cap'n Proto进行序列化(但是,在这种情况下,我必须为我的数据创建一个冗余模型),而ZeroMQ用于传输.在客户端/主应用程序端,我想使用azmq,因为我需要Boost:Asio的功能(即协程/光纤支持).语言是C++.

总结一个非常粗略的草图:

RelativelyComplexState data;
CapnProtoRequest cp_req = buildRequest(data); // traverses my data, creates C'n P object
azmq_socket.async_send(boost::asio::buffer(cp_req, cp_req.size)); //azmq always copies the buffer? Not good.
// do other stuff while request is being processed remotely
// get notification from azmq/Boost:Asio when reply has arrived
azmq::message msg();
azmq_socket.async_receive(some_message_handler?); // get all the data into msg
CapnProtoResponse cp_resp = parseResponse(msg.cbuffer()); // interpret bytes as C'n P object, hopefully no copy
RelativelySimpleResult result = deserialize(cp_resp);
Run Code Online (Sandbox Code Playgroud)

这是可行的,还是有更好的方法?在这种情况下,无模式序列化方法(即Boost :: Serialization)是否会使我的生活更轻松和/或应用程序更高效?

另外,使用ZeroMQ/azmq发送和接收Cap'n Proto对象的最佳方法是什么,避免不必要的副本?通过查看azmq的源代码,似乎对于发送,azmq总是复制缓冲区内容.有哪些更微妙的问题(细分/框架等)?我不熟悉这些库,也没有找到任何解释或好的例子.

谢谢!

c++ serialization boost boost-asio zeromq

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

代码映射未出现在Visual Studio 2013中

我安装了Visual Studio 2013,但我找不到代码映射.
谁能告诉我在哪里找到它?

code-map visual-studio-2013

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

如何获取GLSL编译器错误的行号

我想知道是否有一种常见的方法来获取GLSL编译器错误的行号.起初我以为我可以解析glGetInfoLogARB,但后来我读到它的输出没有标准化.

c c++ opengl glsl

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

用IBO了解VAO

GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glEnableVertexAttribArray(0);
vbo.bind(GL_ARRAY_BUFFER);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDisableVertexAttribArray(0);
ibo.bind(GL_ELEMENT_ARRAY_BUFFER); //where do I put this?
glBindVertexArray(0);

while (glfwGetWindowParam(GLFW_OPENED)) {
    glClear(GL_COLOR_BUFFER_BIT);
    glBindVertexArray(vao);
    glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, 0);
    glfwSwapBuffers();
}
Run Code Online (Sandbox Code Playgroud)

我理解VAO的方式是我创建一个vao句柄并像这样绑定它

glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
Run Code Online (Sandbox Code Playgroud)

现在我可以用这三个命令填充VAO

vbo.bind(GL_ARRAY_BUFFER);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glDisableVertexAttribArray(0);
Run Code Online (Sandbox Code Playgroud)

我应该注意到我在这里使用了自己的vbo类.

然后我关闭了我的VAO

glBindVertexArray(0);
Run Code Online (Sandbox Code Playgroud)

然后我可以在renderloop中加载它

glBindVertexArray(vao);
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, 0);
Run Code Online (Sandbox Code Playgroud)

但我没有得到任何输出.

现在我认为它与我的索引数组有关.(ibo)如何将VAO与IBO一起使用?

c++ opengl opengl-3

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

为什么在C++中调用此虚函数会导致基类出现"缺少符号"错误?

我有一个虚拟类,定义如下:

  template<typename TId, typename TValue>
  class Resource {
    private:

      /// Next item in the chain
      unique_ptr<Resource<TId, TValue>> data;

    protected:

      /// The id this value
      TId id;

      /// The value on this value
      TValue value;

    public:

      /// Create a new instance and assign the values to it
      Resource(TId id, TValue value) {
        this->id = id;
        this->value = value;
      }

      /// Destructor
      virtual ~Resource() {
      }

      /// Safely clone a new instance of this
      virtual Resource<TId, TValue> *Clone();

      ... other stuff removed …
Run Code Online (Sandbox Code Playgroud)

c++ templates linker-errors

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

来自无符号积分类型样式的转换.这种风格好吗?

很多时候我看到程序员做了以下演员

unsigned long long minimumValue;
minimumValue = (unsigned long long)-1;
Run Code Online (Sandbox Code Playgroud)

但为什么他们这样做,而不是int minimumValue = -1

c c++

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

为什么我的程序打印出的次数比预期的多?

我有一个程序读取文件,逐行检查,并逐字分解.我的问题是,我将把每个单词存储在一个数组中,但是我需要使用strcmp函数来验证这个单词是否已经存在.无论如何,下面是我的代码,我的问题是,为什么我的程序打印出1这么多次?我期待它只打印两次因为this在我的文本文件中出现两次.

while (fgets(line, sizeof(line), fi) != NULL) { // looping through each line

    line_count += 1;

    for (j = 0; j < sizeof(line); j++) { // convert all words to lowercase
        line[j] = tolower(line[j]);
    }

    result = strtok(line, delimiters);

    while (result != NULL) {
        word_count += 1;

        if (strcmp(result, "this")) {
            printf("1\n");
        }

        result = strtok(NULL, delimiters); // get the next token
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是我的文字文件:

This is the first test.
This is the second …
Run Code Online (Sandbox Code Playgroud)

c strcmp

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