Skip to content

Commit

Permalink
More code cleaning
Browse files Browse the repository at this point in the history
Moved externs in Gl3Widget to globals. Made the camera and camera looking at as public varibles of GlWidget. Renamed camera control functions to more sensible names that describe what they do.
  • Loading branch information
alanspencer committed Oct 30, 2018
1 parent a18d691 commit 1aa7d58
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 69 deletions.
81 changes: 39 additions & 42 deletions SPIERSview/src/gl3widget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,48 +14,47 @@
#include "rowmans.h"
#include "globals.h"

#define STEREO_SEPARATION_MODIFIER 15.0
#define SHININESS 0.0

float scaleMatrix[16];
float GlobalMatrix[16];
float Default0Matrix[16];
float DefaultClipAngle;

int scaleBallColour[3]; //info stuff
float scaleBallScale;
float mmPerUnit;

/**
* @brief GlWidget::GlWidget
* @param parent
*/
GlWidget::GlWidget(QWidget *parent)
: QOpenGLWidget(parent)
{
// default mouse position X/Y
LastMouseXpos = -1;
LastMouseYpos = -1;
setMouseTracking(true);//do nothing except pass parent on
campos = 3;

// Set default eye/camera position X/Y/Z
cameraX = 0;
cameraY = 0;
cameraZ = 3;

// Set default eye/camera center to look at
centerX = 0;
centerY = 0;
centerZ = 0;

// Default stereo seperation
StereoSeparation = static_cast<float>(.04);

// Defautl clip angle
defaultClipAngle = mainWindow->ui->ClipAngle->value() / 10;

setFocusPolicy(Qt::NoFocus);
DefaultClipAngle = mainWindow->ui->ClipAngle->value() / 10;

// Capture the following touch screen gestures
QList<Qt::GestureType> gestures;
gestures << Qt::PinchGesture;
grabGestures(gestures);

//setAutoBufferSwap(true);

//qDebug() << "Done init widget";

QSurfaceFormat f;
f.setMajorVersion(2);
f.setMinorVersion(0);
f.setRenderableType(QSurfaceFormat::OpenGL);

setFormat(f);
// Set GL surface format
QSurfaceFormat surfaceFormat;
surfaceFormat.setMajorVersion(GL_MAJOR);
surfaceFormat.setMinorVersion(GL_MINOR);
surfaceFormat.setRenderableType(QSurfaceFormat::OpenGL);
setFormat(surfaceFormat);
}

/**
Expand All @@ -75,7 +74,6 @@ GlWidget::~GlWidget()
void GlWidget::initializeGL()
{
//qDebug() << "[Where I'm I?] In initializeGL";
//qDebug() << this->context();

glfunctions = this->context()->functions();
glfunctions->glEnable(GL_DEPTH_TEST);
Expand Down Expand Up @@ -245,7 +243,7 @@ void GlWidget::DrawLine(QMatrix4x4 vMatrix, QVector3D lPosition, float pos, bool
//vMatrix.translate(pos,0,-1);
if (!horizontal) vMatrix.translate(pos, 0, -1);
else vMatrix.translate(0, pos, -1);
vMatrix *= globalmatrix;
vMatrix *= globalMatrix;

lightingShaderProgram.setUniformValue("mvpMatrix", pMatrix * vMatrix);
lightingShaderProgram.setUniformValue("mvMatrix", vMatrix);
Expand Down Expand Up @@ -476,14 +474,15 @@ void GlWidget::DrawObjects(bool rightview, bool halfsize)
QMatrix4x4 vMatrix; //view matrix
vMatrix.setToIdentity();

QVector3D cameraPosition = QVector3D(0, 0, campos);
QVector3D rightcameraPosition = QVector3D(static_cast<float>(StereoSeparation) * static_cast<float>(STEREO_SEPARATION_MODIFIER) / static_cast<float>(campos), 0, campos);
QVector3D camera = QVector3D(cameraX, cameraY, cameraZ);
QVector3D rightcameraPosition = QVector3D(static_cast<float>(StereoSeparation) * static_cast<float>(STEREO_SEPARATION_MODIFIER) / static_cast<float>(cameraZ), 0, cameraZ);
QVector3D cameraUpDirection = QVector3D(0, 1, 0);
QVector3D center = QVector3D(centerX, centerY, centerZ);

if (rightview)
vMatrix.lookAt(rightcameraPosition, QVector3D(0, 0, 0), cameraUpDirection); // first 0 is StereoSeparation*3.0/campos
vMatrix.lookAt(rightcameraPosition, center, cameraUpDirection);
else
vMatrix.lookAt(cameraPosition, QVector3D(0, 0, 0), cameraUpDirection);
vMatrix.lookAt(camera, center, cameraUpDirection);

QOpenGLShaderProgram *useshader;

Expand Down Expand Up @@ -512,13 +511,11 @@ void GlWidget::DrawObjects(bool rightview, bool halfsize)

mvMatrix.translate(0, 0, -1); //for backward compatibility
mvMatrix *= mMatrix;
mvMatrix *= globalmatrix;

mvMatrix *= globalMatrix;

QMatrix3x3 normalMatrix;
normalMatrix = mvMatrix.normalMatrix();


if ((SVObjects[i]->Transparency == 0 && trans == 0) || (SVObjects[i]->Transparency != 0 && trans == 1)) //do trans on second run
{
if (SVObjects[i]->colour)
Expand All @@ -530,8 +527,7 @@ void GlWidget::DrawObjects(bool rightview, bool halfsize)
useshader->setUniformValue("mvpMatrix", pMatrix * mvMatrix);
useshader->setUniformValue("mvMatrix", mvMatrix);
useshader->setUniformValue("normalMatrix", normalMatrix);
useshader->setUniformValue("lightPosition", vMatrix * cameraPosition);

useshader->setUniformValue("lightPosition", vMatrix * camera);

float mcolor[3];
if (mainWindow->ui->actionMute_Colours->isChecked())
Expand Down Expand Up @@ -642,7 +638,7 @@ void GlWidget::DrawObjects(bool rightview, bool halfsize)
glfunctions->glDepthMask(true);

if (mainWindow->ui->actionShow_Scale_Grid->isChecked())
DrawScaleGrid(vMatrix, vMatrix * cameraPosition);
DrawScaleGrid(vMatrix, vMatrix * camera);
}

/**
Expand Down Expand Up @@ -891,12 +887,13 @@ void GlWidget::mouseMoveEvent(QMouseEvent *event)
}

/**
* @brief GlWidget::MoveAway
* @param dist
* @brief GlWidget::moveCameraZ
* This function add z to the current cameraZ value.
* @param z
*/
void GlWidget::MoveAway(double dist)
void GlWidget::moveCameraZ(double value)
{
campos += dist;
cameraZ += value;
update();
}

Expand Down Expand Up @@ -1096,7 +1093,7 @@ void GlWidget::ResetToDefault()
for (int i = 0; i < 16; i++) SVObjects[j]->matrix[i] = SVObjects[j]->defaultmatrix[i];
}

ClipAngle = DefaultClipAngle;
ClipAngle = defaultClipAngle;
rotationX = 0;
rotationY = 0;
rotationZ = 0;
Expand All @@ -1122,7 +1119,7 @@ void GlWidget::NewDefault()
SVObjects[j]->gotdefaultmatrix = true;
}
}
DefaultClipAngle = ClipAngle; //yes, doing for each one, for convenience
defaultClipAngle = ClipAngle; //yes, doing for each one, for convenience
rotationX = 0;
rotationY = 0;
rotationZ = 0;
Expand Down
17 changes: 10 additions & 7 deletions SPIERSview/src/gl3widget.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,6 @@

#include "globals.h"

extern float GlobalMatrix[16];
extern float Default0Matrix[16];
extern float DefaultClipAngle;

class GlWidget : public QOpenGLWidget
{
Q_OBJECT
Expand All @@ -22,23 +18,30 @@ class GlWidget : public QOpenGLWidget
~GlWidget();
void grabGestures(const QList<Qt::GestureType> &gestures);

float cameraX;
float cameraY;
float cameraZ;
float centerX;
float centerY;
float centerZ;
float ClipStart;
float ClipDepth;
float ClipAngle;
float DefaultClipAngle;
float campos;
float defaultClipAngle;
float StereoSeparation;

int LastMouseXpos;
int LastMouseYpos;
int xdim;
int ydim;

QOpenGLFunctions *glfunctions;

bool CanISee(int index);
void SetClip(int Start, int Depth, int Angle);
void DoPMatrix(int width, int height);
void Rotate(double angle);
void MoveAway(double dist);
void moveCameraZ(double value);
void DrawObjects(bool rightview, bool halfsize);
void SetStereoSeparation(float s);
void YRotate(float angle);
Expand Down
5 changes: 5 additions & 0 deletions SPIERSview/src/globals.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ float rotationZ;
float transformX;
float transformY;
float transformZ;
float scaleBallScale;
float mmPerUnit;
float scaleMatrix[16];
float defaultClipAngle;

int colorBackgroundRed;
int colorBackgroundGreen;
Expand All @@ -32,6 +36,7 @@ int colorGridMinorBlue;
int modelKTr;
int nextActualDlist = 1;
int totalTriangles = 0;
int scaleBallColour[3]; //info stuff

QList<QScreen *> availableScreens;
QOpenGLBuffer cubeBuffer;
Expand Down
15 changes: 9 additions & 6 deletions SPIERSview/src/globals.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
#include <QOpenGLBuffer>
#include <QString>
#include <QStringList>
#include <QtWidgets/QLabel>
#include <QtWidgets/QProgressBar>
#include <QLabel>
#include <QProgressBar>

class MainWindow;

Expand All @@ -28,9 +28,9 @@ class MainWindow;
#define READTHEDOCS "https://spiersview.readthedocs.io/"

// Test file location
#define TESTDUMPLOCATION "C:/Documents and Settings/mdsutton/Desktop/Test/"
#define TESTDUMPLOCATION "C:/SPIERSview_test/"

//SPIERSview Defines
//SPIERSview defines
#define GRIDSIZE 32
#define SCALE 2
#define MAXDLISTSIZE 100000
Expand All @@ -40,8 +40,10 @@ class MainWindow;
#define SPVFILEVERSION 10
#define GL_MAJOR 2
#define GL_MINOR 1
#define STEREO_SEPARATION_MODIFIER 15.0
#define SHININESS 0.0

// SPIERSview extrern
// SPIERSview extrerns
extern MainWindow *mainWindow;

extern bool isSP2;
Expand Down Expand Up @@ -72,6 +74,7 @@ extern float scaleMatrix[16];
extern float transformX;
extern float transformY;
extern float transformZ;
extern float defaultClipAngle;

extern int nextActualDlist;
extern int totalTriangles;
Expand All @@ -88,7 +91,7 @@ extern int scaleBallColour[3];
extern int modelKTr;

extern QList<QScreen *> availableScreens;
extern QMatrix4x4 globalmatrix;
extern QMatrix4x4 globalMatrix;
extern QOpenGLBuffer cubeBuffer;
extern QScreen *currentScreen;
extern QString fname;
Expand Down
22 changes: 13 additions & 9 deletions SPIERSview/src/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ MainWindow::MainWindow(QWidget *parent)
colorGridMinorRed = 255;
colorGridMinorGreen = 0;
colorGridMinorBlue = 255;
globalmatrix.setToIdentity();
globalMatrix.setToIdentity();

containsPresurfaced = false;
containsNonPresurfaced = false;
Expand Down Expand Up @@ -670,7 +670,7 @@ void MainWindow::on_actionLarge_Rotate_Anticlockwise_triggered()
*/
void MainWindow::on_actionMove_away_from_viewer_triggered()
{
gl3widget->MoveAway(.02);
gl3widget->moveCameraZ(.02);
UpdateGL();
isFileDirty = true;
}
Expand All @@ -680,7 +680,7 @@ void MainWindow::on_actionMove_away_from_viewer_triggered()
*/
void MainWindow::on_actionMove_towards_viewer_triggered()
{
gl3widget->MoveAway(-.02);
gl3widget->moveCameraZ(-.02);
UpdateGL();
isFileDirty = true;
}
Expand All @@ -690,7 +690,7 @@ void MainWindow::on_actionMove_towards_viewer_triggered()
*/
void MainWindow::on_actionLarge_Move_Closer_triggered()
{
gl3widget->MoveAway(-.5);
gl3widget->moveCameraZ(-.5);
UpdateGL();
isFileDirty = true;
}
Expand All @@ -700,7 +700,7 @@ void MainWindow::on_actionLarge_Move_Closer_triggered()
*/
void MainWindow::on_actionLarge_Move_Away_triggered()
{
gl3widget->MoveAway(0.5);
gl3widget->moveCameraZ(0.5);
UpdateGL();
isFileDirty = true;
}
Expand All @@ -714,8 +714,12 @@ void MainWindow::on_actionScreen_Capture_triggered()
QImage ScreenCapture = gl3widget->grabFramebuffer();
FilterKeys = false;

QString fileName = QFileDialog::getSaveFileName(this, tr("Save Current View"),
"", tr("JPEG Image (*.jpg);;Windows Bitmap Image (*.bmp);;TIFF image (*.tif);;PNG Image (*.png)"));
QString fileName = QFileDialog::getSaveFileName(
this,
tr("Save Current View"),
"",
tr("JPEG Image (*.jpg);;Windows Bitmap Image (*.bmp);;TIFF image (*.tif);;PNG Image (*.png)")
);
FilterKeys = true;

ScreenCapture.save(fileName);
Expand Down Expand Up @@ -3081,12 +3085,12 @@ void MainWindow::setSamples(int i)
gl3widget2->ClipStart = gl3widget->ClipStart;
gl3widget2->ClipDepth = gl3widget->ClipDepth;
gl3widget2->ClipAngle = gl3widget->ClipAngle;
gl3widget2->DefaultClipAngle = gl3widget->DefaultClipAngle;
gl3widget2->defaultClipAngle = gl3widget->defaultClipAngle;
gl3widget2->LastMouseXpos = gl3widget->LastMouseXpos;
gl3widget2->LastMouseYpos = gl3widget->LastMouseYpos;
gl3widget2->xdim = gl3widget->xdim;
gl3widget2->ydim = gl3widget->ydim;
gl3widget2->campos = gl3widget->campos;
gl3widget2->cameraZ = gl3widget->cameraZ;
gl3widget2->StereoSeparation = gl3widget->StereoSeparation;

gllayout->removeWidget(gl3widget);
Expand Down

0 comments on commit 1aa7d58

Please sign in to comment.