{"id":629,"date":"2011-01-04T00:52:40","date_gmt":"2011-01-04T03:52:40","guid":{"rendered":"http:\/\/realnorth.net\/blog\/?p=629"},"modified":"2011-01-04T00:52:40","modified_gmt":"2011-01-04T03:52:40","slug":"qml-3d","status":"publish","type":"post","link":"https:\/\/realnorth.net\/blog\/qml-3d\/","title":{"rendered":"QML 3D"},"content":{"rendered":"<p><a href=\"http:\/\/qt.gitorious.org\/qt-labs\/qt3d\" target=\"_blank\">Qt\/3D<\/a> es un conjunto de herramientas y funciones que permiten crear aplicaciones que hagan uso de gr\u00e1ficos 3D, <a href=\"http:\/\/qt.gitorious.org\/qt-labs\/qt3d\" target=\"_blank\">Qt3D<\/a> extiende las clases del modulo OpenGL de Qt, estas APIs facilitan escribir c\u00f3digo que sea f\u00e1cil de portar entre aplicaciones de escritorio OpenGL y aplicaciones embebidas o mobile OpenGL\/ES, por ultimo pero no menos importante, contamos con un binding para utilizar <a href=\"http:\/\/qt.gitorious.org\/qt-labs\/qt3d\" target=\"_blank\">Qt\/3D<\/a> desde QML.<\/p>\n<p>Para comenzar con <a href=\"http:\/\/qt.gitorious.org\/qt-labs\/qt3d\" target=\"_blank\">Qt\/3D<\/a> lo primero que debemos hacer es instalarlo, los pasos a seguir est\u00e1n muy bien explicados <a href=\"http:\/\/doc.qt.nokia.com\/qt3d-snapshot\/qt3d-building.html\" target=\"_blank\">aqu\u00ed<\/a>, ya sea en Linux, Windows o Mac OS X, no son complicados, aunque puede tomar algo de tiempo el proceso.<\/p>\n<h3>\u00bfQue podemos hacer con Qt\/3D y QML?<\/h3>\n<p>Con <a href=\"http:\/\/qt.gitorious.org\/qt-labs\/qt3d\" target=\"_blank\">Qt\/3D<\/a> podemos crear viewports, asignar luces y c\u00e1maras, crear o importar nuestros propios modelos 3D, ya sea usando las figuras b\u00e1sicas incluidas, creando nuestros propios meshes, o usando alg\u00fan modelo ya existente en formato 3ds o bzs, tambi\u00e9n podemos crear animaciones y aplic\u00e1rselas a los modelos, las c\u00e1maras y las luces.<\/p>\n<p>Si han trabajado <a href=\"http:\/\/www.flickr.com\/photos\/8031636@N06\/1342516434\/\" target=\"_blank\">anteriormente<\/a> con aplicaciones 3D todos estos t\u00e9rminos y conceptos les sonaran familiares, lo que les permitir\u00e1 reutilizar su conocimiento a la vez de que podr\u00e1n r\u00e1pidamente ponerse manos a la obra.<\/p>\n<h3>Hello World 3D<\/h3>\n<p>El siguiente ejemplo muestra de forma simple, algunos de los conceptos y controles que se usan en la mayor\u00eda de la aplicaciones 3D, lo primero es crear los imports correspondientes de <a href=\"http:\/\/qt.gitorious.org\/qt-labs\/qt3d\" target=\"_blank\">Qt\/3D<\/a>, luego sigue el <a href=\"http:\/\/doc.qt.nokia.com\/qt3d-snapshot\/qml-viewport.html\" target=\"_blank\">Viewport<\/a> que define la escena 3D, as\u00ed como su tama\u00f1o, las <a href=\"http:\/\/doc.qt.nokia.com\/qt3d-snapshot\/qml-light.html\" target=\"_blank\">luces<\/a> y las <a href=\"http:\/\/doc.qt.nokia.com\/qt3d-snapshot\/qml-camera.html\" target=\"_blank\">c\u00e1maras<\/a> a utilizar y sus posiciones.<\/p>\n<p>Luego tenemos un objeto <a href=\"http:\/\/doc.qt.nokia.com\/qt3d-snapshot\/qml-sphere.html\" target=\"_blank\">Sphere<\/a> que tiene un levelOfDetail de 10 el m\u00e1ximo de su tipo y que mide la cantidad de tri\u00e1ngulos necesarios para crear el objeto, en este caso 32768, luego alineamos el objeto al eje Y, para terminar aplic\u00e1ndole una <a href=\"http:\/\/doc.qt.nokia.com\/qt3d-snapshot\/qml-effect.html#texture-prop\" target=\"_blank\">textura<\/a> usando el elemento <a href=\"http:\/\/doc.qt.nokia.com\/qt3d-snapshot\/qml-effect.html\" target=\"_blank\">Effect<\/a>.<\/p>\n<p>Para finalizar vamos a animar el objeto 3D, para ello usaremos una <a href=\"http:\/\/doc.qt.nokia.com\/qt3d-snapshot\/qml-rotation3d.html\" target=\"_blank\">Rotation3D<\/a>, a la cual seteamos el eje que queremos animar y luego en una NumberAnimation establecemos la propiedad a animar, en este caso, angle.<\/p>\n<pre>\nimport Qt 4.7\nimport Qt3D 1.0\nimport Qt3D.Shapes 1.0\n\nViewport {\n    width: 640\n    height: 360\n    camera: Camera {\n        eye: Qt.vector3d(0,0,8)\n    }\n    Sphere {\n        levelOfDetail: 10\n        axis: Qt.YAxis\n        effect: Effect {\n            texture: &quot;images\/land_ocean_ice_2048.jpg&quot;\n            decal: true\n        }\n        transform:[\n            Rotation3D {\n                axis: Qt.vector3d(0,1,0)\n                NumberAnimation on angle {\n                    running: true\n                    loops: Animation.Infinite\n                    from: 360\n                    to: 0\n                    duration: 6000\n                }\n            }\n        ]\n    }\n}\n<\/pre>\n<p><img decoding=\"async\" src=\"http:\/\/realnorth.net\/blog\/wp-content\/uploads\/2011\/01\/home-paulo-Projects-Qt-Demo3D-Demo3D.qml-Qt-QML-Viewer_003.png\" alt=\"Qt\/3D QML Demo\" title=\"Qt\/3D QML Demo\"\/><\/p>\n<p>Con este simple ejemplo pueden darse una idea del poder que nos brinda la combinaci\u00f3n <a href=\"http:\/\/qt.gitorious.org\/qt-labs\/qt3d\" target=\"_blank\">Qt\/3D<\/a> y QML, si est\u00e1n interesados en el tema, pueden profundizar mas en el dando un vistazo a la <a href=\"http:\/\/doc.qt.nokia.com\/qt3d-snapshot\/index.html\" target=\"_blank\">documentaci\u00f3n oficial<\/a>, o ver un repaso r\u00e1pido de las principales caracter\u00edsticas en la <a href=\"http:\/\/qt.nokia.com\/learning\/online\/talks\/developerdays2010\/tech-talks\/qt-3d-qml-scripting-for-ui-designers-and-hackers\" title=\"Qt\/3D QML Scripting for UI Designers and Hackers \" target=\"_blank\">presentaci\u00f3n<\/a> dada por Sarah Smith en los <a href=\"http:\/\/qt.nokia.com\/developer\/learning\/online\/talks\/developerdays2010\" target=\"_blank\">Qt Developers Days 2010<\/a>.<\/p>\n<p><object type=\"application\/x-shockwave-flash\" style=\"display:block;margin:0\" width=\"280\" height=\"296\" data=\"http:\/\/www.kyte.tv\/f\/\"><param name=\"movie\" value=\"http:\/\/www.kyte.tv\/f\/\" \/><param name=\"flashVars\" value=\"p=s&#038;s=1109903&#038;tbid=153746\" \/><param name=\"allowScriptAccess\" value=\"never\" \/><param name=\"allowFullScreen\" value=\"true\" \/><\/object><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Qt\/3D es un conjunto de herramientas y funciones que permiten crear aplicaciones que hagan uso de gr\u00e1ficos 3D, Qt3D extiende las clases del modulo OpenGL de Qt, estas APIs facilitan escribir c\u00f3digo que sea f\u00e1cil de portar entre aplicaciones de escritorio OpenGL y aplicaciones embebidas o mobile OpenGL\/ES, por ultimo pero no menos importante, contamos [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,9],"tags":[11,43,44],"class_list":["post-629","post","type-post","status-publish","format-standard","hentry","category-development","category-ui","tag-3d","tag-qml","tag-qt"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/posts\/629","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/comments?post=629"}],"version-history":[{"count":0,"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/posts\/629\/revisions"}],"wp:attachment":[{"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/media?parent=629"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/categories?post=629"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/realnorth.net\/blog\/wp-json\/wp\/v2\/tags?post=629"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}