Finished with the implementation
This commit is contained in:
parent
269cedbf06
commit
a71389d1dd
43 changed files with 671 additions and 47 deletions
|
@ -24,3 +24,4 @@ QMAKE_CXX.LIBDIRS = \
|
|||
QMAKE_LICHECK_TIMESTAMP = "Thu May 16"
|
||||
QMAKE_LICHECK_TIMESTAMP = "Sat May 18"
|
||||
QMAKE_LICHECK_TIMESTAMP = "Fri May 31"
|
||||
QMAKE_LICHECK_TIMESTAMP = "Sat Jun 29"
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
|
@ -61,7 +61,9 @@ SOURCES = cartesiangridtohorizontalslicefilter.cpp \
|
|||
main.cpp \
|
||||
mainwindow.cpp \
|
||||
opengldisplaywidget.cpp \
|
||||
datavolumeboundingboxrenderer.cpp moc_mainwindow.cpp \
|
||||
datavolumeboundingboxrenderer.cpp \
|
||||
streamlinemapper.cpp \
|
||||
streamlinerenderer.cpp moc_mainwindow.cpp \
|
||||
moc_opengldisplaywidget.cpp
|
||||
OBJECTS = cartesiangridtohorizontalslicefilter.o \
|
||||
flowdatasource.o \
|
||||
|
@ -73,13 +75,17 @@ OBJECTS = cartesiangridtohorizontalslicefilter.o \
|
|||
mainwindow.o \
|
||||
opengldisplaywidget.o \
|
||||
datavolumeboundingboxrenderer.o \
|
||||
streamlinemapper.o \
|
||||
streamlinerenderer.o \
|
||||
moc_mainwindow.o \
|
||||
moc_opengldisplaywidget.o
|
||||
DIST = lines_fshader.glsl \
|
||||
lines_fshader_contour.glsl \
|
||||
lines_fshader_streamline.glsl \
|
||||
lines_fshader_texture.glsl \
|
||||
lines_vshader.glsl \
|
||||
lines_vshader_contour.glsl \
|
||||
lines_vshader_streamline.glsl \
|
||||
lines_vshader_texture.glsl \
|
||||
uhhlogo.png \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/mkspecs/features/spec_pre.prf \
|
||||
|
@ -303,7 +309,9 @@ DIST = lines_fshader.glsl \
|
|||
horizontalslicetoimagemapper.h \
|
||||
mainwindow.h \
|
||||
opengldisplaywidget.h \
|
||||
datavolumeboundingboxrenderer.h cartesiangridtohorizontalslicefilter.cpp \
|
||||
datavolumeboundingboxrenderer.h \
|
||||
streamlinemapper.h \
|
||||
streamlinerenderer.h cartesiangridtohorizontalslicefilter.cpp \
|
||||
flowdatasource.cpp \
|
||||
horizontalcontourlinesrenderer.cpp \
|
||||
horizontalslicerenderer.cpp \
|
||||
|
@ -312,7 +320,9 @@ DIST = lines_fshader.glsl \
|
|||
main.cpp \
|
||||
mainwindow.cpp \
|
||||
opengldisplaywidget.cpp \
|
||||
datavolumeboundingboxrenderer.cpp
|
||||
datavolumeboundingboxrenderer.cpp \
|
||||
streamlinemapper.cpp \
|
||||
streamlinerenderer.cpp
|
||||
QMAKE_TARGET = DataVisualizationSoSe2024
|
||||
DESTDIR =
|
||||
TARGET = DataVisualizationSoSe2024
|
||||
|
@ -768,8 +778,8 @@ distdir: FORCE
|
|||
@test -d $(DISTDIR) || mkdir -p $(DISTDIR)
|
||||
$(COPY_FILE) --parents $(DIST) $(DISTDIR)/
|
||||
$(COPY_FILE) --parents /home/luxdragon/Qt5.15/5.15.13/gcc_64/mkspecs/features/data/dummy.cpp $(DISTDIR)/
|
||||
$(COPY_FILE) --parents cartesiangridtohorizontalslicefilter.h flowdatasource.h horizontalcontourlinesrenderer.h horizontalslicerenderer.h horizontalslicetocontourlinemapper.h horizontalslicetoimagemapper.h mainwindow.h opengldisplaywidget.h datavolumeboundingboxrenderer.h $(DISTDIR)/
|
||||
$(COPY_FILE) --parents cartesiangridtohorizontalslicefilter.cpp flowdatasource.cpp horizontalcontourlinesrenderer.cpp horizontalslicerenderer.cpp horizontalslicetocontourlinemapper.cpp horizontalslicetoimagemapper.cpp main.cpp mainwindow.cpp opengldisplaywidget.cpp datavolumeboundingboxrenderer.cpp $(DISTDIR)/
|
||||
$(COPY_FILE) --parents cartesiangridtohorizontalslicefilter.h flowdatasource.h horizontalcontourlinesrenderer.h horizontalslicerenderer.h horizontalslicetocontourlinemapper.h horizontalslicetoimagemapper.h mainwindow.h opengldisplaywidget.h datavolumeboundingboxrenderer.h streamlinemapper.h streamlinerenderer.h $(DISTDIR)/
|
||||
$(COPY_FILE) --parents cartesiangridtohorizontalslicefilter.cpp flowdatasource.cpp horizontalcontourlinesrenderer.cpp horizontalslicerenderer.cpp horizontalslicetocontourlinemapper.cpp horizontalslicetoimagemapper.cpp main.cpp mainwindow.cpp opengldisplaywidget.cpp datavolumeboundingboxrenderer.cpp streamlinemapper.cpp streamlinerenderer.cpp $(DISTDIR)/
|
||||
|
||||
|
||||
clean: compiler_clean
|
||||
|
@ -1027,10 +1037,18 @@ moc_opengldisplaywidget.cpp: opengldisplaywidget.h \
|
|||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qt_windows.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qopengles2ext.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qopenglext.h \
|
||||
datavolumeboundingboxrenderer.h \
|
||||
flowdatasource.h \
|
||||
cartesiangridtohorizontalslicefilter.h \
|
||||
horizontalslicetoimagemapper.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QImage \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QString \
|
||||
horizontalslicetocontourlinemapper.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QVector3D \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qvector3d.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QVector \
|
||||
horizontalslicerenderer.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QOpenGLShaderProgram \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qopenglshaderprogram.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qvector3d.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qvector4d.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qmatrix4x4.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qquaternion.h \
|
||||
|
@ -1040,16 +1058,12 @@ moc_opengldisplaywidget.cpp: opengldisplaywidget.h \
|
|||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QOpenGLVertexArrayObject \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qopenglvertexarrayobject.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QObject \
|
||||
flowdatasource.h \
|
||||
cartesiangridtohorizontalslicefilter.h \
|
||||
horizontalslicetoimagemapper.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QImage \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QString \
|
||||
horizontalslicetocontourlinemapper.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QVector3D \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QVector \
|
||||
horizontalslicerenderer.h \
|
||||
horizontalcontourlinesrenderer.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QTimer \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qtimer.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qbasictimer.h \
|
||||
streamlinemapper.h \
|
||||
streamlinerenderer.h \
|
||||
moc_predefs.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/bin/moc
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/bin/moc $(DEFINES) --include /home/luxdragon/Documents/Uni/DV/Tornado-Visualization/datenvisualisierung_sose2024/moc_predefs.h -I/home/luxdragon/Qt5.15/5.15.13/gcc_64/mkspecs/linux-g++ -I/home/luxdragon/Documents/Uni/DV/Tornado-Visualization/datenvisualisierung_sose2024 -I/home/luxdragon/Qt5.15/5.15.13/gcc_64/include -I/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtWidgets -I/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui -I/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore -I/usr/include/c++/11 -I/usr/include/x86_64-linux-gnu/c++/11 -I/usr/include/c++/11/backward -I/usr/lib/gcc/x86_64-linux-gnu/11/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include opengldisplaywidget.h -o moc_opengldisplaywidget.cpp
|
||||
|
@ -1657,10 +1671,18 @@ mainwindow.o: mainwindow.cpp mainwindow.h \
|
|||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qt_windows.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qopengles2ext.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qopenglext.h \
|
||||
datavolumeboundingboxrenderer.h \
|
||||
flowdatasource.h \
|
||||
cartesiangridtohorizontalslicefilter.h \
|
||||
horizontalslicetoimagemapper.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QImage \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QString \
|
||||
horizontalslicetocontourlinemapper.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QVector3D \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qvector3d.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QVector \
|
||||
horizontalslicerenderer.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QOpenGLShaderProgram \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qopenglshaderprogram.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qvector3d.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qvector4d.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qmatrix4x4.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qquaternion.h \
|
||||
|
@ -1670,16 +1692,12 @@ mainwindow.o: mainwindow.cpp mainwindow.h \
|
|||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QOpenGLVertexArrayObject \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qopenglvertexarrayobject.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QObject \
|
||||
flowdatasource.h \
|
||||
cartesiangridtohorizontalslicefilter.h \
|
||||
horizontalslicetoimagemapper.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QImage \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QString \
|
||||
horizontalslicetocontourlinemapper.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QVector3D \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QVector \
|
||||
horizontalslicerenderer.h \
|
||||
horizontalcontourlinesrenderer.h
|
||||
horizontalcontourlinesrenderer.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QTimer \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qtimer.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qbasictimer.h \
|
||||
streamlinemapper.h \
|
||||
streamlinerenderer.h
|
||||
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o mainwindow.cpp
|
||||
|
||||
opengldisplaywidget.o: opengldisplaywidget.cpp opengldisplaywidget.h \
|
||||
|
@ -1794,10 +1812,18 @@ opengldisplaywidget.o: opengldisplaywidget.cpp opengldisplaywidget.h \
|
|||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qt_windows.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qopengles2ext.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qopenglext.h \
|
||||
datavolumeboundingboxrenderer.h \
|
||||
flowdatasource.h \
|
||||
cartesiangridtohorizontalslicefilter.h \
|
||||
horizontalslicetoimagemapper.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QImage \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QString \
|
||||
horizontalslicetocontourlinemapper.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QVector3D \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qvector3d.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QVector \
|
||||
horizontalslicerenderer.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QOpenGLShaderProgram \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qopenglshaderprogram.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qvector3d.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qvector4d.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qmatrix4x4.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qquaternion.h \
|
||||
|
@ -1807,16 +1833,12 @@ opengldisplaywidget.o: opengldisplaywidget.cpp opengldisplaywidget.h \
|
|||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QOpenGLVertexArrayObject \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qopenglvertexarrayobject.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QObject \
|
||||
flowdatasource.h \
|
||||
cartesiangridtohorizontalslicefilter.h \
|
||||
horizontalslicetoimagemapper.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QImage \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QString \
|
||||
horizontalslicetocontourlinemapper.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QVector3D \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QVector \
|
||||
horizontalslicerenderer.h \
|
||||
horizontalcontourlinesrenderer.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QTimer \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qtimer.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qbasictimer.h \
|
||||
streamlinemapper.h \
|
||||
streamlinerenderer.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QMouseEvent \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QKeyEvent \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QOpenGLFunctions \
|
||||
|
@ -1924,6 +1946,158 @@ datavolumeboundingboxrenderer.o: datavolumeboundingboxrenderer.cpp datavolumebou
|
|||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QOpenGLContext
|
||||
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o datavolumeboundingboxrenderer.o datavolumeboundingboxrenderer.cpp
|
||||
|
||||
streamlinemapper.o: streamlinemapper.cpp streamlinemapper.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QVector \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qvector.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qalgorithms.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qglobal.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qconfig-bootstrapped.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qconfig.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qtcore-config.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qsystemdetection.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qprocessordetection.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qcompilerdetection.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qtypeinfo.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qsysinfo.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qlogging.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qflags.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qatomic.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qbasicatomic.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qatomic_bootstrap.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qgenericatomic.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qatomic_cxx11.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qatomic_msvc.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qglobalstatic.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qmutex.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qnumeric.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qversiontagging.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qiterator.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qrefcount.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qarraydata.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qhashfunctions.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qstring.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qchar.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qbytearray.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qnamespace.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qstringliteral.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qstringalgorithms.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qstringview.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qstringbuilder.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qpair.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qcontainertools_impl.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qpoint.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QVector3D \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qvector3d.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qtguiglobal.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qtgui-config.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qmetatype.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qvarlengtharray.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qcontainerfwd.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qobjectdefs.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qobjectdefs_impl.h
|
||||
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o streamlinemapper.o streamlinemapper.cpp
|
||||
|
||||
streamlinerenderer.o: streamlinerenderer.cpp streamlinerenderer.h \
|
||||
streamlinemapper.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QVector \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qvector.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qalgorithms.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qglobal.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qconfig-bootstrapped.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qconfig.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qtcore-config.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qsystemdetection.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qprocessordetection.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qcompilerdetection.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qtypeinfo.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qsysinfo.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qlogging.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qflags.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qatomic.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qbasicatomic.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qatomic_bootstrap.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qgenericatomic.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qatomic_cxx11.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qatomic_msvc.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qglobalstatic.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qmutex.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qnumeric.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qversiontagging.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qiterator.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qrefcount.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qarraydata.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qhashfunctions.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qstring.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qchar.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qbytearray.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qnamespace.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qstringliteral.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qstringalgorithms.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qstringview.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qstringbuilder.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qpair.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qcontainertools_impl.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qpoint.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QVector3D \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qvector3d.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qtguiglobal.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qtgui-config.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qmetatype.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qvarlengtharray.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qcontainerfwd.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qobjectdefs.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qobjectdefs_impl.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QOpenGLShaderProgram \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qopenglshaderprogram.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qopengl.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qt_windows.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qopengles2ext.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qopenglext.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qvector2d.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qvector4d.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qmatrix4x4.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qquaternion.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qgenericmatrix.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qdebug.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qhash.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qlist.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qbytearraylist.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qstringlist.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qregexp.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qstringmatcher.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qmap.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qtextstream.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qiodevice.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qobject.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qcoreevent.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qscopedpointer.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qobject_impl.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qlocale.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qvariant.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qshareddata.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qset.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qcontiguouscache.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qsharedpointer.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qsharedpointer_impl.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qdatastream.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qrect.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qmargins.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/qsize.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QOpenGLBuffer \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qopenglbuffer.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QOpenGLVertexArrayObject \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qopenglvertexarrayobject.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QObject \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QOpenGLFunctions \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qopenglfunctions.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qopenglcontext.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtCore/QScopedPointer \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QSurfaceFormat \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qsurfaceformat.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/qopenglversionfunctions.h \
|
||||
/home/luxdragon/Qt5.15/5.15.13/gcc_64/include/QtGui/QOpenGLContext
|
||||
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o streamlinerenderer.o streamlinerenderer.cpp
|
||||
|
||||
moc_mainwindow.o: moc_mainwindow.cpp
|
||||
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_mainwindow.o moc_mainwindow.cpp
|
||||
|
||||
|
|
|
@ -49,3 +49,11 @@ float* CartesianGridToHorizontalSliceFilter::passSlice(int xs, int ys) {
|
|||
// We don't even need to pass information about which windcomponent we're using
|
||||
// We just loop through each 3rd element for graphics
|
||||
}
|
||||
|
||||
float* CartesianGridToHorizontalSliceFilter::passCube() {
|
||||
// returns the whole cube, we'll perform operations on the cube
|
||||
// in the mapper itself
|
||||
// Yes, this is redundant, but I wish to adhere to the code
|
||||
// structure as proposed in the lecture
|
||||
return cartesianDataGrid;
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ public:
|
|||
float *passSlice(int xs, int ys);
|
||||
void changeWindComponent(int ic);
|
||||
float *passSliceMagnitude(int xs, int ys);
|
||||
float *passCube();
|
||||
private:
|
||||
float *cartesianDataGrid;
|
||||
int windcomponent;
|
||||
|
|
Binary file not shown.
|
@ -34,6 +34,8 @@ SOURCES += \
|
|||
mainwindow.cpp \
|
||||
opengldisplaywidget.cpp \
|
||||
datavolumeboundingboxrenderer.cpp \
|
||||
streamlinemapper.cpp \
|
||||
streamlinerenderer.cpp \
|
||||
tornadoSrc.c
|
||||
|
||||
HEADERS += \
|
||||
|
@ -45,13 +47,17 @@ HEADERS += \
|
|||
horizontalslicetoimagemapper.h \
|
||||
mainwindow.h \
|
||||
opengldisplaywidget.h \
|
||||
datavolumeboundingboxrenderer.h
|
||||
datavolumeboundingboxrenderer.h \
|
||||
streamlinemapper.h \
|
||||
streamlinerenderer.h
|
||||
|
||||
DISTFILES += \
|
||||
lines_fshader.glsl \
|
||||
lines_fshader_contour.glsl \
|
||||
lines_fshader_streamline.glsl \
|
||||
lines_fshader_texture.glsl \
|
||||
lines_vshader.glsl \
|
||||
lines_vshader_contour.glsl \
|
||||
lines_vshader_streamline.glsl \
|
||||
lines_vshader_texture.glsl \
|
||||
uhhlogo.png
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE QtCreatorProject>
|
||||
<!-- Written by QtCreator 9.0.2, 2024-06-15T20:51:37. -->
|
||||
<!-- Written by QtCreator 9.0.2, 2024-07-05T13:00:08. -->
|
||||
<qtcreator>
|
||||
<data>
|
||||
<variable>EnvironmentId</variable>
|
||||
|
|
|
@ -36,6 +36,13 @@ void FlowDataSource::updateT() {
|
|||
gen_tornado(num_x, num_y, num_z, ct, cartesianDataGrid);
|
||||
}
|
||||
|
||||
void FlowDataSource::decreaseT() {
|
||||
if (ct > 0) {
|
||||
ct--;
|
||||
}
|
||||
gen_tornado(num_x, num_y, num_z, ct, cartesianDataGrid);
|
||||
}
|
||||
|
||||
void FlowDataSource::resetT() {
|
||||
ct=0;
|
||||
gen_tornado(num_x, num_y, num_z, ct, cartesianDataGrid);
|
||||
|
|
|
@ -16,6 +16,7 @@ public:
|
|||
float *returnSource();
|
||||
void updateT();
|
||||
void resetT();
|
||||
void decreaseT();
|
||||
private:
|
||||
float *cartesianDataGrid;
|
||||
int num_x;
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -1,9 +1,11 @@
|
|||
#include "horizontalslicetocontourlinemapper.h"
|
||||
#include <iostream>
|
||||
#include <math.h>
|
||||
|
||||
|
||||
HorizontalSliceToContourLineMapper::HorizontalSliceToContourLineMapper(){
|
||||
std::cout << "CONTOUR MAPPER CONSTRUCTOR CALLED - creating " << this << std::endl;
|
||||
magnitude = false;
|
||||
}
|
||||
|
||||
HorizontalSliceToContourLineMapper::~HorizontalSliceToContourLineMapper() {
|
||||
|
@ -26,6 +28,10 @@ void HorizontalSliceToContourLineMapper::newZ(float* newsource, int z) {
|
|||
iz = z;
|
||||
}
|
||||
|
||||
void HorizontalSliceToContourLineMapper::setMagnitude(bool value) {
|
||||
magnitude = value;
|
||||
}
|
||||
|
||||
void HorizontalSliceToContourLineMapper::setIso(float* isos, int nums) {
|
||||
|
||||
isolist = new float[nums];
|
||||
|
@ -51,6 +57,10 @@ int HorizontalSliceToContourLineMapper::marchingSquaresNum(float isoline, float
|
|||
return result;
|
||||
}
|
||||
|
||||
float HorizontalSliceToContourLineMapper::WindSpeed(float x, float y, float z) {
|
||||
return sqrt(x*x + y*y + z*z);
|
||||
}
|
||||
|
||||
QVector<QVector3D> HorizontalSliceToContourLineMapper::mapSliceToContourLineSegments() {
|
||||
QVector<QVector3D> vectors; // We store all of our points in a dynamic array as Vector3Ds
|
||||
QVector3D vector1; // Vector 1 and 2 will then be connected as a line (using GL_LINES)
|
||||
|
@ -72,6 +82,14 @@ QVector<QVector3D> HorizontalSliceToContourLineMapper::mapSliceToContourLineSegm
|
|||
v2 = slice[3*((y+1)*xs+x+1)]; //top right
|
||||
v1 = slice[3*(y*xs+x+1)]; //botom right
|
||||
v0 = slice[3*(y*xs+x)]; //bottom left
|
||||
|
||||
if (magnitude == true) {
|
||||
v3 = WindSpeed(slice[3*((y+1)*xs+x)], slice[3*((y+1)*xs+x)+1], slice[3*((y+1)*xs+x)+2]);
|
||||
v2 = WindSpeed(slice[3*((y+1)*xs+x+1)], slice[3*((y+1)*xs+x+1)+1], slice[3*((y+1)*xs+x+1)+2]);
|
||||
v1 = WindSpeed(slice[3*(y*xs+x+1)], slice[3*(y*xs+x+1)+1], slice[3*(y*xs+x+1)+2]);
|
||||
v0 = WindSpeed(slice[3*(y*xs+x)], slice[3*(y*xs+x)+1], slice[3*(y*xs+x)+2]);
|
||||
}
|
||||
|
||||
iso = isolist[i];
|
||||
squareCase = marchingSquaresNum(iso, v0, v1, v2, v3);
|
||||
// Viet found the amazing way of reducing the number of cases (before that I used switch x3)
|
||||
|
|
|
@ -14,6 +14,8 @@ public:
|
|||
int marchingSquaresNum(float isoline, float a, float b, float c, float d);
|
||||
void setIso(float *isos, int nums);
|
||||
void newZ(float *newsource, int z);
|
||||
void setMagnitude(bool mag);
|
||||
float WindSpeed(float x, float y, float z);
|
||||
private:
|
||||
int xs;
|
||||
int ys;
|
||||
|
@ -22,6 +24,7 @@ private:
|
|||
int numIsos;
|
||||
float *slice;
|
||||
float *isolist;
|
||||
bool magnitude;
|
||||
};
|
||||
|
||||
#endif // HORIZONTALSLICETOCONTOURLINEMAPPER_H
|
||||
|
|
Binary file not shown.
|
@ -33,6 +33,11 @@ float HorizontalSliceToImageMapper::totalWindSpeed(float x, float y, float z) {
|
|||
}
|
||||
|
||||
QImage HorizontalSliceToImageMapper::mapSliceToImage() {
|
||||
// We loop through the windspeed value and map a red colour to it, if positive
|
||||
// otherwise it's a blue colour, the brightness determines the intensity
|
||||
// We amplify the intensity by a factor 3 for a better visualization
|
||||
|
||||
|
||||
//std::cout << xs << " hier kommt noch ys:" << ys << std::endl;
|
||||
QImage image(xs, ys, QImage::Format_RGB32);
|
||||
QRgb colour;
|
||||
|
@ -76,6 +81,7 @@ QImage HorizontalSliceToImageMapper::mapSliceToImage() {
|
|||
|
||||
QImage HorizontalSliceToImageMapper::mapSliceToImage(QString fileName) {
|
||||
// CREATED FOR LEARNING PURPOSES
|
||||
// maps the UHH logo to a frame
|
||||
QImage image;
|
||||
if (!image.load(fileName)) {
|
||||
std::cout << "ERROR! Image could not be read!" << std::endl;
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
#version 330
|
||||
layout(location = 0) out vec4 fragColor;
|
||||
void main()
|
||||
{
|
||||
fragColor = vec4(0.6, 1, 0.6, 1); // verda koloro
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
#version 330
|
||||
uniform mat4 mvpMatrix; // model-view-projection matrix
|
||||
in vec4 vertexPosition;
|
||||
void main()
|
||||
{
|
||||
gl_Position = mvpMatrix * vertexPosition; // same kiel antaux
|
||||
}
|
||||
|
Binary file not shown.
Binary file not shown.
|
@ -10,6 +10,7 @@
|
|||
#include "flowdatasource.h"
|
||||
|
||||
|
||||
// Define grid size here
|
||||
#define XValue 16
|
||||
#define YValue 16
|
||||
#define ZValue 16
|
||||
|
@ -27,13 +28,15 @@ OpenGLDisplayWidget::OpenGLDisplayWidget(QWidget *parent)
|
|||
|
||||
OpenGLDisplayWidget::~OpenGLDisplayWidget()
|
||||
{
|
||||
// Clean up visualization pipeline.
|
||||
// Cleans up visualization pipeline
|
||||
//delete bboxRenderer;
|
||||
delete grid;
|
||||
delete filter;
|
||||
delete mapper;
|
||||
delete renderer;
|
||||
delete contourrenderer;
|
||||
delete streamlinemapper;
|
||||
delete streamlinerenderer;
|
||||
// ....
|
||||
}
|
||||
|
||||
|
@ -95,12 +98,13 @@ void OpenGLDisplayWidget::paintGL()
|
|||
QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
|
||||
f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
// Call renderer modules.
|
||||
// Calls renderer modules
|
||||
//bboxRenderer->drawBoundingBox(mvpMatrix);
|
||||
renderer->drawBoundingBox(mvpMatrix);
|
||||
renderer->drawFrame(mvpMatrix);
|
||||
renderer->drawImage(mvpMatrix);
|
||||
contourrenderer->draw(mvpMatrix);
|
||||
streamlinerenderer->draw(mvpMatrix);
|
||||
// ....
|
||||
}
|
||||
|
||||
|
@ -161,6 +165,14 @@ void OpenGLDisplayWidget::wheelEvent(QWheelEvent *e)
|
|||
|
||||
void OpenGLDisplayWidget::keyPressEvent(QKeyEvent *e)
|
||||
{
|
||||
// This function looks for key presses and then executes the corresponding command
|
||||
// up and down move the slice up and down
|
||||
// x,y,z and m activate various wind components or display the magnitude
|
||||
// note that we only need to change the i in the Filter pointer, which is why
|
||||
// this implementation should be fast
|
||||
// Space starts an animation (implemented with a timer)
|
||||
// R resets the time
|
||||
// left and right enable the user to check specific times
|
||||
|
||||
if (e->key() == Qt::Key_Up)
|
||||
{
|
||||
|
@ -181,16 +193,19 @@ void OpenGLDisplayWidget::keyPressEvent(QKeyEvent *e)
|
|||
}
|
||||
} else if (e->key() == Qt::Key_X) {
|
||||
mapper->setMagnitude(false);
|
||||
contourmapper->setMagnitude(false);
|
||||
filter->changeWindComponent(0);
|
||||
mapper->getSlice(filter->passSlice(XValue,YValue));
|
||||
contourmapper->newZ(filter->passSlice(XValue,YValue), renderer->z);
|
||||
} else if (e->key() == Qt::Key_Y) {
|
||||
mapper->setMagnitude(false);
|
||||
contourmapper->setMagnitude(false);
|
||||
filter->changeWindComponent(1);
|
||||
mapper->getSlice(filter->passSlice(XValue,YValue));
|
||||
contourmapper->newZ(filter->passSlice(XValue,YValue), renderer->z);
|
||||
} else if (e->key() == Qt::Key_Z) {
|
||||
mapper->setMagnitude(false);
|
||||
contourmapper->setMagnitude(false);
|
||||
filter->changeWindComponent(2);
|
||||
mapper->getSlice(filter->passSlice(XValue,YValue));
|
||||
contourmapper->newZ(filter->passSlice(XValue,YValue), renderer->z);
|
||||
|
@ -199,7 +214,12 @@ void OpenGLDisplayWidget::keyPressEvent(QKeyEvent *e)
|
|||
filter->changeWindComponent(0);
|
||||
mapper->getSlice(filter->passSlice(XValue,YValue));
|
||||
mapper->setMagnitude(true);
|
||||
// contour renderer does not work for the magnitude case!
|
||||
contourmapper->setMagnitude(true);
|
||||
} else if (e->key() == Qt::Key_Right) {
|
||||
std::cout << "Right press\n";
|
||||
grid->updateT();
|
||||
} else if (e->key() == Qt::Key_Left) {
|
||||
grid->decreaseT();
|
||||
} else if (e->key() == Qt::Key_Space) {
|
||||
if (!animate) {
|
||||
animate = !animate;
|
||||
|
@ -262,7 +282,7 @@ void OpenGLDisplayWidget::initVisualizationPipeline()
|
|||
mapper->getSlice(filter->passSlice(XValue,YValue), XValue,YValue);
|
||||
|
||||
|
||||
contourmapper = new HorizontalSliceToContourLineMapper(); //Mapper causes the program to crash
|
||||
contourmapper = new HorizontalSliceToContourLineMapper(); //Mapper caused the program to crash, but not anymore
|
||||
contourmapper->getSlice(filter->passSlice(XValue,YValue), XValue,YValue,ZValue, 0);
|
||||
float *isos = new float[3];
|
||||
isos[0] = 0.1;
|
||||
|
@ -270,6 +290,10 @@ void OpenGLDisplayWidget::initVisualizationPipeline()
|
|||
isos[2] = -0.1;
|
||||
contourmapper->setIso(isos, 3);
|
||||
delete[] isos;
|
||||
streamlinemapper = new StreamlineMapper();
|
||||
streamlinemapper->getData(filter->passCube(), XValue, YValue, ZValue);
|
||||
streamlinemapper->setValues(125, 100);
|
||||
|
||||
|
||||
// Initialize rendering modules.
|
||||
//bboxRenderer = new DataVolumeBoundingBoxRenderer();
|
||||
|
@ -277,4 +301,7 @@ void OpenGLDisplayWidget::initVisualizationPipeline()
|
|||
contourrenderer = new HorizontalContourLinesRenderer();
|
||||
renderer->setMapper(mapper);
|
||||
contourrenderer->setContourMapper(contourmapper);
|
||||
|
||||
streamlinerenderer = new StreamlineRenderer();
|
||||
streamlinerenderer->setMapper(streamlinemapper);
|
||||
}
|
||||
|
|
|
@ -9,7 +9,8 @@
|
|||
#include "horizontalslicerenderer.h"
|
||||
#include "horizontalcontourlinesrenderer.h"
|
||||
#include "QTimer"
|
||||
|
||||
#include "streamlinemapper.h"
|
||||
#include "streamlinerenderer.h"
|
||||
|
||||
class OpenGLDisplayWidget : public QOpenGLWidget
|
||||
{
|
||||
|
@ -61,6 +62,9 @@ private:
|
|||
//DataVolumeBoundingBoxRenderer *bboxRenderer;
|
||||
HorizontalSliceRenderer *renderer;
|
||||
HorizontalContourLinesRenderer *contourrenderer;
|
||||
StreamlineMapper *streamlinemapper;
|
||||
StreamlineRenderer *streamlinerenderer;
|
||||
|
||||
// ....
|
||||
|
||||
// Initialize the pipeline (create instances of data source, mapping,
|
||||
|
|
Binary file not shown.
191
datenvisualisierung_sose2024/streamlinemapper.cpp
Normal file
191
datenvisualisierung_sose2024/streamlinemapper.cpp
Normal file
|
@ -0,0 +1,191 @@
|
|||
#include "streamlinemapper.h"
|
||||
#include <iostream>
|
||||
|
||||
StreamlineMapper::StreamlineMapper()
|
||||
{
|
||||
std::cout << "StreamlineMapper constructor called" << std::endl;
|
||||
}
|
||||
|
||||
StreamlineMapper::~StreamlineMapper() {
|
||||
std::cout << "StreamlineMapper destructor called" << std::endl;
|
||||
}
|
||||
|
||||
void StreamlineMapper::getData(float *cube, int x, int y, int z) {
|
||||
// Sets up the variables we will be working with
|
||||
source = cube;
|
||||
xs = x;
|
||||
ys = y;
|
||||
zs = z;
|
||||
}
|
||||
|
||||
|
||||
void StreamlineMapper::setValues(int seeds, int interpolation_length) {
|
||||
// Sets up the seed point variables
|
||||
num_steps = interpolation_length;
|
||||
num_seeds = seeds;
|
||||
}
|
||||
|
||||
float StreamlineMapper::bilinearInterpolation(float x_i, float y_i, int z_slice, int i) {
|
||||
// We first implement bilinear interpolation, because the n-D expasion is then easier
|
||||
// Check lecture and wikipedia for implementation idea
|
||||
//
|
||||
|
||||
if (x_i > 1 or x_i < 0 or y_i > 1 or y_i < 0) {
|
||||
//std::cout << "ERROR: Value outside of the valid range!" << std::endl;
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
int x = x_i * (xs-1); //This is my simple trick to determine the index to the lower left of the point
|
||||
int y = y_i * (ys-1);
|
||||
|
||||
int y_shift = xs;
|
||||
int z_shift = z_slice*xs*ys + xs*y;
|
||||
|
||||
float xd = (x_i-x)/(xs-1);
|
||||
float yd = (y_i-y)/(ys-1);
|
||||
float new_x1 = (1-xd) * source[3*(x+z_shift)+i] + xd * source[3*(x+1+z_shift)+i]; //lower part of the rectangle
|
||||
float new_x2 = (1-xd) * source[3*(x+y_shift+z_shift)+i] + xd * source[3*(x+1+y_shift+z_shift)+i]; // aaaand the upper part
|
||||
|
||||
// Tested on a small example on an online compiler
|
||||
return (1-yd) * new_x1 + yd * new_x2;
|
||||
}
|
||||
|
||||
float StreamlineMapper::trilinearInterpolation(float x_i, float y_i, float z_i, int i) {
|
||||
|
||||
// Neat trick allows us to simplify the trilinear interpolation
|
||||
// We only need two bilinear interpolations
|
||||
if (x_i > 1 or x_i < 0 or z_i > 1 or z_i < 0 or y_i > 1 or y_i < 0) {
|
||||
//std::cout << "ERROR: Value outside of the valid range!" << std::endl;
|
||||
return 1.0;
|
||||
}
|
||||
int z = z_i * (zs-1);
|
||||
float zd = (z_i-z)/(zs-1);
|
||||
float cLower = bilinearInterpolation(x_i, y_i, z, i);
|
||||
float cUpper = bilinearInterpolation(x_i, y_i, z+1, i);
|
||||
return (1-zd) * cLower + zd * cUpper; // analogous to bilinear interpolation, but we do it between two planes
|
||||
}
|
||||
|
||||
QVector3D StreamlineMapper::euler2D(QVector3D coordinate, float deltaT) {
|
||||
// Check definition in the lectures, the 2D version simply ignores the z-component
|
||||
float v_x = trilinearInterpolation(coordinate.x(), coordinate.y(), coordinate.z(), 0);
|
||||
float v_y = trilinearInterpolation(coordinate.x(), coordinate.y(), coordinate.z(), 1);
|
||||
coordinate = coordinate + QVector3D(v_x, v_y, 0)*deltaT;
|
||||
return coordinate;
|
||||
}
|
||||
|
||||
QVector3D StreamlineMapper::euler3D(QVector3D coordinate, float deltaT) {
|
||||
float v_x = trilinearInterpolation(coordinate.x(), coordinate.y(), coordinate.z(), 0);
|
||||
float v_y = trilinearInterpolation(coordinate.x(), coordinate.y(), coordinate.z(), 1);
|
||||
float v_z = trilinearInterpolation(coordinate.x(), coordinate.y(), coordinate.z(), 2);
|
||||
coordinate = coordinate + QVector3D(v_x, v_y, v_z)*deltaT;
|
||||
return coordinate;
|
||||
}
|
||||
|
||||
QVector3D StreamlineMapper::rungeKutta2D(QVector3D coordinate, float deltaT) {
|
||||
// Check definition in the lectures, the 2D version simply ignores the z-component
|
||||
// Parts of rungeKutta will exit the unitcube and that's OK, because I implemented
|
||||
// bilinear and trilinear interpolations so that they return 1.0 when exiting the cube
|
||||
// Should rungeKutta thus leave the cube, the final coordinate will be discarded
|
||||
float v_x = trilinearInterpolation(coordinate.x(), coordinate.y(), coordinate.z(), 0);
|
||||
float v_y = trilinearInterpolation(coordinate.x(), coordinate.y(), coordinate.z(), 1);
|
||||
QVector3D k1 = QVector3D(v_x, v_y, 0) * deltaT;
|
||||
QVector3D xNew = coordinate + (k1/2);
|
||||
|
||||
v_x = trilinearInterpolation(xNew.x(),xNew.y(),xNew.z(), 0);
|
||||
v_y = trilinearInterpolation(xNew.x(),xNew.y(),xNew.z(), 1);
|
||||
QVector3D k2 = QVector3D(v_x, v_y, 0) * deltaT;
|
||||
|
||||
xNew = coordinate + (k2/2);
|
||||
v_x = trilinearInterpolation(xNew.x(),xNew.y(),xNew.z(), 0);
|
||||
v_y = trilinearInterpolation(xNew.x(),xNew.y(),xNew.z(), 1);
|
||||
QVector3D k3 = QVector3D(v_x, v_y, 0) * deltaT;
|
||||
|
||||
xNew = coordinate + k3;
|
||||
v_x = trilinearInterpolation(xNew.x(),xNew.y(),xNew.z(), 0);
|
||||
v_y = trilinearInterpolation(xNew.x(),xNew.y(),xNew.z(), 1);
|
||||
QVector3D k4 = QVector3D(v_x, v_y, 0) * deltaT;
|
||||
|
||||
coordinate = coordinate + (k1/6) + (k2/3) + (k3/3) + (k4/6);
|
||||
|
||||
return coordinate;
|
||||
}
|
||||
|
||||
QVector3D StreamlineMapper::rungeKutta3D(QVector3D coordinate, float deltaT) {
|
||||
float v_x = trilinearInterpolation(coordinate.x(), coordinate.y(), coordinate.z(), 0);
|
||||
float v_y = trilinearInterpolation(coordinate.y(), coordinate.y(), coordinate.z(), 1);
|
||||
float v_z = trilinearInterpolation(coordinate.z(), coordinate.y(), coordinate.z(), 2);
|
||||
QVector3D k1 = QVector3D(v_x, v_y, v_z) * deltaT;
|
||||
QVector3D xNew = coordinate + (k1/2);
|
||||
|
||||
v_x = trilinearInterpolation(xNew.x(),xNew.y(),xNew.z(), 0);
|
||||
v_y = trilinearInterpolation(xNew.x(),xNew.y(),xNew.z(), 1);
|
||||
v_z = trilinearInterpolation(xNew.x(),xNew.y(),xNew.z(), 2);
|
||||
QVector3D k2 = QVector3D(v_x, v_y, v_z) * deltaT;
|
||||
|
||||
xNew = coordinate + (k2/2);
|
||||
v_x = trilinearInterpolation(xNew.x(),xNew.y(),xNew.z(), 0);
|
||||
v_y = trilinearInterpolation(xNew.x(),xNew.y(),xNew.z(), 1);
|
||||
v_z = trilinearInterpolation(xNew.x(),xNew.y(),xNew.z(), 2);
|
||||
QVector3D k3 = QVector3D(v_x, v_y, v_z) * deltaT;
|
||||
|
||||
xNew = coordinate + k3;
|
||||
v_x = trilinearInterpolation(xNew.x(),xNew.y(),xNew.z(), 0);
|
||||
v_y = trilinearInterpolation(xNew.x(),xNew.y(),xNew.z(), 1);
|
||||
v_z = trilinearInterpolation(xNew.x(),xNew.y(),xNew.z(), 2);
|
||||
QVector3D k4 = QVector3D(v_x, v_y, v_z) * deltaT;
|
||||
|
||||
coordinate = coordinate + (k1/6) + (k2/3) + (k3/3) + (k4/6);
|
||||
|
||||
return coordinate;
|
||||
}
|
||||
|
||||
int StreamlineMapper::get_num_seeds() {
|
||||
// speeds everything up by allowing the renderer to obtain
|
||||
// the number of seed points directly from the mapper
|
||||
// makes the opengldisplaywidget.cpp file simpler
|
||||
return num_seeds;
|
||||
}
|
||||
|
||||
QVector<QVector<QVector3D>> StreamlineMapper::computeStreamlines() {
|
||||
// The idea is to take a seed point (or many) and then iterate through the points
|
||||
// with a certain procedure (euler3D/rungeKutta3D) and then terminate the streamline
|
||||
// when it exists the unit cube OR when it reaches the maximum number of steps
|
||||
// Note that the length of every streamline is NOT the same, hence why I pass
|
||||
// QVector<QVector<QVector3D>> and not just a single QVector<QVector3D>
|
||||
|
||||
QVector<QVector<QVector3D>> vectors; // We store all of our points in a dynamic array as Vector3Ds
|
||||
|
||||
|
||||
// Reminder that we had to debug A LOT:
|
||||
/*// TEST IF RENDERER+SHADERS WORKS
|
||||
QVector3D vector1 = QVector3D(0.0, 0.0, 0.0); // Vector 1 and 2 will then be connected as a line (using GL_LINES)
|
||||
QVector3D vector2 = QVector3D(.0005;
|
||||
|
||||
for (int i = 0; i < num_seeds; i++) {
|
||||
seed_point = QVector3D(0.2,0.2, 0.1*i);
|
||||
container << seed_point;
|
||||
for (int j = 0; j < num_st1.0, 1.0, 1.0);
|
||||
vectors << vector1 << vector2; */
|
||||
|
||||
// STREAMLINE COMPUTATION
|
||||
|
||||
QVector3D seed_point;
|
||||
QVector<QVector3D> container;
|
||||
//vectors << seed_point;
|
||||
float dT = 0.2;
|
||||
|
||||
for (int i = 0; i < num_seeds; i++) {
|
||||
seed_point = QVector3D(0.2*(i%5) +0.01, 0.2*(i/5 % 5) +0.01, 0.2 * (i/25) +0.01);
|
||||
container << seed_point;
|
||||
for (int j = 0; j < num_steps-1; j++) {
|
||||
seed_point = euler3D(seed_point, dT);
|
||||
if (seed_point.x() < 0 or seed_point.x() > 1 or seed_point.y() < 0 or seed_point.y() > 1 or seed_point.z() < 0 or seed_point.z() > 1) {
|
||||
break;
|
||||
}
|
||||
container << seed_point;
|
||||
}
|
||||
vectors << container;
|
||||
container.clear();
|
||||
}
|
||||
return vectors;
|
||||
}
|
32
datenvisualisierung_sose2024/streamlinemapper.h
Normal file
32
datenvisualisierung_sose2024/streamlinemapper.h
Normal file
|
@ -0,0 +1,32 @@
|
|||
#ifndef STREAMLINEMAPPER_H
|
||||
#define STREAMLINEMAPPER_H
|
||||
#include <QVector>
|
||||
#include <QVector3D>
|
||||
|
||||
class StreamlineMapper
|
||||
{
|
||||
public:
|
||||
StreamlineMapper();
|
||||
~StreamlineMapper();
|
||||
void getData(float *source, int x, int y, int z);
|
||||
QVector<QVector3D> ComputeStreamlines();
|
||||
void SetSourcePoints(float *points, int num);
|
||||
float bilinearInterpolation(float x_i, float y_i, int z_slice, int i);
|
||||
float trilinearInterpolation(float x_i, float y_i, float z_i, int i);
|
||||
QVector3D euler2D(QVector3D coordinate, float deltaT);
|
||||
QVector3D euler3D(QVector3D coordinate, float deltaT);
|
||||
QVector3D rungeKutta2D(QVector3D coordinate, float deltaT);
|
||||
QVector3D rungeKutta3D(QVector3D coordinate, float deltaT);
|
||||
void setValues(int seeds, int interpolation_length);
|
||||
QVector<QVector<QVector3D>> computeStreamlines();
|
||||
int get_num_seeds();
|
||||
private:
|
||||
float* source;
|
||||
float* sourcepoints;
|
||||
int numPoints;
|
||||
int xs, ys, zs;
|
||||
int num_seeds;
|
||||
int num_steps;
|
||||
};
|
||||
|
||||
#endif // STREAMLINEMAPPER_H
|
BIN
datenvisualisierung_sose2024/streamlinemapper.o
Normal file
BIN
datenvisualisierung_sose2024/streamlinemapper.o
Normal file
Binary file not shown.
101
datenvisualisierung_sose2024/streamlinerenderer.cpp
Normal file
101
datenvisualisierung_sose2024/streamlinerenderer.cpp
Normal file
|
@ -0,0 +1,101 @@
|
|||
#include "streamlinerenderer.h"
|
||||
#include <QOpenGLFunctions>
|
||||
#include <QOpenGLContext>
|
||||
#include <iostream>
|
||||
|
||||
StreamlineRenderer::StreamlineRenderer() : vertexBuffer(QOpenGLBuffer::VertexBuffer)
|
||||
{
|
||||
initOpenGLShaders();
|
||||
initContours();
|
||||
std::cout << "STREAMLINE RENDERER CALLED";
|
||||
}
|
||||
|
||||
StreamlineRenderer::~StreamlineRenderer() {
|
||||
vertexBuffer.destroy();
|
||||
std::cout << "Destructor called";
|
||||
}
|
||||
|
||||
void StreamlineRenderer::setMapper(StreamlineMapper* mappy) {
|
||||
mapper = mappy;
|
||||
num_seeds = mapper->get_num_seeds();
|
||||
}
|
||||
|
||||
void StreamlineRenderer::initContours()
|
||||
{
|
||||
|
||||
vertexBuffer.create(); // Make sure to destroy it in the destructor!
|
||||
}
|
||||
|
||||
void StreamlineRenderer::initOpenGLShaders()
|
||||
{
|
||||
// For the contours
|
||||
if (!shaderProgram.addShaderFromSourceFile(QOpenGLShader::Vertex,
|
||||
"lines_vshader_streamline.glsl"))
|
||||
{
|
||||
std::cout << "Vertex shader error:\n"
|
||||
<< shaderProgram.log().toStdString() << "\n" << std::flush;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!shaderProgram.addShaderFromSourceFile(QOpenGLShader::Fragment,
|
||||
"lines_fshader_streamline.glsl"))
|
||||
{
|
||||
std::cout << "Fragment shader error:\n"
|
||||
<< shaderProgram.log().toStdString() << "\n" << std::flush;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!shaderProgram.link())
|
||||
{
|
||||
std::cout << "Shader link error:\n"
|
||||
<< shaderProgram.log().toStdString() << "\n" << std::flush;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void StreamlineRenderer::setValues(int seeds) {
|
||||
num_seeds = seeds;
|
||||
}
|
||||
|
||||
void StreamlineRenderer::draw(QMatrix4x4 mvpMatrix)
|
||||
{
|
||||
QVector<QVector<QVector3D>> vector_list = mapper->computeStreamlines();
|
||||
for (int i = 0; i<num_seeds; i++) {
|
||||
render(vector_list.at(i), mvpMatrix);
|
||||
}
|
||||
}
|
||||
|
||||
void StreamlineRenderer::render(QVector<QVector3D> vectors, QMatrix4x4 mvpMatrix) {
|
||||
std::cout << vectors.size() << std::endl;
|
||||
vertexBuffer.bind();
|
||||
vertexBuffer.allocate(vectors.data(), vectors.size() * sizeof(QVector3D));
|
||||
vertexBuffer.release();
|
||||
|
||||
QOpenGLVertexArrayObject::Binder vaoBinder(&vertexArrayObject);
|
||||
if (vertexArrayObject.isCreated())
|
||||
{
|
||||
vertexBuffer.bind();
|
||||
shaderProgram.setAttributeBuffer("vertexPosition", GL_FLOAT, 0, 3, sizeof(QVector3D));
|
||||
shaderProgram.enableAttributeArray("vertexPosition");
|
||||
vertexBuffer.release();
|
||||
}
|
||||
|
||||
|
||||
// Tell OpenGL to use the shader program of this class.
|
||||
shaderProgram.bind();
|
||||
|
||||
// Bind the vertex array object that links to the bounding box vertices.
|
||||
vertexArrayObject.bind();
|
||||
|
||||
// Set the model-view-projection matrix as a uniform value.
|
||||
shaderProgram.setUniformValue("mvpMatrix", mvpMatrix);
|
||||
|
||||
// Issue OpenGL draw commands.
|
||||
QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
|
||||
f->glLineWidth(10);
|
||||
f->glDrawArrays(GL_LINE_STRIP, 0, vectors.size()); // GL_LINES verbindet Vektore paarenweise, wahrend GL_LINE_STRIP jeden Vektor mit seinen 2 Nachbarn im Array verbindet
|
||||
|
||||
// Release objects until next render cycle.
|
||||
vertexArrayObject.release();
|
||||
shaderProgram.release();
|
||||
}
|
28
datenvisualisierung_sose2024/streamlinerenderer.h
Normal file
28
datenvisualisierung_sose2024/streamlinerenderer.h
Normal file
|
@ -0,0 +1,28 @@
|
|||
#ifndef STREAMLINERENDERER_H
|
||||
#define STREAMLINERENDERER_H
|
||||
#include "streamlinemapper.h"
|
||||
#include <QOpenGLShaderProgram>
|
||||
#include <QOpenGLBuffer>
|
||||
#include <QOpenGLVertexArrayObject>
|
||||
|
||||
|
||||
class StreamlineRenderer
|
||||
{
|
||||
public:
|
||||
StreamlineRenderer();
|
||||
~StreamlineRenderer();
|
||||
void setMapper(StreamlineMapper* mappy);
|
||||
void initOpenGLShaders();
|
||||
void initContours();
|
||||
void draw(QMatrix4x4 mvpMatrix);
|
||||
void setValues(int seeds);
|
||||
void render(QVector<QVector3D> vectors, QMatrix4x4 mvpMatrix);
|
||||
private:
|
||||
StreamlineMapper* mapper;
|
||||
QOpenGLShaderProgram shaderProgram;
|
||||
QOpenGLBuffer vertexBuffer;
|
||||
QOpenGLVertexArrayObject vertexArrayObject;
|
||||
int num_seeds;
|
||||
};
|
||||
|
||||
#endif // STREAMLINERENDERER_H
|
BIN
datenvisualisierung_sose2024/streamlinerenderer.o
Normal file
BIN
datenvisualisierung_sose2024/streamlinerenderer.o
Normal file
Binary file not shown.
Loading…
Reference in a new issue