Получился бы продвинутый OpenGL рендер для анимации. Кадры бы вылетали за секунду пачками.
ЦитироватьПолучился бы продвинутый OpenGL рендер для анимации. Кадры бы вылетали за секунду пачками. Такое можно сделать с помощью движка Irrlicht и враппера к нему. Там есть и GUI, и поддержка многих 3d форматов файлов... можно внедрять внутрь OpenGL код и писать шейдеры на GLSL. Но лучше юзать этот вариант: http://worldsim3d.com/ru/download в нем нет проблем с кириллицей.
Вот почитай возможности оригинального на Си++: http://irrlicht.ru/?page_id=4У враппера под Freebasic несколько ограничены возможности... и только под х32
In file included from COpenGLDriver.h:25:0, from COpenGLDriver.cpp:5:COpenGLExtensionHandler.h:1237:3: ошибка: «PFNGLBLENDEQUATIONPROC» не является именем типа PFNGLBLENDEQUATIONPROC pGlBlendEquation;
# PyQT/OpenGL example# shaders from here: http://www.iquilezles.org/www/material/nvscene2008/rwwtt.pdf## Author: Peter Bouda, http://www.peterbouda.euimport timeimport arrayfrom PyQt5.QtMultimedia import *from PyQt5 import QtCore, QtGui, QtWidgetsclass OpenGLWindow(QtGui.QWindow): def __init__(self, parent=None): super(OpenGLWindow, self).__init__(parent) self.m_update_pending = False self.m_animating = False self.m_context = None self.m_gl = None self.setSurfaceType(QtGui.QWindow.OpenGLSurface) def initialize(self): pass def setAnimating(self, animating): self.m_animating = animating if animating: self.renderLater() def renderLater(self): if not self.m_update_pending: self.m_update_pending = True QtGui.QGuiApplication.postEvent(self, QtCore.QEvent(QtCore.QEvent.UpdateRequest)) def renderNow(self): if not self.isExposed(): return self.m_update_pending = False needsInitialize = False if self.m_context is None: self.m_context = QtGui.QOpenGLContext(self) self.m_context.setFormat(self.requestedFormat()) self.m_context.create() needsInitialize = True self.m_context.makeCurrent(self) if needsInitialize: version = QtGui.QOpenGLVersionProfile() version.setVersion(2, 0) self.m_gl = self.m_context.versionFunctions(version) self.m_gl.initializeOpenGLFunctions() self.initialize(self.m_gl) self.render(self.m_gl) self.m_context.swapBuffers(self) if self.m_animating: self.renderLater() def event(self, event): if event.type() == QtCore.QEvent.UpdateRequest: self.renderNow() return True return super(OpenGLWindow, self).event(event) def exposeEvent(self, event): self.renderNow() def resizeEvent(self, event): self.renderNow()class ChocoWindow(OpenGLWindow): vertexShaderSource = '''attribute highp vec4 vPosition;varying highp vec3 s[4];void main() { gl_Position=vPosition; s[0]=vec3(0); s[3]=vec3(sin(abs(vPosition[0]*.0001)), cos(abs(vPosition[0]*.0001)),0); s[1]=s[3].zxy; s[2]=s[3].zzx;}''' fragmentShaderSource = '''varying highp vec3 s[4];void main() { highp float t,b,c,h=0.0; highp vec3 m,n,p=vec3(.2),d=normalize(.001*gl_FragCoord.rgb-p); for(int i=0;i<4;i++) { t=2.0; for(int i=0; i<4; i++) { b=dot(d,n=s[i]-p); c=b*b+.2-dot(n,n); if ((b-c)<t) if (c>0.0) { m=s[i]; t=b-c; } } p+=t*d; d=reflect(d,n=normalize(p-m)); h+=pow(n.x*n.x,44.)+n.x*n.x*.2; } gl_FragColor=vec4(h,h*h,h*h*h*h,h);}''' def __init__(self, parent=None): super(ChocoWindow, self).__init__(parent) def initialize(self, gl): self.program = QtGui.QOpenGLShaderProgram(self) self.program.addShaderFromSourceCode(QtGui.QOpenGLShader.Vertex, self.vertexShaderSource) self.program.addShaderFromSourceCode(QtGui.QOpenGLShader.Fragment, self.fragmentShaderSource) self.program.link() self.vAttr = self.program.attributeLocation('vPosition') #gl.BufferData(gl.GL_ARRAY_BUFFER, 16*4, None, gl.GL_STATIC_DRAW) def render(self, gl): gl.glViewport(0, 0, self.width(), self.height()) gl.glClear(gl.GL_COLOR_BUFFER_BIT) self.program.bind() t = int(time.clock()*10000) vertices = array.array("f", [ float(t), float(t), 0.0, float(-t), float(t), 0.0, float(-t), float(-t), 0.0, float(t), float(-t), 0.0 ]) indices = array.array("B", [0,1,2,0,2,3]) gl.glEnableVertexAttribArray(self.vAttr) gl.glVertexAttribPointer(self.vAttr, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, vertices) #gl.glDrawArrays(gl.GL_TRIANGLES, 0, 4) gl.glDrawElements(gl.GL_TRIANGLES, 6, gl.GL_UNSIGNED_BYTE, indices) gl.glDisableVertexAttribArray(self.vAttr) self.program.release()if __name__ == '__main__': import sys app = QtWidgets.QApplication(sys.argv) format = QtGui.QSurfaceFormat() format.setSamples(4) window = ChocoWindow() window.setFormat(format) window.resize(640, 480) window.show() window.setAnimating(True) sys.exit(app.exec_())
ты смеёшься, что ли? Нахрена Python?
Дык это он у тебя не пашет... у меня на Windows 7 враппер под Freebasic прекрасно работает. И мне, в принципе, этого достаточна на данный момент, чтобы экспериментировать, а не заморачиваться на разработку серьёзного ПО ...
Увы, самое большое неудобство в Windows, это, как ни странно,совместимость с MS-DOS, т.е. досовская консоль, и в следствии это путаница с кодировками кириллицы. Кстати, в Си/Си++ та же беда а в Python Блендера вообще непонятно как вывести в консоль русские буквы...Тут написано про решения для FB: http://free-basic.ru/another.htmlНа мой взгляд, подключение albom_font.bi, самое простое решение: http://free-basic.ru/user-files/albom_fontFB024.zip