Package org.lwjgl.test.glu.tessellation

Source Code of org.lwjgl.test.glu.tessellation.TessellationTest

/*
* Copyright (c) 2002-2008 LWJGL Project
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
*   notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
*   notice, this list of conditions and the following disclaimer in the
*   documentation and/or other materials provided with the distribution.
*
* * Neither the name of 'LWJGL' nor the names of
*   its contributors may be used to endorse or promote products derived
*   from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.lwjgl.test.glu.tessellation;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.util.glu.GLUtessellator;

import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.util.glu.GLU.*;

public class TessellationTest {
  private GLUtessellator tesselator;

  void init()
  {
    // Create a new tessellation object
    tesselator = gluNewTess();

    // Set callback functions
    TessCallback callback = new TessCallback();
    tesselator.gluTessCallback(GLU_TESS_VERTEX, callback);
    tesselator.gluTessCallback(GLU_TESS_BEGIN, callback);
    tesselator.gluTessCallback(GLU_TESS_END, callback);
    tesselator.gluTessCallback(GLU_TESS_COMBINE, callback);
  }

  void setWindingRule(int windingRule)
  {
    // Set the winding rule
    tesselator.gluTessProperty(GLU_TESS_WINDING_RULE, windingRule);
  }

  void renderContour(double obj_data[][], int num_vertices)
  {
    for (int x = 0; x < num_vertices; x++) //loop through the vertices
    {
      tesselator.gluTessVertex(obj_data[x], 0, new VertexData(obj_data[x])); //store the vertex
    }
  }

  void beginPolygon()
  {
    tesselator.gluTessBeginPolygon(null);
  }

  void endPolygon()
  {
    tesselator.gluTessEndPolygon();
  }

  void beginContour()
  {
    tesselator.gluTessBeginContour();
  }

  void endContour()
  {
    tesselator.gluTessEndContour();
  }

  void end()
  {
    tesselator.gluDeleteTess();
  }

  private void createDisplay() throws LWJGLException {
    int width = 300;
    int height = 300;

    Display.setDisplayMode(new DisplayMode(width,height));
    Display.create();
    Display.setVSyncEnabled(true);

    glEnable(GL_TEXTURE_2D);
    glShadeModel(GL_SMOOTH);
    glDisable(GL_DEPTH_TEST);
    glDisable(GL_LIGHTING);

    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
        glClearDepth(1);

        glEnable(GL_BLEND);
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

        glViewport(0,0,width,height);
    glMatrixMode(GL_MODELVIEW);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, width, height, 0, 1, -1);
    glMatrixMode(GL_MODELVIEW);
  }

  private void loop() {
    while (true) {
      render();
      Display.update();
      Display.sync(100);

      if (Display.isCloseRequested()) {
        System.exit(0);
      }
    }
  }

  private void render() {
    glTranslatef(150,125,0);

    glScalef(50,50,1);
    // first polygon: a star-5 vertices and color information
    double star[][] = { {0.6f,  -0.1f, 0f, 1.0f, 1.0f, 1.0f},
                {1.35f, 1.4f, 0f, 1.0f, 1.0f, 1.0f},
                {2.1f,  -0.1f, 0f, 1.0f, 1.0f, 1.0f},
                {0.6f, 0.9f, 0f, 1.0f, 1.0f, 1.0f},
                {2.1f, 0.9f, 0f, 1.0f, 1.0f, 1.0f} };

    //second polygon: a quad-4 vertices; first contour
    double quad[][] = { {0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f},
                    {1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f},
                    {1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f},
                    {0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f} };

    //second polygon: a triangle-3 vertices; second contour
    double tri[][] = {{0.3f, 0.3f, 0.0f, 0.0f, 0.0f, 0.0f},
                   {0.7f, 0.3f, 0.0f, 0.0f, 0.0f, 0.0f},
                   {0.5f, 0.7f, 0.0f, 0.0f, 0.0f, 0.0f} };

    // render the first polygon: the textured star

    // set winding rule to positive
    setWindingRule(GLU_TESS_WINDING_POSITIVE);
    beginPolygon();
    beginContour();
    renderContour(star, 5);
    endContour();
    endPolygon();

    // render the second polygon: triangle cut out of a quad

    glTranslatef(-2,0,0);
    // set winding rule to odd
    setWindingRule(GLU_TESS_WINDING_ODD);
    // begin the new polygon
    beginPolygon();
    beginContour();
    renderContour(quad, 4);
    endContour();
    beginContour();
    renderContour(tri, 3);
    endContour();
    endPolygon();
    // delete the tess object
    end();
  }

  private void start() throws LWJGLException {
    createDisplay();
    init();
    loop();
  }

  public static void main(String[] argv) throws LWJGLException {
    TessellationTest test = new TessellationTest();
    test.start();
  }
}
TOP

Related Classes of org.lwjgl.test.glu.tessellation.TessellationTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.