|
#11
|
||||
|
||||
|
mikec
can i use the new qt sdk to do this sort of thing easily? will the preincluded examples be simply runnable on the device?
__________________
liqbase sketching the future. like what i say? hit the Thanks, thanks! twitter.com/lcuk |
|
#12
|
||||
|
||||
|
I did some searching and am going to play with this code a little bit
it uses pygame and makes a doody spinning globe with just a short script ![]() the guy has been working on other things too, really cool to see http://talk.maemo.org/showthread.php...175#post553175
__________________
liqbase sketching the future. like what i say? hit the Thanks, thanks! twitter.com/lcuk |
|
#13
|
|||
|
|||
|
Both PySide and PyQt use PyOpenGL for the OpenGL heavy lifting, but that is AFAIK still not generally available on the N900 (sadly). However, if you just need GL-accelerated QGraphicsView/QGLWidgets, that's working already under PyQt (prolly PySide, too, but I didn't check)
__________________
Blogging about mobile linux - The Penguin Moves! Maintainer of PyQt (see introduction and docs), AppWatch, QuickBrownFox, etc |
|
#14
|
|||
|
|||
|
Can we have a paperclip?
|
|
#15
|
||||
|
||||
|
lcuk - http://johanneskuhlmann.de/blog/2010...head-tracking/ (i know double posting)
- i want, nay i demand a desktop moving background that will track my ugly face and have stick women dancing! hehe
__________________
----------- Follow me on Twitter here ----------- My Photography Website and Blog is here ----------- Author of the N900 Health Check Application ----------- New Version in Extras Devel (Dec 2010 - 2.9.10) ----------- Are you on the N900 World Map? - http://pininthemap.com/maemo - masterpin: shotgun ----------- What apps do you want to see on the n900 or in MeeGo in the future? - |
|
#16
|
||||
|
||||
|
Quote:
the screen will crack if it tries to track your face ![]() but yeah thats a really cool effect - the facial tracking alone would be cool getting that in place on the main camera would be amazing (for other things i'm thinking)
__________________
liqbase sketching the future. like what i say? hit the Thanks, thanks! twitter.com/lcuk |
|
#17
|
||||
|
||||
|
Quote:
Pygame is nice and portable, and sits ontop of the SDL GL stuff. For Qt3D I use the pyside demos and just replace the import statements with pyqt. http://www.gitorious.net/pyside-examples the hello qt application is there. The QGL widget will do the rendering, but I could not find the Python GL libs which this demo uses to create the 3d object . @atilla might know more about this. As I know you are a lazy B*** here is the code Code:
#!/usr/bin/env python
"""PySide port of the opengl/hellogl example from Qt v4.x"""
import sys
import math
from PySide import QtCore, QtGui, QtOpenGL
try:
from OpenGL import GL
except ImportError:
app = QtGui.QApplication(sys.argv)
QtGui.QMessageBox.critical(None, "OpenGL hellogl",
"PyOpenGL must be installed to run this example.",
QtGui.QMessageBox.Ok | QtGui.QMessageBox.Default,
QtGui.QMessageBox.NoButton)
sys.exit(1)
class Window(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.glWidget = GLWidget()
self.xSlider = self.createSlider(QtCore.SIGNAL("xRotationChanged(int)"),
self.glWidget.setXRotation)
self.ySlider = self.createSlider(QtCore.SIGNAL("yRotationChanged(int)"),
self.glWidget.setYRotation)
self.zSlider = self.createSlider(QtCore.SIGNAL("zRotationChanged(int)"),
self.glWidget.setZRotation)
mainLayout = QtGui.QHBoxLayout()
mainLayout.addWidget(self.glWidget)
mainLayout.addWidget(self.xSlider)
mainLayout.addWidget(self.ySlider)
mainLayout.addWidget(self.zSlider)
self.setLayout(mainLayout)
self.xSlider.setValue(15 * 16)
self.ySlider.setValue(345 * 16)
self.zSlider.setValue(0 * 16)
self.setWindowTitle(self.tr("Hello GL"))
def createSlider(self, changedSignal, setterSlot):
slider = QtGui.QSlider(QtCore.Qt.Vertical)
slider.setRange(0, 360 * 16)
slider.setSingleStep(16)
slider.setPageStep(15 * 16)
slider.setTickInterval(15 * 16)
slider.setTickPosition(QtGui.QSlider.TicksRight)
self.glWidget.connect(slider, QtCore.SIGNAL("valueChanged(int)"), setterSlot)
self.connect(self.glWidget, changedSignal, slider, QtCore.SLOT("setValue(int)"))
return slider
class GLWidget(QtOpenGL.QGLWidget):
def __init__(self, parent=None):
QtOpenGL.QGLWidget.__init__(self, parent)
self.object = 0
self.xRot = 0
self.yRot = 0
self.zRot = 0
self.lastPos = QtCore.QPoint()
self.trolltechGreen = QtGui.QColor.fromCmykF(0.40, 0.0, 1.0, 0.0)
self.trolltechPurple = QtGui.QColor.fromCmykF(0.39, 0.39, 0.0, 0.0)
def xRotation(self):
return self.xRot
def yRotation(self):
return self.yRot
def zRotation(self):
return self.zRot
def minimumSizeHint(self):
return QtCore.QSize(50, 50)
def sizeHint(self):
return QtCore.QSize(400, 400)
def setXRotation(self, angle):
angle = self.normalizeAngle(angle)
if angle != self.xRot:
self.xRot = angle
self.emit(QtCore.SIGNAL("xRotationChanged(int)"), angle)
self.updateGL()
def setYRotation(self, angle):
angle = self.normalizeAngle(angle)
if angle != self.yRot:
self.yRot = angle
self.emit(QtCore.SIGNAL("yRotationChanged(int)"), angle)
self.updateGL()
def setZRotation(self, angle):
angle = self.normalizeAngle(angle)
if angle != self.zRot:
self.zRot = angle
self.emit(QtCore.SIGNAL("zRotationChanged(int)"), angle)
self.updateGL()
def initializeGL(self):
self.qglClearColor(self.trolltechPurple.darker())
self.object = self.makeObject()
GL.glShadeModel(GL.GL_FLAT)
GL.glEnable(GL.GL_DEPTH_TEST)
GL.glEnable(GL.GL_CULL_FACE)
def paintGL(self):
GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT)
GL.glLoadIdentity()
GL.glTranslated(0.0, 0.0, -10.0)
GL.glRotated(self.xRot / 16.0, 1.0, 0.0, 0.0)
GL.glRotated(self.yRot / 16.0, 0.0, 1.0, 0.0)
GL.glRotated(self.zRot / 16.0, 0.0, 0.0, 1.0)
GL.glCallList(self.object)
def resizeGL(self, width, height):
side = min(width, height)
GL.glViewport((width - side) / 2, (height - side) / 2, side, side)
GL.glMatrixMode(GL.GL_PROJECTION)
GL.glLoadIdentity()
GL.glOrtho(-0.5, +0.5, +0.5, -0.5, 4.0, 15.0)
GL.glMatrixMode(GL.GL_MODELVIEW)
def mousePressEvent(self, event):
self.lastPos = QtCore.QPoint(event.pos())
def mouseMoveEvent(self, event):
dx = event.x() - self.lastPos.x()
dy = event.y() - self.lastPos.y()
if event.buttons() & QtCore.Qt.LeftButton:
self.setXRotation(self.xRot + 8 * dy)
self.setYRotation(self.yRot + 8 * dx)
elif event.buttons() & QtCore.Qt.RightButton:
self.setXRotation(self.xRot + 8 * dy)
self.setZRotation(self.zRot + 8 * dx)
self.lastPos = QtCore.QPoint(event.pos())
def makeObject(self):
genList = GL.glGenLists(1)
GL.glNewList(genList, GL.GL_COMPILE)
GL.glBegin(GL.GL_QUADS)
x1 = +0.06
y1 = -0.14
x2 = +0.14
y2 = -0.06
x3 = +0.08
y3 = +0.00
x4 = +0.30
y4 = +0.22
self.quad(x1, y1, x2, y2, y2, x2, y1, x1)
self.quad(x3, y3, x4, y4, y4, x4, y3, x3)
self.extrude(x1, y1, x2, y2)
self.extrude(x2, y2, y2, x2)
self.extrude(y2, x2, y1, x1)
self.extrude(y1, x1, x1, y1)
self.extrude(x3, y3, x4, y4)
self.extrude(x4, y4, y4, x4)
self.extrude(y4, x4, y3, x3)
Pi = 3.14159265358979323846
NumSectors = 200
for i in range(NumSectors):
angle1 = (i * 2 * Pi) / NumSectors
x5 = 0.30 * math.sin(angle1)
y5 = 0.30 * math.cos(angle1)
x6 = 0.20 * math.sin(angle1)
y6 = 0.20 * math.cos(angle1)
angle2 = ((i + 1) * 2 * Pi) / NumSectors
x7 = 0.20 * math.sin(angle2)
y7 = 0.20 * math.cos(angle2)
x8 = 0.30 * math.sin(angle2)
y8 = 0.30 * math.cos(angle2)
self.quad(x5, y5, x6, y6, x7, y7, x8, y8)
self.extrude(x6, y6, x7, y7)
self.extrude(x8, y8, x5, y5)
GL.glEnd()
GL.glEndList()
return genList
def quad(self, x1, y1, x2, y2, x3, y3, x4, y4):
self.qglColor(self.trolltechGreen)
GL.glVertex3d(x1, y1, -0.05)
GL.glVertex3d(x2, y2, -0.05)
GL.glVertex3d(x3, y3, -0.05)
GL.glVertex3d(x4, y4, -0.05)
GL.glVertex3d(x4, y4, +0.05)
GL.glVertex3d(x3, y3, +0.05)
GL.glVertex3d(x2, y2, +0.05)
GL.glVertex3d(x1, y1, +0.05)
def extrude(self, x1, y1, x2, y2):
self.qglColor(self.trolltechGreen.darker(250 + int(100 * x1)))
GL.glVertex3d(x1, y1, +0.05)
GL.glVertex3d(x2, y2, +0.05)
GL.glVertex3d(x2, y2, -0.05)
GL.glVertex3d(x1, y1, -0.05)
def normalizeAngle(self, angle):
while angle < 0:
angle += 360 * 16
while angle > 360 * 16:
angle -= 360 * 16
return angle
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
__________________
N900_Email_Options Wiki Page |
| The Following 3 Users Say Thank You to mikec For This Useful Post: | ||
|
#18
|
||||
|
||||
|
ahem! not that lazy, but seeing a block of code here is much easier to handle than running around the whole web! changing the code to be simply Pyqt4 will not run at all, so I went to install pyside ![]() i installed pyside on my device ( http://pastebin.com/GFJYAm2t ) that installed cleanly and in return when running the example it gave me the polite UI error message. I also cannot find the missing opengl import, i've left some messages around and got the pyside examples from the gitorious repository but they also offer no clues about where it may be. pyside-qt4-opengl is installed cleanly which I would have guessed should include the baseline gl stuff but no cigar! anyone else have clues? this is a certainly a better position than yesterday even with failures
__________________
liqbase sketching the future. like what i say? hit the Thanks, thanks! twitter.com/lcuk |
| The Following 2 Users Say Thank You to lcuk For This Useful Post: | ||
|
#19
|
|||
|
|||
|
Quote:
There is no hard dependency on PyOpenGL because there is a perfectly valid scenario using QGraphicsView with GL acceleration, for which it is not needed (unlike Qt3D).
__________________
Blogging about mobile linux - The Penguin Moves! Maintainer of PyQt (see introduction and docs), AppWatch, QuickBrownFox, etc |
|
#20
|
||||
|
||||
|
Quote:
however from the pyside examples, this is the line which fails: http://www.gitorious.net/pyside-exam...logl.py#line10 Code:
try:
from OpenGL import GL
except ImportError:
app = QtGui.QApplication(sys.argv)
QtGui.QMessageBox.critical(None, "OpenGL hellogl",
"PyOpenGL must be installed to run this example.",
QtGui.QMessageBox.Ok | QtGui.QMessageBox.Default,
QtGui.QMessageBox.NoButton)
sys.exit(1)
__________________
liqbase sketching the future. like what i say? hit the Thanks, thanks! twitter.com/lcuk |
![]() |
|
|