vendredi 2 mai 2014

Viewing 3D objects in 2D coordinate


Vote count:

-1




I have the following C++ code to generate an ellipsoid in 3D I tried to view the object but the ellipsoid was too small and looks like a line !!



#include <iostream>
#include <GL/freeglut.h>
#include <math.h>

using namespace std;

GLfloat Rx = 100, Ry = 100, Rz = 100;
GLfloat ellipsoid[360][18][3];

void GenerateEllipsoid() {
for (int i = 0; i < 360; i++) {
GLfloat theta = (i - 180.0) * 22.0 / (7.0 * 180.0);
for (int j = 0; j < 18; j++) {
GLfloat phi = (j * 10 - 90) * 22.0 / (7.0 * 180.0);
ellipsoid[i][j][0] = Rx * cos(phi) * cos(theta);
ellipsoid[i][j][1] = Ry * cos(phi) * cos(theta);
ellipsoid[i][j][2] = Rx * sin(phi);
}
}
}

void TransformFor3DViewing() {
GLfloat x0 = 50, y0 = 50, z0 = 100;

GLfloat xref = ellipsoid[0][0][0], yref = ellipsoid[0][0][1], zref = ellipsoid[0][0][2];
GLfloat length_N = sqrt(pow(x0 - xref, 2) + pow(y0 - yref, 2) + pow(z0 - zref, 2));
GLfloat nx = (x0 - xref) / length_N, ny = (y0 - yref) / length_N, nz = (z0 - zref) / length_N;

GLfloat ux = nz, uy = 0, uz = -nx;

GLfloat vx = -ny * nx, vy = nz * nz + nx * nx, vz = -ny * nz;

for (int i = 0; i < 360; i++) {
for (int j = 0; j < 18; j++) {
ellipsoid[i][j][0] -= x0;
ellipsoid[i][j][1] -= y0;
ellipsoid[i][j][2] -= z0;
}
}
for (int i = 0; i < 360; i++) {
for (int j = 0; j < 18; j++) {
ellipsoid[i][j][0] = ellipsoid[i][j][0] * ux + ellipsoid[i][j][1] * uy + ellipsoid[i][j][2] * uz;
ellipsoid[i][j][1] = ellipsoid[i][j][0] * vx + ellipsoid[i][j][1] * vy + ellipsoid[i][j][2] * vz;
ellipsoid[i][j][2] = ellipsoid[i][j][0] * nx + ellipsoid[i][j][1] * ny + ellipsoid[i][j][2] * nz;
}
}

GLfloat zvp = 0;
GLfloat xprp = x0, yprp = y0, zprp = z0;

for (int i = 0; i < 360; i++) {
for (int j = 0; j < 18; j++) {
ellipsoid[i][j][0] = ellipsoid[i][j][0] * ((zprp - zvp) / (zprp - ellipsoid[i][j][2])) +
xprp * ((zvp - ellipsoid[i][j][2]) / (zprp - ellipsoid[i][j][2]));
ellipsoid[i][j][1] = ellipsoid[i][j][1] * ((zprp - zvp) / (zprp - ellipsoid[i][j][2])) +
yprp * ((zvp - ellipsoid[i][j][2]) / (zprp - ellipsoid[i][j][2]));
}
}
}

void myDisplay() {
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POINTS);
for (int i = 0; i < 360; i++)
{
for (int j = 0; j < 18; j++)
{
glVertex2f(ellipsoid[i][j][0], ellipsoid[i][j][1]);
}
}
glEnd();
glFlush();
}

int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitWindowSize(800, 600);
glutInitWindowPosition(0, 0);
glutCreateWindow("Ellipsoid Viewing");
glClearColor(1, 1, 1, 0.0);
glColor3f(0.0f, 0.0f, 0.0f);
gluOrtho2D(-400, 400, -300, 300);
GenerateEllipsoid();
TransformFor3DViewing();
glutDisplayFunc(myDisplay);
glutMainLoop();
}


I need the following add a function TransformFor2DViewing to view the ellipsoid in 2D change the viewing point by mouse clicks


any help ??





asked 1 min ago






Aucun commentaire:

Enregistrer un commentaire