我无法确定如何确保在正方形中对齐的粒子始终位于屏幕中间,无论方块的大小如何。该方块使用:
创建for(int i=0; i<(int)sqrt(d_MAXPARTICLES); i++) {
for(int j=0; j<(int)sqrt(d_MAXPARTICLES); j++) {
Particle particle;
glm::vec2 d2Pos = glm::vec2(j*0.06, i*0.06) + glm::vec2(-17.0f,-17.0f);
particle.pos = glm::vec3(d2Pos.x,d2Pos.y,-70);
particle.life = 1000.0f;
particle.cameradistance = -1.0f;
particle.r = d_R;
particle.g = d_G;
particle.b = d_B;
particle.a = d_A;
particle.size = d_SIZE;
d_particles_container.push_back(particle);
}
}
最重要的部分是glm::vec2(-17.0f, -17.0f)
,它正确地将正方形定位在屏幕的中心。这看起来像:
问题是我的程序支持任意数量的粒子,所以只指定
现在我的广场偏离中心,但如何更改glm::vec2(-17.0f,-17.0f)
以解释不同的粒子?
答案 0 :(得分:1)
如果你想要一个固定的位置,不要让位置依赖于“i”和“j”指数。
glm::vec2 d2Pos = glm::vec2(centerOfScreenX,centerOfScreenY); //much better
但是如何计算centerOfSCreen?这取决于您使用的是2D还是3D相机。
编辑:
现在问题更清楚了答案:
int maxParticles = (int)sqrt(d_MAXPARTICLES);
factorx = (i-(float)maxParticles/2.0f)/(float)maxParticles;
factory = (j-(float)maxParticles/2.0f)/(float)maxParticles;
glm::vec2 particleLocaleDelta = glm::vec2(extentX*factorx,extentY*factory)
glm::vec2 d2Pos = glm::vec2(centerOfScreenX,centerOfScreenY)
d2Pos += particleLocaleDelta;
,其中
extentX,extentY
是“大正方形”的维度,因子是“i”和“j”的当前比例。代码未优化。只是想到工作(假设你有一台2D相机,其世界单位对应于像素单位)。