小编kre*_*rej的帖子

我需要帮助在C++中向向量添加数组

我正在跟随OpenGL超级圣经第5版,他们定义了一个矢量(矢量和数学一样)

typedef float   M3DVector3f[3];
Run Code Online (Sandbox Code Playgroud)

我正在尝试将这个实例添加到std :: vector(c ++中的'可调整大小的数组'),但是我不断收到错误说:

array initialization needs curly braces
Run Code Online (Sandbox Code Playgroud)

完全错误

我定义std :: vector的方式以及我添加它的方式是:

std::vector<M3DVector3f> vertices;

float vertex[3];
sscanf_s(line.c_str(), "%*s %f %f %f", &vertex[0], &vertex[1], &vertex[2]);

M3DVector3f v = {vertex[0], vertex[1], vertex[3]};

vertices.push_back(v);
Run Code Online (Sandbox Code Playgroud)

我已经收集到了问题是vertices.push_back(v)调用,因为当我发表评论时我没有收到错误.有人可以向我解释并帮助我找出为什么它不会让我将这个向量添加到我的向量中?

c++ arrays opengl vector

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

使用四叉树时,如何处理在四边形之间移动的对象?

我正在尝试在我正在制作的游戏中使用四叉树进行碰撞检测,但我不确定如何处理可能在不同四边形之间移动的对象?

我能想到的唯一方法是每帧清除整个树,然后在那里添加所有内容,但这似乎可以获得cpu密集而且效率不高.你是否检查每一帧的每一个物体,看它是否已移出它当前四边形的界限,如果是,那么将它移除并读取它?这看起来似乎效率非常低,因为你每帧都要对每个移动物体进行碰撞检查.

此外,关于四边形但与在其中移动的对象无关,如何在同一个四边形中处理多个对象?我读过的关于它们的大多数网站都说你应该在一个四边形中只有一个,也许两个,如果你得到的更多,那么就把它们推到树上.如果你有一个像的情况下这样?你有三个圆圈,它们都在它们下方的水平边缘,所以它们不能再往下走了,但是有三个都在同一级别,人们说你不应该有.

algorithm tree quadtree

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

我应该使用某种引擎还是从头开始?

我想学习如何制作炫酷的图形,如灯光,阴影,水等.我也想最终把它变成游戏.创造一个游戏在名单上排名第二,我真的想要专注于制作好的图形.

所以无论如何,这样做的最佳方式是什么?我想使用OpenGL 3.0+,因为我不喜欢使用过时的东西,而且我必须能够在linux和Windows 7之间传输相同的代码并让它在不改变任何东西的情况下运行.

到目前为止,我一直在尝试从头开始尝试,但我似乎找不到一个很好的方法来创建一个跨平台的最新OpenGL 3.0+上下文.我一直在搜索并尝试像SDL这样的东西,以帮助更多的平台独立,但我发现Windows上几乎所有版本都有不同于Linux的版本,所以几乎不可能让它跨平台而不必做大代码更改.

那么我开始考虑使用某种引擎.我不太确定我在引擎中寻找的是什么,但我希望能够找到一个能够使用相同的代码轻松跨平台的方法.我正在考虑使用OGRE,但这似乎照顾了所有的照明和阴影.有没有其他类型的引擎可以让我专注于在独立于平台的同时制作出酷炫的图形?

有没有人对我应该做什么或使用什么有任何建议?

opengl 3d graphics opengl-3

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

我一直收到一个错误,说我的班级没有命名类型

我有一个名为A的类,它有自己的头文件.然后我有另一个名为B的类,它也有自己的头文件.它们每个都有自己的.cpp文件,我实现了它们的所有功能.

我试图让B类有一个类型A的变量作为私有变量,但我不断得到错误'A'没有命名类型

我的代码看起来像这样:

main.h:

#ifndef MAIN_H
#define MAIN_H

#include "A.h"
#include "B.h"

#endif
Run Code Online (Sandbox Code Playgroud)

main.cpp中:

#include "main.h"

int main( int argc, char* args[]) {
  B test;
}
Run Code Online (Sandbox Code Playgroud)

啊:

#ifndef A_H
#define A_H

#include "main.h"

class A {
  public:
    //public functions
  private:
    //private variables
};
#endif
Run Code Online (Sandbox Code Playgroud)

BH:

#ifndef B_H
#define B_H

#include "main.h"

class B {
  public:
    //public functions...
  private:
    A temp;
}
#endif
Run Code Online (Sandbox Code Playgroud)

所以我的所有包含都在main.h中,其中包括A之前的B.B有一个A类型的变量,但它包含在main.h中,Bh包含main.h. 但是,我不断收到错误说:

error: 'A' does not name a type.
Run Code Online (Sandbox Code Playgroud)

我做了一些谷歌搜索,似乎这意味着当你使用它时没有定义A,但它应该在那里定义,因为它被包含在main.h中,对吧?

c++ class

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

标签 统计

c++ ×2

opengl ×2

3d ×1

algorithm ×1

arrays ×1

class ×1

graphics ×1

opengl-3 ×1

quadtree ×1

tree ×1

vector ×1