Jump to content

  • Log In with Google      Sign In   
  • Create Account


N00bKefka

Member Since 19 Jul 2012
Offline Last Active Dec 28 2012 09:02 PM

Topics I've Started

Question on Rendering Multiple Transparent object

27 December 2012 - 12:01 PM

Hello.. I am new to OpenGLES and my question is how do I render multiple transparent object?

I am drawing things in 2D using xy-plane. The problem that I am facing is the more object I render, the less opacity it have. Here's my openGLES set up:

 

// Enable texture mapping.
    glEnable(GL_TEXTURE_2D);

    // Enable smooth shading.
    glShadeModel(GL_SMOOTH);

    // Set the depth value used when clearing the depth buffer.
    glClearDepthf(1.0f);

    // Enable Blend.
    glEnable(GL_BLEND);

    // Set the type of depth test.
    //glDepthFunc(GL_LEQUAL);

    // Use the best perspective correction method.
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

Here's my draw call assuming all texture have full opacity:

	GLuint tex = GraMgr.RetrieveTexture(R_BOX_TEXTURE);
	// Array used for object coordinates.
	GLfloat vcoords[4][3];

	// Array used for texture coordinates.
	GLfloat tcoords[4][2];

	// Array used to convert from QUAD to TRIANGLE_STRIP.
	// QUAD is not available on the OpenGL implementation
	// we are using.
	GLubyte indices[4] = {0, 1, 3, 2};

	// Set the background color to be used when clearing the screen.
	glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

	// Clear the screen and the depth buffer.
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	// Use the model matrix.
	glMatrixMode(GL_MODELVIEW);

	// Reset the model matrix.
	glLoadIdentity();

	// Move into the screen 5 units.
	glTranslatef(0.0f, 0.0f, -5.0f);

	// Specify rotation along the X, Y, and Z axes.
	glRotatef(0, 1.0f, 0.0f, 0.0f);
	glRotatef(0, 0.0f, 1.0f, 0.0f);
	glRotatef(0, 0.0f, 0.0f, 1.0f);

	// Select the texture to use when rendering the box.
	glBindTexture(GL_TEXTURE_2D, tex);

	glColor4f(0.5f, 0.5f, 1.0f, 2.0f);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE);

	// Set pointers to vertex coordinates and texture coordinates.
	glVertexPointer(3, GL_FLOAT, 0, vcoords);
	glTexCoordPointer(2, GL_FLOAT, 0, tcoords);

	// Enable vertex and texture coord arrays.
	glEnableClientState(GL_VERTEX_ARRAY);
	glEnableClientState(GL_TEXTURE_COORD_ARRAY);

	float scaleX = 2.0f;
	float scaleY = 0.5f;
	// Define the front face of the box.
	tcoords[0][0] = 1.0f;  tcoords[0][1] = 0.0f;
	vcoords[0][0] = -0.5f * scaleX; vcoords[0][1] = -0.5f; vcoords[0][2] = 1.0f;
	tcoords[1][0] = 0.0f;  tcoords[1][1] = 0.0f;
	vcoords[1][0] = 0.5f * scaleX;  vcoords[1][1] = -0.5f; vcoords[1][2] = 1.0f;
	tcoords[2][0] = 0.0f;  tcoords[2][1] = 1.0f;
	vcoords[2][0] = 0.5f * scaleX;  vcoords[2][1] = 0.5f;  vcoords[2][2] = 1.0f;
	tcoords[3][0] = 1.0f;  tcoords[3][1] = 1.0f;
	vcoords[3][0] = -0.5f * scaleX; vcoords[3][1] = 0.5f;  vcoords[3][2] = 1.0f;

	// This draws one textured plane using a strip of two triangles.
	glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, indices);

	// Disable texture and vertex arrays.
	glDisableClientState(GL_TEXTURE_COORD_ARRAY);
	glDisableClientState(GL_VERTEX_ARRAY);

	// Reset the model matrix.
	glLoadIdentity();

	// Move into the screen 5 units.
	glTranslatef(1.0f, 1.0f, -5.0f);

	// Specify rotation along the X, Y, and Z axes.
	glRotatef(0, 1.0f, 0.0f, 0.0f);
	glRotatef(0, 0.0f, 1.0f, 0.0f);
	glRotatef(WKMath::PI / 4.0f * 180.0f, 0.0f, 0.0f, 1.0f);

	// Select the texture to use when rendering the box.
	glBindTexture(GL_TEXTURE_2D, tex);

	glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE);

	// Set pointers to vertex coordinates and texture coordinates.
	glVertexPointer(3, GL_FLOAT, 0, vcoords);
	glTexCoordPointer(2, GL_FLOAT, 0, tcoords);

	// Enable vertex and texture coord arrays.
	glEnableClientState(GL_VERTEX_ARRAY);
	glEnableClientState(GL_TEXTURE_COORD_ARRAY);

	// Define the front face of the box.
	tcoords[0][0] = 1.0f;  tcoords[0][1] = 0.0f;
	vcoords[0][0] = -0.5f; vcoords[0][1] = -0.5f; vcoords[0][2] = 1.0f;
	tcoords[1][0] = 0.0f;  tcoords[1][1] = 0.0f;
	vcoords[1][0] = 0.5f;  vcoords[1][1] = -0.5f; vcoords[1][2] = 1.0f;
	tcoords[2][0] = 0.0f;  tcoords[2][1] = 1.0f;
	vcoords[2][0] = 0.5f;  vcoords[2][1] = 0.5f;  vcoords[2][2] = 1.0f;
	tcoords[3][0] = 1.0f;  tcoords[3][1] = 1.0f;
	vcoords[3][0] = -0.5f; vcoords[3][1] = 0.5f;  vcoords[3][2] = 1.0f;

	// This draws one textured plane using a strip of two triangles.
	glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, indices);

	// Disable texture and vertex arrays.
	glDisableClientState(GL_TEXTURE_COORD_ARRAY);
	glDisableClientState(GL_VERTEX_ARRAY);

	// Wait (blocks) until all GL drawing commands to finish.
	glFinish();

 


Direct3D9 Font

21 October 2012 - 08:20 AM

Is there a way to draw he text behind DirectX meshes?

I am using D3DXCreateFont()

I hope I do not need to create my own Bitmap Font in this one.

Question regarding Stencil Buffer in DirectX 9

19 July 2012 - 01:14 AM

I heard I can specify the stencil mask using a black and white image file. How do I do that and how do I specify the area of maksing?

PARTNERS