mirror of
https://github.com/processing/processing4.git
synced 2026-02-02 21:29:17 +01:00
112 lines
2.6 KiB
Java
112 lines
2.6 KiB
Java
import processing.core.*;
|
|
|
|
import java.applet.*;
|
|
import java.awt.*;
|
|
import java.awt.image.*;
|
|
import java.awt.event.*;
|
|
import java.io.*;
|
|
import java.net.*;
|
|
import java.text.*;
|
|
import java.util.*;
|
|
import java.util.zip.*;
|
|
import java.util.regex.*;
|
|
|
|
public class TextureCube extends PApplet {
|
|
|
|
/**
|
|
* TexturedCube
|
|
* by Dave Bollinger.
|
|
*
|
|
* Drag mouse to rotate cube. Demonstrates use of u/v coords in
|
|
* vertex() and effect on texture(). The textures get distorted using
|
|
* the P3D renderer as you can see, but they look great using OPENGL.
|
|
*/
|
|
|
|
|
|
PImage tex;
|
|
float rotx = PI/4;
|
|
float roty = PI/4;
|
|
|
|
public void setup()
|
|
{
|
|
size(640, 360, P3D);
|
|
tex = loadImage("berlin-1.jpg");
|
|
textureMode(NORMALIZED);
|
|
fill(255);
|
|
stroke(color(44,48,32));
|
|
}
|
|
|
|
public void draw()
|
|
{
|
|
background(0);
|
|
noStroke();
|
|
translate(width/2.0f, height/2.0f, -100);
|
|
rotateX(rotx);
|
|
rotateY(roty);
|
|
scale(90);
|
|
TexturedCube(tex);
|
|
}
|
|
|
|
public void TexturedCube(PImage tex) {
|
|
beginShape(QUADS);
|
|
texture(tex);
|
|
|
|
// Given one texture and six faces, we can easily set up the uv coordinates
|
|
// such that four of the faces tile "perfectly" along either u or v, but the other
|
|
// two faces cannot be so aligned. This code tiles "along" u, "around" the X/Z faces
|
|
// and fudges the Y faces - the Y faces are arbitrarily aligned such that a
|
|
// rotation along the X axis will put the "top" of either texture at the "top"
|
|
// of the screen, but is not otherwised aligned with the X/Z faces. (This
|
|
// just affects what type of symmetry is required if you need seamless
|
|
// tiling all the way around the cube)
|
|
|
|
// +Z "front" face
|
|
vertex(-1, -1, 1, 0, 0);
|
|
vertex( 1, -1, 1, 1, 0);
|
|
vertex( 1, 1, 1, 1, 1);
|
|
vertex(-1, 1, 1, 0, 1);
|
|
|
|
// -Z "back" face
|
|
vertex( 1, -1, -1, 0, 0);
|
|
vertex(-1, -1, -1, 1, 0);
|
|
vertex(-1, 1, -1, 1, 1);
|
|
vertex( 1, 1, -1, 0, 1);
|
|
|
|
// +Y "bottom" face
|
|
vertex(-1, 1, 1, 0, 0);
|
|
vertex( 1, 1, 1, 1, 0);
|
|
vertex( 1, 1, -1, 1, 1);
|
|
vertex(-1, 1, -1, 0, 1);
|
|
|
|
// -Y "top" face
|
|
vertex(-1, -1, -1, 0, 0);
|
|
vertex( 1, -1, -1, 1, 0);
|
|
vertex( 1, -1, 1, 1, 1);
|
|
vertex(-1, -1, 1, 0, 1);
|
|
|
|
// +X "right" face
|
|
vertex( 1, -1, 1, 0, 0);
|
|
vertex( 1, -1, -1, 1, 0);
|
|
vertex( 1, 1, -1, 1, 1);
|
|
vertex( 1, 1, 1, 0, 1);
|
|
|
|
// -X "left" face
|
|
vertex(-1, -1, -1, 0, 0);
|
|
vertex(-1, -1, 1, 1, 0);
|
|
vertex(-1, 1, 1, 1, 1);
|
|
vertex(-1, 1, -1, 0, 1);
|
|
|
|
endShape();
|
|
}
|
|
|
|
public void mouseDragged() {
|
|
float rate = 0.01f;
|
|
rotx += (pmouseY-mouseY) * rate;
|
|
roty += (mouseX-pmouseX) * rate;
|
|
}
|
|
|
|
static public void main(String args[]) {
|
|
PApplet.main(new String[] { "TextureCube" });
|
|
}
|
|
}
|