|
mirror-bordered picture frame November 04, 2010 01:36PM |
Registered: 3 years ago Posts: 181 |
#include "mathutils.pur3h"
#include "modelSquare.pur3h"
#include "modelCube.pur3h"
#include "VertexBuffer.pur3h"
#include "JumpCamera.pur3h"
CVertexBuffer vbSquare, vbCube;
CJumpCamera camera;
int shaderTex, shaderLit;
int texture; // the texture texture
int texEnvmap;
export void init() {
vbSquare.createFrom(&VB_SQUARE, sizeof(VB_SQUARE));
vbCube.createFrom(&VB_CUBE, sizeof(VB_CUBE));
shaderTex = shaderLoad("vSimple.glsl", "fTexture.glsl");
shaderLit = shaderLoad("vEnvMap.glsl", "fTexture.glsl");
int textureFile[1024];
xmlString(&textureFile, sizeof(textureFile), "Texture", "");
texture = texLoad(&textureFile);
camera.create(
Vector3(-1.5, -1, 4), Vector3(1.5, 1, 6), // eye
Vector3(-2, -0.75, 0), Vector3(2, 0.75, 0), // target
Vector3(0,1,0));
camera.upRotation = 0.2;
camera.beats_per_step = 8;
}
export void kill() {
vbSquare.destroy();
vbCube.destroy();
shaderDestroy(shaderTex);
shaderDestroy(shaderLit);
texDestroy(texEnvmap);
camera.destroy();
if (texture) {
texDestroy(texture);
texture = 0;
}
}
export void step() {
camera.step();
}
export void render() {
int i,j;
Matrix identity;
matIdentity(&identity[0]);
float timePass = visGetFloat(VIS_TIME_DIFF);
int texEnvmap = visGetRenderedTexture();
setOrtho(-1,1,1,-1);
setIdentity(MAT_MODEL);
texBind(0, texEnvmap);
vbSquare.render(VB_QUADS);
texUnBind(0);
visRenderChildToTexture(0, timePass, -1,-1);
glClear(0,0,0,1,GL_DEPTH_BUFFER_BIT);
shaderBind(shaderTex);
// render texture
texBind(0, texture);
float aspect = glGetInt(GL_TEX_WIDTH) / (float)glGetInt(GL_TEX_HEIGHT);
setPerspective(90, visGetFloat(VIS_ASPECT), 1, 30);
Matrix textureMatrix;
matScale(&textureMatrix, &camera.matrix, aspect, -1, 1);
setMatrix(MAT_MODEL, &textureMatrix);
vbSquare.render(VB_QUADS);
// render 3D border
shaderBind(shaderLit);
texBind(0, texEnvmap);
Matrix a,b;
matTranslate(&b, &camera.matrix, -aspect, 0, 0);
matScale(&a, &b, 0.05, 1.1, 0.05);
setMatrix(MAT_MODEL, &a);
vbCube.render(VB_QUADS);
matTranslate(&b, &camera.matrix, aspect, 0, 0);
matScale(&a, &b, 0.05, 1.1, 0.05);
setMatrix(MAT_MODEL, &a);
vbCube.render(VB_QUADS);
matTranslate(&b, &camera.matrix, 0, -1, 0);
matScale(&a, &b, aspect+0.1, 0.05, 0.05);
setMatrix(MAT_MODEL, &a);
vbCube.render(VB_QUADS);
matTranslate(&b, &camera.matrix, 0, 1, 0);
matScale(&a, &b, aspect+0.1, 0.05, 0.05);
setMatrix(MAT_MODEL, &a);
vbCube.render(VB_QUADS);
glSetInt(GL_DEPTH_TEST, 1);
//glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
//glSetInt(GL_DEPTH_TEST, 1);
// we're done with this texture
texRenderFinished(texEnvmap);
}