皮皮网

【仿淘小铺源码】【某高校科研管理系统源码】【娱乐短视频源码聊天app】delaunay 源码

来源:c语言密码源码 时间:2024-12-24 10:42:11

1.django怎么变成exe(2023年最新整理)
2.django如何执行exe文件(2023年最新分享)
3.已知点集的源码matlab 三维凸包 用公式表达出来
4.浅谈:点云库Open3D、PCL以及CGAL(C++)
5.Live2D动画引擎的源码图形学原理及实现

delaunay 源码

django怎么变成exe(2023年最新整理)

       导读:本篇文章首席CTO笔记来给大家介绍有关django怎么变成exe的相关内容,希望对大家有所帮助,源码一起来看看吧。源码

如何将django1.7程序打包成exe程序

       .官网下载对应的源码pyinstall工具,我下载的源码仿淘小铺源码是PyInstaller-3.2.1.zip并解压

       2.通过cmd跳转到pyinstaller目录并执行setup.pyinstall进行安装.这时会向你的python路径安装必要的第三方包,当然细节可以不用关心

       3.安装成功后就可以使用了。源码

       TK-GUI.py是源码我的源程序

       react项目怎么打包成exe安装包

       前后端完成后,将react打包后移植到django中,省去tomcat、源码negix的源码安装与配置,最后生成可执行文件,源码这样在对方windows电脑上可以无任何环境直接运行。源码

如何执行python第三方包windowsexe格式

       python第三方包的源码windows安装文件exe格式,这上面有很多python第三方包的源码二进制安装文件,包括位和位的源码。下载安装就ok了!

       这下面有很多python第三方包的二进制安装文件,包括位和位的。下载安装就ok了!

       包括了mysqldb,ldap等。

       Indexbydate:

       fiona

       scikit-image

       netcdf4

       mercurial

       scikits.audiolab

       numba

       llvmpy

       python-igraph

       rpy2

       numpy

       opencv

       zope.interface

       sfepy

       quantlib

       gdal

       imread

       django

       psychopy

       cx_freeze

       msgpack

       regex

       cellcognition

       vigra

       scikit-learn

       pytables

       h5py

       blender-mathutils

       htseq

       bioformats

       simplejson

       pyzmq

       mako

       simpleitk

       qimage2ndarray

       ujson

       vlfd

       libsvm

       liblinear

       cgkit

       scipy

       distribute

       noise

       theano

       pyalembic

       openimageio

       pyaudio

       pymca

       pyamg

       pgmagick

       lxml

       steps

       sqlalchemy

       cffi

       biopython

       python-ldap

       pycurl

       nipy

       nibabel

       pygments

       mahotas

       py-postgresql

       pyamf

       planar

       holopy

       pyvisa

       jcc

       polymode

       polygon

       cython

       pyropes

       llist

       shapely

       vtk

       pymongo

       libpython

       meshpy

       pandas

       umysql

       epydoc

       coverage

       cheetah

       pyrxp

       pybluez

       pythonmagick

       bsdiff4

       pymssql

       pymol

       boost.python

       orange

       requests

       pywcs

       python-sundials

       pymix

       pyminuit

       pylzma

       pyicu

       assimulo

       basemap

       pygraphviz

       pyproj

       mpi4py

       spyder

       pytz

       pyfits

       mysql-python

       pygame

       pycparser

       twisted

       pil

       qutip

       openexr

       nipype

       python-snappy

       visvis

       docutils

       pyhdf

       pyqwt

       kivy

       scikits.umfpack

       psycopg

       ets

       guiqwt

       veusz

       pyqt

       pyside

       dpmix

       py-fcm

       scikits.hydroclimpy

       smc.freeimage

       scipy-stack

       ipython

       nose

       mxbase

       numexpr

       pyyaml

       ode

       virtualenv

       aspell_python

       tornado

       pywavelets

       bottleneck

       networkx

       statsmodels

       pylibdeconv

       pyhook

       lmfit

       slycot

       ndimage

       scikits.scattpy

       cvxopt

       pymc

       pysparse

       scikits.odes

       matplotlib

       vpython

       pycuda

       pyopencl

       pymvpa

       pythonnet

       cld

       mod_wsgi

       nltk

       python-levenshtein

       rtree

       pywin

       scientificpython

       sympy

       thrift

       pyopengl-accelerate

       mdp

       pyopengl

       gmpy

       reportlab

       natgrid

       scikits.vectorplot

       pyreadline

       milk

       blosc

       pycogent

       pip

       gevent

       scons

       carray

       python-dateutil

       jinja2

       markupsafe

       jsonlib

       pysfml

       fonttools

       silvercity

       console

       python-cjson

       pycluster

       cdecimal

       pytst

       autopy

       sendkeys

       ceodbc

       fipy

       psutil

       pyephem

       pycifrw

       blist

       line_profiler

       pydbg

       bitarray

       pyglet

       python-lzo

       faulthandler

       delny

       pyexiv2

       ilastik

       twainmodule

       scitools

       pyspharm

       casuarius

       pyodbc

       greenlet

       nitime

       pylibtiff

       mmtk

       pycairo

       pysqlite

       curses

       videocapture

       bazaar

       nlopt

       trfit

       libsbml

       oursql

       sphinx

       cellprofiler

       py2exe

       re2

       liblas

       cgal-python

       pymedia

       ffnet

       pyfftw

       libxml-python

       pyfltk

       pymex

       pymatlab

       zodb3

       mmlib

       pygtk

       pyserial

       babel

       scikits.ann

       scikits.delaunay

       numeric

       pulp

       nmoldyn

       pymutt

       iocbio

       jpype

       wxpython

       pybox2d

       dipy

       mmseg

       pynifti

       scikits.samplerate

       scikits.timeseries

       vitables

       quickfix

Django源码阅读(一)项目的生成与启动

       诚实的说,直到目前为止,我并不欣赏django。在我的认知它并不是多么精巧的设计。只是由功能堆积起来的"成熟方案"。但每一样东西的崛起都是时代的选择。无论你多么不喜欢,但它被需要。希望有一天,python能有更多更丰富的成熟方案,且不再被诟病性能和可维护性。(屁话结束)

       取其精华去其糟粕,django的优点是方便,我们这次源码阅读的目的是探究其方便的本质。计划上本次源码阅读不会精细到每一处,而是大体以功能为单位进行解读。

       django-adminstartprojectHelloWorld即可生成django项目,命令行是exe格式的。

       manage.py把参数交给命令行解析。

       execute_from_command_line()通过命令行参数,创建一个管理类。然后运行他的execute()。

       如果设置了reload,将会在启动前先check_errors。

       check_errors()是某高校科研管理系统源码个闭包,所以上文结尾是(django.setup)()。

       直接看最后一句settings.INSTALLED_APPS。从settings中抓取app

       注意,这个settings还不是我们项目中的settings.py。而是一个对象,位于django\conf\__init__.py

       这是个Settings类的懒加载封装类,直到__getattr__取值时才开始初始化。然后从Settings类的实例中取值。且会讲该值赋值到自己的__dict__上(下次会直接在自己身上找到,因为__getattr__优先级较低)

       为了方便debug,我们直接写个run.py。不用命令行的方式。

       项目下建个run.py,模拟runserver命令

       debug抓一下setting_module

       回到setup()中的最后一句apps.populate(settings.INSTALLED_APPS)

       开始看apps.populate()

       首先看这段

       这些App最后都会封装成为AppConfig。且会装载到self.app_configs字典中

       随后,分别调用每个appConfig的import_models()和ready()方法。

       App的装载部分大体如此

       为了方便debug我们改写下最后一句

       res的类型是Commanddjango.contrib.staticfiles.management.commands.runserver.Commandobjectat0xEDA0

       重点是第二句,让我们跳到run_from_argv()方法,这里对参数进行了若干处理。

       用pycharm点这里的handle会进入基类的方法,无法得到正确的走向。实际上子类Commond重写了这个方法。

       这里分为两种情况,如果是reload重载时,会直接执行inner_run(),而项目启动需要先执行其他逻辑。

       django项目启动时,实际上会启动两次,如果我们在项目入口(manage.py)中设置个print,会发现它会打印两次。

       第一次启动时,DJANGO_AUTORELOAD_ENV为None,无法进入启动逻辑。会进入restart_with_reloader()。

       在这里会将DJANGO_AUTORELOAD_ENV置为True,随后重启。

       第二次时,可以进入启动逻辑了。

       这里创建了一个django主线程,将inner_run()传入。

       随后本线程通过reloader.run(django_main_thread),创建一个轮询守护进程。

       我们接下来看django的主线程inner_run()。

       当我们看到wsgi时,娱乐短视频源码聊天appdjango负责的启动逻辑,就此结束了。接下来的工作交由wsgi服务器了

       这相当于我们之前在fastapi中说到的,将fastapi的app交由asgi服务器。(asgi也是django提出来的,两者本质同源)

       那么这个wsgi是从哪来的?让我们来稍微回溯下

       这个settings是一个对象,在之前的操作中已经从settings.py配置文件中获得了自身的属性。所以我们只需要去settings.py配置文件中寻找。

       我们来寻找这个get_wsgi_application()。

       它会再次调用setup(),重要的是,返回一个WSGIHandler类的实例。

       这就是wsgiapp本身。

       load_middleware()为构建中间件堆栈,这也是wsgiapp获取setting信息的唯一途径。导入settings.py,生成中间件堆栈。

       如果看过我之前那篇fastapi源码的,应该对中间件堆栈不陌生。

       app入口→中间件堆栈→路由→路由节点→endpoint

       所以,wsgiapp就此构建完毕,服务器传入请求至app入口,即可经过中间件到达路由进行分发。

       结语:以上就是首席CTO笔记为大家整理的关于django怎么变成exe的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~

django如何执行exe文件(年最新分享)

       导读:今天首席CTO笔记来给各位分享关于django如何执行exe文件的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

C:\Python\Django\setup.py'>Django安装问题,我在cmd上输入如下:C:Users\Adiministrator>C:\Python\Django\setup.py

       首先你要明白这个命令是分三部分的,第一个是启动Python来执行文件,第二个是执行的文件名(setup.py),第三个是参数(install)。C:\python\django\python是不能执行的,因为在那个目录下并没有叫Python.exe的可执行文件。正确的写法应该是:

       c:\python\pythonc:\python\django\setup.pyinstall

       或者直接c:\python\django\setup.pyinstall,这个在Windows下应该也是可以的,因为py文件默认是用python打开的。在这种情况下,还可以先键入cdc:\python\django,进入这个目录,然后再执行setup.pyinstall

       Django非常棒,我也正在学。测试指标源码正确率

       Django源码阅读(一)项目的生成与启动

       诚实的说,直到目前为止,我并不欣赏django。在我的认知它并不是多么精巧的设计。只是由功能堆积起来的"成熟方案"。但每一样东西的崛起都是时代的选择。无论你多么不喜欢,但它被需要。希望有一天,python能有更多更丰富的成熟方案,且不再被诟病性能和可维护性。(屁话结束)

       取其精华去其糟粕,django的优点是方便,我们这次源码阅读的目的是探究其方便的本质。计划上本次源码阅读不会精细到每一处,而是大体以功能为单位进行解读。

       django-adminstartprojectHelloWorld即可生成django项目,命令行是exe格式的。

       manage.py把参数交给命令行解析。

       execute_from_command_line()通过命令行参数,创建一个管理类。然后运行他的execute()。

       如果设置了reload,将会在启动前先check_errors。

       check_errors()是个闭包,所以上文结尾是(django.setup)()。

       直接看最后一句settings.INSTALLED_APPS。从settings中抓取app

       注意,这个settings还不是我们项目中的settings.py。而是一个对象,位于django\conf\__init__.py

       这是个Settings类的懒加载封装类,直到__getattr__取值时才开始初始化。然后从Settings类的实例中取值。且会讲该值赋值到自己的__dict__上(下次会直接在自己身上找到,因为__getattr__优先级较低)

       为了方便debug,我们直接写个run.py。不用命令行的方式。

       项目下建个run.py,模拟runserver命令

       debug抓一下setting_module

       回到setup()中的最后一句apps.populate(settings.INSTALLED_APPS)

       开始看apps.populate()

       首先看这段

       这些App最后都会封装成为AppConfig。且会装载到self.app_configs字典中

       随后,分别调用每个appConfig的import_models()和ready()方法。

       App的装载部分大体如此

       为了方便debug我们改写下最后一句

       res的类型是Commanddjango.contrib.staticfiles.management.commands.runserver.Commandobjectat0xEDA0

       重点是第二句,让我们跳到run_from_argv()方法,这里对参数进行了若干处理。添加10日线源码

       用pycharm点这里的handle会进入基类的方法,无法得到正确的走向。实际上子类Commond重写了这个方法。

       这里分为两种情况,如果是reload重载时,会直接执行inner_run(),而项目启动需要先执行其他逻辑。

       django项目启动时,实际上会启动两次,如果我们在项目入口(manage.py)中设置个print,会发现它会打印两次。

       第一次启动时,DJANGO_AUTORELOAD_ENV为None,无法进入启动逻辑。会进入restart_with_reloader()。

       在这里会将DJANGO_AUTORELOAD_ENV置为True,随后重启。

       第二次时,可以进入启动逻辑了。

       这里创建了一个django主线程,将inner_run()传入。

       随后本线程通过reloader.run(django_main_thread),创建一个轮询守护进程。

       我们接下来看django的主线程inner_run()。

       当我们看到wsgi时,django负责的启动逻辑,就此结束了。接下来的工作交由wsgi服务器了

       这相当于我们之前在fastapi中说到的,将fastapi的app交由asgi服务器。(asgi也是django提出来的,两者本质同源)

       那么这个wsgi是从哪来的?让我们来稍微回溯下

       这个settings是一个对象,在之前的操作中已经从settings.py配置文件中获得了自身的属性。所以我们只需要去settings.py配置文件中寻找。

       我们来寻找这个get_wsgi_application()。

       它会再次调用setup(),重要的是,返回一个WSGIHandler类的实例。

       这就是wsgiapp本身。

       load_middleware()为构建中间件堆栈,这也是wsgiapp获取setting信息的唯一途径。导入settings.py,生成中间件堆栈。

       如果看过我之前那篇fastapi源码的,应该对中间件堆栈不陌生。

       app入口→中间件堆栈→路由→路由节点→endpoint

       所以,wsgiapp就此构建完毕,服务器传入请求至app入口,即可经过中间件到达路由进行分发。

如何执行python第三方包windowsexe格式

       python第三方包的windows安装文件exe格式,这上面有很多python第三方包的二进制安装文件,包括位和位的。下载安装就ok了!

       这下面有很多python第三方包的二进制安装文件,包括位和位的。下载安装就ok了!

       包括了mysqldb,ldap等。

       Indexbydate:

       fiona

       scikit-image

       netcdf4

       mercurial

       scikits.audiolab

       numba

       llvmpy

       python-igraph

       rpy2

       numpy

       opencv

       zope.interface

       sfepy

       quantlib

       gdal

       imread

       django

       psychopy

       cx_freeze

       msgpack

       regex

       cellcognition

       vigra

       scikit-learn

       pytables

       h5py

       blender-mathutils

       htseq

       bioformats

       simplejson

       pyzmq

       mako

       simpleitk

       qimage2ndarray

       ujson

       vlfd

       libsvm

       liblinear

       cgkit

       scipy

       distribute

       noise

       theano

       pyalembic

       openimageio

       pyaudio

       pymca

       pyamg

       pgmagick

       lxml

       steps

       sqlalchemy

       cffi

       biopython

       python-ldap

       pycurl

       nipy

       nibabel

       pygments

       mahotas

       py-postgresql

       pyamf

       planar

       holopy

       pyvisa

       jcc

       polymode

       polygon

       cython

       pyropes

       llist

       shapely

       vtk

       pymongo

       libpython

       meshpy

       pandas

       umysql

       epydoc

       coverage

       cheetah

       pyrxp

       pybluez

       pythonmagick

       bsdiff4

       pymssql

       pymol

       boost.python

       orange

       requests

       pywcs

       python-sundials

       pymix

       pyminuit

       pylzma

       pyicu

       assimulo

       basemap

       pygraphviz

       pyproj

       mpi4py

       spyder

       pytz

       pyfits

       mysql-python

       pygame

       pycparser

       twisted

       pil

       qutip

       openexr

       nipype

       python-snappy

       visvis

       docutils

       pyhdf

       pyqwt

       kivy

       scikits.umfpack

       psycopg

       ets

       guiqwt

       veusz

       pyqt

       pyside

       dpmix

       py-fcm

       scikits.hydroclimpy

       smc.freeimage

       scipy-stack

       ipython

       nose

       mxbase

       numexpr

       pyyaml

       ode

       virtualenv

       aspell_python

       tornado

       pywavelets

       bottleneck

       networkx

       statsmodels

       pylibdeconv

       pyhook

       lmfit

       slycot

       ndimage

       scikits.scattpy

       cvxopt

       pymc

       pysparse

       scikits.odes

       matplotlib

       vpython

       pycuda

       pyopencl

       pymvpa

       pythonnet

       cld

       mod_wsgi

       nltk

       python-levenshtein

       rtree

       pywin

       scientificpython

       sympy

       thrift

       pyopengl-accelerate

       mdp

       pyopengl

       gmpy

       reportlab

       natgrid

       scikits.vectorplot

       pyreadline

       milk

       blosc

       pycogent

       pip

       gevent

       scons

       carray

       python-dateutil

       jinja2

       markupsafe

       jsonlib

       pysfml

       fonttools

       silvercity

       console

       python-cjson

       pycluster

       cdecimal

       pytst

       autopy

       sendkeys

       ceodbc

       fipy

       psutil

       pyephem

       pycifrw

       blist

       line_profiler

       pydbg

       bitarray

       pyglet

       python-lzo

       faulthandler

       delny

       pyexiv2

       ilastik

       twainmodule

       scitools

       pyspharm

       casuarius

       pyodbc

       greenlet

       nitime

       pylibtiff

       mmtk

       pycairo

       pysqlite

       curses

       videocapture

       bazaar

       nlopt

       trfit

       libsbml

       oursql

       sphinx

       cellprofiler

       py2exe

       re2

       liblas

       cgal-python

       pymedia

       ffnet

       pyfftw

       libxml-python

       pyfltk

       pymex

       pymatlab

       zodb3

       mmlib

       pygtk

       pyserial

       babel

       scikits.ann

       scikits.delaunay

       numeric

       pulp

       nmoldyn

       pymutt

       iocbio

       jpype

       wxpython

       pybox2d

       dipy

       mmseg

       pynifti

       scikits.samplerate

       scikits.timeseries

       vitables

       quickfix

如何将django1.7程序打包成exe程序

       .官网下载对应的pyinstall工具,我下载的是PyInstaller-3.2.1.zip并解压

       2.通过cmd跳转到pyinstaller目录并执行setup.pyinstall进行安装.这时会向你的python路径安装必要的第三方包,当然细节可以不用关心

       3.安装成功后就可以使用了。

       TK-GUI.py是我的源程序

       结语:以上就是首席CTO笔记为大家整理的关于django如何执行exe文件的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~

已知点集的matlab 三维凸包 用公式表达出来

       用 qhull 计算三维点集的凸包

       在计算几何领域,qhull 是个很强大的程序,它可以计算 2 维、3 维,以及4 维以上维度点集的凸包、Delaunay 网格、Voronoi 图,并且 Matlab 和 Octave 都基于它来提供计算几何功能,Mathematica 使用它实现 Delaunay 网格构造。不过,也正是因为它过于强大,所以我在它的源代码中逡巡了好久,也没有看懂。现在我能做到的,就是找个梯子先爬上这个黑箱子。

       因为 qhull 是一个复杂的命令行工具箱,用户可以通过各种命令选项去调用适当的程序。比如,要对点集进行 Delaunay 网格化,可以直接使用 "qdelaunay" 命令来实现,也可以通过 "qhull d Qbb" 命令来实现。

       在 qhull 工具箱中,要构建点集的凸包,可以调用 "qconvex" 命令来实现,而且 "qhull" 如果在未设定命令选项时,默认调用的程序就是 qconvex。对于我要解决的问题,即使用 qhull 构造三维点集的凸包而言,基本命令格式如下:

       $ qconvex [选项] < input_file > output_file

       qconvex 程序的行为由一组功能选项来控制,常用的如下:

        Qt - 三角化输出,也就是输出由三角面片组合而成的凸包数据

        QJ - 对于近似于平面的数据进行一些简化,譬如对于三维点集,

        - 可以保证不会出现 4 点共面的情况

        Tv - 从结构、凸性以及数据包含等方面对凸包构建结果进行校验

        - - 输出 qconvex 所有选项信息

        对于凸包构建结果的输出,qconvex 提供了一组输出控制选项,常用的如下:

        s - 输出凸包构建结果概要 (default)

        i - 输出凸包上每个面片的顶点

        n - 输出凸包上每个面的方程系数

        p - 输出要进行凸包求解的点集的坐标

        Fx - 输出极点(凸包顶点)

        FA - 输出凸包的面积和体积

        o - 采用 OFF 格式输出凸包构建结果(维度, 顶点数, 面数, 边数)

        G - 采用 Geomview 格式输出凸包构建结果(只支持 2 维至 4 维)

        m - 采用 Mathematica 格式输出凸包构建结果(只支持 2 维与 3 维)

        TO 文件名 - 将凸包构建结果输出到文件

       我们来玩真格的。首先准备好一份存放三维数据点信息的文本文件,文件的第一行是点数,其余每行都是一个数据点的 x, y, z 坐标信息。对于下图所示的 venus 点云,其数据文件 venus.asc 格式为:

       

       3. . 8.

       3. . .

       3. . 9.

       3. . .

       3. . .

       3. . 7.

       3. . 9.

       3. . .

       3. . .

       ... ... ... ... ... ...

       现在使用 qconvex 对 venus.asc 文件所包含的点集构建凸包,采用 OFF (Object File Format) 格式输出:

       $ qconvex o < venus.asc TO result.off

       qconvex 输出的 off 格式文件自上而下由三部分构成:

       文件头信息,即文件的第一行是数据的维度,第二行的内容是凸包顶点数、面片数和边数;

       点表,存放凸包顶点的坐标信息;

       面表,按逆时针次序记录面片顶点在点表中的序号(从 0 开始)。

       在 off 文件的面表区域,第一列数字用来表示每个面片所含的顶点的个数。

       在 linux 下,可以使用 geomview 来显示 OFF 格式文件,但前提是将 qconvex 输出的 off 文件的第一行内容替换为 "OFF"。下面是一份 geomview 所能接受的 OFF 文件格式,显示结果如下图所示。

       # 文件头 (本行文本是注释,实际中应当去掉)

       OFF

       

       # 点表 (本行文本是注释,实际中应当去掉)

       3. . .

       3. . .

       3. . 7.

       ... ... ... ... ... ...

       # 面表 (本行文本是注释,实际中应当去掉)

       3

       3

       3

浅谈:点云库Open3D、PCL以及CGAL(C++)

       本文旨在比较分析点云处理库Open3D、PCL及CGAL(C++),以深入理解其特性、功能与上手难度。

       Open3D,一个面向对象的点云库,提供了丰富的点云与曲面网格算法。其语言设计简洁,易于理解,适合初学者。Open3D模块化高,内聚松耦合,代码量较少,适合快速开发。然而,泛型编程实现较少,代码复用性与灵活性不及PCL和CGAL。

       PCL是一个大规模、独立的开源项目,广泛用于2D/3D图像与点云处理。其大量使用泛型编程,提供丰富的点云算法,尤其在点云数据处理方面优势明显。虽然计算效率一般,但学习成本较高,适合深入学习泛型编程。

       CGAL(计算几何算法库)是一个大型C++几何库,提供几何数据结构与算法,如Delaunay三角网、网格生成等。CGAL提供复杂的几何内核,实现完全分离状态,复用性和灵活性高。学习CGAL需具备一定基础,其源码提供丰富学习资源。

       在可视化方面,CloudCompare及Meshlab提供插件式与非插件式二次开发,强调美观简洁,适合处理可视化问题。这两个项目提供大量源代码,涉及点云分割、曲面拟合、分类与曲面重建等,值得学习借鉴。

       学习建议:面对错误,不应害怕,这是学习过程的必要部分。持续学习,保持积极态度。了解这些库的局限,早睡早起,保持身体健康。最后,阅读前保持批判性思维,验证信息。

Live2D动画引擎的图形学原理及实现

       初次接触Live2D,是通过群聊,直观感觉动画奇特且粗糙,难以理解为何能大受欢迎。然而,经过一段时间的观察与思考,发现其独特的魅力,进而萌生出个人制作Live2D的想法。这并非指制作Live2D模型,而是实现其核心功能,包括动画骨骼、动作追踪、网格建立与物理模拟,直至图元光栅化。

       看似复杂的项目,实际上,实现过程经过数月的投入,也并非难以企及。为了便于调试,绘制了一个简单的用于测试的人设,利用专业绘图软件sai完成。制作流程包括线稿绘制、细节调整、分层导出为独立的PNG等。准备工作完成后,启动开发环境Visual Studio,正式开始Live2D的制作之旅。

       首先,回顾图形学基础,理解图元结构、渲染流程与关键技术。图元填充算法,如扫描线填充,是实现Live2D动画的关键步骤。在加载图像至项目中后,最终显示为一系列图元的集合。为了提高渲染质量,引入双线性插值滤波,对纹理映射进行优化。

       网格建立是另一个挑战,Delaunay三角剖分成为了解决方案。遵循三角剖分定义,确保三角面不相交且满足特定条件。在完成Delaunay三角剖分后,每个图层加载并绑定网格,为后续动画编辑奠定基础。

       紧接着,讨论到动画系统,即骨骼动画。每个图层被赋予关键节点,所有顶点围绕节点进行旋转、平移和缩放,形成骨骼系统。动画编辑依赖节点操作,实现一系列矩阵级联,驱动模型动作。

       为了模拟现实中的物理行为,引入弹性节点概念,对柔软部位进行物理模拟。通过简化模型,每个顶点与节点关联,弹性系数控制顶点运动规律。最后,实现动作追踪功能,依据输入完成特定追踪动作,如跟随鼠标运动。

       整个项目的核心渲染、骨骼框架与额外的物理模拟,代码量并不庞大,约2-3千行,开发周期在2周左右。然而,配套编辑器的开发耗时5个月,远超预期。制作过程虽未带来太多技术突破,但回顾整个项目,涉及知识与本科课程内容相似,较为轻松。

       所有核心与配套源代码已开源,欢迎访问 PainterEngine.com 获取更多信息与支持。如果你喜欢这个项目,不妨给予star。最后,分享一段个人制作的Live2D动画作为收尾。