Almost of all my sample code, if it helps:
#include “sample.h”
#ifdef WIN32
#include “windows.h”
#endif
#include <GL/gl.h>
#include <glm/glmext.h>
typedef unsigned char uint8;
using namespace glm;
int g_WindowWidth = 0;
int g_WindowHeight = 0;
float* g_DepthBuffer = NULL;
uint8* g_ColorBuffer = NULL;
namespace
{
// GL_QUADS
glm::vec3 SolidPosition[] =
{
glm::vec3(-1,-1,-1),
glm::vec3(-1, 1,-1),
glm::vec3( 1, 1,-1),
glm::vec3( 1,-1,-1),
glm::vec3(-1,-1, 1),
glm::vec3( 1,-1, 1),
glm::vec3( 1, 1, 1),
glm::vec3(-1, 1, 1),
glm::vec3(-1,-1,-1),
glm::vec3( 1,-1,-1),
glm::vec3( 1,-1, 1),
glm::vec3(-1,-1, 1),
glm::vec3(-1, 1,-1),
glm::vec3(-1, 1, 1),
glm::vec3( 1, 1, 1),
glm::vec3( 1, 1,-1),
glm::vec3( 1,-1,-1),
glm::vec3( 1, 1,-1),
glm::vec3( 1, 1, 1),
glm::vec3( 1,-1, 1),
glm::vec3(-1,-1,-1),
glm::vec3(-1,-1, 1),
glm::vec3(-1, 1, 1),
glm::vec3(-1, 1,-1)
};
glm::vec3 SolidNormal[] =
{
glm::vec3( 0, 0, 1),
glm::vec3( 0, 0, 1),
glm::vec3( 0, 0, 1),
glm::vec3( 0, 0, 1),
glm::vec3( 0, 0,-1),
glm::vec3( 0, 0,-1),
glm::vec3( 0, 0,-1),
glm::vec3( 0, 0,-1),
glm::vec3( 0, 1, 0),
glm::vec3( 0, 1, 0),
glm::vec3( 0, 1, 0),
glm::vec3( 0, 1, 0),
glm::vec3( 0,-1, 0),
glm::vec3( 0,-1, 0),
glm::vec3( 0,-1, 0),
glm::vec3( 0,-1, 0),
glm::vec3(-1, 0, 0),
glm::vec3(-1, 0, 0),
glm::vec3(-1, 0, 0),
glm::vec3(-1, 0, 0),
glm::vec3( 1, 0, 0),
glm::vec3( 1, 0, 0),
glm::vec3( 1, 0, 0),
glm::vec3( 1, 0, 0)
};
}
void Begin(int Width, int Height)
{
g_WindowWidth = Width;
g_WindowHeight = Height;
if(g_DepthBuffer == NULL)
g_DepthBuffer = new float[Width * Height * 1];
if(g_ColorBuffer == NULL)
g_ColorBuffer = new uint8[Width * Height * 4];
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Set projection matrix
glMatrixMode(GL_PROJECTION);
//glLoadMatrixf(perspectiveGTX(45.0f, 640.0f / 480.0f, 0.1f, 100.0f));
glLoadIdentity();
// Set modelview matrix
mat4 Projection = perspectiveGTX(45.0f, 640.0f / 480.0f, 0.1f, 100.0f);
mat4 View = translateGTX(0.0f, 0.0f,-8.0f);
// First object
mat4 Model1 = rotateGTX(45.f, 0.0f, 0.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(Projection * View * Model1);
glNormalPointer(GL_FLOAT, 0, &SolidNormal[0]);
glVertexPointer(3, GL_FLOAT, 0, &SolidPosition[0]);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glColor3f(1.0f, 0.5f, 0.0f);
glDrawArrays(GL_QUADS, 0, 24);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glFinish();
glReadPixels(0, 0, g_WindowWidth, g_WindowHeight, GL_DEPTH_COMPONENT, GL_FLOAT, g_DepthBuffer);
glReadPixels(0, 0, g_WindowWidth, g_WindowHeight, GL_RGBA, GL_UNSIGNED_BYTE, g_ColorBuffer);
glFinish();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
void End()
{
delete[] g_DepthBuffer;
g_DepthBuffer = NULL;
delete[] g_ColorBuffer;
g_ColorBuffer = NULL;
}
void Render(float CurrentTime)
{
glClear(GL_DEPTH_BUFFER_BIT);
// Set modelview matrix
mat4 Projection = perspectiveGTX(45.0f, 640.0f / 480.0f, 0.1f, 100.0f);
mat4 View = translateGTX(0.0f, 0.0f,-8.0f);
glEnable(GL_DEPTH_TEST);
/*
// First object
//mat4 Model1 = glm::mat4(1.0f);//rotateGTX(CurrentTime * 1.f, 0.0f, 1.0f, 1.0f);
mat4 Model1 = rotateGTX(45.f, 0.0f, 0.0f, 1.0f);
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(Projection);
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(View * Model1);
glNormalPointer(GL_FLOAT, 0, &SolidNormal[0]);
glVertexPointer(3, GL_FLOAT, 0, &SolidPosition[0]);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glColor3f(1.0f, 0.5f, 0.0f);
glDrawArrays(GL_QUADS, 0, 24);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
*/
glDisable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
mat4 Ortho = glm::ortho2DGTX(0.f, 320.f, 0.f, 240.f);
glMatrixMode(GL_PROJECTION);
//glLoadIdentity();
glLoadMatrixf(Ortho);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRasterPos2i(0, 0);
glDepthMask(GL_TRUE);
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
//glDrawPixels(g_WindowWidth, g_WindowHeight, GL_DEPTH_COMPONENT, GL_FLOAT, g_DepthBuffer);
glDepthMask(GL_FALSE);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glDrawPixels(g_WindowWidth, g_WindowHeight, GL_RGBA, GL_UNSIGNED_BYTE, g_ColorBuffer);
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
// Second object
mat4 Model2 = rotateGTX(rotateGTX(translateGTX(0.0f, 0.0f, 0.0f), CurrentTime * 10.f, 0.0f, 0.0f, 1.0f), CurrentTime * 20.f, 1.0f, 1.0f, 0.0f);
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(Projection);
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(View * Model2);
glNormalPointer(GL_FLOAT, 0, &SolidNormal[0]);
glVertexPointer(3, GL_FLOAT, 0, &SolidPosition[0]);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glColor3f(1.0f, 0.0f, 1.0f);
glDrawArrays(GL_QUADS, 0, 24);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glFinish();
// Error
int Error = glGetError();
if(Error)
printf("OpenGL Error: %d
", Error);
}