Class PShapeOpenGL

java.lang.Object
processing.core.PShape
processing.opengl.PShapeOpenGL
All Implemented Interfaces:
PConstants

public class PShapeOpenGL extends PShape
This class holds a 3D model composed of vertices, normals, colors (per vertex) and texture coordinates (also per vertex). All this data is stored in Vertex Buffer Objects (VBO) in GPU memory for very fast access. OBJ loading implemented using code from Saito's OBJLoader library: http://code.google.com/p/saitoobjloader/ and OBJReader from Ahmet Kizilay http://www.openprocessing.org/visuals/?visualID=191 By Andres Colubri Other formats to consider: AMF: http://en.wikipedia.org/wiki/Additive_Manufacturing_File_Format STL: http://en.wikipedia.org/wiki/STL_(file_format) OFF: http://people.sc.fsu.edu/~jburkardt/data/off/off.html(file_format) DXF: http://en.wikipedia.org/wiki/AutoCAD_DXF
  • Field Details

  • Constructor Details

    • PShapeOpenGL

      public PShapeOpenGL(PGraphicsOpenGL pg, int family)
    • PShapeOpenGL

      public PShapeOpenGL(PGraphicsOpenGL pg, int kind, float... p)
      Create a shape from the PRIMITIVE family, using this kind and these params
  • Method Details

    • addChild

      public void addChild(PShape who)
      Description copied from class: PShape
      Adds a child PShape to a parent PShape that is defined as a GROUP. In the example, the three shapes path, rectangle, and circle are added to a parent PShape variable named house that is a GROUP.
      Overrides:
      addChild in class PShape
      Parameters:
      who - any variable of type PShape
      See Also:
    • addChild

      public void addChild(PShape who, int idx)
      Overrides:
      addChild in class PShape
      idx - the layer position in which to insert the new child
    • removeChild

      public void removeChild(int idx)
      Description copied from class: PShape
      Remove the child shape with index idx.
      Overrides:
      removeChild in class PShape
    • createShape

      public static PShapeOpenGL createShape(PGraphicsOpenGL pg, PShape src)
    • copyGroup

      public static void copyGroup(PGraphicsOpenGL pg, PShape src, PShape dest)
    • getWidth

      public float getWidth()
      Description copied from class: PShape
      Get the width of the drawing area (not necessarily the shape boundary).
      Overrides:
      getWidth in class PShape
    • getHeight

      public float getHeight()
      Description copied from class: PShape
      Get the height of the drawing area (not necessarily the shape boundary).
      Overrides:
      getHeight in class PShape
    • getDepth

      public float getDepth()
      Description copied from class: PShape
      Get the depth of the shape area (not necessarily the shape boundary). Only makes sense for 3D PShape subclasses, such as PShape3D.
      Overrides:
      getDepth in class PShape
    • setTextureMode

      public void setTextureMode(int mode)
      Overrides:
      setTextureMode in class PShape
    • setTexture

      public void setTexture(PImage tex)
      Overrides:
      setTexture in class PShape
    • solid

      public void solid(boolean solid)
    • vertex

      public void vertex(float x, float y)
      Overrides:
      vertex in class PShape
    • vertex

      public void vertex(float x, float y, float u, float v)
      Overrides:
      vertex in class PShape
    • vertex

      public void vertex(float x, float y, float z)
      Overrides:
      vertex in class PShape
    • vertex

      public void vertex(float x, float y, float z, float u, float v)
      Overrides:
      vertex in class PShape
    • normal

      public void normal(float nx, float ny, float nz)
      Overrides:
      normal in class PShape
    • attribPosition

      public void attribPosition(String name, float x, float y, float z)
      Overrides:
      attribPosition in class PShape
    • attribNormal

      public void attribNormal(String name, float nx, float ny, float nz)
      Overrides:
      attribNormal in class PShape
    • attribColor

      public void attribColor(String name, int color)
      Overrides:
      attribColor in class PShape
    • attrib

      public void attrib(String name, float... values)
      Overrides:
      attrib in class PShape
    • attrib

      public void attrib(String name, int... values)
      Overrides:
      attrib in class PShape
    • attrib

      public void attrib(String name, boolean... values)
      Overrides:
      attrib in class PShape
    • endShape

      public void endShape(int mode)
      Overrides:
      endShape in class PShape
    • setParams

      public void setParams(float[] source)
    • setPath

      public void setPath(int vcount, float[][] verts, int ccount, int[] codes)
    • translate

      public void translate(float tx, float ty)
      Description copied from class: PShape
      Specifies an amount to displace the shape. The x parameter specifies left/right translation, the y parameter specifies up/down translation, and the z parameter specifies translations toward/away from the screen. Subsequent calls to the method accumulates the effect. For example, calling translate(50, 0) and then translate(20, 0) is the same as translate(70, 0). This transformation is applied directly to the shape, it's not refreshed each time draw() is run.

      Using this method with the z parameter requires using the P3D parameter in combination with size.
      Overrides:
      translate in class PShape
      Parameters:
      tx - left/right translation
      ty - up/down translation
      See Also:
    • translate

      public void translate(float tx, float ty, float tz)
      Overrides:
      translate in class PShape
      tz - forward/back translation
    • rotate

      public void rotate(float angle)
      Description copied from class: PShape
      Rotates a shape the amount specified by the angle parameter. Angles should be specified in radians (values from 0 to TWO_PI) or converted to radians with the radians() method.

      Shapes are always rotated around the upper-left corner of their bounding box. Positive numbers rotate objects in a clockwise direction. Transformations apply to everything that happens after and subsequent calls to the method accumulates the effect. For example, calling rotate(HALF_PI) and then rotate(HALF_PI) is the same as rotate(PI). This transformation is applied directly to the shape, it's not refreshed each time draw() is run.
      Overrides:
      rotate in class PShape
      Parameters:
      angle - angle of rotation specified in radians
      See Also:
    • rotateX

      public void rotateX(float angle)
      Description copied from class: PShape
      Rotates a shape around the x-axis the amount specified by the angle parameter. Angles should be specified in radians (values from 0 to TWO_PI) or converted to radians with the radians() method.

      Shapes are always rotated around the upper-left corner of their bounding box. Positive numbers rotate objects in a clockwise direction. Subsequent calls to the method accumulates the effect. For example, calling rotateX(HALF_PI) and then rotateX(HALF_PI) is the same as rotateX(PI). This transformation is applied directly to the shape, it's not refreshed each time draw() is run.

      This method requires a 3D renderer. You need to use P3D as a third parameter for the size() function as shown in the example above.
      Overrides:
      rotateX in class PShape
      Parameters:
      angle - angle of rotation specified in radians
      See Also:
    • rotateY

      public void rotateY(float angle)
      Description copied from class: PShape
      Rotates a shape around the y-axis the amount specified by the angle parameter. Angles should be specified in radians (values from 0 to TWO_PI) or converted to radians with the radians() method.

      Shapes are always rotated around the upper-left corner of their bounding box. Positive numbers rotate objects in a clockwise direction. Subsequent calls to the method accumulates the effect. For example, calling rotateY(HALF_PI) and then rotateY(HALF_PI) is the same as rotateY(PI). This transformation is applied directly to the shape, it's not refreshed each time draw() is run.

      This method requires a 3D renderer. You need to use P3D as a third parameter for the size() function as shown in the example above.
      Overrides:
      rotateY in class PShape
      Parameters:
      angle - angle of rotation specified in radians
      See Also:
    • rotateZ

      public void rotateZ(float angle)
      Description copied from class: PShape
      Rotates a shape around the z-axis the amount specified by the angle parameter. Angles should be specified in radians (values from 0 to TWO_PI) or converted to radians with the radians() method.

      Shapes are always rotated around the upper-left corner of their bounding box. Positive numbers rotate objects in a clockwise direction. Subsequent calls to the method accumulates the effect. For example, calling rotateZ(HALF_PI) and then rotateZ(HALF_PI) is the same as rotateZ(PI). This transformation is applied directly to the shape, it's not refreshed each time draw() is run.

      This method requires a 3D renderer. You need to use P3D as a third parameter for the size() function as shown in the example above.
      Overrides:
      rotateZ in class PShape
      Parameters:
      angle - angle of rotation specified in radians
      See Also:
    • rotate

      public void rotate(float angle, float v0, float v1, float v2)
      Overrides:
      rotate in class PShape
    • scale

      public void scale(float s)
      Description copied from class: PShape
      Increases or decreases the size of a shape by expanding and contracting vertices. Shapes always scale from the relative origin of their bounding box. Scale values are specified as decimal percentages. For example, the method call scale(2.0) increases the dimension of a shape by 200%. Subsequent calls to the method multiply the effect. For example, calling scale(2.0) and then scale(1.5) is the same as scale(3.0). This transformation is applied directly to the shape, it's not refreshed each time draw() is run.

      Using this method with the z parameter requires using the P3D parameter in combination with size.
      Overrides:
      scale in class PShape
      Parameters:
      s - percentage to scale the object
      See Also:
    • scale

      public void scale(float x, float y)
      Overrides:
      scale in class PShape
    • scale

      public void scale(float x, float y, float z)
      Overrides:
      scale in class PShape
      Parameters:
      x - percentage to scale the object in the x-axis
      y - percentage to scale the object in the y-axis
      z - percentage to scale the object in the z-axis
    • applyMatrix

      public void applyMatrix(PMatrix2D source)
      Overrides:
      applyMatrix in class PShape
    • applyMatrix

      public void applyMatrix(float n00, float n01, float n02, float n10, float n11, float n12)
      Overrides:
      applyMatrix in class PShape
    • applyMatrix

      public void applyMatrix(float n00, float n01, float n02, float n03, float n10, float n11, float n12, float n13, float n20, float n21, float n22, float n23, float n30, float n31, float n32, float n33)
      Overrides:
      applyMatrix in class PShape
    • resetMatrix

      public void resetMatrix()
      Description copied from class: PShape
      Replaces the current matrix of a shape with the identity matrix. The equivalent function in OpenGL is glLoadIdentity().
      Overrides:
      resetMatrix in class PShape
      See Also:
    • bezierDetail

      public void bezierDetail(int detail)
      Overrides:
      bezierDetail in class PShape
    • bezierVertex

      public void bezierVertex(float x2, float y2, float x3, float y3, float x4, float y4)
      Overrides:
      bezierVertex in class PShape
    • bezierVertex

      public void bezierVertex(float x2, float y2, float z2, float x3, float y3, float z3, float x4, float y4, float z4)
      Overrides:
      bezierVertex in class PShape
    • quadraticVertex

      public void quadraticVertex(float cx, float cy, float x3, float y3)
      Overrides:
      quadraticVertex in class PShape
    • quadraticVertex

      public void quadraticVertex(float cx, float cy, float cz, float x3, float y3, float z3)
      Overrides:
      quadraticVertex in class PShape
    • curveDetail

      public void curveDetail(int detail)
      Overrides:
      curveDetail in class PShape
    • curveTightness

      public void curveTightness(float tightness)
      Overrides:
      curveTightness in class PShape
    • curveVertex

      public void curveVertex(float x, float y)
      Overrides:
      curveVertex in class PShape
    • curveVertex

      public void curveVertex(float x, float y, float z)
      Overrides:
      curveVertex in class PShape
    • getVertexCount

      public int getVertexCount()
      Description copied from class: PShape
      The getVertexCount() method returns the number of vertices that make up a PShape. In the above example, the value 4 is returned by the getVertexCount() method because 4 vertices are defined in setup().
      Overrides:
      getVertexCount in class PShape
      See Also:
    • getVertex

      public PVector getVertex(int index, PVector vec)
      Overrides:
      getVertex in class PShape
      vec - PVector to assign the data to
    • getVertexX

      public float getVertexX(int index)
      Overrides:
      getVertexX in class PShape
    • getVertexY

      public float getVertexY(int index)
      Overrides:
      getVertexY in class PShape
    • getVertexZ

      public float getVertexZ(int index)
      Overrides:
      getVertexZ in class PShape
    • setVertex

      public void setVertex(int index, float x, float y)
      Description copied from class: PShape
      The setVertex() method defines the coordinates of the vertex point located at the position defined by the index parameter. This method works when shapes are created as shown in the example above, but won't work properly when a shape is defined explicitly (e.g. createShape(RECT, 20, 20, 80, 80).
      Overrides:
      setVertex in class PShape
      Parameters:
      index - the location of the vertex
      x - the x value for the vertex
      y - the y value for the vertex
      See Also:
    • setVertex

      public void setVertex(int index, float x, float y, float z)
      Overrides:
      setVertex in class PShape
      z - the z value for the vertex
    • setVertex

      public void setVertex(int index, PVector vec)
      Overrides:
      setVertex in class PShape
      vec - the PVector to define the x, y, z coordinates
    • getNormal

      public PVector getNormal(int index, PVector vec)
      Overrides:
      getNormal in class PShape
    • getNormalX

      public float getNormalX(int index)
      Overrides:
      getNormalX in class PShape
    • getNormalY

      public float getNormalY(int index)
      Overrides:
      getNormalY in class PShape
    • getNormalZ

      public float getNormalZ(int index)
      Overrides:
      getNormalZ in class PShape
    • setNormal

      public void setNormal(int index, float nx, float ny, float nz)
      Overrides:
      setNormal in class PShape
    • getTextureU

      public float getTextureU(int index)
      Overrides:
      getTextureU in class PShape
    • getTextureV

      public float getTextureV(int index)
      Overrides:
      getTextureV in class PShape
    • setTextureUV

      public void setTextureUV(int index, float u, float v)
      Overrides:
      setTextureUV in class PShape
    • getFill

      public int getFill(int index)
      Overrides:
      getFill in class PShape
    • setFill

      public void setFill(boolean fill)
      Overrides:
      setFill in class PShape
    • setFill

      public void setFill(int fill)
      Description copied from class: PShape
      The setFill() method defines the fill color of a PShape. This method is used after shapes are created or when a shape is defined explicitly (e.g. createShape(RECT, 20, 20, 80, 80)) as shown in the above example. When a shape is created with beginShape() and endShape(), its attributes may be changed with fill() and stroke() within beginShape() and endShape(). However, after the shape is created, only the setFill() method can define a new fill value for the PShape.
      Overrides:
      setFill in class PShape
    • setFill

      public void setFill(int index, int fill)
      Overrides:
      setFill in class PShape
    • getTint

      public int getTint(int index)
      Overrides:
      getTint in class PShape
    • setTint

      public void setTint(boolean tint)
      Overrides:
      setTint in class PShape
    • setTint

      public void setTint(int tint)
      Overrides:
      setTint in class PShape
    • setTint

      public void setTint(int index, int tint)
      Overrides:
      setTint in class PShape
    • getStroke

      public int getStroke(int index)
      Overrides:
      getStroke in class PShape
    • setStroke

      public void setStroke(boolean stroke)
      Overrides:
      setStroke in class PShape
    • setStroke

      public void setStroke(int stroke)
      Description copied from class: PShape
      The setStroke() method defines the outline color of a PShape. This method is used after shapes are created or when a shape is defined explicitly (e.g. createShape(RECT, 20, 20, 80, 80)) as shown in the above example. When a shape is created with beginShape() and endShape(), its attributes may be changed with fill() and stroke() within beginShape() and endShape(). However, after the shape is created, only the setStroke() method can define a new stroke value for the PShape.
      Overrides:
      setStroke in class PShape
    • setStroke

      public void setStroke(int index, int stroke)
      Overrides:
      setStroke in class PShape
    • getStrokeWeight

      public float getStrokeWeight(int index)
      Overrides:
      getStrokeWeight in class PShape
    • setStrokeWeight

      public void setStrokeWeight(float weight)
      Overrides:
      setStrokeWeight in class PShape
    • setStrokeWeight

      public void setStrokeWeight(int index, float weight)
      Overrides:
      setStrokeWeight in class PShape
    • setStrokeJoin

      public void setStrokeJoin(int join)
      Overrides:
      setStrokeJoin in class PShape
    • setStrokeCap

      public void setStrokeCap(int cap)
      Overrides:
      setStrokeCap in class PShape
    • getAmbient

      public int getAmbient(int index)
      Overrides:
      getAmbient in class PShape
    • setAmbient

      public void setAmbient(int ambient)
      Overrides:
      setAmbient in class PShape
    • setAmbient

      public void setAmbient(int index, int ambient)
      Overrides:
      setAmbient in class PShape
    • getSpecular

      public int getSpecular(int index)
      Overrides:
      getSpecular in class PShape
    • setSpecular

      public void setSpecular(int specular)
      Overrides:
      setSpecular in class PShape
    • setSpecular

      public void setSpecular(int index, int specular)
      Overrides:
      setSpecular in class PShape
    • getEmissive

      public int getEmissive(int index)
      Overrides:
      getEmissive in class PShape
    • setEmissive

      public void setEmissive(int emissive)
      Overrides:
      setEmissive in class PShape
    • setEmissive

      public void setEmissive(int index, int emissive)
      Overrides:
      setEmissive in class PShape
    • getShininess

      public float getShininess(int index)
      Overrides:
      getShininess in class PShape
    • setShininess

      public void setShininess(float shininess)
      Overrides:
      setShininess in class PShape
    • setShininess

      public void setShininess(int index, float shine)
      Overrides:
      setShininess in class PShape
    • getAttribPosition

      public PVector getAttribPosition(String name, int index, PVector vec)
    • getAttribPositionX

      public float getAttribPositionX(String name, int index)
    • getAttribPositionY

      public float getAttribPositionY(String name, int index)
    • getAttribPositionZ

      public float getAttribPositionZ(String name, int index)
    • getAttribNormal

      public PVector getAttribNormal(String name, int index, PVector vec)
    • getAttribNormalX

      public float getAttribNormalX(String name, int index)
    • getAttribNormalY

      public float getAttribNormalY(String name, int index)
    • getAttribNormalZ

      public float getAttribNormalZ(String name, int index)
    • getAttribColor

      public int getAttribColor(String name, int index)
    • getAttrib

      public float[] getAttrib(String name, int index, float[] values)
    • getAttrib

      public int[] getAttrib(String name, int index, int[] values)
    • getAttrib

      public boolean[] getAttrib(String name, int index, boolean[] values)
    • setAttribPosition

      public void setAttribPosition(String name, int index, float x, float y, float z)
    • setAttribNormal

      public void setAttribNormal(String name, int index, float nx, float ny, float nz)
    • setAttribColor

      public void setAttribColor(String name, int index, int color)
    • setAttrib

      public void setAttrib(String name, int index, float... values)
    • setAttrib

      public void setAttrib(String name, int index, int... values)
    • setAttrib

      public void setAttrib(String name, int index, boolean... values)
    • getVertexCodes

      public int[] getVertexCodes()
      Overrides:
      getVertexCodes in class PShape
    • getVertexCodeCount

      public int getVertexCodeCount()
      Overrides:
      getVertexCodeCount in class PShape
    • getVertexCode

      public int getVertexCode(int index)
      One of VERTEX, BEZIER_VERTEX, CURVE_VERTEX, or BREAK.
      Overrides:
      getVertexCode in class PShape
    • getTessellation

      public PShape getTessellation()
      Description copied from class: PShape
      Returns a PShape holding the tessellated geometry of this shape, composed entirely of triangles.
      Overrides:
      getTessellation in class PShape
    • beginTessellation

      public void beginTessellation(int kind)
      Overrides:
      beginTessellation in class PShape
    • endTessellation

      public void endTessellation()
      Overrides:
      endTessellation in class PShape
    • contains

      public boolean contains(float x, float y)
      Return true if this x, y coordinate is part of this shape. Only works with PATH shapes or GROUP shapes that contain other GROUPs or PATHs. This method is not imperfect and doesn't account for all cases (not all complex shapes: concave shapes or holes may have issues).
      Overrides:
      contains in class PShape
    • disableStyle

      public void disableStyle()
      Description copied from class: PShape
      Disables the shape's style data and uses Processing's current styles. Styles include attributes such as colors, stroke weight, and stroke joints.

      Advanced

      Overrides this shape's style information and uses PGraphics styles and colors. Identical to ignoreStyles(true). Also disables styles for all child shapes.
      Overrides:
      disableStyle in class PShape
      See Also:
    • enableStyle

      public void enableStyle()
      Description copied from class: PShape
      Enables the shape's style data and ignores Processing's current styles. Styles include attributes such as colors, stroke weight, and stroke joints.
      Overrides:
      enableStyle in class PShape
      See Also:
    • draw

      public void draw(PGraphics g)
      Description copied from class: PShape
      Called by the following (the shape() command adds the g) PShape s = loadShape("blah.svg"); shape(s);
      Overrides:
      draw in class PShape