亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rectangularnormaltessellator.java

?? world wind java sdk 源碼
?? JAVA
?? 第 1 頁 / 共 5 頁
字號:
                    coords[vIndex++] + centerY,
                    coords[vIndex] + centerZ);

            vIndex = 3 * indices[i + 1];
            Vec4 v1 = new Vec4(
                    coords[vIndex++] + centerX,
                    coords[vIndex++] + centerY,
                    coords[vIndex] + centerZ);

            vIndex = 3 * indices[i + 2];
            Vec4 v2 = new Vec4(
                    coords[vIndex++] + centerX,
                    coords[vIndex++] + centerY,
                    coords[vIndex] + centerZ);

            vIndex = 3 * indices[i + 3];
            Vec4 v3 = new Vec4(
                    coords[vIndex++] + centerX,
                    coords[vIndex++] + centerY,
                    coords[vIndex] + centerZ);

            Intersection[] inter;
            // Test triangle 1 intersection
            if ((inter = globe.intersect(new Triangle(v0, v1, v2), elevation)) != null)
            {
                list.add(inter[0]);
                list.add(inter[1]);
            }

            // Test triangle 2 intersection
            if ((inter = globe.intersect(new Triangle(v1, v2, v3), elevation)) != null)
            {
                list.add(inter[0]);
                list.add(inter[1]);
            }
        }

        int numHits = list.size();
        if (numHits == 0)
            return null;

        hits = new Intersection[numHits];
        list.toArray(hits);

        return hits;
    }

    private Vec4 getSurfacePoint(RectTile tile, Angle latitude,
			Angle longitude, double metersOffset)
	{
		Vec4 result = this.getSurfacePoint(tile, latitude, longitude);
		if (metersOffset != 0 && result != null)
			result = applyOffset(this.globe, result, metersOffset);

		return result;
	}


    /**
	 * Offsets <code>point</code> by <code>metersOffset</code> meters.
	 *
	 * @param globe
	 *            the <code>Globe</code> from which to offset
	 * @param point
	 *            the <code>Vec4</code> to offset
	 * @param metersOffset
	 *            the magnitude of the offset
	 * @return <code>point</code> offset along its surface normal as if it were
	 *         on <code>globe</code>
	 */
	private static Vec4 applyOffset(Globe globe, Vec4 point, double metersOffset)
	{
		Vec4 normal = globe.computeSurfaceNormalAtPoint(point);
		point = Vec4.fromLine3(point, metersOffset, normal);
		return point;
	}

	private Vec4 getSurfacePoint(RectTile tile, Angle latitude, Angle longitude)
	{
		if (latitude == null || longitude == null)
		{
			String msg = Logging.getMessage("nullValue.LatLonIsNull");
			Logging.logger().severe(msg);
			throw new IllegalArgumentException(msg);
		}

		if (!tile.sector.contains(latitude, longitude))
		{
			// not on this geometry
			return null;
		}

		if (tile.ri == null)
			return null;

		double lat = latitude.getDegrees();
		double lon = longitude.getDegrees();

		double bottom = tile.sector.getMinLatitude().getDegrees();
		double top = tile.sector.getMaxLatitude().getDegrees();
		double left = tile.sector.getMinLongitude().getDegrees();
		double right = tile.sector.getMaxLongitude().getDegrees();

		double leftDecimal = (lon - left) / (right - left);
		double bottomDecimal = (lat - bottom) / (top - bottom);

		int row = (int) (bottomDecimal * (tile.density));
		int column = (int) (leftDecimal * (tile.density));

		double l = createPosition(column, leftDecimal, tile.ri.density);
		double h = createPosition(row, bottomDecimal, tile.ri.density);

		Vec4 result = interpolate(row, column, l, h, tile.ri);
		result = result.add3(tile.ri.referenceCenter);

		return result;
	}

	/**
	 * Computes from a column (or row) number, and a given offset ranged [0,1]
	 * corresponding to the distance along the edge of this sector, where
	 * between this column and the next column the corresponding position will
	 * fall, in the range [0,1].
	 *
	 * @param start
	 *            the number of the column or row to the left, below or on this
	 *            position
	 * @param decimal
	 *            the distance from the left or bottom of the current sector
	 *            that this position falls
	 * @param density
	 *            the number of intervals along the sector's side
	 * @return a decimal ranged [0,1] representing the position between two
	 *         columns or rows, rather than between two edges of the sector
	 */
	private static double createPosition(int start, double decimal, int density)
	{
		double l = ((double) start) / (double) density;
		double r = ((double) (start + 1)) / (double) density;

		return (decimal - l) / (r - l);
	}

	/**
	 * Calculates a <code>Point</code> that sits at <code>xDec</code> offset
	 * from <code>column</code> to <code>column +
	 * 1</code> and at <code>yDec</code> offset from <code>row</code> to
	 * <code>row + 1</code>. Accounts for the diagonals.
	 *
	 * @param row
	 *            represents the row which corresponds to a <code>yDec</code>
	 *            value of 0
	 * @param column
	 *            represents the column which corresponds to an
	 *            <code>xDec</code> value of 0
	 * @param xDec
	 *            constrained to [0,1]
	 * @param yDec
	 *            constrained to [0,1]
	 * @param ri
	 *            the render info holding the vertices, etc.
	 * @return a <code>Point</code> geometrically within or on the boundary of
	 *         the quadrilateral whose bottom left corner is indexed by (
	 *         <code>row</code>, <code>column</code>)
	 */
	private static Vec4 interpolate(int row, int column, double xDec,
			double yDec, RenderInfo ri)
	{
		row++;
		column++;

		int numVerticesPerEdge = ri.density + 3;

		int bottomLeft = row * numVerticesPerEdge + column;

		bottomLeft *= 3;

		int numVertsTimesThree = numVerticesPerEdge * 3;

		Vec4 bL = new Vec4(ri.vertices.get(bottomLeft), ri.vertices
				.get(bottomLeft + 1), ri.vertices.get(bottomLeft + 2));
		Vec4 bR = new Vec4(ri.vertices.get(bottomLeft + 3), ri.vertices
				.get(bottomLeft + 4), ri.vertices.get(bottomLeft + 5));

		bottomLeft += numVertsTimesThree;

		Vec4 tL = new Vec4(ri.vertices.get(bottomLeft), ri.vertices
				.get(bottomLeft + 1), ri.vertices.get(bottomLeft + 2));
		Vec4 tR = new Vec4(ri.vertices.get(bottomLeft + 3), ri.vertices
				.get(bottomLeft + 4), ri.vertices.get(bottomLeft + 5));

		return interpolate(bL, bR, tR, tL, xDec, yDec);
	}

	/**
	 * Calculates the point at (xDec, yDec) in the two triangles defined by {bL,
	 * bR, tL} and {bR, tR, tL}. If thought of as a quadrilateral, the diagonal
	 * runs from tL to bR. Of course, this isn't a quad, it's two triangles.
	 *
	 * @param bL
	 *            the bottom left corner
	 * @param bR
	 *            the bottom right corner
	 * @param tR
	 *            the top right corner
	 * @param tL
	 *            the top left corner
	 * @param xDec
	 *            how far along, [0,1] 0 = left edge, 1 = right edge
	 * @param yDec
	 *            how far along, [0,1] 0 = bottom edge, 1 = top edge
	 * @return the point xDec, yDec in the co-ordinate system defined by bL, bR,
	 *         tR, tL
	 */
	private static Vec4 interpolate(Vec4 bL, Vec4 bR, Vec4 tR, Vec4 tL,
			double xDec, double yDec)
	{
		double pos = xDec + yDec;
		if (pos == 1)
		{
			// on the diagonal - what's more, we don't need to do any "oneMinusT" calculation
			return new Vec4(tL.x * yDec + bR.x * xDec, tL.y * yDec + bR.y
					* xDec, tL.z * yDec + bR.z * xDec);
		}
		else if (pos > 1)
		{
			// in the "top right" half

			// vectors pointing from top right towards the point we want (can be thought of as "negative" vectors)
			Vec4 horizontalVector = (tL.subtract3(tR)).multiply3(1 - xDec);
			Vec4 verticalVector = (bR.subtract3(tR)).multiply3(1 - yDec);

			return tR.add3(horizontalVector).add3(verticalVector);
		}
		else
		{
			// pos < 1 - in the "bottom left" half

			// vectors pointing from the bottom left towards the point we want
			Vec4 horizontalVector = (bR.subtract3(bL)).multiply3(xDec);
			Vec4 verticalVector = (tL.subtract3(bL)).multiply3(yDec);

			return bL.add3(horizontalVector).add3(verticalVector);
		}
	}

    private static double[] baryCentricCoordsRequireInside(Vec4 pnt, Vec4[] V)
    {
        // if pnt is in the interior of the triangle determined by V, return its
        // barycentric coordinates with respect to V. Otherwise return null.

        // b0:
        final double tol = 1.0e-4;
        double[] b0b1b2 = new double[3];
        double triangleHeight  =
            distanceFromLine(V[0],V[1],V[2].subtract3(V[1]));
        double heightFromPoint =
            distanceFromLine(pnt,V[1],V[2].subtract3(V[1]));
        b0b1b2[0] = heightFromPoint/triangleHeight;
        if (Math.abs(b0b1b2[0]) < tol) b0b1b2[0] = 0.0;
        else if (Math.abs(1.0-b0b1b2[0]) < tol) b0b1b2[0] = 1.0;
        if (b0b1b2[0] < 0.0 || b0b1b2[0] > 1.0)
            return null;

        // b1:
        triangleHeight  = distanceFromLine(V[1],V[0],V[2].subtract3(V[0]));
        heightFromPoint = distanceFromLine(pnt,V[0],V[2].subtract3(V[0]));
        b0b1b2[1] = heightFromPoint/triangleHeight;
        if (Math.abs(b0b1b2[1]) < tol) b0b1b2[1] = 0.0;
        else if (Math.abs(1.0-b0b1b2[1]) < tol) b0b1b2[1] = 1.0;
        if (b0b1b2[1] < 0.0 || b0b1b2[1] > 1.0)
            return null;

        // b2:
        b0b1b2[2] = 1.0 - b0b1b2[0] - b0b1b2[1];
        if (Math.abs(b0b1b2[2]) < tol) b0b1b2[2] = 0.0;
        else if (Math.abs(1.0-b0b1b2[2]) < tol) b0b1b2[2] = 1.0;
        if (b0b1b2[2] < 0.0)
            return null;
        return b0b1b2;
    }

    private static double distanceFromLine(Vec4 pnt, Vec4 P, Vec4 u)
    {
        // Return distance from pnt to line(P,u)
        // Pythagorean theorem approach: c^2 = a^2 + b^2. The
        // The square of the distance we seek is b^2:
        Vec4 toPoint = pnt.subtract3(P);
        double cSquared = toPoint.dot3(toPoint);
        double aSquared = u.normalize3().dot3(toPoint);
        aSquared *= aSquared;
        double distSquared = cSquared - aSquared;
        if (distSquared < 0.0)
            // must be a tiny number that really ought to be 0.0
            return 0.0;
        return Math.sqrt(distSquared);
    }

    protected DoubleBuffer makeGeographicTexCoords(SectorGeometry sg,
        SectorGeometry.GeographicTextureCoordinateComputer computer)
    {
        if (sg == null)
        {
            String msg = Logging.getMessage("nullValue.SectorGeometryIsNull");
            Logging.logger().severe(msg);
            throw new IllegalArgumentException(msg);
        }

        if (computer == null)
        {
            String msg = Logging.getMessage("nullValue.TextureCoordinateComputerIsNull");
            Logging.logger().severe(msg);
            throw new IllegalArgumentException(msg);
        }

        RectTile rt = (RectTile) sg;

        int density = rt.density;
        if (density < 1)
            density = 1;

        int coordCount = (density + 3) * (density + 3);
        DoubleBuffer p = BufferUtil.newDoubleBuffer(2 * coordCount);

        double deltaLat = rt.sector.getDeltaLatRadians() / density;
        double deltaLon = rt.sector.getDeltaLonRadians() / density;
        Angle minLat = rt.sector.getMinLatitude();
        Angle maxLat = rt.sector.getMaxLatitude();
        Angle minLon = rt.sector.getMinLongitude();
        Angle maxLon = rt.sector.getMaxLongitude();

        double[] uv; // for return values from computer

        int k = 2 * (density + 3);
        for (int j = 0; j < density; j++)
        {
            Angle lat = Angle.fromRadians(minLat.radians + j * deltaLat);

            // skirt column; duplicate first column
            uv = computer.compute(lat, minLon);
            p.put(k++, uv[0]).put(k++, uv[1]);

            // interior columns
            for (int i = 0; i < density; i++)
            {
                Angle lon = Angle.fromRadians(minLon.radians + i * deltaLon);
                uv = computer.compute(lat, lon);
                p.put(k++, uv[0]).put(k++, uv[1]);
            }

            // last interior column; force u to 1.
            uv = computer.compute(lat, maxLon);
            p.put(k++, uv[0]).put(k++, uv[1]);

            // skirt column; duplicate previous column
            p.put(k++, uv[0]).put(k++, uv[1]);
        }

        // Last interior row
        uv = computer.compute(maxLat, minLon); // skirt column
        p.put(k++, uv[0]).put(k++, uv[1]);

        for (int i = 0; i < density; i++)
        {
            Angle lon = Angle.fromRadians(minLon.radians + i * deltaLon); // u
            uv = computer.compute(maxLat, lon);
            p.put(k++, uv[0]).put(k++, uv[1]);
        }

        uv = computer.compute(maxLat, maxLon); // last interior column
        p.put(k++, uv[0]).put(k++, uv[1]);
        p.put(k++, uv[0]).put(k++, uv[1]); // skirt column

        // last skirt row
        int kk = k - 2 * (density + 3);
        for (int i = 0; i < density + 3; i++)
        {
            p.put(k++, p.get(kk++));
            p.put(k++, p.get(kk++));
        }

        // first skirt row
        k = 0;
        kk = 2 * (density + 3);
        for (int i = 0; i < density + 3; i++)
        {
            p.put(k++, p.get(kk++));
            p.put(k++, p.get(kk++));
        }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性三三影院| 一区二区在线看| 亚洲欧洲成人精品av97| 五月婷婷激情综合| 高清不卡在线观看| 欧美一区二区私人影院日本| 国产精品少妇自拍| 国内偷窥港台综合视频在线播放| 欧美日韩一区成人| 中文字幕中文乱码欧美一区二区| 九色综合狠狠综合久久| 欧美无人高清视频在线观看| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产激情一区二区三区四区| 在线电影一区二区三区| 伊人开心综合网| fc2成人免费人成在线观看播放 | 欧美日韩国产高清一区| 国产精品国产三级国产aⅴ原创| 老司机一区二区| 6080午夜不卡| 午夜精品一区二区三区免费视频 | 亚洲最大色网站| 91在线高清观看| 国产精品国产三级国产a | 久久国产精品区| 日韩欧美aaaaaa| 欧美aaa在线| 日韩一区二区三区电影 | 久久美女高清视频| 韩国成人精品a∨在线观看| 91麻豆精品国产自产在线| 亚洲综合一区在线| 色综合色综合色综合| 亚洲日本欧美天堂| 欧美制服丝袜第一页| 亚洲国产一区在线观看| 欧美日韩不卡一区| 美腿丝袜在线亚洲一区| 日韩精品一区二区三区在线| 另类小说欧美激情| 久久精品视频网| 成人a免费在线看| 亚洲少妇最新在线视频| 欧美无砖砖区免费| 秋霞电影一区二区| 久久久久久一二三区| 99久久精品国产毛片| 亚洲国产一区二区三区青草影视| 欧美日韩国产一级| 久久99国产精品免费网站| 久久免费偷拍视频| 一本色道综合亚洲| 香蕉久久夜色精品国产使用方法| 日韩视频在线一区二区| 粉嫩av一区二区三区| 亚洲一区影音先锋| 日韩亚洲欧美高清| 成人亚洲一区二区一| 亚洲综合免费观看高清完整版在线 | 久久精品在线免费观看| 91蜜桃网址入口| 美美哒免费高清在线观看视频一区二区 | 日韩美女在线视频| jiyouzz国产精品久久| 日韩在线一二三区| 国产欧美精品区一区二区三区| 91久久精品日日躁夜夜躁欧美| 蜜臀av性久久久久av蜜臀妖精 | 欧美成人vps| 成人av资源在线观看| 亚洲第一激情av| 欧美国产精品一区二区三区| 欧美调教femdomvk| 国产成人精品免费在线| 五月天激情综合| 国产精品久久久久久久午夜片| 欧美高清hd18日本| 99re在线精品| 国产精品一级黄| 日韩高清中文字幕一区| 亚洲欧美另类在线| 国产日韩欧美制服另类| 日韩一级精品视频在线观看| 91视频在线观看| 成人午夜电影小说| 精品午夜久久福利影院| 亚洲国产精品尤物yw在线观看| 久久精品免视看| 精品国产伦理网| 91精品国产91久久综合桃花| 色综合久久中文字幕| 国产69精品久久99不卡| 久久精品国产亚洲一区二区三区| 一区二区成人在线| 综合久久国产九一剧情麻豆| 久久久国产精华| 欧美mv日韩mv亚洲| 日韩欧美一级二级三级久久久| 91精彩视频在线| 日本电影欧美片| 91在线云播放| 一本一道久久a久久精品| 99视频在线精品| 成人黄动漫网站免费app| 国产精品一级片在线观看| 精品一区二区在线看| 久久狠狠亚洲综合| 伦理电影国产精品| 国内精品国产成人| 国内精品写真在线观看| 国产在线视频一区二区| 国产一区二区免费看| 国产主播一区二区三区| 国产精品一区二区视频| 国产福利精品导航| 成人精品小蝌蚪| 色偷偷88欧美精品久久久| 日本久久一区二区三区| 欧美亚洲动漫精品| 欧美色图12p| 91精品国产综合久久久蜜臀图片| 91麻豆精品国产91| 精品国产一区二区三区四区四| 精品国产欧美一区二区| 久久精品夜色噜噜亚洲aⅴ| 国产日韩v精品一区二区| 国产精品人成在线观看免费| 亚洲乱码中文字幕| 五月婷婷久久丁香| 精品一二线国产| 国产成人激情av| 色婷婷激情久久| 欧美日韩精品二区第二页| 欧美一区二区私人影院日本| 精品对白一区国产伦| 欧美激情在线一区二区三区| 日韩理论片中文av| 婷婷成人综合网| 国产在线不卡一区| eeuss鲁片一区二区三区在线看| 欧美在线不卡视频| 欧美一级午夜免费电影| 欧美激情一区二区三区| 亚洲一线二线三线视频| 韩日av一区二区| av高清久久久| 69堂亚洲精品首页| 久久精品一区二区三区四区| 亚洲免费观看高清完整| 蜜臀精品久久久久久蜜臀 | 在线观看日韩精品| 精品国产百合女同互慰| 中文字幕综合网| 老司机精品视频导航| 不卡电影一区二区三区| 日韩一区二区免费在线电影| 国产精品美女一区二区三区 | 亚洲综合丝袜美腿| 国产麻豆精品在线| 欧美日韩高清不卡| 国产欧美日韩在线| 石原莉奈一区二区三区在线观看| 国产91精品久久久久久久网曝门| 欧美亚洲免费在线一区| 亚洲国产精品ⅴa在线观看| 日精品一区二区| 色婷婷av一区二区三区软件| 精品国产免费人成电影在线观看四季| 日韩美女久久久| 国产精品一品视频| 欧美一级艳片视频免费观看| 亚洲人成网站在线| 国产精一区二区三区| 欧美高清激情brazzers| 一区二区高清视频在线观看| 国产91丝袜在线播放| 精品少妇一区二区三区日产乱码 | 国产91清纯白嫩初高中在线观看| 欧美日本在线一区| 亚洲精品欧美激情| 成人免费av资源| 久久婷婷一区二区三区| 喷水一区二区三区| 欧美无乱码久久久免费午夜一区| 日韩码欧中文字| 99久久夜色精品国产网站| 久久色成人在线| 精品综合久久久久久8888| 91精品国产免费久久综合| 日韩成人dvd| 欧美日韩高清一区二区| 亚洲国产日韩a在线播放性色| 91免费视频大全| 悠悠色在线精品| 在线视频欧美精品| 亚洲视频免费在线观看| 99国产精品久久久久久久久久| 国产欧美一区二区精品忘忧草| 国产精品一区三区|