C++ 在C+中拆分数组+;
我正在制作一个游戏,我有一系列的浮标,这些浮标制作了一个3D模型,我已经用opengl放置在其中。我想做的是分离x,y和z坐标,并将它们做成一个多维数组。我想这样做,以便我可以调整y位置相对于地形。我在init函数中放置的for循环如下所示:C++ 在C+中拆分数组+;,c++,arrays,C++,Arrays,我正在制作一个游戏,我有一系列的浮标,这些浮标制作了一个3D模型,我已经用opengl放置在其中。我想做的是分离x,y和z坐标,并将它们做成一个多维数组。我想这样做,以便我可以调整y位置相对于地形。我在init函数中放置的for循环如下所示: for (int x = 0; x < sizeof(desert_scene_plainVerts); x++) { if (((x + 3)%3) == 0) { //x coord terrain
for (int x = 0; x < sizeof(desert_scene_plainVerts); x++) {
if (((x + 3)%3) == 0) {
//x coord
terrainxPos[x/3] = desert_scene_plainVerts[x];
}
else if (((x + 1)%3) == 0) {
//z coord
terrainzPos[(x-2)/3] = desert_scene_plainVerts[x];
}
else{
//y coord
terrainzPos[(x-1)/3] = desert_scene_plainVerts[x];
}
}
Thread 1: EXC_BAD_ACCESS (code=2, address= 0x10 etc.)
错误如下:
for (int x = 0; x < sizeof(desert_scene_plainVerts); x++) {
if (((x + 3)%3) == 0) {
//x coord
terrainxPos[x/3] = desert_scene_plainVerts[x];
}
else if (((x + 1)%3) == 0) {
//z coord
terrainzPos[(x-2)/3] = desert_scene_plainVerts[x];
}
else{
//y coord
terrainzPos[(x-1)/3] = desert_scene_plainVerts[x];
}
}
Thread 1: EXC_BAD_ACCESS (code=2, address= 0x10 etc.)
有人知道我做错了什么。假设您正确地声明了
terrainxPos[]
、terrainyPos[]
和terrainzPos[]
,那么您的逻辑看起来不错。如果这些是vector
s,请确保resize()
它们正确
但是,您的循环可能更清晰,更容易推理,如下所示:
for (int x = 0, v = 0; x < sizeof(desert_scene_plainVerts); x += 3, v++) {
terrainxPos[v] = desert_scene_plainVerts[x + 0];
terrainyPos[v] = desert_scene_plainVerts[x + 1];
terrainzPos[v] = desert_scene_plainVerts[x + 2];
}
for(int x=0,v=0;x
我想也许(x-1)/3给出的是一个浮点数而不是整数。尝试使用ceil((x-1)/3)
或(x-1)/3>>0
打字?你说的是y坐标
,但你输入的是terrainzPos
@KumarHarsh不,它不做浮点运算:x
是一个int
,C方言不会将任何整数转换成浮点,除非其中一个操作数是浮点。@cmaster哦,天哪。。。当然,你是对的!太多的JS杀死了我的C:(你说调整大小()是什么意思?@DavidGraovac:resize它们足够大以容纳所有的平原。顺便说一句,我刚刚注意到了真正的问题:sizeof
。我想你可能是指沙漠场景\u平原。size()
如果它是向量,或者sizeof如果它是一个数组的话,@DavidGraovac:你需要在循环之前调整它的大小。例如,terrainxPos.resize(沙漠场景\u plainVerts.size()/3);