summaryrefslogtreecommitdiff
path: root/basedProject/src/mapUtils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'basedProject/src/mapUtils.cpp')
-rw-r--r--basedProject/src/mapUtils.cpp156
1 files changed, 156 insertions, 0 deletions
diff --git a/basedProject/src/mapUtils.cpp b/basedProject/src/mapUtils.cpp
new file mode 100644
index 0000000..d250c98
--- /dev/null
+++ b/basedProject/src/mapUtils.cpp
@@ -0,0 +1,156 @@
+/*
+ * mapUtils.h
+ *
+ * Created by Tim Redfern on 20/12/2011.
+ * global utils for projection mapping
+ *
+ */
+
+#include "ofMain.h"
+
+//texture binding with normalised coords
+void bindTexture(ofBaseHasTexture &t) {
+ ofTexture &tex = t.getTextureReference();
+ tex.bind();
+
+ glMatrixMode(GL_TEXTURE);
+ glPushMatrix();
+ glLoadIdentity();
+
+ ofTextureData texData = tex.getTextureData();
+ if(texData.textureTarget == GL_TEXTURE_RECTANGLE_ARB) {
+ glScalef(tex.getWidth(), tex.getHeight(), 1.0f);
+ } else {
+ glScalef(tex.getWidth() / texData.tex_w, tex.getHeight() / texData.tex_h, 1.0f);
+ }
+
+ glMatrixMode(GL_MODELVIEW);
+}
+void unbindTexture(ofBaseHasTexture &t) {
+ t.getTextureReference().unbind();
+
+ glMatrixMode(GL_TEXTURE);
+ glPopMatrix();
+ glMatrixMode(GL_MODELVIEW);
+}
+void bindTex(ofTexture &tex) {
+ tex.bind();
+
+ glMatrixMode(GL_TEXTURE);
+ glPushMatrix();
+ glLoadIdentity();
+
+ ofTextureData texData = tex.getTextureData();
+ if(texData.textureTarget == GL_TEXTURE_RECTANGLE_ARB) {
+ glScalef(tex.getWidth(), tex.getHeight(), 1.0f);
+ } else {
+ glScalef(tex.getWidth() / texData.tex_w, tex.getHeight() / texData.tex_h, 1.0f);
+ }
+
+ glMatrixMode(GL_MODELVIEW);
+}
+void unbindTex(ofTexture &tex) {
+ tex.unbind();
+
+ glMatrixMode(GL_TEXTURE);
+ glPopMatrix();
+ glMatrixMode(GL_MODELVIEW);
+}
+ofPoint distort(ofPoint pt,float d){
+ //normalised coords -1..1, d
+ float r=pow(pow(pow(pt.x,2.0f)+pow(pt.y,2.0f),0.5f),1.0f+d);
+ float a=atan2f(pt.x,pt.y);
+ return ofPoint(r*sin(a),r*cos(a));
+};
+
+void drawBox(float size) {
+ // this func just draws a perfectly normal box with some texture coordinates
+ glBegin(GL_QUADS);
+ // Front Face
+ glTexCoord2f(0.0f, 0.0f); glVertex3f(-size, -size, size); // Bottom Left Of The Texture and Quad
+ glTexCoord2f(1.0f, 0.0f); glVertex3f( size, -size, size); // Bottom Right Of The Texture and Quad
+ glTexCoord2f(1.0f, 1.0f); glVertex3f( size, size, size); // Top Right Of The Texture and Quad
+ glTexCoord2f(0.0f, 1.0f); glVertex3f(-size, size, size); // Top Left Of The Texture and Quad
+ // Back Face
+ glTexCoord2f(1.0f, 0.0f); glVertex3f(-size, -size, -size); // Bottom Right Of The Texture and Quad
+ glTexCoord2f(1.0f, 1.0f); glVertex3f(-size, size, -size); // Top Right Of The Texture and Quad
+ glTexCoord2f(0.0f, 1.0f); glVertex3f( size, size, -size); // Top Left Of The Texture and Quad
+ glTexCoord2f(0.0f, 0.0f); glVertex3f( size, -size, -size); // Bottom Left Of The Texture and Quad
+ // Top Face
+ glTexCoord2f(0.0f, 1.0f); glVertex3f(-size, size, -size); // Top Left Of The Texture and Quad
+ glTexCoord2f(0.0f, 0.0f); glVertex3f(-size, size, size); // Bottom Left Of The Texture and Quad
+ glTexCoord2f(1.0f, 0.0f); glVertex3f( size, size, size); // Bottom Right Of The Texture and Quad
+ glTexCoord2f(1.0f, 1.0f); glVertex3f( size, size, -size); // Top Right Of The Texture and Quad
+ // Bottom Face
+ glTexCoord2f(1.0f, 1.0f); glVertex3f(-size, -size, -size); // Top Right Of The Texture and Quad
+ glTexCoord2f(0.0f, 1.0f); glVertex3f( size, -size, -size); // Top Left Of The Texture and Quad
+ glTexCoord2f(0.0f, 0.0f); glVertex3f( size, -size, size); // Bottom Left Of The Texture and Quad
+ glTexCoord2f(1.0f, 0.0f); glVertex3f(-size, -size, size); // Bottom Right Of The Texture and Quad
+ // Right face
+ glTexCoord2f(1.0f, 0.0f); glVertex3f( size, -size, -size); // Bottom Right Of The Texture and Quad
+ glTexCoord2f(1.0f, 1.0f); glVertex3f( size, size, -size); // Top Right Of The Texture and Quad
+ glTexCoord2f(0.0f, 1.0f); glVertex3f( size, size, size); // Top Left Of The Texture and Quad
+ glTexCoord2f(0.0f, 0.0f); glVertex3f( size, -size, size); // Bottom Left Of The Texture and Quad
+ // Left Face
+ glTexCoord2f(0.0f, 0.0f); glVertex3f(-size, -size, -size); // Bottom Left Of The Texture and Quad
+ glTexCoord2f(1.0f, 0.0f); glVertex3f(-size, -size, size); // Bottom Right Of The Texture and Quad
+ glTexCoord2f(1.0f, 1.0f); glVertex3f(-size, size, size); // Top Right Of The Texture and Quad
+ glTexCoord2f(0.0f, 1.0f); glVertex3f(-size, size, -size); // Top Left Of The Texture and Quad
+ glEnd();
+}
+void drawBoard(float x,float y,float z) {
+ glPushMatrix();
+ glTranslated(x,y,z);
+ glBegin(GL_QUADS);
+ int cx,cz;
+ for (int i=0;i<8;i++) {
+ for (int j=0;j<4;j++) {
+ cx=((i%2)*16)+(j*32)-56;
+ cz=(i*16)-56;
+ if ((i==7)&&(j==3)) { //draw special square
+ glVertex3f(cx+8, 0, cz-8);
+ glVertex3f(cx+8, 0, cz+8);
+ glVertex3f(cx+4, 0, cz+4);
+ glVertex3f(cx+4, 0, cz-4);
+
+ glVertex3f(cx+4, 0, cz+4);
+ glVertex3f(cx+8, 0, cz+8);
+ glVertex3f(cx-8, 0, cz+8);
+ glVertex3f(cx-4, 0, cz+4);
+
+ glVertex3f(cx-4, 0, cz-4);
+ glVertex3f(cx-4, 0, cz+4);
+ glVertex3f(cx-8, 0, cz+8);
+ glVertex3f(cx-8, 0, cz-8);
+
+ glVertex3f(cx+8, 0, cz-8);
+ glVertex3f(cx+4, 0, cz-4);
+ glVertex3f(cx-4, 0, cz-4);
+ glVertex3f(cx-8, 0, cz-8);
+ }
+ else {
+ glVertex3f(cx+8, 0, cz-8);
+ glVertex3f(cx+8, 0, cz+8);
+ glVertex3f(cx-8, 0, cz+8);
+ glVertex3f(cx-8, 0, cz-8);
+ }
+ }
+ }
+ glEnd();
+ glPopMatrix();
+}
+void drawCylinder(float r,float h,float x,float y,float z) {
+ glPushMatrix();
+ glTranslated(x,y,z);
+ glBegin(GL_QUADS);
+ float step=TWO_PI/50.0;
+ float txstep=1.0/50.0;
+ for (float i=0,j=0;i<=TWO_PI;i+=step,j+=txstep) {
+ glTexCoord2f(j,0); glVertex3f(cos(i)*r, 0, sin(i)*r);
+ glTexCoord2f(j,1); glVertex3f(cos(i)*r, -h, sin(i)*r);
+ glTexCoord2f(j+txstep,1); glVertex3f(cos(i+step)*r, -h, sin(i+step)*r);
+ glTexCoord2f(j+txstep,0); glVertex3f(cos(i+step)*r, 0, sin(i+step)*r);
+ }
+ glEnd();
+ glPopMatrix();
+} \ No newline at end of file