Пример #1
0
void displayPerspFaceAdd(PixelImage* image, ObjScene* scene) {
    if (image == 0 || scene == 0 || scene->object == 0) return;
    
    image->clear(scene->getC1());
    
    Matrix4 tr = scene->modelTr;
    tr *= viewTrans(scene->camera);
    Matrix4 persptr = perspTrans(scene->camera, image->getWidth(), image->getHeight());
    
    Vector3 v0, v1, v2;
    double ne = -scene->camera.near;
    for (int f=0 ; f<scene->object->getFaceNum() ; ++f) {
        v0 = scene->object->getTriangle0(f);
        v1 = scene->object->getTriangle1(f);
        v2 = scene->object->getTriangle2(f);
        
        v0 *= tr;      v1 *= tr;      v2 *= tr;
        if ((v0.z <= ne) && (v1.z <= ne) && (v2.z <= ne)) {
            v0 *= persptr; v1 *= persptr; v2 *= persptr;
            scanTriangle(image, v0, v1, v2, scene->getC2());
            
            /*if (scene->renderContour()) {
                DoubleColor cx = {1, 0, 0, 1};
                Vector2 aaa(v0.x+xm/2, ym/2-v0.y);
                Vector2 bbb(v1.x+xm/2, ym/2-v1.y);
                Vector2 ccc(v2.x+xm/2, ym/2-v2.y);
                
                d2d::Line lx; lx.beg = bbb; lx.end = ccc; lx.col = cx;
                d2d::Line ly; ly.beg = aaa; ly.end = bbb; ly.col = cx;
                d2d::Line lz; lz.beg = aaa; lz.end = ccc; lz.col = cx;
                
                d2d::lineDotsAdapt(image, &lx, 1.0);
                d2d::lineDotsAdapt(image, &ly, 1.0);
                d2d::lineDotsAdapt(image, &lz, 1.0);
            }
            */
        }
    }
    
    if (scene->renderGizmo()) {
        displayGizmo(image, tr);
    }
}
Пример #2
0
void displayPerspHidden(PixelImage* image, ObjScene* scene) {
    if (image == 0 || scene == 0 || scene->object == 0) return;
    
    image->clear(scene->getC1());
    
    int xm = image->getWidth();
    int ym = image->getHeight();
    
    double* zbuffer = new double[xm*ym];
    for (int i=0 ; i<xm*ym ; ++i) zbuffer[i] = -DBL_MAX;
    
    
    Matrix4 tr = scene->modelTr;
    tr *= viewTrans(scene->camera);
    Matrix4 persptr = perspTrans(scene->camera, image->getWidth(), image->getHeight());
    
    Vector3 v0, v1, v2;
    double ne = -scene->camera.near;
    for (int f=0 ; f<scene->object->getFaceNum() ; ++f) {
        v0 = scene->object->getTriangle0(f);
        v1 = scene->object->getTriangle1(f);
        v2 = scene->object->getTriangle2(f);
        
        v0 *= tr;      v1 *= tr;      v2 *= tr;
        if ((v0.z <= ne) && (v1.z <= ne) && (v2.z <= ne)) {
            v0 *= persptr; v1 *= persptr; v2 *= persptr;
            hiddenZTriangle(image, zbuffer, v0, v1, v2, scene->getC1(), scene->getC2());
        }
    }
    
    delete[] zbuffer;
    
    if (scene->renderGizmo()) {
        displayGizmo(image, tr);
    }
}
Пример #3
0
void MainCamera::update() {
  perspTrans();
  lookToTarget();
}