/*! Key action eventhandler handles key down & release events */ void onKey(GLFWwindow* window, int GLFWKey, int scancode, int action, int mods) { if (action==GLFW_PRESS) { switch (GLFWKey) { case GLFW_KEY_ESCAPE: onClose(window); glfwSetWindowShouldClose(window, GL_TRUE); break; case GLFW_KEY_UP: _resolution = _resolution<<1; buildSphere(1.0f, _resolution, _resolution); break; case GLFW_KEY_DOWN: if (_resolution > 4) _resolution = _resolution>>1; buildSphere(1.0f, _resolution, _resolution); break; case GLFW_KEY_LEFT_SHIFT: _modifiers = _modifiers|SHIFT; break; case GLFW_KEY_RIGHT_SHIFT: _modifiers = _modifiers|SHIFT; break; case GLFW_KEY_LEFT_CONTROL: _modifiers = _modifiers|CTRL; break; case GLFW_KEY_RIGHT_CONTROL: _modifiers = _modifiers|CTRL; break; case GLFW_KEY_LEFT_ALT: _modifiers = _modifiers|ALT; break; case GLFW_KEY_RIGHT_ALT: _modifiers = _modifiers|ALT; break; } } else if (action == GLFW_RELEASE)
virtual void keyPressed(const KeyEventPtr e) { if(e->getKey() == KeyEvent::KEY_Q && e->getModifiers() & KeyEvent::KEY_MODIFIER_COMMAND) { TutorialWindowEventProducer->closeWindow(); } switch(e->getKey()) { case KeyEvent::KEY_S: { buildSphere(); } break; case KeyEvent::KEY_B: { buildBox(); } break; case KeyEvent::KEY_Z: { //SceneFileHandler::the().write(rootNode, "scene.osb"); } break; case KeyEvent::KEY_T: { buildTriMesh(); } break; } }
/**************************************************************************** ** ** Copyright (C) 2015 ** ** This file is generated by the Magus toolkit ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ****************************************************************************/ #include <QtWidgets> #include <QtOpenGL> #include <QMessageBox> #include "tool_glspherewidget.h" namespace Magus { //****************************************************************************/ QtGLSphereWidget::QtGLSphereWidget(QWidget *parent, QGLWidget *shareWidget) : QGLWidget(parent, shareWidget) { clearColor = Qt::black; xRot = 0; yRot = 0; zRot = 0; program = 0; } //****************************************************************************/ QtGLSphereWidget::~QtGLSphereWidget() { } //****************************************************************************/ QSize QtGLSphereWidget::minimumSizeHint() const { return QSize(16, 16); } //****************************************************************************/ QSize QtGLSphereWidget::sizeHint() const { return QSize(200, 200); } //****************************************************************************/ void QtGLSphereWidget::rotateBy(int xAngle, int yAngle, int zAngle) { xRot += xAngle; yRot += yAngle; zRot += zAngle; updateGL(); } //****************************************************************************/ void QtGLSphereWidget::setClearColor(const QColor &color) { clearColor = color; updateGL(); } //****************************************************************************/ void QtGLSphereWidget::setPixmap(const QPixmap& pixmap, const QString& fullName, const QString& baseName) { mPixmap = pixmap; mFullName = fullName; mBaseName = baseName; } //****************************************************************************/ const QString& QtGLSphereWidget::getFullName(void) const { return mFullName; } //****************************************************************************/ const QString& QtGLSphereWidget::getBaseName(void) const { return mBaseName; } //****************************************************************************/ void QtGLSphereWidget::initializeGL() { initializeOpenGLFunctions(); buildSphere(); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); #ifdef GL_TEXTURE_2D glEnable(GL_TEXTURE_2D); #endif #define PROGRAM_VERTEX_ATTRIBUTE 0 #define PROGRAM_TEXCOORD_ATTRIBUTE 1 QGLShader *vshader = new QGLShader(QGLShader::Vertex, this); const char *vsrc = "attribute highp vec4 vertex;\n" "attribute mediump vec4 texCoord;\n" "varying mediump vec4 texc;\n" "uniform mediump mat4 matrix;\n" "void main(void)\n" "{\n" " gl_Position = matrix * vertex;\n" " texc = texCoord;\n" "}\n"; vshader->compileSourceCode(vsrc); QGLShader *fshader = new QGLShader(QGLShader::Fragment, this); const char *fsrc = "uniform sampler2D texture;\n" "varying mediump vec4 texc;\n" "void main(void)\n" "{\n" " gl_FragColor = texture2D(texture, texc.st);\n" "}\n"; fshader->compileSourceCode(fsrc); program = new QGLShaderProgram(this); program->addShader(vshader); program->addShader(fshader); program->bindAttributeLocation("vertex", PROGRAM_VERTEX_ATTRIBUTE); program->bindAttributeLocation("texCoord", PROGRAM_TEXCOORD_ATTRIBUTE); program->link(); program->bind(); program->setUniformValue("texture", 0); // Set the clear color and rotate the sphere QColor clearColor; clearColor = Qt::black; setClearColor(clearColor); rotateBy(0 * 16, -90 * 16, 180 * 16); }
void keyPressed(KeyEventDetails* const details, Node* const TriGeometryBase, Node* const spaceGroupNode, Node* const PhysDrawableNode, PhysicsWorld* const physicsWorld, PhysicsHashSpace* const physicsSpace) { if(details->getKey() == KeyEventDetails::KEY_Q && details->getModifiers() & KeyEventDetails::KEY_MODIFIER_COMMAND) { dynamic_cast<WindowEventProducer*>(details->getSource())->closeWindow(); } switch(details->getKey()) { case KeyEventDetails::KEY_S: { buildSphere(spaceGroupNode, physicsWorld, physicsSpace); } break; case KeyEventDetails::KEY_B: { buildBox(spaceGroupNode, physicsWorld, physicsSpace); } break; case KeyEventDetails::KEY_T: { buildTriMesh(TriGeometryBase, spaceGroupNode, physicsWorld, physicsSpace); } break; case KeyEventDetails::KEY_D: { if(PhysDrawableNode->getTravMask()) { PhysDrawableNode->setTravMask(TypeTraits<UInt32>::getMin()); } else { PhysDrawableNode->setTravMask(TypeTraits<UInt32>::getMax()); } } break; } }
virtual void keyPressed(const KeyEventUnrecPtr e) { if(e->getKey() == KeyEvent::KEY_Q && e->getModifiers() & KeyEvent::KEY_MODIFIER_COMMAND) { TutorialWindow->closeWindow(); } switch(e->getKey()) { case KeyEvent::KEY_S: { allPhysicsBodies.push_back(buildSphere()); } break; case KeyEvent::KEY_B: { allPhysicsBodies.push_back(buildBox()); } break; case KeyEvent::KEY_E: makeExplosion(Pnt3f(0.0f,0.0f,-5.0f), 1280.0f); break; case KeyEvent::KEY_1: makeExplosion(Pnt3f(0.0f,0.0f,-5.0f), 20.0f); break; case KeyEvent::KEY_2: makeExplosion(Pnt3f(0.0f,0.0f,-5.0f), 80.0f); break; case KeyEvent::KEY_3: makeExplosion(Pnt3f(0.0f,0.0f,-5.0f), 320.0f); break; case KeyEvent::KEY_4: makeExplosion(Pnt3f(0.0f,0.0f,-5.0f), 1280.0f); break; case KeyEvent::KEY_5: makeExplosion(Pnt3f(0.0f,0.0f,-5.0f), 5120.0f); break; case KeyEvent::KEY_6: makeExplosion(Pnt3f(0.0f,0.0f,-5.0f), 20480.0f); break; } }
virtual void keyPressed(const KeyEventUnrecPtr e) { if(e->getKey() == KeyEvent::KEY_Q && e->getModifiers() & KeyEvent::KEY_MODIFIER_COMMAND) { TutorialWindow->closeWindow(); } switch(e->getKey()) { case KeyEvent::KEY_S: { buildSphere(); } break; case KeyEvent::KEY_B: { buildBox(); } break; case KeyEvent::KEY_T: { buildTriMesh(); } break; case KeyEvent::KEY_D: { if(PhysDrawableNode->getTravMask()) { PhysDrawableNode->setTravMask(TypeTraits<UInt32>::getMin()); } else { PhysDrawableNode->setTravMask(TypeTraits<UInt32>::getMax()); } } break; } }
CWVOID CubeMapDemoScene::buildScene() { m_pEntitySphere = buildSphere(); CW_SAFE_RETAIN(m_pEntitySphere); m_pNodeZero = cwRenderNode::create(); m_pEntitySphere->setPosition(cwVector3D(8.0f, 0.0f, 0.0f)); this->addChild(m_pNodeZero); m_pNodeZero->addChild(m_pEntitySphere); cwDynamicReflectionEntity* pReflectionEntity = cwDynamicReflectionEntity::create(); pReflectionEntity->setRenderObject(m_pRenderObjSphere); pReflectionEntity->setPosition(cwVector3D::ZERO); pReflectionEntity->setDynamicRelfectionFactor(1.0f); cwMaterial* pMatReflection = pReflectionEntity->getMaterial(); pMatReflection->setAmbient(cwVector4D(0.2f, 0.2f, 0.2f, 1.0f)); pMatReflection->setDiffuse(cwVector4D(0.6f, 0.6f, 0.6f, 1.0f)); pMatReflection->setSpecular(cwVector4D(0.8f, 0.8f, 0.8f, 16.0f)); pMatReflection->setReflect(cwVector4D(1.0f, 1.0f, 1.0f, 1.0f)); this->addChild(pReflectionEntity); this->createSkyDome("snowcube1024.dds"); }