Wollten Sie schon immer Ihre eigene Benutzeroberfläche erstellen, während Sie Blender-Add-Ons entwickeln? Beim Erstellen einer Benutzeroberfläche müssen Bilder usw. in Blender angezeigt werden. Glücklicherweise stellt die Blender-API eine API für den Zugriff auf OpenGL bereit. Wenn Sie diese API zusammen mit den in den folgenden Artikeln vorgestellten Mausereignissen verwenden, können Sie Ihre eigene Benutzeroberfläche erstellen, ohne der Blender-spezifischen Benutzeroberfläche zu folgen.
[Blender] Umgang mit Maus- und Tastaturereignissen in Blender-Skripten
Obwohl APIs bereitgestellt werden, werden nicht alle OpenGL-Funktionen bereitgestellt. Daher können Sie nur den von Blender bereitgestellten API-Bereich nutzen. Wenn es sich jedoch um einen einfachen Zeichenvorgang wie die Benutzeroberfläche eines Add-Ons handelt, reicht die bereitgestellte API meiner Meinung nach aus.
In diesem Artikel zeige ich Ihnen ein Beispiel für das Zeichnen eines Rechtecks in View3D und zeige Ihnen, wie Sie OpenGL von Blender verwenden.
opengl_on_blender.py
import bpy
import bgl #Erforderlich, um OpenGL in Blender zu verwenden
bl_info = {
"name": "Tutorial: OpenGL on Blender",
"author": "Nutti",
"version": (1, 0),
"blender": (2, 74, 0),
"location": "View3D > Tutorial: OpenGL on Blender",
"description": "Tutorial: Use Blender's OpenGL API.",
"warning": "",
"support": "COMMUNITY",
"wiki_url": "",
"tracker_url": "",
"category": "3D View"
}
class RectRenderer(bpy.types.Operator):
"""Zeichne ein Quadrat"""
bl_idname = "view3d.rect_renderer"
bl_label = "Rect renderer"
__handle = None #Zeichenfunktion
#Registrieren Sie die Zeichenfunktion des Bereichs "View3D"
@staticmethod
def handle_add():
RectRenderer.__handle = bpy.types.SpaceView3D.draw_handler_add(
RectRenderer.render_rect,
(), 'WINDOW', 'POST_PIXEL')
#Heben Sie die Registrierung der Zeichenfunktion im Bereich "View3D" auf
@staticmethod
def handle_remove():
if RectRenderer.__handle is not None:
bpy.types.SpaceView3D.draw_handler_remove(
RectRenderer.__handle, 'WINDOW')
RectRenderer.__handle = None
#Zeichnungsfunktionskörper im Bereich "View3D"
@staticmethod
def render_rect():
#Zeichenbereich erstellen
positions = [
[10.0, 10.0], #Unten links
[10.0, 600.0], #Oben links
[600.0, 600.0], #Oben rechts
[600.0, 10.0] #Rechts unten
]
#Mit OpenGL ein Quadrat zeichnen
bgl.glEnable(bgl.GL_BLEND) #Aktivieren Sie Alpha Blend
bgl.glBegin(bgl.GL_QUADS) #Beginnen Sie mit dem Zeichnen eines Vierecks
bgl.glColor4f(0.7, 0.5, 0.3, 0.6) #Geben Sie die Farbe des zu zeichnenden Quadrats an
for (v1, v2) in positions:
bgl.glVertex2f(v1, v2) #Registrierung von Eckpunkten
bgl.glEnd() #Beenden Sie das Zeichnen des Vierecks
#Verarbeitung zum Zeitpunkt der Skriptinstallation
def register():
bpy.utils.register_module(__name__)
RectRenderer.handle_add()
#Verarbeitung bei der Deinstallation des Skripts
def unregister():
bpy.utils.unregister_module(__name__)
RectRenderer.handle_remove()
if __name__ == "__main__":
register()
Die grundlegende Erklärung des Blender-Skripts wird im folgenden Artikel vorgestellt. Daher konzentrieren wir uns hier auf die Erklärung der neu hinzugefügten Elemente. [\ Blender ] So erstellen Sie ein Blender-Plug-In
Um die von Blender bereitgestellte OpenGL-API verwenden zu können, müssen Sie das Modul `` `bgl``` importieren.
import bgl
Rufen Sie bei der Installation des Skripts `RectRenderer.handle_add ()`
auf, um die Zeichenfunktion zu registrieren.
Dadurch kann das Rechteck nach der Installation des Skripts gezeichnet werden.
#Verarbeitung zum Zeitpunkt der Skriptinstallation
def register():
bpy.utils.register_module(__name__)
RectRenderer.handle_add()
RectRenderer.handle_add()Wird als statische Methode implementiert.
#### **`bpy.types.SpaceView3D.draw_handler_add()Ist eine Funktion, die eine Zeichenfunktion für den Bereich "View3D" registriert.`**
Geben Sie im ersten Argument ** Zeichnungsfunktionskörper ** und ** Parameter ** an, die an das im ersten Argument im zweiten Argument angegebene Zeichnungsfunktionsargument übergeben werden sollen.
Speichern Sie den ** Handler **, den Rückgabewert von `bpy.types.SpaceView3D.draw_handler_add ()`
, in der Variablen `` __handle```, falls Sie die registrierte Zeichenfunktion freigeben möchten. Ich werde.
#Registrieren Sie die Zeichenfunktion des Bereichs "View3D"
@staticmethod
def handle_add():
RectRenderer.__handle = bpy.types.SpaceView3D.draw_handler_add(
RectRenderer.render_rect,
(), 'WINDOW', 'POST_PIXEL')
Rufen Sie bei der Deinstallation des Skripts `RectRenderer.handle_remove ()`
auf, um die Registrierung der Zeichenfunktion aufzuheben.
Verhindert, dass das Rechteck nach der Deinstallation des Skripts gezeichnet wird.
#Verarbeitung bei der Deinstallation des Skripts
def unregister():
bpy.utils.unregister_module(__name__)
RectRenderer.handle_remove()
RectRenderer.handle_remove()Wird als statische Methode implementiert.
#### **`bpy.types.SpaceView3D.draw_handler_remove()Ist eine Funktion, die die für den Bereich "View3D" registrierte Zeichenfunktion abbricht.`**
Übergeben Sie als erstes Argument den ** Handler **, der den Rückgabewert von `bpy.types.SpaceView3D.draw_handler_add ()`
ist.
#Heben Sie die Registrierung der Zeichenfunktion im Bereich "View3D" auf
@staticmethod
def handle_remove():
if RectRenderer.__handle is not None:
bpy.types.SpaceView3D.draw_handler_remove(
RectRenderer.__handle, 'WINDOW')
RectRenderer.__handle = None
Die Zeichnungsverarbeitung wird dem Zeichnungsfunktionskörper hinzugefügt.
Wie jeder, der OpenGL verwendet hat, sofort weiß, ist es der Verwendung von OpenGL in C-Sprache sehr ähnlich.
Beachten Sie jedoch, dass der Funktion `bgl.``` vorangestellt wird, da das Modul`
bgl``` verwendet wird.
Es gibt viele Informationen zur Verwendung von OpenGL in C-Sprache im Web, daher werde ich hier nicht auf die spezifische Verwendung von OpenGL eingehen.
Für das diesmal gezeigte Beispiel wird der spezifische Verarbeitungsinhalt als Kommentar im Quellcode beschrieben. Überprüfen Sie ihn daher bitte.
Die von Blender veröffentlichte OpenGL-API kann unter der folgenden URL bestätigt werden.
http://www.blender.org/api/blender_python_api_2_60_4/bgl.html
#Zeichnungsfunktionskörper im Bereich "View3D"
@staticmethod
def render_rect():
#Zeichenbereich erstellen
positions = [
[10.0, 10.0], #Unten links
[10.0, 600.0], #Oben links
[600.0, 600.0], #Oben rechts
[600.0, 10.0] #Rechts unten
]
#Mit OpenGL ein Quadrat zeichnen
bgl.glEnable(bgl.GL_BLEND) #Aktivieren Sie Alpha Blend
bgl.glBegin(bgl.GL_QUADS) #Beginnen Sie mit dem Zeichnen eines Vierecks
bgl.glColor4f(0.7, 0.5, 0.3, 0.6) #Geben Sie die Farbe des zu zeichnenden Quadrats an
for (v1, v2) in positions:
bgl.glVertex2f(v1, v2) #Registrierung von Eckpunkten
bgl.glEnd() #Beenden Sie das Zeichnen des Vierecks
Recommended Posts