I’m attempting to draw particles (which is in 2D) in my 3D world using OpenGL ES 1.1, and the platform is for iOS devices.
The 3D world (without the 2D particles) looks like this:
When trying to draw the 2D particles in the 3D world, it looks like this (notice the grid is now moved somehow to the bottom left corner):
However, I want it to draw directly over the 3D grid. Any ideas on how to achieve this or why it is moved to the left bottom corner?
Any help is greatly appreciated.
Heres my work so far.
- (void)drawFrame
{
[(EAGLView *)self.view setFramebuffer];
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
///////////// 3D Drawing the Grid floor
glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glDepthMask(GL_TRUE);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
static GLfloat z = 0;
gluLookAt(0, 5, -10, 0, 0, 0, 0, 1, 0);
z += 0.075f;
// Rotate the scene
glRotatef(angle, 0, 1, 0);
// Draw the Floor
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glDisableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, zFloorVertices);
glDrawArrays(GL_LINES, 0, 42);
glVertexPointer(3, GL_FLOAT, 0, xFloorVertices);
glDrawArrays(GL_LINES, 0, 42);
//////////// 2D drawing the particle system
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(0.0f, 320.0f, 0.0f, 480.0f, -100.0f, 100.0f);
glDisable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
[explosion1 update:UPDATE_INTERVAL];
if (explosion1.active != YES)
{
explosion1.sourcePosition = Vector2fMake(200, 200);
explosion1.active = YES;
explosion1.duration = 1;
explosion1.sourcePositionVariance = Vector2fMake(0, rand() % 20);
}
[explosion1 renderParticles];
[(EAGLView *)self.view presentFramebuffer];
}
- (void)initOpenGLES1
{
// Set the clear color
glClearColor(0, 0, 0, 1.0f);
// Projection Matrix config
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
CGSize layerSize = self.view.layer.frame.size;
gluPerspective(45.0f, (GLfloat)layerSize.width / (GLfloat)layerSize.height, 0.1f, 750.0f);
// Modelview Matrix config
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// This next line is not really needed as it is the default for OpenGL ES
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_BLEND);
// Enable depth testing
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glDepthMask(GL_TRUE);
}