小编New*_*bie的帖子

OpenGL:渲染两个相互交叉的透明平面:不可能或不可能?

我努力地解决了这个问题,似乎无法渲染.

怎么能解决这个问题呢?我希望OpenGL渲染它看起来像下面这张图片的右侧:

替代文字

opengl transparency

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

Visual Studio 2008的C++语法高亮?

我只想看到我自己的数据类型/函数/函数参数与不同的颜色.

我之前使用过Visual Assist X,但由于某些未知原因它停止工作.它不会每次都为自定义函数或函数参数着色.此外,我的试用时间很快就结束了,我不打算买一些不能正常工作或者我甚至不使用的大多数功能.

因此,如果有任何免费的语法突出显示为Visual Studio 2008的所有功能等着色,那就是我正在寻找的东西.

c++ syntax-highlighting visual-studio-2008

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

如何将char数组中的一系列数据复制到向量中?

我已经将文件内容读入char数组,然后将其中的一些数据读入向量中.如何将一系列char数组复制到向量中?vector和char数组都是相同的类型(unsigned char).

目前的代码是这样的:

int p = 0;

for(...){
    short len = (arr[p+1] << 8) | arr[p+0];
    p+=2;
    ...
    for(...len...){
        vec.push_back(arr[p]);
        p++;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想通过放弃循环来改进这个push_back,怎么样?

c++ stdvector

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

C++:如何在编译时加密字符串?

我想在我的.exe中隐藏一些字符串,这样人们就不能简单地打开.exe并查看那里的所有字符串.我不关心加密方法的强度,所以我可能会使用XOR等.

我怎么能在编译时这样做?这样我的字符串将不会存储在.exe中,但加密版本会存储.然后,我每次只使用我的解密功能在屏幕上显示这些字符串.

c++ windows visual-studio-2008

10
推荐指数
3
解决办法
7710
查看次数

立方体球体相交测试?

这样做最简单的方法是什么?我在数学上失败了,我在互联网上找到了非常复杂的公式...我希望如果有一些更简单的吗?

我只需要知道一个球体是否与一个立方体重叠,我不在乎它做了哪个点等.

我也希望它能利用这两个形状都是对称的事实.

编辑:立方体在x,y,z轴上直线对齐

c++ intersection

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

如何在va_start中使用字符串?

由于某种原因,我无法得到这个工作:

    void examplefunctionname(string str, ...){
...
    va_start(ap, str.c_str());
Run Code Online (Sandbox Code Playgroud)

我也没有得到这个工作:

    void examplefunctionname(string str, ...){
...
    int len = str.length();
    char *strlol = new char[len+1];
    for(int i = 0; i < len; i++){
        strlol[i] = str[i];
    }
    strlol[len] = 0;
    va_start(ap, strlol);
Run Code Online (Sandbox Code Playgroud)

但这样做:

    void examplefunctionname(const char *str, ...){
...
    va_start(ap, str);
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何使用字符串而不是const char *那里?

我打电话时输出随机数 examplefunctionname("%d %d %d", 1337, 1337, 1337)

c++

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

OpenGL:如何使用深度排序的顶点数组设计高效的渲染系统?

人们总是告诉我至少使用顶点阵列.但我认为这不是一个好主意,因为我正在使用glPushMatrix()glTranslatef/glRotatef来定位3d世界中的对象.

那么,我应该停止使用glPushMatrix()并"手动"计算世界中旋转/移动的顶点位置,然后将它们的顶点数据推入顶点数组然后立即渲染它们吗?

但是,当我为屏幕上的所有对象使用不同的纹理表面时,所有这些都会变得更加混乱,这些对象也是深度排序的.

所以:

  1. 我还必须使用纹理表面ID存储每个对象.
  2. 我会按Z的位置对所有可见物体进行排序(游戏仅从上到下查看,所有物体都是平的).
  3. 我会通过这个排序的数组:
  4. 创建新缓冲区并仅将vertex/texcoord/color/normal复制到此缓冲区中:
  5. 每次纹理表面ID从先前的ID更改时,我将绑定到正确的纹理ID:
  6. 上传我收集的顶点数据.
  7. 释放用于临时顶点数组的缓冲区.
  8. 重复步骤4-7,直到我完成了我在第一个位置排序的所有数据.
  9. 释放我的排序数组数据,并重复步骤1-9.

我做得对吗?

另外,我应该如何为我要排序的对象设计数据结构?例如,std::vector用于存储每个对象的顶点数据是否合适?还是有更好的选择吗?我当时认为std::vector存储所有这些数据看起来像:

struct GameObject {
    int TexID;
    float z; // we will sort by this
    vector<VTCNStruct> VertexData; // store each point of the object here (including color/normal/texcoord points).
};

vector<GameObject> GameObjectBuffer; // push all sortable objects here
Run Code Online (Sandbox Code Playgroud)

此外,在步骤4:std::vector在这种情况下是否可以使用已经存在的?我有这个想法,我必须使用原始数组,比如new float[100]将顶点数组发送到我的GPU,或者我可以某种std::vector方式(有效地)以某种方式使用我已经存在的排序,而不是每次纹理ID更改时都创建新的缓冲区?

c++ opengl vbo vertex-array

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

如何在std :: map中使用struct?

我有一个复杂的结构,我希望将其作为std :: map的一个关键字来快速生成所有唯一对象的列表:

union somecomplexstruct {
     struct {
        more_structs val1, val2;
        even_more_structs val3, val4;
        lots_of_more_structs val5;
     };
     unsigned int DATA[3];
};

typedef map<somecomplexstruct, int, greater<somecomplexstruct> > somecomplexstructMap;
Run Code Online (Sandbox Code Playgroud)

但它说错误: error C2784: 'bool std::operator >(const std::vector<_Ty,_Alloc> &,const std::vector<_Ty,_Alloc> &)' : could not deduce template argument for 'const std::vector<_Ty,_Alloc> &' from 'const somecomplexstruct'

我如何使我的结构在那里工作?

编辑:得到它的工作,感谢大家!下面是代码:

inline bool operator>(const somecomplexstruct &v1, const somecomplexstruct &v2){
    if(v1.DATA[0] > v2.DATA[0]) return 1;
    if(v1.DATA[0] < v2.DATA[0]) return 0;
    if(v1.DATA[1] > v2.DATA[1]) return 1;
    if(v1.DATA[1] < v2.DATA[1]) return …
Run Code Online (Sandbox Code Playgroud)

c++ stl stdmap

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

如何获得屏幕刷新率?

这甚至可能吗?因为我注意到v-sync根本不能在我的笔记本电脑上工作,所以我"手动"构建FPS限制器,现在我想使用用户设置到他的屏幕的FPS限制.

编辑:我的意思是显示器hz率.

Edit3:继承了我工作的代码(我认为......那里有什么不对吗?):

DEVMODE lpDevMode;
memset(&lpDevMode, 0, sizeof(DEVMODE));
lpDevMode.dmSize = sizeof(DEVMODE);
lpDevMode.dmDriverExtra = 0;

if(EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &lpDevMode) == 0){
    framerate_limit = 60; // default value if cannot retrieve from user settings.
}
Run Code Online (Sandbox Code Playgroud)

根据需要,这是我的v-sync启用代码jay.lee要求:

PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT = NULL; // global

...

wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC) wglGetProcAddress("wglSwapIntervalEXT");

v_sync_enabled = 0;
if(wglSwapIntervalEXT != NULL){
    if(wglSwapIntervalEXT(1) != FALSE){
        v_sync_enabled = 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ windows opengl

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

C++:如何在两个不同的重载函数中使用具有两个不同名称的相同数据类型?

我有以下声明来区分它在我的代码中使用不同的操作:

typedef unsigned int SOMEIDTYPE;
Run Code Online (Sandbox Code Playgroud)

现在,当我创建两个重载函数时:

string something(const unsigned int &val){ ... itoa(val) ... }
string something(const SOMEIDTYPE &val){ ... IDTABLE[val] ... }
Run Code Online (Sandbox Code Playgroud)

我收到错误:error C2084: function 'std::string something(const unsigned int &)' already has a body

那么,我如何重载此函数以区分使用这两种不同的数据类型,并执行如上所示的不同操作?

编辑:重载的原因是我在模板函数内调用此函数。

c++ overloading visual-studio-2008

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