25 double projection[16];
26 glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
27 glGetDoublev(GL_PROJECTION_MATRIX, projection);
28 glGetIntegerv(GL_VIEWPORT, viewport);
31 glColor4f(0.0f, 0.0f, 0.0f, 0.001f);
34 glVertex3f(-100.0f, -100.0f, 0.0f);
36 gluProject(-100.0, -100.0, 0.00, modelview, projection, viewport,
37 &(
double){0}, &(double){0}, &wwinZ);
38 const double winX = x;
39 const double winY = (double)viewport[3] - y;
40 gluUnProject(winX, winY, wwinZ, modelview, projection, viewport, &posX,
54 double projection[16];
56 glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
57 glGetDoublev(GL_PROJECTION_MATRIX, projection);
58 glGetIntegerv(GL_VIEWPORT, viewport);
61 glColor4f(0.0f, 0.0f, 0.0f, 0.001f);
64 glVertex3f(10.0f, 10.0f, 1.0f);
66 gluProject(10.0, 10.0, 1.0, modelview, projection, viewport, &(
double){0},
67 &(double){0}, &wwinZ);
69 const double y = 50.0;
71 double winY = viewport[3] - y;
72 gluUnProject(winX, winY, wwinZ, modelview, projection, viewport, &posX,
73 &(
double){0}, &(double){0});
76 winY = viewport[3] - y;
77 gluUnProject(winX, winY, wwinZ, modelview, projection, viewport,
78 &posXX, &(
double){0}, &(double){0});
91void to3D(
int x,
int y,
float *
X,
float *
Y,
float *Z) {
96 double projection[16];
98 double posX, posY, posZ;
101 glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
102 glGetDoublev(GL_PROJECTION_MATRIX, projection);
103 glGetIntegerv(GL_VIEWPORT, viewport);
105 const double winX = x;
106 const double winY = (double)viewport[3] - y;
109 GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
110 float comp = -9999999;
112 if (winZ[idx] > comp && winZ[idx] < 1)
116 gluUnProject(winX, winY, comp, modelview, projection, viewport, &posX,
133 return p.
x * q.
x + p.
y * q.
y + p.
z * q.
z;
138 return sqrt(
dot(p, p));
145 r.
x = p.
x + m * (q.
x - p.
x);
146 r.
y = p.
y + m * (q.
y - p.
y);
147 r.
z = p.
z + m * (q.
z - p.
z);
169 U = (float) (
dot(pa, ba) /
dot(ba, ba));
194 borderWidth =
parent->borderWidth;
198 ref->width =
parent->width - 2.0f *borderWidth;
200 ref->height =
parent->height - 2.0f *borderWidth;;
204 ref->pos.x =
parent->refPos.x +
ref->pos.x + borderWidth;
205 ref->pos.y =
parent->refPos.y +
ref->pos.y + borderWidth;
208 switch (child->
align) {
210 ref->pos.x =
parent->refPos.x + borderWidth;
211 ref->pos.y =
parent->refPos.y + borderWidth;
212 ref->height =
parent->height - 2.0f * borderWidth;
217 ref->pos.y =
parent->refPos.y + borderWidth;
218 ref->height =
parent->height - 2.0f * borderWidth;
226 ref->width =
parent->width - 2.0f * borderWidth;
230 ref->pos.y =
parent->refPos.y + borderWidth;
231 ref->pos.x =
parent->refPos.x + borderWidth;
232 ref->width =
parent->width - 2.0f * borderWidth;
235 ref->pos.y =
parent->refPos.y + borderWidth;
236 ref->pos.x =
parent->refPos.x + borderWidth;;
237 ref->width =
parent->width - 2.0f * borderWidth;;
238 ref->height =
parent->height - 2.0f * borderWidth;
273 glVertex3f(p0.
x, p0.
y, p0.
z);
274 glVertex3f(p1.
x, p1.
y, p1.
z);
275 glVertex3f(p2.
x, p2.
y, p2.
z);
276 glVertex3f(p3.
x, p3.
y, p3.
z);
293 const float d = 0.01f;
294 float color_fac = 1.0f / 1.3f;
314 glColor4d(c.
R * color_fac *
dim, c.
G * color_fac *
dim,
315 c.
B * color_fac *
dim, c.
A);
319 glColor4d(c.
R / color_fac *
dim, c.
G / color_fac *
dim,
320 c.
B / color_fac *
dim, c.
A);
327 double rv = (
A.x -
B.x) * (
A.x -
B.x) + (
A.y -
B.y) * (
A.y -
B.y) + (
A.z -
B.z) * (
A.z -
B.z);
336 if (
X >= RX && X <= RX + RW && Y >= RY &&
Y <= RY + RH)
#define X(prefix, name, str, type, subtype,...)
void glCompDrawRectPrism(glCompPoint p, float w, float h, float b, glCompColor c, bool bumped)
static double len(glCompPoint p)
double GetOGLDistance(double l)
double distBetweenPts(glCompPoint A, glCompPoint B, double R)
void glCompDrawRectangle(glCompRect *r)
void glCompCalcWidget(glCompCommon *parent, glCompCommon *child, glCompCommon *ref)
int is_point_in_rectangle(float X, float Y, float RX, float RY, float RW, float RH)
static void glCompQuadVertex(glCompPoint p0, glCompPoint p1, glCompPoint p2, glCompPoint p3)
void GetOGLPosRef(int x, int y, float *X, float *Y)
static double dist(glCompPoint p, glCompPoint q)
void to3D(int x, int y, float *X, float *Y, float *Z)
double point_to_lineseg_dist(glCompPoint p, glCompPoint a, glCompPoint b)
static glCompPoint blend(glCompPoint p, glCompPoint q, float m)
void glCompSetColor(glCompColor c)