diff options
Diffstat (limited to 'examples/opengl/hellogl2/logo.py')
-rw-r--r-- | examples/opengl/hellogl2/logo.py | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/examples/opengl/hellogl2/logo.py b/examples/opengl/hellogl2/logo.py new file mode 100644 index 000000000..c236a1ec9 --- /dev/null +++ b/examples/opengl/hellogl2/logo.py @@ -0,0 +1,101 @@ +# Copyright (C) 2023 The Qt Company Ltd. +# Copyright (C) 2013 Riverbank Computing Limited. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +import math + +from PySide6.QtGui import (QVector3D, QVector3DList) + + +class Logo(): + def __init__(self): + self.m_data = QVector3DList() + self.m_data.reserve(5000) + + 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) + + NUM_SECTORS = 100 + + for i in range(NUM_SECTORS): + angle = (i * 2 * math.pi) / NUM_SECTORS + x5 = 0.30 * math.sin(angle) + y5 = 0.30 * math.cos(angle) + x6 = 0.20 * math.sin(angle) + y6 = 0.20 * math.cos(angle) + + angle = ((i + 1) * 2 * math.pi) / NUM_SECTORS + x7 = 0.20 * math.sin(angle) + y7 = 0.20 * math.cos(angle) + x8 = 0.30 * math.sin(angle) + y8 = 0.30 * math.cos(angle) + + self.quad(x5, y5, x6, y6, x7, y7, x8, y8) + + self.extrude(x6, y6, x7, y7) + self.extrude(x8, y8, x5, y5) + + def const_data(self): + return self.m_data.constData() + + def count(self): + return len(self.m_data) * 3 + + def vertex_count(self): + return self.count() / 6 + + def quad(self, x1, y1, x2, y2, x3, y3, x4, y4): + n = QVector3D.normal(QVector3D(x4 - x1, y4 - y1, 0), + QVector3D(x2 - x1, y2 - y1, 0)) + + self.add(QVector3D(x1, y1, -0.05), n) + self.add(QVector3D(x4, y4, -0.05), n) + self.add(QVector3D(x2, y2, -0.05), n) + + self.add(QVector3D(x3, y3, -0.05), n) + self.add(QVector3D(x2, y2, -0.05), n) + self.add(QVector3D(x4, y4, -0.05), n) + + n = QVector3D.normal(QVector3D(x1 - x4, y1 - y4, 0), + QVector3D(x2 - x4, y2 - y4, 0)) + + self.add(QVector3D(x4, y4, 0.05), n) + self.add(QVector3D(x1, y1, 0.05), n) + self.add(QVector3D(x2, y2, 0.05), n) + + self.add(QVector3D(x2, y2, 0.05), n) + self.add(QVector3D(x3, y3, 0.05), n) + self.add(QVector3D(x4, y4, 0.05), n) + + def extrude(self, x1, y1, x2, y2): + n = QVector3D.normal(QVector3D(0, 0, -0.1), + QVector3D(x2 - x1, y2 - y1, 0)) + + self.add(QVector3D(x1, y1, 0.05), n) + self.add(QVector3D(x1, y1, -0.05), n) + self.add(QVector3D(x2, y2, 0.05), n) + + self.add(QVector3D(x2, y2, -0.05), n) + self.add(QVector3D(x2, y2, 0.05), n) + self.add(QVector3D(x1, y1, -0.05), n) + + def add(self, v, n): + self.m_data.append(v) + self.m_data.append(n) |