summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/glrender.h
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2010-06-14 23:14:16 +0000
committerKarl Berry <karl@freefriends.org>2010-06-14 23:14:16 +0000
commitc2175edc7aa44ca0b526f008d473d6f8a8ac4933 (patch)
treed6c491676b413ad1922481f8c3fc7b64c3afc0a5 /Build/source/utils/asymptote/glrender.h
parent5d08e9ff4fe5fc836d237ea08e82c82b27d558a2 (diff)
asy 1.98
git-svn-id: svn://tug.org/texlive/trunk@18982 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/utils/asymptote/glrender.h')
-rw-r--r--Build/source/utils/asymptote/glrender.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/Build/source/utils/asymptote/glrender.h b/Build/source/utils/asymptote/glrender.h
index 7d37e3dfdb2..22b52fe95ce 100644
--- a/Build/source/utils/asymptote/glrender.h
+++ b/Build/source/utils/asymptote/glrender.h
@@ -89,6 +89,36 @@ void glrender(const string& prefix, const camp::picture* pic,
bool view, int oldpid=0);
}
+namespace camp {
+
+struct billboard
+{
+ triple u,v,w;
+
+ void init() {
+ gl::projection P=gl::camera(false);
+ w=unit(P.camera-P.target);
+ v=unit(perp(P.up,w));
+ u=cross(v,w);
+ }
+
+ void store(GLfloat* C, const triple& V, const triple &center) {
+ double cx=center.getx();
+ double cy=center.gety();
+ double cz=center.getz();
+ double x=V.getx()-cx;
+ double y=V.gety()-cy;
+ double z=V.getz()-cz;
+ C[0]=cx+u.getx()*x+v.getx()*y+w.getx()*z;
+ C[1]=cy+u.gety()*x+v.gety()*y+w.gety()*z;
+ C[2]=cz+u.getz()*x+v.getz()*y+w.getz()*z;
+ }
+};
+
+extern billboard BB;
+
+}
+
#else
typedef void GLUnurbs;
typedef float GLfloat;