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

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

?? normalmap.java

?? 基于java的3d開發庫。對坐java3d的朋友有很大的幫助。
?? JAVA
字號:
//===========================================================================//=-------------------------------------------------------------------------=//= Module history:                                                         =//= - December 20 2006 - Oscar Chavarro: Original base version              =//=-------------------------------------------------------------------------=//= References:                                                             =//= [BLIN1978b] Blinn, James F. "Simulation of wrinkled surfaces", SIGGRAPH =//=          proceedings, 1978.                                             =//===========================================================================package vsdk.toolkit.media;import java.util.ArrayList;import vsdk.toolkit.common.VSDK;import vsdk.toolkit.common.Vector3D;import vsdk.toolkit.media.IndexedColorImage;import vsdk.toolkit.media.RGBImage;import vsdk.toolkit.media.RGBAImage;public class NormalMap extends MediaEntity{    /// Check the general attribute description in superclass Entity.    public static final long serialVersionUID = 20061220L;    private int xSize;    private int ySize;    private ArrayList<Vector3D> data;    public NormalMap()    {        xSize = 0;        ySize = 0;        data = null;    }    public boolean init(int width, int height)    {        try {            data = new ArrayList<Vector3D>();            for ( int i = 0; i < width*height; i++ ) {                data.add(new Vector3D());            }        }        catch ( Exception e ) {            data = null;            return false;        }        xSize = width;        ySize = height;        return true;    }    public int getXSize()    {        return xSize;    }    public int getYSize()    {        return ySize;    }    public void putNormal(int i, int j, Vector3D n)    {        if ( i < 0 || j < 0 || i >= xSize || j >= ySize ) return;        int index = j * xSize + i;        Vector3D elem = data.get(index);        elem.clone(n);    }    public Vector3D getNormal(int u, int v)    {        if ( u < 0 || v < 0 || u >= xSize || v >= ySize ) return null;        int index = v * xSize + u;        return data.get(index);    }    /**    Provide a bilinear interpolation scheme as proposed in [BLIN1978b].    */    public Vector3D getNormal(double x, double y)    {        //-----------------------------------------------------------------        double u = x - Math.floor(x);        double v = y - Math.floor(y);        double U = u * ((double)(getXSize()-2));        double V = v * ((double)(getYSize()-2));        int i = (int)Math.floor(U);        int j = (int)Math.floor(V);        double du = U - (double)i;        double dv = V - (double)j;        //-----------------------------------------------------------------        Vector3D F00, F10, F01, F11, FU0, FU1, FVAL;        F00 = getNormal(i, j);        F01 = getNormal(i, j+1);        F10 = getNormal(i+1, j);        F11 = getNormal(i+1, j+1);        FU0 = F00.add(F10.substract(F00).multiply(du));        FU1 = F01.add(F11.substract(F01).multiply(du));        FVAL = FU0.add(FU1.substract(FU0).multiply(dv));        return FVAL;    }    /**    @warning This method converts double values to signed bytes. However,    it is interesting to note that java language aparently makes a weird    conversion from double to int when casting directly (sometimes    produces negative integers from positive floats). Note that this    method checkes this explicity.  Is there a better/clearer way to    assure the correctness of this conversion?    */    public RGBImage exportToRgbImage()    {        RGBImage output = new RGBImage();        if ( !output.init(xSize, ySize) ) {            return null;        }        int x, y;        Vector3D n;        byte r, g, b;        int rr, gg, bb;        for ( y = 0; y < ySize; y++ ) {            for ( x = 0; x < xSize; x++ ) {                n = getNormal(x, y);                n.normalize();                n.x = (n.x+1)/2; // This ensures Nvidia compatibility!                n.y = (n.y+1)/2;                n.z = (n.z+1)/2;                rr = (int)(n.x * 255.0);                gg = (int)(n.y * 255.0);                bb = (int)(n.z * 255.0);                if ( rr < 0 ) rr += 256;                if ( gg < 0 ) gg += 256;                if ( bb < 0 ) bb += 256;                r = VSDK.unsigned8BitInteger2signedByte(rr);                g = VSDK.unsigned8BitInteger2signedByte(gg);                b = VSDK.unsigned8BitInteger2signedByte(bb);                output.putPixel(x, y, r, g, b);            }        }        return output;    }    /**    @warning This method converts double values to signed bytes. However,    it is interesting to note that java language aparently makes a weird    conversion from double to int when casting directly (sometimes    produces negative integers from positive floats). Note that this    method checkes this explicity.  Is there a better/clearer way to    assure the correctness of this conversion?    */    public RGBAImage exportToRgbaImage()    {        RGBAImage output = new RGBAImage();        if ( !output.init(xSize, ySize) ) {            return null;        }        int x, y;        Vector3D n;        byte r, g, b, a;        int rr, gg, bb;        a = VSDK.unsigned8BitInteger2signedByte(255);        for ( y = 0; y < ySize; y++ ) {            for ( x = 0; x < xSize; x++ ) {                n = getNormal(x, y);                n.normalize();                n.x = (n.x+1)/2; // This ensures Nvidia compatibility!                n.y = (n.y+1)/2;                n.z = (n.z+1)/2;                rr = (int)(n.x * 255.0);                gg = (int)(n.y * 255.0);                bb = (int)(n.z * 255.0);                if ( rr < 0 ) rr += 256;                if ( gg < 0 ) gg += 256;                if ( bb < 0 ) bb += 256;                r = VSDK.unsigned8BitInteger2signedByte(rr);                g = VSDK.unsigned8BitInteger2signedByte(gg);                b = VSDK.unsigned8BitInteger2signedByte(bb);                output.putPixel(x, y, r, g, b, a);            }        }        return output;    }    /**    Similar to exportToRgbImage, but each pixel is equivalent to a magnitude    of displacement from <0, 0, 1> normal    */    public RGBImage exportToRgbImageGradient()    {        RGBImage output = new RGBImage();        if ( !output.init(xSize, ySize) ) {            return null;        }        int x, y;        Vector3D n;        int val;        byte col;        Vector3D k = new Vector3D(0, 0, 1);        for ( y = 0; y < ySize; y++ ) {            for ( x = 0; x < xSize; x++ ) {                n = getNormal(x, y);                n.normalize();                val = (int)((1.0-k.dotProduct(n)) * 255.0);                col = VSDK.unsigned8BitInteger2signedByte(val);                output.putPixel(x, y, col, col, col);            }        }        return output;    }    /**    Similar to exportToRgbaImage, but each pixel is equivalent to a magnitude    of displacement from <0, 0, 1> normal    */    public RGBAImage exportToRgbaImageGradient()    {        RGBAImage output = new RGBAImage();        if ( !output.init(xSize, ySize) ) {            return null;        }        int x, y;        Vector3D n;        int val;        byte col;        Vector3D k = new Vector3D(0, 0, 1);        for ( y = 0; y < ySize; y++ ) {            for ( x = 0; x < xSize; x++ ) {                n = getNormal(x, y);                n.normalize();                val = (int)((1.0-k.dotProduct(n)) * 255.0);                col = VSDK.unsigned8BitInteger2signedByte(val);                output.putPixel(x, y, col, col, col,                       VSDK.unsigned8BitInteger2signedByte(128));/*                if ( val > 250 ) {                    output.putPixel(x, y, (byte)0, (byte)0, (byte)0, (byte)0);                }                else {                    output.putPixel(x, y, (byte)0, (byte)0, (byte)0, (byte)255);                }*/            }        }        return output;    }    public void importBumpMap(IndexedColorImage inBumpmap, Vector3D inOutScale)    {        //-------------------------------------------------------------------        int xSize = inBumpmap.getXSize();        int ySize = inBumpmap.getYSize();        //- 1. Si el vector de escala dado es erroneo, crear uno base -------        if( inOutScale.x < VSDK.EPSILON || inOutScale.y < VSDK.EPSILON ||            inOutScale.z < VSDK.EPSILON ) {            double val = ((double)xSize) / ((double)ySize);            if( val < 1.0 ) {                inOutScale.x = 1.0;                inOutScale.y = 1.0 / val;            }            else {                inOutScale.x = val;                inOutScale.y = 1.0;            }            inOutScale.z = 1.0;        }        init(xSize, ySize);        //- 2. Calculo de las derivadas parciales al interior de la imagen --        Vector3D df_du = new Vector3D();        Vector3D df_dv = new Vector3D();        Vector3D normal;        int a, b, c, d;        int u, v;        for( u = 1; u < xSize - 1; u++ ) {            for( v = 1; v < ySize - 1; v++ ) {                a = inBumpmap.getPixel(u+1, v);                b = inBumpmap.getPixel(u-1, v);                c = inBumpmap.getPixel(u, v+1);                d = inBumpmap.getPixel(u, v-1);                df_du.x = 2;                df_du.y = 0;                df_du.z = ( (double)(a - b) ) / 255.0;                df_dv.x = 0;                df_dv.y = 2;                df_dv.z = ( (double)(d - c) ) / 255.0;                normal = df_du.crossProduct(df_dv);                // Modular el vector `normal` respecto al vector `inOutScale`                normal.x *= inOutScale.x;                normal.y *= inOutScale.y;                normal.z *= inOutScale.z;                normal.normalize();                putNormal(u, v, normal);            }        }        //- 3. Copia de las derivadas para los bordes de la imagen ----------        // @todo: check why are two pixels down and left needed!        for( u = 0; u < xSize; u++ ) {            putNormal(u, 0, getNormal(u, 1));            putNormal(u, ySize-2, getNormal(u, ySize-3));            putNormal(u, ySize-1, getNormal(u, ySize-2));        }        for( v = 0; v < ySize; v++ ) {            putNormal(1, v, getNormal(2, v));            putNormal(0, v, getNormal(1, v));            putNormal(xSize-1, v, getNormal(xSize-2, v));        }    }}//===========================================================================//= EOF                                                                     =//===========================================================================

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费成人在线网站| 久久亚洲免费视频| 亚洲一区欧美一区| 日本精品视频一区二区| 亚洲激情校园春色| 精品污污网站免费看| 午夜国产精品一区| 欧美一区二区久久久| 久久99国产精品久久99果冻传媒 | 欧美亚洲国产一区二区三区va| 亚洲日本免费电影| 欧洲亚洲精品在线| 日本中文字幕一区二区视频| 精品久久久久久久久久久久久久久 | 成人黄色大片在线观看| 国产精品福利影院| 色婷婷久久一区二区三区麻豆| 中文字幕在线视频一区| 欧美专区亚洲专区| 久久66热偷产精品| 国产日产欧美一区二区三区| 色一区在线观看| 日本在线观看不卡视频| 国产三级精品视频| 91国产免费看| 韩国成人精品a∨在线观看| 中文字幕乱码亚洲精品一区| 欧美色视频一区| 国产精品一区二区久久精品爱涩| 国产精品国产三级国产aⅴ原创 | 99久久综合色| 亚洲一区二区三区激情| 精品国产乱码久久久久久1区2区| 99久久伊人精品| 日韩电影在线一区二区| 中文字幕不卡在线观看| 欧美精品九九99久久| 国产精品99久久久久久似苏梦涵| 一区二区在线看| 久久精品一区二区三区av| 欧美视频在线一区| 国产成人丝袜美腿| 日本美女视频一区二区| 亚洲精选视频免费看| wwwwww.欧美系列| 欧美性videosxxxxx| 国产激情视频一区二区三区欧美| 偷拍与自拍一区| 一区二区中文字幕在线| 久久亚洲精品小早川怜子| 欧美剧情片在线观看| 99re视频精品| 粉嫩aⅴ一区二区三区四区五区| 天天综合色天天| 亚洲欧美日韩国产综合| 久久精品人人爽人人爽| 日韩欧美国产一区二区在线播放| 欧美影视一区二区三区| www.色综合.com| 国产一区二区免费视频| 热久久免费视频| 亚洲成人av电影在线| 最新国产の精品合集bt伙计| 国产日韩精品一区二区浪潮av | 综合久久久久综合| 国产精品入口麻豆九色| 久久精品视频免费观看| 精品国产一区二区三区忘忧草| 欧美性欧美巨大黑白大战| 大尺度一区二区| 国产成a人亚洲精| 国产一区在线不卡| 国产一区二区主播在线| 久久成人免费网站| 麻豆免费精品视频| 日本不卡不码高清免费观看| 性欧美疯狂xxxxbbbb| 亚洲一区二区成人在线观看| 亚洲精品乱码久久久久久久久| 自拍偷拍亚洲激情| 1000精品久久久久久久久| 国产精品毛片大码女人| 国产精品美女一区二区三区| 中文字幕免费观看一区| 中文字幕av资源一区| 国产精品视频麻豆| 亚洲私人影院在线观看| 一区二区三区在线视频免费 | 成人免费av资源| 99视频精品在线| 在线观看亚洲a| 欧美日韩不卡一区| 日韩三级中文字幕| 久久久久久久久99精品| 久久久久国产成人精品亚洲午夜| 中文字幕欧美区| 一区二区视频免费在线观看| 夜夜精品浪潮av一区二区三区| 伊人色综合久久天天人手人婷| 亚洲va韩国va欧美va| 日本色综合中文字幕| 国产一区二区在线观看免费| 成人午夜视频在线| 91国偷自产一区二区三区观看| 欧美日韩一区二区三区不卡| 日韩限制级电影在线观看| 成人av电影在线网| 国产精品夜夜嗨| 精品无人码麻豆乱码1区2区 | 亚洲国产另类精品专区| 午夜亚洲福利老司机| 久久99精品国产.久久久久久| 国产成人欧美日韩在线电影| aaa国产一区| 91精品久久久久久久91蜜桃| 久久久综合网站| 亚洲日本va午夜在线影院| 亚洲电影一级黄| 国产精品一区免费视频| 日本韩国欧美三级| 精品sm捆绑视频| 中文字幕日韩一区| 美女一区二区在线观看| 97精品电影院| 另类专区欧美蜜桃臀第一页| 日韩一卡二卡三卡国产欧美| 国产亚洲精品福利| 亚洲综合激情网| 国产一区二区福利视频| 欧美亚洲另类激情小说| 久久精品亚洲麻豆av一区二区| 一个色在线综合| 国产精品中文字幕欧美| 欧美日韩一区二区三区在线看| 国产天堂亚洲国产碰碰| 亚洲国产中文字幕在线视频综合| 国产在线精品一区二区夜色| 欧美亚洲一区二区在线| 国产精品网站在线| 麻豆精品新av中文字幕| 在线国产电影不卡| 国产精品久久三| 精品一区二区免费| 911精品国产一区二区在线| 国产精品卡一卡二卡三| 精品一区二区三区在线观看国产| 欧美亚一区二区| 亚洲色欲色欲www| 国产99精品在线观看| www激情久久| 久久97超碰国产精品超碰| 欧美精品一级二级三级| 一片黄亚洲嫩模| 99视频一区二区三区| 国产精品青草久久| 国产一区二区三区不卡在线观看| 欧美一区二区日韩| 香蕉乱码成人久久天堂爱免费| 另类专区欧美蜜桃臀第一页| 91美女片黄在线观看| 中文字幕成人av| 国产成人精品一区二区三区四区| 欧美电视剧免费观看| 免费高清成人在线| 欧美一区二区免费视频| 免费高清在线一区| 日韩免费在线观看| 免费观看一级欧美片| 91精品啪在线观看国产60岁| 日韩激情一二三区| 欧美理论电影在线| 石原莉奈一区二区三区在线观看| 欧美系列在线观看| 香蕉影视欧美成人| 欧美一级黄色片| 久久国产乱子精品免费女| 精品久久久三级丝袜| 国产成人亚洲综合a∨婷婷 | 成人欧美一区二区三区白人 | 1024成人网| 欧美做爰猛烈大尺度电影无法无天| 亚洲视频1区2区| 在线一区二区三区四区五区 | 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 成人黄色大片在线观看| 亚洲免费av观看| 欧美视频在线播放| 日本中文在线一区| 国产午夜一区二区三区| 成人不卡免费av| 亚洲综合网站在线观看| 精品视频一区 二区 三区| 日本不卡在线视频| 国产喂奶挤奶一区二区三区| 91女人视频在线观看| 五月综合激情日本mⅴ| 精品欧美黑人一区二区三区| 成人午夜视频福利| 午夜视频在线观看一区二区| 欧美videos大乳护士334|