Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
grapa_alisa
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Alisa Jung
grapa_alisa
Commits
0122e0aa
Commit
0122e0aa
authored
Nov 16, 2015
by
Alisa Jung
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
active viewport highlighting
parent
5df31a29
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
78 additions
and
52 deletions
+78
-52
controller.cpp
helloqube/controller.cpp
+14
-1
helloqube.pro.user
helloqube/helloqube.pro.user
+1
-1
myglwidget.cpp
helloqube/myglwidget.cpp
+56
-46
myglwidget.h
helloqube/myglwidget.h
+7
-4
No files found.
helloqube/controller.cpp
View file @
0122e0aa
...
...
@@ -35,7 +35,11 @@ void Controller::showSingleView(){
views
[
i
]
->
hide
();
}
views
[
0
]
->
show
();
views
[
currentWidgetIndex
]
->
setFocused
(
false
);
currentWidgetIndex
=
0
;
views
[
currentWidgetIndex
]
->
setFocused
(
true
);
}
void
Controller
::
showDoubleView
(){
...
...
@@ -49,7 +53,11 @@ void Controller::showDoubleView(){
for
(
int
i
=
0
;
i
<
2
;
i
++
){
views
[
i
]
->
show
();
}
if
(
currentWidgetIndex
>
1
)
currentWidgetIndex
=
0
;
if
(
currentWidgetIndex
>
1
)
{
views
[
currentWidgetIndex
]
->
setFocused
(
false
);
currentWidgetIndex
=
0
;
views
[
currentWidgetIndex
]
->
setFocused
(
true
);
}
}
void
Controller
::
showQuadView
(){
...
...
@@ -98,7 +106,12 @@ void Controller::processMousePressEvent(QMouseEvent *event, MyGLWidget *widget){
leftButtonPressed
=
true
;
lastClickPosition
=
event
->
pos
();
}
if
(
currentWidgetIndex
!=
widget
->
getIndex
()){
qDebug
(
"Mouse Press event with other index"
);
views
[
currentWidgetIndex
]
->
setFocused
(
false
);
currentWidgetIndex
=
widget
->
getIndex
();
views
[
currentWidgetIndex
]
->
setFocused
(
true
);
}
}
void
Controller
::
processMouseMoveEvent
(
QMouseEvent
*
event
,
MyGLWidget
*
widget
){
...
...
helloqube/helloqube.pro.user
View file @
0122e0aa
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 3.5.1, 2015-11-1
0T14:37:5
5. -->
<!-- Written by QtCreator 3.5.1, 2015-11-1
5T21:45:3
5. -->
<qtcreator>
<data>
<variable>
EnvironmentId
</variable>
...
...
helloqube/myglwidget.cpp
View file @
0122e0aa
...
...
@@ -19,8 +19,7 @@ MyGLWidget::MyGLWidget(int index, Controller* c, bool isPerspective, QQuaternion
rightButtonPressed
=
false
;
controller
=
c
;
this
->
isPerspective
=
isPerspective
;
setStyleSheet
(
" border:3px solid rgb(255, 255, 0); "
);
this
->
isFocused
=
isPerspective
;
//start with focus on perspective view
}
MyGLWidget
::~
MyGLWidget
()
...
...
@@ -137,25 +136,8 @@ void MyGLWidget::paintGL(){
//cam rotation
QMatrix4x4
camRot
=
QMatrix4x4
();
camRot
.
rotate
(
cameraRotation
);
//for cube rotation
QMatrix4x4
m
=
QMatrix4x4
();
m
.
rotate
(
qubeRotation
);
//for cube translation
QMatrix4x4
translateRot1
=
QMatrix4x4
(
1
,
0
,
0
,
cubeTranslation
.
x
(),
0
,
1
,
0
,
cubeTranslation
.
y
(),
0
,
0
,
1
,
cubeTranslation
.
z
(),
0
,
0
,
0
,
1
);
QMatrix4x4
zoomCameraMatrix
=
QMatrix4x4
(
1
,
0
,
0
,
0
,
0
,
1
,
0
,
0
,
0
,
0
,
1
,
cameraZoom
,
0
,
0
,
0
,
1
);
// //zoom camera
// glTranslatef(0,0,cameraZoom);//Kamera sitzt sonst in (0,0,0) und man sieht nichts (duh)
// glTranslatef(cameraX,cameraY,0);//TODO anständig machen, kamerarotation fehlt noch.
//So scheint das zumindest für die Kamera zu funktionieren:
//1. ins Rotationszentrum verschieben - Wenn Rotationszentrum geändert wird, schon rotation berücksichtigen
//2. Rotieren
...
...
@@ -165,6 +147,13 @@ void MyGLWidget::paintGL(){
glTranslatef
(
camRotCenter
.
x
(),
camRotCenter
.
y
(),
camRotCenter
.
z
());
//for cube rotation
QMatrix4x4
m
=
QMatrix4x4
();
m
.
rotate
(
qubeRotation
);
//for cube translation
QMatrix4x4
translateRot1
=
QMatrix4x4
(
1
,
0
,
0
,
cubeTranslation
.
x
(),
0
,
1
,
0
,
cubeTranslation
.
y
(),
0
,
0
,
1
,
cubeTranslation
.
z
(),
0
,
0
,
0
,
1
);
//stack matrices
glMultMatrixf
(
translateRot1
.
data
());
//Punkte zurück schieben damit rotation um qube zentrum ist
glMultMatrixf
(
m
.
data
());
...
...
@@ -276,13 +265,59 @@ void MyGLWidget::paintGL(){
}
glEnd
();
}
//has to be down here or will be overpainted by above code
if
(
isFocused
)
highlightViewport
();
}
void
MyGLWidget
::
setFocused
(
bool
isFocused
){
this
->
isFocused
=
isFocused
;
updateGL
();
}
void
MyGLWidget
::
highlightViewport
(){
glMatrixMode
(
GL_MODELVIEW
);
glLoadIdentity
();
glMatrixMode
(
GL_PROJECTION
);
glLoadIdentity
();
glOrtho
(
-
1
,
1
,
-
1
,
1
,
-
1
,
1
);
//to draw yellow rectangle in screen coordinates
GLfloat
specularColor
[]
=
{
1
,
1
,
1
};
GLfloat
shininess
[]
=
{
128
};
//specular exponent
glMaterialfv
(
GL_FRONT
,
GL_SPECULAR
,
specularColor
);
glMaterialfv
(
GL_FRONT
,
GL_SHININESS
,
shininess
);
GLfloat
yellow
[]
=
{
1
,
1
,
0
};
glMaterialfv
(
GL_FRONT
,
GL_DIFFUSE
,
yellow
);
glNormal3f
(
0
,
0
,
1
);
glDisable
(
GL_DEPTH_TEST
);
glLineWidth
(
15.0
f
);
glBegin
(
GL_LINE_LOOP
);
glVertex2f
(
1
,
1
);
glVertex2f
(
1
,
-
1
);
glVertex2f
(
-
1
,
-
1
);
glVertex2f
(
-
1
,
1
);
glEnd
();
glEnable
(
GL_DEPTH_TEST
);
resetProjectionMatrix
();
}
void
MyGLWidget
::
resizeGL
(
int
width
,
int
height
){
double
p
=
(
double
)
width
/
(
double
)
height
;
qDebug
()
<<
"Resize to "
<<
width
<<
","
<<
height
<<
", Perspective: "
<<
p
;
windowWidth
=
width
;
windowHeight
=
height
;
qDebug
()
<<
"Resize to "
<<
width
<<
","
<<
height
<<
", Perspective: "
<<
(
double
)
windowWidth
/
(
double
)
windowHeight
;
glViewport
(
0
,
0
,
width
,
height
);
resetProjectionMatrix
();
controller
->
setScreenScenter
(
QPoint
((
double
)
width
/
2.0
,(
double
)
height
/
2.0
));
//lieber zu oft casten bevors nicht tut...
}
void
MyGLWidget
::
resetProjectionMatrix
(){
double
p
=
(
double
)
windowWidth
/
(
double
)
windowHeight
;
glMatrixMode
(
GL_PROJECTION
);
//from HelloGL example
glLoadIdentity
();
...
...
@@ -294,7 +329,6 @@ void MyGLWidget::resizeGL(int width, int height){
glMatrixMode
(
GL_MODELVIEW
);
controller
->
setScreenScenter
(
QPoint
((
double
)
width
/
2.0
,(
double
)
height
/
2.0
));
//lieber zu oft casten bevors nicht tut...
}
void
MyGLWidget
::
mousePressEvent
(
QMouseEvent
*
event
){
...
...
@@ -318,30 +352,6 @@ void MyGLWidget::keyReleaseEvent(QKeyEvent *event){
}
}
void
MyGLWidget
::
paintEvent
(
QPaintEvent
*
pe
)
{
//reaaaaally weird:
// QStyleOption o;
// o.initFrom(this);
// QPainter p(this);
// style()->drawPrimitive(
// QStyle::PE_Widget, &o, &p, this);
//even weider:
// QStyleOption opt;
// opt.init(this);
// QStylePainter p(this);
// p.drawPrimitive(QStyle::PE_Widget, opt);
//Anyway, the internet tells me I need to do something here in Order to use the style sheet
//and I didn't find any other plausible option to add a border to the selected view.
//A little hint on the assignment would have helped a great deal here...
//need this to actually draw gl stuff
QGLWidget
::
paintEvent
(
pe
);
};
void
MyGLWidget
::
translateCamera
(
double
xDiff
,
double
yDiff
,
double
zDiff
)
{
//in order to "move parallel to image plane", we have to rotate the image coordinates xDiff and yDiff by our current camera rotation.
...
...
helloqube/myglwidget.h
View file @
0122e0aa
...
...
@@ -41,6 +41,7 @@ class MyGLWidget : public QGLWidget
void
initShaderStuff
();
int
getIndex
();
void
setFocused
(
bool
isFocused
);
//Tell view if it is focused and therefore needs a yellow border
protected
:
//4.1 Core Functionality
...
...
@@ -50,9 +51,8 @@ protected:
void
mousePressEvent
(
QMouseEvent
*
event
);
void
mouseMoveEvent
(
QMouseEvent
*
event
);
void
wheelEvent
(
QWheelEvent
*
event
);
void
keyPressEvent
(
QKeyEvent
*
event
);
void
keyReleaseEvent
(
QKeyEvent
*
event
);
void
paintEvent
(
QPaintEvent
*
event
);
void
keyPressEvent
(
QKeyEvent
*
event
);
//for ctrl key for mode switch
void
keyReleaseEvent
(
QKeyEvent
*
event
);
//for ctrl key for mode switch
Controller
*
controller
;
...
...
@@ -84,7 +84,10 @@ private:
QGLShaderProgram
*
phongShader
;
void
highlightViewport
();
void
resetProjectionMatrix
();
double
windowWidth
,
windowHeight
;
bool
isFocused
;
public
slots
:
//4.1.1 slots for shading modes
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment