2023-03-14 15:59:38 +01:00
//scale_bouton_commencer_contexte = 0.6
h _bouton _contexte = 0.1 * window . innerHeight
2023-03-11 21:20:49 +01:00
num _texte = 0
2023-03-10 11:48:37 +01:00
2023-03-11 21:20:49 +01:00
function affichage _texte _contexte ( texte , font , color , xt , yt , l _max _texte ) {
2023-03-04 17:17:07 +01:00
// Texte
2023-03-11 21:20:49 +01:00
ctx . strokeStyle = color // Pour que le contour soit rouge
ctx . fillStyle = color // Pour que l'intérieur soit bleu
2023-03-06 11:57:43 +01:00
ctx . font = font
2023-03-14 15:59:38 +01:00
print _text ( handle _text ( texte , xt , yt , font , l _max _texte , color = "#FFFFFF" , interligne = 0.045 * window . innerHeight ) , false )
2023-03-11 21:20:49 +01:00
}
2023-03-04 17:17:07 +01:00
2023-03-11 21:20:49 +01:00
////////////////////////////////////////////////////////////////////
///// BOUTON COMMENCER
2023-03-04 17:17:07 +01:00
function action _bouton _commencer _contexte ( ) {
page _contexte = false
2023-03-08 11:03:41 +01:00
page _inscription = true
//page_vues = true
2023-03-14 10:45:18 +01:00
interactions . push ( { "time" : new Date ( ) . getTime ( ) , "type" : "Fin contexte" } )
2023-03-04 17:17:07 +01:00
}
2023-03-10 11:48:37 +01:00
function afficher _bouton _commencer _contexte ( ) {
2023-03-11 22:10:12 +01:00
w _bouton _commencer = w _bouton _suivant
h _bouton _commencer = h _bouton _suivant
x _bouton _commencer = x _bouton _suivant
y _bouton _commencer = y _bouton _suivant
2023-03-10 11:48:37 +01:00
// Bouton commencer
2023-03-11 22:10:12 +01:00
ctx . drawImage ( boutons [ "commencer_inscription" ] , x _bouton _commencer , y _bouton _commencer , w _bouton _commencer , h _bouton _commencer )
2023-03-10 11:48:37 +01:00
// Survol
if ( xyMouseMove . x >= x _bouton _commencer && xyMouseMove . x <= x _bouton _commencer + w _bouton _commencer && xyMouseMove . y > y _bouton _commencer && xyMouseMove . y < y _bouton _commencer + h _bouton _commencer ) {
draw _rectangle ( x _bouton _commencer , y _bouton _commencer , w _bouton _commencer , h _bouton _commencer , "rgb(200, 200, 200)" , 0.6 )
}
}
2023-03-11 21:20:49 +01:00
////////////////////////////////////////////////////////////////////
///// BOUTON Next
function action _bouton _suivant _contexte ( ) {
num _texte = num _texte + 1
2023-03-11 22:07:08 +01:00
if ( num _texte == textes _page _1 . length ) {
texte _a _afficher = [ ] }
if ( num _texte == ( textes _page _1 . length + textes _page _2 . length ) ) {
texte _a _afficher = [ ] }
if ( num _texte == ( textes _page _1 . length + textes _page _2 . length + textes _page _3 . length ) ) {
texte _a _afficher = [ ] }
2023-03-11 21:20:49 +01:00
texte _a _afficher . push ( textes [ "texte" + num _texte ] )
2023-03-11 22:07:08 +01:00
2023-03-11 21:20:49 +01:00
}
function action _bouton _avant _contexte ( ) {
2023-03-11 22:07:08 +01:00
if ( num _texte > 0 ) {
if ( num _texte == textes _page _1 . length ) {
texte _a _afficher = JSON . parse ( JSON . stringify ( textes _page _1 ) ) }
else if ( num _texte == ( textes _page _1 . length + textes _page _2 . length ) ) {
texte _a _afficher = JSON . parse ( JSON . stringify ( textes _page _2 ) ) }
else if ( num _texte == ( textes _page _1 . length + textes _page _2 . length + textes _page _3 . length ) ) {
texte _a _afficher = JSON . parse ( JSON . stringify ( textes _page _3 ) ) }
else {
texte _a _afficher . pop ( ) }
}
num _texte = num _texte - 1
2023-03-11 21:20:49 +01:00
}
function afficher _bouton _suivant _contexte ( ) {
2023-03-14 15:59:38 +01:00
//w_bouton_suivant = scale_bouton_commencer_contexte*boutons["suivant"].width
//h_bouton_suivant = scale_bouton_commencer_contexte*boutons["suivant"].height
ratio _bouton _contexte = h _bouton _contexte / boutons [ "suivant" ] . height
w _bouton _suivant = ratio _bouton _contexte * boutons [ "suivant" ] . width
h _bouton _suivant = h _bouton _contexte
2023-03-11 21:20:49 +01:00
x _bouton _suivant = ( window . innerWidth / 2 ) + 5
y _bouton _suivant = window . innerHeight - h _bouton _suivant - 20
// Bouton commencer
ctx . drawImage ( boutons [ "suivant" ] , x _bouton _suivant , y _bouton _suivant , w _bouton _suivant , h _bouton _suivant )
// Survol
if ( xyMouseMove . x >= x _bouton _suivant && xyMouseMove . x <= x _bouton _suivant + w _bouton _suivant && xyMouseMove . y > y _bouton _suivant && xyMouseMove . y < y _bouton _suivant + h _bouton _suivant ) {
draw _rectangle ( x _bouton _suivant , y _bouton _suivant , w _bouton _suivant , h _bouton _suivant , "rgb(200, 200, 200)" , 0.6 )
}
}
function afficher _bouton _avant _contexte ( ) {
w _bouton _avant = w _bouton _suivant
h _bouton _avant = h _bouton _suivant
x _bouton _avant = ( window . innerWidth / 2 ) - ( w _bouton _avant ) - 5
y _bouton _avant = y _bouton _suivant
// Bouton commencer
ctx . drawImage ( boutons [ "avant" ] , x _bouton _avant , y _bouton _avant , w _bouton _avant , h _bouton _avant )
// Survol
if ( xyMouseMove . x >= x _bouton _avant && xyMouseMove . x <= x _bouton _avant + w _bouton _avant && xyMouseMove . y > y _bouton _avant && xyMouseMove . y < y _bouton _avant + h _bouton _avant ) {
draw _rectangle ( x _bouton _avant , y _bouton _avant , w _bouton _avant , h _bouton _avant , "rgb(200, 200, 200)" , 0.6 )
}
}
////////////////////////////////////////////////////////////////////
///// MAIN
function traitement _contexte ( ) {
2023-03-14 15:59:38 +01:00
//console.log(num_texte)
2023-03-11 21:20:49 +01:00
ctx . clearRect ( 0 , 0 , canvas . width , canvas . height )
// variable position
2023-03-14 15:59:38 +01:00
x _texte = window . innerWidth * ( 1 / 10 )
w _texte = window . innerWidth * ( 8 / 10 )
2023-03-11 21:20:49 +01:00
font _texte = ( 0.012 * window . innerWidth ) + "pt Courier"
// titre commun à chaque page
2023-03-14 15:59:38 +01:00
affichage _titre ( titre , ( 0.018 * window . innerWidth ) + "pt Courier" , "#EF476F" )
2023-03-11 22:07:08 +01:00
// affichage texte
for ( let p = 0 ; p < texte _a _afficher . length ; p ++ ) {
dict _texte = texte _a _afficher [ p ]
2023-03-14 15:59:38 +01:00
if ( ( num _texte == 7 || num _texte == 6 ) && ( p == ( textes _page _2 . length ) - 1 || p == ( textes _page _2 . length ) - 2 ) ) { w _texte = window . innerWidth * ( 5 / 10 ) }
if ( ( num _texte == 10 || num _texte == 11 ) && ( p == ( textes _page _3 . length ) - 2 ) ) { w _texte = window . innerWidth * ( 5 / 10 ) }
2023-03-11 22:07:08 +01:00
affichage _texte _contexte ( dict _texte . t , font _texte , dict _texte . c , x _texte , dict _texte . y , w _texte )
2023-03-14 15:59:38 +01:00
w _texte = window . innerWidth * ( 8 / 10 )
2023-03-11 22:07:08 +01:00
}
2023-03-14 11:20:00 +01:00
if ( num _texte < ( ( textes _page _1 . length + textes _page _2 . length + textes _page _3 . length + textes _page _4 . length ) ) - 2 ) {
2023-03-11 21:20:49 +01:00
// affichage bouton next
afficher _bouton _suivant _contexte ( )
// si on clique sur next
if ( clicked && click _inside ( xyMouseDown , x _bouton _suivant , y _bouton _suivant , w _bouton _suivant , h _bouton _suivant ) ) {
// on passe aux texte suivant
action _bouton _suivant _contexte ( )
}
2023-03-11 22:07:08 +01:00
} else {
// affichage bouton next
afficher _bouton _commencer _contexte ( )
// si on clique sur next
if ( clicked && click _inside ( xyMouseDown , x _bouton _commencer , y _bouton _commencer , w _bouton _commencer , h _bouton _commencer ) ) {
// on passe aux texte suivant
action _bouton _commencer _contexte ( )
}
}
//affichage bouton previous dès le deuxièeme texte
if ( num _texte > 0 ) {
// affichage bouton next
afficher _bouton _avant _contexte ( )
2023-03-11 21:20:49 +01:00
//si on clique sur previous
if ( clicked && click _inside ( xyMouseDown , x _bouton _avant , y _bouton _avant , w _bouton _avant , h _bouton _avant ) ) {
// on passe aux texte suivant
action _bouton _avant _contexte ( )
2023-03-11 22:07:08 +01:00
}
2023-03-11 21:20:49 +01:00
}
2023-03-11 22:07:08 +01:00
// affichage image
if ( num _texte == 6 ) {
2023-03-14 15:59:38 +01:00
ctx . drawImage ( imgs [ 'exemple1' ] , x _bouton _suivant + w _bouton _suivant + 100 , ( textes [ "texte6" ] . y + textes [ "texte5" ] . y ) / 2 , window . innerWidth * ( 2 / 8 ) , window . innerWidth * ( 2 / 8 ) )
2023-03-11 22:07:08 +01:00
}
if ( num _texte == 7 ) {
2023-03-14 15:59:38 +01:00
ctx . drawImage ( imgs [ 'exemple2' ] , x _bouton _suivant + w _bouton _suivant + 100 , ( textes [ "texte6" ] . y + textes [ "texte5" ] . y ) / 2 , window . innerWidth * ( 2 / 8 ) , window . innerWidth * ( 2 / 8 ) )
2023-03-14 11:20:00 +01:00
}
if ( num _texte == 10 || num _texte == 11 ) {
2023-03-14 15:59:38 +01:00
affichage _texte _contexte ( "Which viewpoint would you choose between both?" , font _texte , "rgb(255, 209, 102)" , x _texte , ( textes [ "texte10" ] . y + textes [ "texte11" ] . y ) / 2 , window . innerWidth * ( 4 / 8 ) )
ctx . drawImage ( imgs [ 'exemple1' ] , window . innerWidth * ( 6 / 10 ) + 20 , textes [ "texte10" ] . y - 50 , window . innerWidth * ( 1 / 8 ) , window . innerWidth * ( 1 / 8 ) )
ctx . drawImage ( imgs [ 'exemple2' ] , window . innerWidth * ( 6 / 10 ) + window . innerWidth * ( 1 / 8 ) + 40 , textes [ "texte10" ] . y - 50 , window . innerWidth * ( 1 / 8 ) , window . innerWidth * ( 1 / 8 ) )
2023-03-14 11:20:00 +01:00
}
2023-03-11 22:07:08 +01:00
2023-03-11 21:20:49 +01:00
}
////////////////////////////////////////////////////////////////////
///// Textes
function init _textes _contexte ( ) {
titre = "User study : Best view selection"
color _blanc = "rgb(255,255,255)"
color _rouge = "rgb(239, 71, 111)"
textes = {
2023-03-14 10:45:18 +01:00
"texte0" : { "t" : "Hello! I am Marie Pelissier, a 3rd year PhD student. I work on computer vision, a subfield of computer science, and you are about to help me with my research." , "y" : window . innerHeight * 0.15 , "c" : color _blanc } ,
"texte1" : { "t" : "First, thank you for participating in my study. Then, I am collecting data in order to evaluate how well a computer does against actual human opinion in the mattter of finding the best viewpoint to look at an object. Unfortunatly, it seems that no one in the scientific community has yet proposed a dataset for this purpouse." , "y" : window . innerHeight * 0.35 , "c" : color _blanc } ,
"texte2" : { "t" : "That’ s where you come into play, I need you to answer a few question in order to build a dataset of human-chosen viewpoints of objects. Let me get into the details..." , "y" : window . innerHeight * 0.65 , "c" : color _blanc } ,
2023-03-11 21:20:49 +01:00
"texte3" : { "t" : "What is a viewpoint? " , "y" : window . innerHeight * 0.15 , "c" : color _rouge } ,
2023-03-14 10:45:18 +01:00
"texte4" : { "t" : "> The viewpoint of an object is the position from which we observe the object." , "y" : window . innerHeight * 0.2 , "c" : color _blanc } ,
2023-03-14 15:59:38 +01:00
"texte5" : { "t" : "A viewpoint will always highlight some parts and obscure other parts of an object." , "y" : window . innerHeight * 0.25 , "c" : color _blanc } ,
2023-03-14 10:45:18 +01:00
"texte6" : { "t" : "For example, this is wolf. This perspective highlights the tail and the hind legs, but obscures the head and face." , "y" : window . innerHeight * 0.45 , "c" : color _blanc } ,
"texte7" : { "t" : "This viewpoint reveal the head, face, and front legs but hides the tail and barely shows the hind legs." , "y" : window . innerHeight * 0.6 , "c" : color _blanc } ,
2023-03-11 21:20:49 +01:00
"texte8" : { "t" : "What is a good viewpoint?" , "y" : window . innerHeight * 0.15 , "c" : color _rouge } ,
2023-03-14 11:20:00 +01:00
"texte9" : { "t" : "> A good viewpoint is one that offers a pleasant view of the object. A more geometrical definition: a good viewpoint is a position from which most representative characteristics of an object (i.e. the parts that make the object the most identifiable), are visible." , "y" : window . innerHeight * 0.2 , "c" : color _blanc } ,
"texte10" : { "t" : "Let's imagine that you have to create an advertising display to promote the movie Dances with Wolves." , "y" : window . innerHeight * 0.45 , "c" : color _blanc } ,
"texte11" : { "t" : "The purpose of this study is to ask you, for a given object, which are for you the best viewpoints and why. The answers will of course be subjective because everyone has their own opinion. This subjective information is what I am interested in." , "y" : window . innerHeight * 0.7 , "c" : color _blanc } ,
"texte12" : { "t" : "Now that you are up to speed, here are the instructions of the study:" , "y" : window . innerHeight * 0.15 , "c" : color _blanc } ,
"texte13" : { "t" : "- You will be presented " + nb _mesh + " different objects." , "y" : window . innerHeight * 0.25 , "c" : color _blanc } ,
"texte14" : { "t" : "- For each of them, you will chose " + nb _choix _demande + " viewpoints you find most representative of the given object." , "y" : window . innerHeight * 0.35 , "c" : color _blanc } ,
"texte15" : { "t" : "- Afterward, you will answer a few questions to justify your choices." , "y" : window . innerHeight * 0.5 , "c" : color _blanc } ,
"texte16" : { "t" : "As a mean for you to get familiar with the interface, and make your selection easier, we have set up a quick tutorial." , "y" : window . innerHeight * 0.6 , "c" : color _blanc } ,
"texte17" : { "t" : "But before anything, we need you to register in order to save your answers." , "y" : window . innerHeight * 0.7 , "c" : color _blanc } ,
2023-03-11 21:20:49 +01:00
}
textes _page _1 = [ textes [ "texte0" ] , textes [ "texte1" ] , textes [ "texte2" ] ]
textes _page _2 = [ textes [ "texte3" ] , textes [ "texte4" ] , textes [ "texte5" ] , textes [ "texte6" ] , textes [ "texte7" ] ]
2023-03-14 11:20:00 +01:00
textes _page _3 = [ textes [ "texte8" ] , textes [ "texte9" ] , textes [ "texte10" ] , textes [ "texte11" ] ]
textes _page _4 = [ textes [ "texte12" ] , textes [ "texte13" ] , textes [ "texte14" ] , textes [ "texte15" ] , textes [ "texte16" ] , , textes [ "texte17" ] ]
2023-03-11 21:20:49 +01:00
texte _a _afficher = [ textes [ "texte0" ] ]
}