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); } }
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); } }
void MainCamera::update() { perspTrans(); lookToTarget(); }