summaryrefslogtreecommitdiffstats
path: root/util/meshcvt/meshcvt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'util/meshcvt/meshcvt.cpp')
-rw-r--r--util/meshcvt/meshcvt.cpp216
1 files changed, 0 insertions, 216 deletions
diff --git a/util/meshcvt/meshcvt.cpp b/util/meshcvt/meshcvt.cpp
deleted file mode 100644
index e01b0452..00000000
--- a/util/meshcvt/meshcvt.cpp
+++ /dev/null
@@ -1,216 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation ([email protected])
-**
-** This file is part of the QtQuick3D module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <QtGui/qvector3d.h>
-#include "qarray.h"
-
-static void meshError(const char *filename)
-{
- qWarning("%s: does not contain valid mesh data\n", filename);
- exit(1);
-}
-
-static int numPatches = 0;
-static int numVertices = 0;
-static int *patches = 0;
-
-int main(int argc, char *argv[])
-{
- int depth = 4;
- int teapotAdjust = 0;
- int reversePatches = 0;
- char buffer[BUFSIZ];
- char *filename;
- char *name;
- QArray<QVector3D> vertices;
-
- // Validate the command-line arguments.
- if (argc < 3) {
- qWarning("Usage: %s [--teapot-adjust] [--reverse-patches] mesh-filename name [depth]\n", argv[0]);
- return 1;
- }
- if (!strcmp(argv[1], "--teapot-adjust")) {
- // Adjust the vertices to correctly size and position the teapot.
- ++argv;
- --argc;
- teapotAdjust = 1;
- }
- if (!strcmp(argv[1], "--reverse-patches")) {
- // Reverse the coordinate order of patches (fixes teacup).
- ++argv;
- --argc;
- reversePatches = 1;
- }
- filename = argv[1];
- name = argv[2];
- if (argc > 3)
- depth = atoi(argv[3]);
-
- // Read the mesh data from the input file and determine
- // if it is a Bezier patch mesh or a triangle mesh.
- FILE *file;
- if ((file = fopen(filename, "r")) == NULL) {
- perror(filename);
- return 1;
- }
- if (fscanf(file, "%i\n", &numPatches) != 1)
- meshError(filename);
- patches = new int [numPatches * 17];
- for (int patch = 0; patch < numPatches; ++patch) {
- int *p = patches + patch * 17;
- if (!fgets(buffer, sizeof(buffer), file))
- meshError(filename);
- if (sscanf(buffer, "%i, %i, %i, %i, %i, %i, %i, %i, "
- "%i, %i, %i, %i, %i, %i, %i, %i, %i\n",
- p, p + 1, p + 2, p + 3,
- p + 4, p + 5, p + 6, p + 7,
- p + 8, p + 9, p + 10, p + 11,
- p + 12, p + 13, p + 14, p + 15, p + 16) != 17) {
- if (sscanf(buffer, "%i, %i, %i, %i, %i, %i, %i, %i, "
- "%i, %i, %i, %i, %i, %i, %i, %i\n",
- p, p + 1, p + 2, p + 3,
- p + 4, p + 5, p + 6, p + 7,
- p + 8, p + 9, p + 10, p + 11,
- p + 12, p + 13, p + 14, p + 15) != 16) {
- meshError(filename);
- } else {
- p[16] = -1; // Use the default minimum depth value.
- }
- }
- if (reversePatches) {
- int reversed[16];
- for (int i = 0; i < 16; ++i)
- reversed[i] = p[(i & 0x0C) + (3 - (i % 4))];
- for (int i = 0; i < 16; ++i)
- p[i] = reversed[i];
- }
- // The standard patch indices are 1-based, not 0-based.
- // Correct for that problem here.
- for (int offset = 0; offset < 16; ++offset)
- --(p[offset]);
- }
- if (fscanf(file, "%i\n", &numVertices) != 1)
- meshError(filename);
- for (int vertex = 0; vertex < numVertices; ++vertex) {
- float x, y, z, xnormal, ynormal, znormal;
- if (!fgets(buffer, sizeof(buffer), file))
- meshError(filename);
- if (sscanf(buffer, "%f, %f, %f, %f, %f, %f\n",
- &x, &y, &z, &xnormal, &ynormal, &znormal) != 6) {
- if (sscanf(buffer, "%f, %f, %f\n", &x, &y, &z) != 3)
- meshError(filename);
- }
- if (teapotAdjust) {
- // Do the equivalent of the following transformation:
- // matrix.rotate(270.0f, 1.0f, 0.0f, 0.0f);
- // matrix.scale(0.5f, 0.5f, 0.5f);
- // matrix.translate(0.0f, 0.0f, -1.5f);
- z -= 1.5f;
- x *= 0.5f;
- y *= 0.5f;
- z *= 0.5f;
- float y2 = z;
- float z2 = -y;
- y = y2;
- z = z2;
- }
- vertices.append(QVector3D(x, y, z));
- }
- fclose(file);
-
- // Generate the output data.
- printf("// Generated from %s by meshcvt, depth = %d\n\n", filename, depth);
- printf("#define %sBezierVertexCount %d\n", name, numVertices);
- printf("#define %sPatchCount %d\n", name, numPatches);
- printf("#define %sDepth %d\n", name, depth);
- printf("static float const %sBezierVertexData[] = {\n", name);
- for (int vertex = 0; vertex < vertices.count(); ++vertex) {
- QVector3D v = vertices[vertex];
- printf(" %ff, %ff, %ff", v.x(), v.y(), v.z());
- if (vertex < (vertices.count() - 1))
- printf(",\n");
- else
- printf("\n");
- }
- printf("};\n\n");
- printf("static ushort const %sPatchData[] = {\n", name);
- for (int patch = 0; patch < numPatches; ++patch) {
- int *p = patches + patch * 17;
- printf(" %d, %d, %d, %d, %d, %d, %d, %d, "
- "%d, %d, %d, %d, %d, %d, %d, %d",
- p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7],
- p[8], p[9], p[10], p[11], p[12], p[13], p[14], p[15]);
- if (patch < (numPatches - 1))
- printf(",\n");
- else
- printf("\n");
- }
- printf("};\n");
- printf("\n");
- printf("class %sPatches : public QGLBezierPatches\n{\n", name);
- printf("public:\n");
- printf(" %sPatches()\n", name);
- printf(" {\n");
- printf(" QVector3DArray positions;\n");
- printf(" for (int pindex = 0; pindex < %sPatchCount * 16; ++pindex) {\n", name);
- printf(" int vindex = %sPatchData[pindex];\n", name);
- printf(" positions.append(%sBezierVertexData[vindex * 3],\n", name);
- printf(" %sBezierVertexData[vindex * 3 + 1],\n", name);
- printf(" %sBezierVertexData[vindex * 3 + 2]);\n", name);
- printf(" }\n");
- printf(" setPositions(positions);\n");
- printf(" setSubdivisionDepth(%sDepth);\n", name);
- printf(" }\n");
- printf("};\n");
-
- // Dump some statistics to stderr.
- qWarning("Depth: %d\n", depth);
- qWarning("Number of vertices: %d\n", numVertices);
- qWarning("Number of patches: %d\n", numPatches);
- int storage = numVertices * sizeof(float) * 3;
- storage += numPatches * sizeof(ushort);
- qWarning("Bezier storage: %d bytes\n", storage);
-
- return 0;
-}