小编Pat*_*ski的帖子

一套高效的3D交叉算法

任何人都知道一个源,网站,我可以得到一些很好的3D交叉算法实现,如

  • 球体和球体的交叉点
  • 球体/椭球
  • 球体/长方体
  • 椭圆形/椭圆体
  • 椭球体/长方体
  • 长方体/立方体
  • 球/射线
  • 椭球/射线
  • 长方体/射线
  • 三角形/射线
  • 四/射线
  • 三角形/三角形
  • 四/四

c++ math 3d graphics intersection

40
推荐指数
2
解决办法
4万
查看次数

在OpenGL引擎中组织GLSL着色器

哪个更好 ?

  1. 具有一个着色器程序有很多制服指定灯使用,或映射做(例如,我需要一个网格被视差映射,并且映射另一个视差/镜面).我会制作一个缓存转移制服的缓存列表,如果需要的话,只需为每个下一个网格更换一些制服.

  2. 要 为每个需要的案例设置很多着色器程序,每个案例都有少量制服,如果需要的话,每个网格都使用glUseProgram进行惰性绑定.在这里,我假设网格已正确批处理,以避免冗余切换.

c++ opengl shader glsl

36
推荐指数
2
解决办法
4706
查看次数

在cmath中sqrt,sin,cos,pow等的定义

有没有像功能的任何定义sqrt(),sin(),cos(),tan(),log(),exp()(这些从文件math.h/CMATH)可用?

我只是想知道它们是如何工作的.

c c++ math cmath definitions

33
推荐指数
4
解决办法
2万
查看次数

在什么情况下我应该在C++中使用memcpy而不是标准运算符?

我什么时候可以memcpy使用它获得更好的性能?如何使用它?例如:

float a[3]; float b[3];
Run Code Online (Sandbox Code Playgroud)

是代码:

memcpy(a, b, 3*sizeof(float));
Run Code Online (Sandbox Code Playgroud)

比这

a[0] = b[0];
a[1] = b[1];
a[2] = b[2];
Run Code Online (Sandbox Code Playgroud)

c++ memory performance allocation copying

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

为什么多重继承会增加对象的大小,尽管基数为空?

鉴于此代码:

#include <iostream>

struct A {

};

struct B {

};

struct C {

};

struct E : A {
    int field;
};

struct F : A, B {
    int field;
};

struct G : A, B, C {
    int field;
};

int main() {
    std::cout << _MSC_VER << std::endl;
    std::cout << sizeof(E) << std::endl;
    std::cout << sizeof(F) << std::endl;
    std::cout << sizeof(G) << std::endl;
    int o;
    std::cin >> o;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

1900
4
8
8
Run Code Online (Sandbox Code Playgroud)

为什么会F …

c++ multiple-inheritance memory-layout visual-studio

17
推荐指数
2
解决办法
906
查看次数

函数中的向量 - 如何返回

我有一个应该从文件中逐行读取的函数,当一行不以'>'或''开头时,读取停止.它应该将行存储在vector中并返回它.
这是代码:

    #include <cstdlib>
    #include <iostream>
    #include <string>
    #include <stdio.h>
    #include <fstream>
    #include <vector>

    using namespace std;

    string getseq(char * db_file) // gets sequences from file
            {
                string seqdb;
                vector<string> seqs;
                ifstream ifs(db_file);
                string line;

                //vector<char> seqs[size/3];

                while(ifs.good())
                {
                    getline(ifs, seqdb);
                    if (seqdb[0] != '>' & seqdb[0]!=' ')
                    {
                        seqs.push_back(seqdb);
                    }
                }

            ifs.close();
            //return seqs;

            //return seqs;
            }

    int main(int argc, char * argv[1])
    {
        cout << "Sequences: \n" << getseq(argv[1]) << endl;
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

编译器(g ++)返回:

    fasta_parser.cpp: In …
Run Code Online (Sandbox Code Playgroud)

c++ return vector return-value

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

使用IOCP和UDP?

我很熟悉的东西输入/输出完成端口是当它涉及到TCP.

但是,如果我编写一个FPS游戏,或者需要低延迟的任何东西都可以成为交易破坏者 - 我希望立即响应玩家以提供最佳的游戏体验,即使以丢失一些空间数据为代价走.很明显我应该使用UDP,除了频繁发送坐标更新外,我还应该实现一种半可靠的协议(afaik TCP在UDP中引起数据包丢失,所以我们应该避免混合这两个)来处理聊天消息等事件,或者枪支丢失可能是至关重要的.

假设我的目标是适用于MMOFPS游戏的性能,该游戏允许在一个持久的世界中遇见数百名玩家,除了与枪支战斗之外,它还允许他们通过聊天消息等进行交流 - 这样的事实实际存在并且运作良好 - 查看PlanetSide 2.

网上有很多文章(例如来自msdn的文章)说重叠套接字是最好的,而IOCP是神层概念,但它们似乎并没有区分我们使用其他协议而不是TCP的情况.

所以几乎没有关于开发这样一个服务器时使用的I/O技术的可靠信息,我看过这个,但这个话题似乎备受争议,我也看到过这个,但考虑到第一个链接中的讨论,我不知道我是否应该遵循第二个假设,是否应该将IOCP与UDP一起使用,如果不是,那么在UDP方面,最具可扩展性和效率的I/O概念是什么.

或许我只是做了另一个过早的优化,目前还不需要提前思考?

考虑将其发布在gamedev.stackexchange.com上,但这个问题更适用于我认为的通用网络.

c++ performance networking udp iocp

13
推荐指数
2
解决办法
7676
查看次数

为什么std :: tuple <int>不能轻易复制?

使用此在线编译器构建,代码如下:

#include <iostream>
#include <type_traits>
#include <tuple>

int main() {
    std::cout << std::is_trivially_copyable<std::tuple<int>>::value << std::endl;
    std::cout << std::is_trivially_copyable<std::pair<int, int>>::value << std::endl;

    std::cout << std::is_trivial<std::tuple<int>>::value << std::endl;
    std::cout << std::is_trivial<std::pair<int, int>>::value << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

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

我在Visual Studio 2015中获得了相同的结果.

为什么会这样?是否存在std::tuplePOD类型的正当理由,更不用说简单的std::pair,不能轻易复制?我假设它们的实现提供了一些自定义赋值运算符,但它们与编译器生成的默认版本有何不同?

c++ tuples template-meta-programming

11
推荐指数
2
解决办法
1493
查看次数

什么是*连续物理模拟的基本思想*如box2d/bullet3d?

游戏或图形行业中的传统物理模拟基本上是离散的.但是现在的引擎如box2d或bullet3d实现了连续物理模拟.我知道离散模拟的基本原理,但我不知道连续模拟.这对我来说是神奇的,使用魔法是艰难而危险的.因此,我希望通过理解它们将魔法变成工具.

所以我想知道:(1)这些连续物理模拟的基本思想和实现原理是什么?(2)这个想法可以推广到其他类型的离散模拟吗?请让我理解这一点!

simulation continuous principal physics-engine

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

为什么以及何时不应该杀死一个线程?

我正在编写一个多线程套接字服务器,我需要确定.

关于线程的文章说我应该等待线程返回,而不是杀死它.但在某些情况下,用户的线程我想踢/禁止,将无法正常返回(例如,我开始发送大块数据并发送()阻止线程)所以我会需要杀死它.

为什么杀死线程函数是危险的,什么时候它们会崩溃整个应用程序?

c++ sockets networking multithreading

6
推荐指数
3
解决办法
2871
查看次数