Welcome! » Log In » Create A New Profile

mirror-bordered picture frame

Posted by carmatic 
mirror-bordered picture frame
November 04, 2010 01:36PM
i must say that this was my most challenging modification so far... i had to hack it this way and that before i figured out how to do something basic like drawing a texture behind something

#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);
}

i think its an improvement over the 'gold' effect it comes by default... ive also made it move abit more
now im trying to figure out how to tweak the size of the picture frame...
Sorry, only registered users may post in this forum.

Click here to login