OpenGL 宇宙飞船推进器在底部不是圆形的
OpenGL Spaceship thruster is not circular at base
我正在使用 OpenGL 开发 space 射击游戏。尝试使用粒子为玩家的 space 飞船创建推进器效果。我遇到一个问题,在 space 飞船的某些角度下,推进器的底座不是圆形的。在video.
中可以看到效果
这是计算圆底的代码:
float random = fmod(static_cast<float>(rand()) / 100.0, mSize);
glm::vec3 radius = (mUp * random) + (mRight * random);
float angle = (float)i / (float)mNumOfInstances * 360.0f;
float x = mPos.x + glm::cos(angle) * radius.x;
float y = mPos.y + glm::sin(angle) * radius.y;
float z = mPos.z + glm::cos(angle) * radius.z;
particle.Position = glm::vec3(x, y, z);
有人可以建议对此代码进行任何更正以解决问题吗?
对于遇到相同问题的任何人,解决方案如下:
glm::vec3 up = (mUp * random);
glm::vec3 right = (mRight * random);
particle.Position = mPos + glm::cos(angle) * up + sin(angle) * right;
mUp是向上向量,mRight是飞船的右向量,angle是特定点的角度(0-360),random是随机半径,因为我想要一个实心圆。
我正在使用 OpenGL 开发 space 射击游戏。尝试使用粒子为玩家的 space 飞船创建推进器效果。我遇到一个问题,在 space 飞船的某些角度下,推进器的底座不是圆形的。在video.
中可以看到效果这是计算圆底的代码:
float random = fmod(static_cast<float>(rand()) / 100.0, mSize);
glm::vec3 radius = (mUp * random) + (mRight * random);
float angle = (float)i / (float)mNumOfInstances * 360.0f;
float x = mPos.x + glm::cos(angle) * radius.x;
float y = mPos.y + glm::sin(angle) * radius.y;
float z = mPos.z + glm::cos(angle) * radius.z;
particle.Position = glm::vec3(x, y, z);
有人可以建议对此代码进行任何更正以解决问题吗?
对于遇到相同问题的任何人,解决方案如下:
glm::vec3 up = (mUp * random);
glm::vec3 right = (mRight * random);
particle.Position = mPos + glm::cos(angle) * up + sin(angle) * right;
mUp是向上向量,mRight是飞船的右向量,angle是特定点的角度(0-360),random是随机半径,因为我想要一个实心圆。