⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gumbo.java

📁 Sunflow是一个照片级的渲染系统
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
package org.sunflow.core.tesselatable;

import java.io.FileNotFoundException;
import java.io.IOException;

import org.sunflow.math.Matrix4;
import org.sunflow.system.Parser;
import org.sunflow.system.Parser.ParserException;
import org.sunflow.util.FloatArray;

public class Gumbo extends BezierMesh {
    // generate raw patch data from source rib file
    public static void main(String[] args) {
        try {
            Parser p;
            p = new Parser("gumbo.rib");
            int begins = 1;
            System.out.println("{");
            Matrix4 m = Matrix4.IDENTITY;
            p.checkNextToken("AttributeBegin");
            while (begins != 0) {
                if (p.peekNextToken("Patch")) {
                    p.checkNextToken("bicubic");
                    p.checkNextToken("P");
                    float[] patch = parseFloatArray(p);
                    if (patch.length == 48) {
                        // transform patch
                        for (int i = 0; i < 16; i++) {
                            float x = patch[3 * i + 0];
                            float y = patch[3 * i + 1];
                            float z = patch[3 * i + 2];
                            patch[3 * i + 0] = m.transformPX(x, y, z);
                            patch[3 * i + 1] = m.transformPY(x, y, z);
                            patch[3 * i + 2] = m.transformPZ(x, y, z);
                        }
                        System.out.println("{");
                        for (float v : patch)
                            System.out.printf("  %g,\n", v);
                        System.out.println("},");
                    }
                } else if (p.peekNextToken("Translate")) {
                    Matrix4 t = Matrix4.translation(p.getNextFloat(), p.getNextFloat(), p.getNextFloat());
                    m = m.multiply(t);
                } else if (p.peekNextToken("Rotate")) {
                    float angle = (float) Math.toRadians(p.getNextFloat());
                    Matrix4 t = Matrix4.rotate(p.getNextFloat(), p.getNextFloat(), p.getNextFloat(), angle);
                    m = m.multiply(t);
                } else if (p.peekNextToken("Scale")) {
                    Matrix4 t = Matrix4.scale(p.getNextFloat(), p.getNextFloat(), p.getNextFloat());
                    m = m.multiply(t);
                } else if (p.peekNextToken("TransformEnd")) {
                    m = Matrix4.IDENTITY;
                } else if (p.peekNextToken("AttributeBegin")) {
                    begins++;
                } else if (p.peekNextToken("AttributeEnd")) {
                    begins--;
                } else
                    p.getNextToken();
            }
            System.out.println("};");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParserException e) {
            e.printStackTrace();
        }
    }

    private static float[] parseFloatArray(Parser p) throws IOException {
        FloatArray array = new FloatArray();
        boolean done = false;
        do {
            String s = p.getNextToken();
            if (s.startsWith("["))
                s = s.substring(1);
            if (s.endsWith("]")) {
                s = s.substring(0, s.length() - 1);
                done = true;
            }
            array.add(Float.parseFloat(s));
        } while (!done);
        return array.trim();
    }

    // copy and paste data here
    private static final float[][] PATCHES = {
            { 10.0000f, 2.00000f, 0.00000f, 10.0000f, 2.00000f, 0.00000f,
                    14.0000f, 2.00000f, 0.00000f, 14.0000f, 2.00000f, 0.00000f,
                    10.0000f, 2.00000f, 0.00000f, 10.2277f, 2.22776f,
                    -0.911042f, 13.7722f, 2.22776f, -0.911042f, 14.0000f,
                    2.00000f, 0.00000f, 10.0000f, 6.00000f, 0.00000f, 10.2277f,
                    5.77223f, -0.911041f, 13.7722f, 5.77224f, -0.911041f,
                    14.0000f, 6.00000f, 0.00000f, 10.0000f, 6.00000f, 0.00000f,
                    10.0000f, 6.00000f, 0.00000f, 14.0000f, 6.00000f, 0.00000f,
                    14.0000f, 6.00000f, 0.00000f, },
            { 10.0000f, 2.00000f, 0.00000f, 10.0000f, 2.00000f, 0.00000f,
                    10.2483f, 2.08468f, 5.33563f, 10.0000f, 2.00000f, 8.00000f,
                    10.0000f, 2.00000f, 0.00000f, 10.5077f, 0.457924f,
                    2.06861f, 11.2875f, 1.04546f, 5.33563f, 11.0392f,
                    0.960774f, 8.00000f, 14.0000f, 2.00000f, 0.00000f,
                    13.4933f, 0.456761f, 2.07326f, 12.2875f, 2.17941f,
                    5.23824f, 12.5766f, 1.37605f, 7.76601f, 14.0000f, 2.00000f,
                    0.00000f, 14.0000f, 2.00000f, 0.00000f, 13.5399f, 2.92014f,
                    4.93284f, 14.0000f, 2.00000f, 8.00000f, },
            { 14.0000f, 2.00000f, 0.00000f, 14.0000f, 2.00000f, 0.00000f,
                    13.5399f, 2.92014f, 4.93284f, 14.0000f, 2.00000f, 8.00000f,
                    14.0000f, 2.00000f, 0.00000f, 15.5432f, 2.50660f, 2.07326f,
                    14.6921f, 3.60159f, 4.65188f, 15.8610f, 3.45395f, 6.60420f,
                    14.0000f, 6.00000f, 0.00000f, 15.5425f, 5.49273f, 2.07061f,
                    13.5521f, 3.61407f, 5.16626f, 15.0332f, 3.93355f, 6.96677f,
                    14.0000f, 6.00000f, 0.00000f, 14.0000f, 6.00000f, 0.00000f,
                    12.5859f, 4.58590f, 5.17181f, 14.0000f, 6.00000f, 8.00000f, },
            { 14.0000f, 6.00000f, 0.00000f, 14.0000f, 6.00000f, 0.00000f,
                    12.5859f, 4.58590f, 5.17181f, 14.0000f, 6.00000f, 8.00000f,
                    14.0000f, 6.00000f, 0.00000f, 13.4927f, 7.54257f, 2.07061f,
                    11.6360f, 5.54118f, 5.17727f, 12.2594f, 6.87025f, 7.12974f,
                    10.0000f, 6.00000f, 0.00000f, 10.5090f, 7.54076f, 2.06338f,
                    11.5055f, 6.72455f, 4.92427f, 11.3818f, 7.59478f, 7.30228f,
                    10.0000f, 6.00000f, 0.00000f, 10.0000f, 6.00000f, 0.00000f,
                    10.6165f, 5.55161f, 5.03744f, 10.0000f, 6.00000f, 8.00000f, },
            { 10.0000f, 6.00000f, 0.00000f, 10.0000f, 6.00000f, 0.00000f,
                    10.6165f, 5.55161f, 5.03744f, 10.0000f, 6.00000f, 8.00000f,
                    10.0000f, 6.00000f, 0.00000f, 8.45923f, 5.49092f, 2.06338f,
                    9.71866f, 4.36704f, 5.15174f, 8.96952f, 4.43964f, 7.67212f,
                    10.0000f, 2.00000f, 0.00000f, 8.45792f, 2.50777f, 2.06861f,
                    9.18040f, 3.15264f, 5.33563f, 8.93204f, 3.06795f, 8.00000f,
                    10.0000f, 2.00000f, 0.00000f, 10.0000f, 2.00000f, 0.00000f,
                    10.2483f, 2.08468f, 5.33563f, 10.0000f, 2.00000f, 8.00000f, },
            { 18.0000f, 2.00000f, 0.00000f, 18.0000f, 2.00000f, 0.00000f,
                    22.0000f, 2.00000f, 0.00000f, 22.0000f, 2.00000f, 0.00000f,
                    18.0000f, 2.00000f, 0.00000f, 18.2277f, 2.22776f,
                    -0.911042f, 21.7722f, 2.22776f, -0.911042f, 22.0000f,
                    2.00000f, 0.00000f, 18.0000f, 6.00000f, 0.00000f, 18.2277f,
                    5.77224f, -0.911042f, 21.7722f, 5.77223f, -0.911044f,
                    22.0000f, 6.00000f, 0.00000f, 18.0000f, 6.00000f, 0.00000f,
                    18.0000f, 6.00000f, 0.00000f, 22.0000f, 6.00000f, 0.00000f,
                    22.0000f, 6.00000f, 0.00000f, },
            { 18.0000f, 2.00000f, 0.00000f, 18.0000f, 2.00000f, 0.00000f,
                    18.6124f, 3.22488f, 4.93779f, 18.0000f, 2.00000f, 8.00000f,
                    18.0000f, 2.00000f, 0.00000f, 18.5064f, 0.456647f,
                    2.07371f, 19.8347f, 2.44159f, 5.28208f, 19.5248f, 1.39004f,
                    7.69502f, 22.0000f, 2.00000f, 0.00000f, 21.4928f,
                    0.457306f, 2.07108f, 21.0113f, 1.23344f, 5.33483f,
                    20.9582f, 0.958220f, 8.00000f, 22.0000f, 2.00000f,
                    0.00000f, 22.0000f, 2.00000f, 0.00000f, 22.0531f, 2.27522f,
                    5.33483f, 22.0000f, 2.00000f, 8.00000f, },
            { 22.0000f, 2.00000f, 0.00000f, 22.0000f, 2.00000f, 0.00000f,
                    22.0531f, 2.27522f, 5.33483f, 22.0000f, 2.00000f, 8.00000f,
                    22.0000f, 2.00000f, 0.00000f, 23.5426f, 2.50715f, 2.07108f,
                    23.1026f, 3.32477f, 5.33483f, 23.0495f, 3.04954f, 8.00000f,
                    22.0000f, 6.00000f, 0.00000f, 23.5427f, 5.49294f, 2.07146f,
                    22.2045f, 4.41977f, 5.20618f, 22.8434f, 4.43176f, 7.78914f,
                    22.0000f, 6.00000f, 0.00000f, 22.0000f, 6.00000f, 0.00000f,
                    21.4391f, 5.67950f, 5.02396f, 22.0000f, 6.00000f, 8.00000f, },
            { 22.0000f, 6.00000f, 0.00000f, 22.0000f, 6.00000f, 0.00000f,
                    21.4391f, 5.67950f, 5.02396f, 22.0000f, 6.00000f, 8.00000f,
                    22.0000f, 6.00000f, 0.00000f, 21.4929f, 7.54278f, 2.07146f,
                    20.6640f, 6.95514f, 4.83944f, 20.8048f, 7.75546f, 7.23198f,
                    18.0000f, 6.00000f, 0.00000f, 18.5072f, 7.54257f, 2.07061f,
                    20.3933f, 5.55591f, 5.16253f, 19.7699f, 6.88498f, 7.11501f,
                    18.0000f, 6.00000f, 0.00000f, 18.0000f, 6.00000f, 0.00000f,
                    19.4157f, 4.58430f, 5.16861f, 18.0000f, 6.00000f, 8.00000f, },
            { 18.0000f, 6.00000f, 0.00000f, 18.0000f, 6.00000f, 0.00000f,
                    19.4157f, 4.58430f, 5.16861f, 18.0000f, 6.00000f, 8.00000f,
                    18.0000f, 6.00000f, 0.00000f, 16.4574f, 5.49273f, 2.07061f,
                    18.4561f, 3.63070f, 5.17458f, 16.9751f, 3.95019f, 6.97509f,
                    18.0000f, 2.00000f, 0.00000f, 16.4566f, 2.50649f, 2.07371f,
                    17.5879f, 3.88144f, 4.64919f, 16.4270f, 3.57293f, 6.42706f,
                    18.0000f, 2.00000f, 0.00000f, 18.0000f, 2.00000f, 0.00000f,
                    18.6124f, 3.22488f, 4.93779f, 18.0000f, 2.00000f, 8.00000f, },
            { 18.0000f, 8.00000f, 0.00000f, 18.0000f, 8.00000f, 0.00000f,
                    22.0000f, 8.00000f, 0.00000f, 22.0000f, 8.00000f, 0.00000f,
                    18.0000f, 8.00000f, 0.00000f, 18.2277f, 8.22776f,
                    -0.911043f, 21.7722f, 8.22775f, -0.911043f, 22.0000f,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -