Fixed lights and spheres according to Martin's instructions default tip
authorDmitriy Morozov <dmitriy@mrzv.org>
Tue, 21 Jul 2009 09:57:31 -0700
changeset 16 bff3d7c294ff
parent 15 846354ed6853
Fixed lights and spheres according to Martin's instructions
CMakeLists.txt
VEFViewer.cpp
main.cpp
sphere.cpp
sphere.h
--- a/CMakeLists.txt	Tue Jul 22 10:03:44 2008 -0400
+++ b/CMakeLists.txt	Tue Jul 21 09:57:31 2009 -0700
@@ -3,15 +3,16 @@
 
 # Set Qt4 and QGLViewer configuration
 find_package				(Qt4 REQUIRED)
-find_library				(QGLViewer_LIBRARY
-							 NAMES QGLViewer)
+find_library				(QGLViewer_LIBRARY                  NAMES QGLViewer)
+find_library                (glut_LIBRARY                       NAMES glut)
+
 find_path					(QGLViewer_INCLUDE_DIR QGLViewer/qglviewer.h)
 							
 set							(QT_USE_QTXML    TRUE)
 set							(QT_USE_QTOPENGL TRUE)
 include						(${QT_USE_FILE})
 
-set							(sources VEFViewer.cpp main.cpp sphere.cpp)
+set							(sources VEFViewer.cpp main.cpp)
 set							(moc_hdrs VEFViewer.h)
 qt4_wrap_cpp				(moc_srcs ${moc_hdrs})
 set							(uis viewerInterface.ui)
@@ -22,7 +23,7 @@
                                                                 PATHS ${Boost_LIBRARY_DIR})
 
 add_executable				(VEFViewer ${sources} ${moc_srcs} ${uis_h})
-target_link_libraries		(VEFViewer ${QT_LIBRARIES} ${QGLViewer_LIBRARY} ${boost_program_options_LIBRARY})
+target_link_libraries		(VEFViewer ${QT_LIBRARIES} ${QGLViewer_LIBRARY} ${boost_program_options_LIBRARY} ${glut_LIBRARY})
 
 install						(TARGETS VEFViewer
 							 RUNTIME DESTINATION bin)
--- a/VEFViewer.cpp	Tue Jul 22 10:03:44 2008 -0400
+++ b/VEFViewer.cpp	Tue Jul 21 09:57:31 2009 -0700
@@ -1,7 +1,8 @@
 #include "VEFViewer.h"
 #include <QtDebug>
 #include <cstdio>
-#include "sphere.h"
+// #include "sphere.h"
+#include <GL/glut.h>
 
 VEFViewer::VEFViewer(QWidget* parent): QGLViewer(parent)
 {
@@ -29,10 +30,15 @@
 	//glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 3.0);
 
 	// Basic settings
-	glShadeModel(GL_FLAT);
+	glShadeModel(GL_SMOOTH);
+	glEnable(GL_COLOR_MATERIAL);
 	glEnable(GL_NORMALIZE);
+    glEnable(GL_LINE_SMOOTH);
+    glEnable(GL_POINT_SMOOTH);
 	glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
 	glPointSize(2.0);
+
+    glEnable(GL_CULL_FACE);
 }
 
 void VEFViewer::addFile(QString s)
@@ -221,7 +227,11 @@
 
 	glColor3f(color_.redF(), color_.greenF(), color_.blueF());
 	if (!isSphere())
+    {
+        glDisable(GL_LIGHTING);
 		glCallList(display_list_);
+        glEnable(GL_LIGHTING);
+    }
 	else
 		glCallList(sphere_display_list_);
 	
@@ -234,7 +244,7 @@
 {}
 
 QVerticesLWI::QVerticesLWI(QString fname, VEFViewer* v): 
-	QDisplayListLWI(fname, QColor::fromRgbF(.5, .65, .65)), isSphere_(false), viewer_(v)
+	QDisplayListLWI(fname, QColor::fromRgbF(.66, 0, .5)), isSphere_(false), viewer_(v)
 {
 	filename_ = fname;
 	QFileInfo fi(filename_);
@@ -275,9 +285,12 @@
 	glNewList(sphere_display_list_, GL_COMPILE);
 	for (VertexContainer::const_iterator cur = vertices_.begin(); cur != vertices_.end(); ++cur)
 	{
-		XYZ c;
-		c.x = cur->x; c.y = cur->y; c.z = cur->z;
-		CreateSphere(c, .01, 6);
+		// XYZ c;
+		// c.x = cur->x; c.y = cur->y; c.z = cur->z;
+		// CreateSphere(c, .25, 10);
+        glTranslatef(cur->x, cur->y, cur->z);
+        glutSolidSphere(.25, 10, 10);
+        glTranslatef(-cur->x, -cur->y, -cur->z);
 	}
 	glEnd();
 	glEndList();
--- a/main.cpp	Tue Jul 22 10:03:44 2008 -0400
+++ b/main.cpp	Tue Jul 21 09:57:31 2009 -0700
@@ -4,6 +4,7 @@
 #include <boost/program_options.hpp>
 #include <vector>
 #include <string>
+#include <GL/glut.h>
 
 class ViewerInterface: public QDialog, public Ui::Dialog
 {
@@ -15,6 +16,8 @@
 
 int main(int argc, char** argv)
 {
+    glutInit(&argc, argv);
+
     // Parse program options
     std::vector<std::string> input_filenames;
     po::options_description hidden("Hidden options");
--- a/sphere.cpp	Tue Jul 22 10:03:44 2008 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-#include "sphere.h"
-#include <cmath>
-
-void CreateSphere(XYZ c,double r,int n)
-{
-	int i,j;
-	double theta1,theta2,theta3;
-	XYZ e,p;
-
-	if (r < 0)
-		r = -r;
-	if (n < 0)
-		n = -n;
-	if (n < 4 || r <= 0) {
-		glBegin(GL_POINTS);
-		glVertex3f(c.x,c.y,c.z);
-		glEnd();
-		return;
-	}
-
-	for (j=0;j<n/2;j++) {
-		theta1 = j * TWOPI / n - PID2;
-		theta2 = (j + 1) * TWOPI / n - PID2;
-
-		glBegin(GL_QUAD_STRIP);
-		for (i=0;i<=n;i++) {
-			theta3 = i * TWOPI / n;
-
-			e.x = cos(theta2) * cos(theta3);
-			e.y = sin(theta2);
-			e.z = cos(theta2) * sin(theta3);
-			p.x = c.x + r * e.x;
-			p.y = c.y + r * e.y;
-			p.z = c.z + r * e.z;
-
-			glNormal3f(e.x,e.y,e.z);
-			glTexCoord2f(i/(double)n,2*(j+1)/(double)n);
-			glVertex3f(p.x,p.y,p.z);
-
-			e.x = cos(theta1) * cos(theta3);
-			e.y = sin(theta1);
-			e.z = cos(theta1) * sin(theta3);
-			p.x = c.x + r * e.x;
-			p.y = c.y + r * e.y;
-			p.z = c.z + r * e.z;
-
-			glNormal3f(e.x,e.y,e.z);
-			glTexCoord2f(i/(double)n,2*j/(double)n);
-			glVertex3f(p.x,p.y,p.z);
-		}
-		glEnd();
-	}
-}
--- a/sphere.h	Tue Jul 22 10:03:44 2008 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-/*
-	Create a sphere centered at c, with radius r, and precision n
-	Draw a point for zero radius spheres
-
-	Code by Paul Bourke	<http://astronomy.swin.edu.au/~pbourke/opengl/sphere/>
-*/
-
-#include <GL/gl.h>
-
-const double TWOPI = 2*3.14;
-const double PID2 = 3.14/2;
-
-struct XYZ
-{
-	XYZ(GLfloat xx = 0, GLfloat yy = 0, GLfloat zz = 0):
-		x(xx), y(yy), z(zz)
-	{}
-	
-	GLfloat x,y,z;
-};
-
-void CreateSphere(XYZ c,double r,int n);