Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
CGoGN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Hurstel
CGoGN
Commits
13e7a3cc
Commit
13e7a3cc
authored
Jul 29, 2011
by
Maire Nicolas
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
stage_shader_reloaded est quasi-fonctionnel, reste le problème des normales de plans.
parent
070962c3
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
95 additions
and
131 deletions
+95
-131
Apps/Tuto/stage_shader_reloaded.cpp
Apps/Tuto/stage_shader_reloaded.cpp
+91
-57
Apps/Tuto/stage_shader_reloaded.h
Apps/Tuto/stage_shader_reloaded.h
+2
-2
Apps/Tuto/stage_shader_reloaded.ui
Apps/Tuto/stage_shader_reloaded.ui
+2
-72
No files found.
Apps/Tuto/stage_shader_reloaded.cpp
View file @
13e7a3cc
...
...
@@ -92,31 +92,6 @@ void StageShaderReloaded::slot_pushButton_addPlane()
updateGLMatrices
();
}
void
StageShaderReloaded
::
slot_pushButton_deletePlane
()
{
if
(
m_lastPickedObject
)
{
}
/*if (m_pickablePlanes.size() > 0)
{
if (m_lastPickedObject == m_pickablePlanes.back())
m_lastPickedObject = NULL;
delete m_pickablePlanes.back();
m_pickablePlanes.pop_back();
m_shader->setClipPlanesCount(dock.comboBox_PlaneIndex->count() - 1);
dock.comboBox_PlaneIndex->removeItem(dock.comboBox_PlaneIndex->count() - 1);
dock.vertexEdit->setPlainText(QString(m_shader->getVertexShaderSrc()));
dock.fragmentEdit->setPlainText(QString(m_shader->getFragmentShaderSrc()));
updateGLMatrices();
}*/
}
void
StageShaderReloaded
::
slot_spinBox_GridResolution
(
int
i
)
{
m_planeDrawable
->
updatePrecisionDrawing
(
i
);
...
...
@@ -153,27 +128,6 @@ void StageShaderReloaded::slot_pushButton_addSphere()
updateGLMatrices
();
}
void
StageShaderReloaded
::
slot_pushButton_deleteSphere
()
{
/*if (m_pickableSpheres.size() > 0)
{
if (m_lastPickedObject == m_pickableSpheres.back())
m_lastPickedObject = NULL;
delete m_pickableSpheres.back();
m_pickableSpheres.pop_back();
m_shader->setClipSpheresCount(dock.comboBox_SphereIndex->count() - 1);
dock.comboBox_SphereIndex->removeItem(dock.comboBox_SphereIndex->count() - 1);
dock.vertexEdit->setPlainText(QString(m_shader->getVertexShaderSrc()));
dock.fragmentEdit->setPlainText(QString(m_shader->getFragmentShaderSrc()));
updateGLMatrices();
}*/
}
void
StageShaderReloaded
::
slot_spinBox_SphereResolution
(
int
i
)
{
m_sphereDrawable
->
updatePrecisionDrawing
(
i
);
...
...
@@ -209,6 +163,50 @@ void StageShaderReloaded::slot_horizontalSlider_ClippingMode(int i)
updateGLMatrices
();
}
void
StageShaderReloaded
::
slot_pushButton_deleteSelectedObject
()
{
if
(
m_lastPickedObject
)
{
// Delete clipping object
if
(
m_lastPickedObject
->
checkType
<
Utils
::
Grid
>
())
m_shader
->
deleteClipPlane
(
m_lastPickedObject
->
id
());
else
if
(
m_lastPickedObject
->
checkType
<
Utils
::
Sphere
>
())
m_shader
->
deleteClipSphere
(
m_lastPickedObject
->
id
());
// Delete pickable
if
(
m_lastPickedObject
->
checkType
<
Utils
::
Grid
>
())
{
for
(
size_t
i
=
0
;
i
<
m_pickablePlanes
.
size
();
i
++
)
{
if
(
m_pickablePlanes
[
i
]
==
m_lastPickedObject
)
{
delete
m_pickablePlanes
[
i
];
m_pickablePlanes
.
erase
(
m_pickablePlanes
.
begin
()
+
i
);
}
}
}
else
if
(
m_lastPickedObject
->
checkType
<
Utils
::
Sphere
>
())
{
for
(
size_t
i
=
0
;
i
<
m_pickableSpheres
.
size
();
i
++
)
{
if
(
m_pickableSpheres
[
i
]
==
m_lastPickedObject
)
{
delete
m_pickableSpheres
[
i
];
m_pickableSpheres
.
erase
(
m_pickableSpheres
.
begin
()
+
i
);
}
}
}
m_lastPickedObject
=
NULL
;
// Update shader sources edits
dock
.
vertexEdit
->
setPlainText
(
QString
(
m_shader
->
getVertexShaderSrc
()));
dock
.
fragmentEdit
->
setPlainText
(
QString
(
m_shader
->
getFragmentShaderSrc
()));
updateGLMatrices
();
}
}
void
StageShaderReloaded
::
button_compile
()
{
QString
st1
=
dynamic_cast
<
Utils
::
QT
::
uiDockInterface
*>
(
dockWidget
())
->
vertexEdit
->
toPlainText
();
...
...
@@ -257,7 +255,6 @@ void StageShaderReloaded::initGUI()
setCallBack
(
dock
.
explod_phi3
,
SIGNAL
(
valueChanged
(
double
)),
SLOT
(
slot_explodTopoPhi3
(
double
)));
setCallBack
(
dock
.
pushButton_addPlane
,
SIGNAL
(
clicked
()),
SLOT
(
slot_pushButton_addPlane
()));
setCallBack
(
dock
.
pushButton_deletePlane
,
SIGNAL
(
clicked
()),
SLOT
(
slot_pushButton_deletePlane
()));
setCallBack
(
dock
.
spinBox_GridResolution
,
SIGNAL
(
valueChanged
(
int
)),
SLOT
(
slot_spinBox_GridResolution
(
int
)));
setCallBack
(
dock
.
doubleSpinBox_GridColorR
,
SIGNAL
(
valueChanged
(
double
)),
SLOT
(
slot_doubleSpinBox_GridColor
(
double
)));
...
...
@@ -269,7 +266,9 @@ void StageShaderReloaded::initGUI()
dock
.
vertexEdit
->
setPlainText
(
QString
(
m_shader
->
getVertexShaderSrc
()));
dock
.
fragmentEdit
->
setPlainText
(
QString
(
m_shader
->
getFragmentShaderSrc
()));
dock
.
spinBox_GridResolution
->
setValue
(
5
);
// TODO : Utiliser un getteur
unsigned
int
planesPrecision1
,
planesPrecision2
;
m_planeDrawable
->
getPrecisionDrawing
(
planesPrecision1
,
planesPrecision2
);
dock
.
spinBox_GridResolution
->
setValue
(
planesPrecision1
);
Geom
::
Vec3f
planesCol
=
Geom
::
Vec3f
(
1.0
,
0.0
,
0.0
);
// TODO : utiliser un getteur
dock
.
doubleSpinBox_GridColorR
->
setValue
(
planesCol
[
0
]);
dock
.
doubleSpinBox_GridColorG
->
setValue
(
planesCol
[
1
]);
...
...
@@ -278,14 +277,15 @@ void StageShaderReloaded::initGUI()
setCallBack
(
dock
.
pushButton_addSphere
,
SIGNAL
(
clicked
()),
SLOT
(
slot_pushButton_addSphere
()));
setCallBack
(
dock
.
pushButton_deleteSphere
,
SIGNAL
(
clicked
()),
SLOT
(
slot_pushButton_deleteSphere
()));
setCallBack
(
dock
.
spinBox_SphereResolution
,
SIGNAL
(
valueChanged
(
int
)),
SLOT
(
slot_spinBox_SphereResolution
(
int
)));
setCallBack
(
dock
.
doubleSpinBox_SphereGridColorR
,
SIGNAL
(
valueChanged
(
double
)),
SLOT
(
slot_doubleSpinBox_SphereGridColor
(
double
)));
setCallBack
(
dock
.
doubleSpinBox_SphereGridColorG
,
SIGNAL
(
valueChanged
(
double
)),
SLOT
(
slot_doubleSpinBox_SphereGridColor
(
double
)));
setCallBack
(
dock
.
doubleSpinBox_SphereGridColorB
,
SIGNAL
(
valueChanged
(
double
)),
SLOT
(
slot_doubleSpinBox_SphereGridColor
(
double
)));
dock
.
spinBox_SphereResolution
->
setValue
(
3
);
// TODO : utiliser un getteur
unsigned
int
spheresPrecision1
,
spheresPrecision2
;
m_sphereDrawable
->
getPrecisionDrawing
(
spheresPrecision1
,
spheresPrecision2
);
dock
.
spinBox_GridResolution
->
setValue
(
spheresPrecision1
);
Geom
::
Vec3f
spheresCol
=
Geom
::
Vec3f
(
0.0
,
0.4
,
1.0
);
// TODO : utiliser un getteur
dock
.
doubleSpinBox_SphereGridColorR
->
setValue
(
spheresCol
[
0
]);
dock
.
doubleSpinBox_SphereGridColorG
->
setValue
(
spheresCol
[
1
]);
...
...
@@ -460,7 +460,7 @@ void StageShaderReloaded::cb_keyPress(int code)
switch
(
code
)
{
case
16777223
:
// Suppr
printf
(
"Suppression
\n
"
);
slot_pushButton_deleteSelectedObject
(
);
break
;
}
}
...
...
@@ -501,13 +501,13 @@ void StageShaderReloaded::cb_mousePress(int button, int x, int y)
// set FrameManipulator on picked object
if
(
m_lastPickedObject
)
{
std
::
cout
<<
m_lastPickedObject
->
shape
()
<<
std
::
endl
;
/*if (m_lastPickedObject->checkType<Utils::Grid>())
std::cout << "GRID clicked" << std::endl;
if (m_lastPickedObject->checkType<Utils::Sphere>())
std::cout << "SPHERE clicked" << std::endl;*/
m_frameManipulator
->
setTransformation
(
m_lastPickedObject
->
transfo
());
// Lock individual scale axes for the sphere
if
(
m_lastPickedObject
->
checkType
<
Utils
::
Grid
>
())
m_frameManipulator
->
unlock
(
Utils
::
FrameManipulator
::
Scales
);
else
if
(
m_lastPickedObject
->
checkType
<
Utils
::
Sphere
>
())
m_frameManipulator
->
lock
(
Utils
::
FrameManipulator
::
Scales
);
}
}
...
...
@@ -522,6 +522,8 @@ void StageShaderReloaded::cb_mouseMove(int buttons, int x, int y)
if
(
!
Shift
())
return
;
bool
clippingUpdateNeeded
=
false
;
// rotation selected ?
if
(
Utils
::
FrameManipulator
::
rotationAxis
(
m_frameManipulatorPickedAxis
))
{
...
...
@@ -534,6 +536,8 @@ void StageShaderReloaded::cb_mouseMove(int buttons, int x, int y)
m_frameManipulator
->
rotateInScreen
(
x
-
m_lastClickedX
,
y
-
m_lastClickedY
);
m_lastPickedObject
->
transfo
()
=
m_frameManipulator
->
transfo
();
clippingUpdateNeeded
=
true
;
}
// translation selected
else
if
(
Utils
::
FrameManipulator
::
translationAxis
(
m_frameManipulatorPickedAxis
))
...
...
@@ -547,6 +551,8 @@ void StageShaderReloaded::cb_mouseMove(int buttons, int x, int y)
m_frameManipulator
->
translateInScreen
(
x
-
m_lastClickedX
,
y
-
m_lastClickedY
);
m_lastPickedObject
->
transfo
()
=
m_frameManipulator
->
transfo
();
clippingUpdateNeeded
=
true
;
}
// scale selected
else
if
(
Utils
::
FrameManipulator
::
scaleAxis
(
m_frameManipulatorPickedAxis
)
)
...
...
@@ -554,6 +560,34 @@ void StageShaderReloaded::cb_mouseMove(int buttons, int x, int y)
float
scale
=
m_frameManipulator
->
scaleFromMouse
(
x
-
m_lastClickedX
,
y
-
m_lastClickedY
);
m_frameManipulator
->
scale
(
m_frameManipulatorPickedAxis
,
scale
);
m_lastPickedObject
->
transfo
()
=
m_frameManipulator
->
transfo
();
clippingUpdateNeeded
=
true
;
}
// Update clipping shape if needed
if
(
clippingUpdateNeeded
&&
m_lastPickedObject
)
{
if
(
m_lastPickedObject
->
checkType
<
Utils
::
Grid
>
())
{
// Get plane position and normal
Geom
::
Vec3f
planeNewPos
=
m_lastPickedObject
->
getPosition
();
float
planeNewAxisScale
;
// Not used
Geom
::
Vec3f
planeNewNormal
=
m_lastPickedObject
->
getAxisScale
(
2
,
planeNewAxisScale
);
// 2 = Z axis = plane normal
std
::
cout
<<
planeNewNormal
<<
std
::
endl
;
// Update clipping shape
m_shader
->
setClipPlaneParamsAll
(
m_lastPickedObject
->
id
(),
planeNewNormal
,
planeNewPos
);
}
else
if
(
m_lastPickedObject
->
checkType
<
Utils
::
Sphere
>
())
{
// Get sphere position and size
Geom
::
Vec3f
sphereNewPos
=
m_lastPickedObject
->
getPosition
();
float
sphereNewSize
;
m_lastPickedObject
->
getAxisScale
(
0
,
sphereNewSize
);
// On the sphere, every axis has the same size, so take 0 as default
// Update clipping shape
m_shader
->
setClipSphereParamsAll
(
m_lastPickedObject
->
id
(),
sphereNewPos
,
sphereNewSize
);
}
}
m_lastClickedX
=
x
;
...
...
Apps/Tuto/stage_shader_reloaded.h
View file @
13e7a3cc
...
...
@@ -138,13 +138,11 @@ public slots:
void
slot_explodTopoPhi3
(
double
c
);
void
slot_pushButton_addPlane
();
void
slot_pushButton_deletePlane
();
void
slot_spinBox_GridResolution
(
int
i
);
void
slot_doubleSpinBox_GridColor
(
double
c
);
void
slot_pushButton_addSphere
();
void
slot_pushButton_deleteSphere
();
void
slot_spinBox_SphereResolution
(
int
i
);
void
slot_doubleSpinBox_SphereGridColor
(
double
c
);
...
...
@@ -152,6 +150,8 @@ public slots:
void
slot_doubleSpinBox_ColorAttenuationFactor
(
double
c
);
void
slot_horizontalSlider_ClippingMode
(
int
i
);
void
slot_pushButton_deleteSelectedObject
();
void
button_compile
();
};
...
...
Apps/Tuto/stage_shader_reloaded.ui
View file @
13e7a3cc
...
...
@@ -265,23 +265,10 @@
<property
name=
"title"
>
<string>
Planes Selection
</string>
</property>
<widget
class=
"QPushButton"
name=
"pushButton_deletePlane"
>
<property
name=
"geometry"
>
<rect>
<x>
170
</x>
<y>
30
</y>
<width>
31
</width>
<height>
28
</height>
</rect>
</property>
<property
name=
"text"
>
<string>
-
</string>
</property>
</widget>
<widget
class=
"QPushButton"
name=
"pushButton_addPlane"
>
<property
name=
"geometry"
>
<rect>
<x>
1
4
0
</x>
<x>
10
</x>
<y>
30
</y>
<width>
31
</width>
<height>
28
</height>
...
...
@@ -291,28 +278,6 @@
<string>
+
</string>
</property>
</widget>
<widget
class=
"QComboBox"
name=
"comboBox_PlaneIndex"
>
<property
name=
"enabled"
>
<bool>
true
</bool>
</property>
<property
name=
"geometry"
>
<rect>
<x>
10
</x>
<y>
30
</y>
<width>
99
</width>
<height>
28
</height>
</rect>
</property>
<property
name=
"focusPolicy"
>
<enum>
Qt::NoFocus
</enum>
</property>
<property
name=
"editable"
>
<bool>
false
</bool>
</property>
<property
name=
"currentIndex"
>
<number>
-1
</number>
</property>
</widget>
</widget>
</item>
</layout>
...
...
@@ -398,23 +363,10 @@
<property
name=
"title"
>
<string>
Spheres Selection
</string>
</property>
<widget
class=
"QPushButton"
name=
"pushButton_deleteSphere"
>
<property
name=
"geometry"
>
<rect>
<x>
170
</x>
<y>
30
</y>
<width>
31
</width>
<height>
28
</height>
</rect>
</property>
<property
name=
"text"
>
<string>
-
</string>
</property>
</widget>
<widget
class=
"QPushButton"
name=
"pushButton_addSphere"
>
<property
name=
"geometry"
>
<rect>
<x>
1
4
0
</x>
<x>
10
</x>
<y>
30
</y>
<width>
31
</width>
<height>
28
</height>
...
...
@@ -424,28 +376,6 @@
<string>
+
</string>
</property>
</widget>
<widget
class=
"QComboBox"
name=
"comboBox_SphereIndex"
>
<property
name=
"enabled"
>
<bool>
true
</bool>
</property>
<property
name=
"geometry"
>
<rect>
<x>
10
</x>
<y>
30
</y>
<width>
99
</width>
<height>
28
</height>
</rect>
</property>
<property
name=
"focusPolicy"
>
<enum>
Qt::NoFocus
</enum>
</property>
<property
name=
"editable"
>
<bool>
false
</bool>
</property>
<property
name=
"currentIndex"
>
<number>
-1
</number>
</property>
</widget>
</widget>
</item>
</layout>
...
...
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