Esempio n. 1
0
    public void MainFunc()
    {
        _elyot3D.SetBackgroundColor(Color.black);

//        _elyot3D.line(13, 20, 80, 40,Color.white);
//        _elyot3D.line(20, 13, 40, 80,Color.red);
//        _elyot3D.line(80, 40, 13, 20,Color.red);

        List <Vector3> verts = _loadObj.Verts;
        List <int>     trans = _loadObj.Triangles;

        Vector3 lightDir = Vector3.forward;

        for (int i = 0; i < trans.Count; i += 3)
        {
            Vector3 v0 = verts[trans[i]];
            Vector3 v1 = verts[trans[i + 1]];
            Vector3 v2 = verts[trans[i + 2]];

            Matrix4x4 ModelView  = _elyot3D.Lookat(eye, center, new Vector3(0, 1, 0));
            Matrix4x4 Projection = Matrix4x4.identity;
            Matrix4x4 ViewPort   = _elyot3D.Viewport(_elyot3D.width / 8, _elyot3D.height / 8, _elyot3D.width * 3 / 4, _elyot3D.height * 3 / 4);
            Projection.m32 = -1.0f / ((eye - center)).magnitude;


//            Vector3 scenecoord1 = new Vector3((int)((v0.x +1.0f)*_elyot3D.width/2.0f),(int)((v0.y +1.0f)*_elyot3D.height/2.0f),v0.z);
//            Vector3 scenecoord2 = new Vector3((int)((v1.x +1.0f)*_elyot3D.width/2.0f),(int)((v1.y +1.0f)*_elyot3D.height/2.0f),v1.z);
//            Vector3 scenecoord3 = new Vector3((int)((v2.x +1.0f)*_elyot3D.width/2.0f),(int)((v2.y +1.0f)*_elyot3D.height/2.0f),v2.z);

            Vector3 scenecoord1 = ViewPort * Projection * ModelView * v0;
            Vector3 scenecoord2 = ViewPort * Projection * ModelView * v1;
            Vector3 scenecoord3 = ViewPort * Projection * ModelView * v2;
//            Vector3 scenecoord2 = new Vector3((int)((v1.x +1.0f)*_elyot3D.width/2.0f),(int)((v1.y +1.0f)*_elyot3D.height/2.0f),v1.z);
//            Vector3 scenecoord3 = new Vector3((int)((v2.x +1.0f)*_elyot3D.width/2.0f),(int)((v2.y +1.0f)*_elyot3D.height/2.0f),v2.z);

            Vector3 n = Vector3.Cross(v2 - v0, v1 - v0);
            n = n.normalized;

            float intensity = Vector3.Dot(n, lightDir);
            intensity = Mathf.Abs(intensity);

            _elyot3D.triangle2(new Vector3[] { scenecoord1, scenecoord2, scenecoord3 },
                               new Color(intensity, intensity, intensity, 1));

//            _elyot3D.triangle(scenecoord1, scenecoord2, scenecoord3,new Color(intensity,intensity,intensity,1));

//            _elyot3D.line((int)scenecoord1.x,(int)scenecoord1.y,(int)scenecoord2.x,(int)scenecoord2.y,Color.white);
//            _elyot3D.line((int)scenecoord2.x,(int)scenecoord2.y,(int)scenecoord3.x,(int)scenecoord3.y,Color.white);
//            _elyot3D.line((int)scenecoord3.x,(int)scenecoord3.y,(int)scenecoord1.x,(int)scenecoord1.y,Color.white);
        }

//        Vector2[] t0 = {new Vector2(10, 70),   new Vector2(50, 160),  new Vector2(70, 80)};
//        Vector2[] t1 = {new Vector2(180, 50),  new Vector2(150, 1),   new Vector2(70, 180)};
//        Vector2[] t2 = {new Vector2(180, 150), new Vector2(140, 300), new Vector2(200, 180)};
//        _elyot3D.triangle(t0[0], t0[1], t0[2],Color.red);
//        _elyot3D.triangle(t1[0], t1[1], t1[2],Color.white);
//        _elyot3D.triangle(t2[0], t2[1], t2[2],Color.green);

        _elyot3D.Apply();
    }