pmx

package
v0.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 12, 2024 License: MIT Imports: 19 Imported by: 1

Documentation

Index

Constants

View Source
const MLIB_PREFIX string = "[mlib]"

MLIB_PREFIX システム用接頭辞

Variables

View Source
var CollisionGroupFlags = []uint16{
	0x0001,
	0x0002,
	0x0004,
	0x0008,
	0x0010,
	0x0020,
	0x0040,
	0x0080,
	0x0100,
	0x0200,
	0x0400,
	0x0800,
	0x1000,
	0x2000,
	0x4000,
	0x8000,
}

Functions

func GetStandardBoneConfigs

func GetStandardBoneConfigs() map[StandardBoneNames]*BoneConfig

func NewCollisionGroup

func NewCollisionGroup(collisionGroupMask uint16) []uint16

Types

type Bdef1

type Bdef1 struct {
	Deform
}

Bdef1 represents the BDEF1 deformation.

func NewBdef1

func NewBdef1(index0 int) *Bdef1

NewBdef1 creates a new Bdef1 instance.

func (*Bdef1) GetType

func (b *Bdef1) GetType() DeformType

GetType returns the deformation type.

func (*Bdef1) NormalizedDeform

func (d *Bdef1) NormalizedDeform() [8]float32

NormalizedDeform 4つのボーンINDEXとウェイトを返す(合計8個)

type Bdef2

type Bdef2 struct {
	Deform
}

Bdef2 represents the BDEF2 deformation.

func NewBdef2

func NewBdef2(index0, index1 int, weight0 float64) *Bdef2

NewBdef2 creates a new Bdef2 instance.

func (*Bdef2) GetType

func (b *Bdef2) GetType() DeformType

GetType returns the deformation type.

func (*Bdef2) NormalizedDeform

func (d *Bdef2) NormalizedDeform() [8]float32

NormalizedDeform 4つのボーンINDEXとウェイトを返す(合計8個)

type Bdef4

type Bdef4 struct {
	Deform
}

Bdef4 represents the BDEF4 deformation.

func NewBdef4

func NewBdef4(index0, index1, index2, index3 int, weight0, weight1, weight2, weight3 float64) *Bdef4

NewBdef4 creates a new Bdef4 instance.

func (*Bdef4) GetType

func (b *Bdef4) GetType() DeformType

GetType returns the deformation type.

func (*Bdef4) NormalizedDeform

func (d *Bdef4) NormalizedDeform() [8]float32

NormalizedDeform 4つのボーンINDEXとウェイトを返す(合計8個)

type Bone

type Bone struct {
	*mcore.IndexNameModel
	Position               *mmath.MVec3     // ボーン位置
	ParentIndex            int              // 親ボーンのボーンIndex
	Layer                  int              // 変形階層
	BoneFlag               BoneFlag         // ボーンフラグ(16bit) 各bit 0:OFF 1:ON
	TailPosition           *mmath.MVec3     // 接続先:0 の場合 座標オフセット, ボーン位置からの相対分
	TailIndex              int              // 接続先:1 の場合 接続先ボーンのボーンIndex
	EffectIndex            int              // 回転付与:1 または 移動付与:1 の場合 付与親ボーンのボーンIndex
	EffectFactor           float64          // 付与率
	FixedAxis              *mmath.MVec3     // 軸固定:1 の場合 軸の方向ベクトル
	LocalAxisX             *mmath.MVec3     // ローカル軸:1 の場合 X軸の方向ベクトル
	LocalAxisZ             *mmath.MVec3     // ローカル軸:1 の場合 Z軸の方向ベクトル
	EffectorKey            int              // 外部親変形:1 の場合 Key値
	Ik                     *Ik              // IK:1 の場合 IKデータを格納
	DisplaySlot            int              // 該当表示枠
	IsSystem               bool             // システム計算用追加ボーン の場合 true
	NormalizedLocalAxisX   *mmath.MVec3     // 計算済みのX軸の方向ベクトル
	NormalizedLocalAxisY   *mmath.MVec3     // 計算済みのY軸の方向ベクトル
	NormalizedLocalAxisZ   *mmath.MVec3     // 計算済みのZ軸の方向ベクトル
	NormalizedFixedAxis    *mmath.MVec3     // 計算済みの軸制限ベクトル
	LocalAxis              *mmath.MVec3     // ローカル軸の方向ベクトル(CorrectedLocalXVectorの正規化ベクトル)
	ParentRelativePosition *mmath.MVec3     // 親ボーンからの相対位置
	ChildRelativePosition  *mmath.MVec3     // Tailボーンへの相対位置
	LocalMatrix            *mmath.MMat4     // ローカル軸行列
	RevertOffsetMatrix     *mmath.MMat4     // 逆オフセット行列(親ボーンからの相対位置分を戻す)
	OffsetMatrix           *mmath.MMat4     // オフセット行列 (自身の位置を原点に戻す行列)
	TreeBoneIndexes        []int            // 自分のボーンまでのボーンIndexのリスト
	ParentBoneIndexes      []int            // 自分の親ボーンからルートまでのボーンIndexのリスト
	ParentBoneNames        []string         // 自分の親ボーンからルートまでのボーン名のリスト
	RelativeBoneIndexes    []int            // 関連ボーンINDEX一覧(付与親とかIKとか)
	ChildBoneIndexes       []int            // 自分を親として登録しているボーンINDEX一覧
	EffectiveBoneIndexes   []int            // 自分を付与親として登録しているボーンINDEX一覧
	IkLinkBoneIndexes      []int            // IKリンクとして登録されているIKボーンのボーンIndex
	IkTargetBoneIndexes    []int            // IKターゲットとして登録されているIKボーンのボーンIndex
	AngleLimit             bool             // 自分がIKリンクボーンの角度制限がある場合、true
	MinAngleLimit          *mmath.MRotation // 自分がIKリンクボーンの角度制限の下限
	MaxAngleLimit          *mmath.MRotation // 自分がIKリンクボーンの角度制限の上限
	LocalAngleLimit        bool             // 自分がIKリンクボーンのローカル軸角度制限がある場合、true
	LocalMinAngleLimit     *mmath.MRotation // 自分がIKリンクボーンのローカル軸角度制限の下限
	LocalMaxAngleLimit     *mmath.MRotation // 自分がIKリンクボーンのローカル軸角度制限の上限
	AxisSign               int              // ボーンの軸ベクトル(左は-1, 右は1)
	RigidBody              *RigidBody       // 物理演算用剛体
}

func NewBone

func NewBone() *Bone

func NewBoneByName

func NewBoneByName(name string) *Bone

func (*Bone) CanManipulate

func (bone *Bone) CanManipulate() bool

操作可であるか

func (*Bone) CanRotate

func (bone *Bone) CanRotate() bool

回転可能であるか

func (*Bone) CanTranslate

func (bone *Bone) CanTranslate() bool

移動可能であるか

func (*Bone) Copy

func (v *Bone) Copy() mcore.IIndexNameModel

func (*Bone) HasFixedAxis

func (bone *Bone) HasFixedAxis() bool

軸固定であるか

func (*Bone) HasLocalAxis

func (bone *Bone) HasLocalAxis() bool

ローカル軸を持つか

func (*Bone) IsAfterPhysicsDeform

func (bone *Bone) IsAfterPhysicsDeform() bool

物理後変形であるか

func (*Bone) IsAnkle

func (bone *Bone) IsAnkle() bool

足首から先であるか

func (*Bone) IsArm

func (bone *Bone) IsArm() bool

腕系ボーンであるか(指は含まない)

func (*Bone) IsEffectorLocal

func (bone *Bone) IsEffectorLocal() bool

ローカル付与であるか

func (*Bone) IsEffectorParentDeform

func (bone *Bone) IsEffectorParentDeform() bool

外部親変形であるか

func (*Bone) IsEffectorRotation

func (bone *Bone) IsEffectorRotation() bool

回転付与であるか

func (*Bone) IsEffectorTranslation

func (bone *Bone) IsEffectorTranslation() bool

移動付与であるか

func (*Bone) IsFinger

func (bone *Bone) IsFinger() bool

指系ボーンであるか

func (*Bone) IsHead

func (bone *Bone) IsHead() bool

頭系であるか

func (*Bone) IsIK

func (bone *Bone) IsIK() bool

IKであるか

func (*Bone) IsLegD

func (bone *Bone) IsLegD() bool

足D系列であるか

func (*Bone) IsLegFK

func (bone *Bone) IsLegFK() bool

足FK系列であるか

func (*Bone) IsLower

func (bone *Bone) IsLower() bool

下半身系であるか

func (*Bone) IsNoLocalCancel

func (bone *Bone) IsNoLocalCancel() bool

ローカル軸行列計算で親のキャンセルをさせないボーンであるか

func (*Bone) IsShoulderP

func (bone *Bone) IsShoulderP() bool

肩P系列であるか

func (*Bone) IsTailBone

func (bone *Bone) IsTailBone() bool

表示先がボーンであるか

func (*Bone) IsTwist

func (bone *Bone) IsTwist() bool

捩りボーンであるか

func (*Bone) IsUpper

func (bone *Bone) IsUpper() bool

上半身系であるか

func (*Bone) IsVisible

func (bone *Bone) IsVisible() bool

表示であるか

func (*Bone) NormalizeFixedAxis

func (bone *Bone) NormalizeFixedAxis(fixedAxis *mmath.MVec3)

func (*Bone) NormalizeLocalAxis

func (bone *Bone) NormalizeLocalAxis(localAxisX *mmath.MVec3)

type BoneCategory

type BoneCategory int
const (
	// ルート
	CATEGORY_ROOT BoneCategory = iota
	// 上半身
	CATEGORY_UPPER BoneCategory = iota
	// 下半身
	CATEGORY_LOWER BoneCategory = iota
	// 腕
	CATEGORY_ARM BoneCategory = iota
	// 足
	CATEGORY_LEG BoneCategory = iota
	// 指
	CATEGORY_FINGER BoneCategory = iota
	// 足D
	CATEGORY_LEG_D BoneCategory = iota
	// 肩P
	CATEGORY_SHOULDER_P BoneCategory = iota
	// 足FK
	CATEGORY_LEG_FK BoneCategory = iota
	// 足首
	CATEGORY_ANKLE BoneCategory = iota
	// 捩
	CATEGORY_TWIST BoneCategory = iota
	// 頭
	CATEGORY_HEAD BoneCategory = iota
	// ローカル軸行列計算で親のキャンセルをさせないボーン
	CATEGORY_NO_LOCAL_CANCEL BoneCategory = iota
)

type BoneConfig

type BoneConfig struct {
	// 準標準ボーン名
	Name StandardBoneNames
	// 親ボーン名候補リスト
	ParentBoneNames []StandardBoneNames
	// 表示先位置(該当ボーンの位置との相対位置)
	TailPosition *mmath.MVec3
	// 末端ボーン名候補リスト
	TailBoneNames []StandardBoneNames
	// ボーンの特性
	BoneFlag BoneFlag
	// ボーンカテゴリ
	Categories []BoneCategory
}

func NewBoneConfig

func NewBoneConfig(
	name StandardBoneNames,
	parentBoneNames []StandardBoneNames,
	tailPosition *mmath.MVec3,
	tailBoneNames []StandardBoneNames,
	flag BoneFlag,
	categories []BoneCategory,
) *BoneConfig

type BoneFlag

type BoneFlag uint16
const (
	// 初期値
	BONE_FLAG_NONE BoneFlag = 0x0000
	// 接続先(PMD子ボーン指定)表示方法 -> 0:座標オフセットで指定 1:ボーンで指定
	BONE_FLAG_TAIL_IS_BONE BoneFlag = 0x0001
	// 回転可能
	BONE_FLAG_CAN_ROTATE BoneFlag = 0x0002
	// 移動可能
	BONE_FLAG_CAN_TRANSLATE BoneFlag = 0x0004
	// 表示
	BONE_FLAG_IS_VISIBLE BoneFlag = 0x0008
	// 操作可
	BONE_FLAG_CAN_MANIPULATE BoneFlag = 0x0010
	// IK
	BONE_FLAG_IS_IK BoneFlag = 0x0020
	// ローカル付与 | 付与対象 0:ユーザー変形値/IKリンク/多重付与 1:親のローカル変形量
	BONE_FLAG_IS_EXTERNAL_LOCAL BoneFlag = 0x0080
	// 回転付与
	BONE_FLAG_IS_EXTERNAL_ROTATION BoneFlag = 0x0100
	// 移動付与
	BONE_FLAG_IS_EXTERNAL_TRANSLATION BoneFlag = 0x0200
	// 軸固定
	BONE_FLAG_HAS_FIXED_AXIS BoneFlag = 0x0400
	// ローカル軸
	BONE_FLAG_HAS_LOCAL_AXIS BoneFlag = 0x0800
	// 物理後変形
	BONE_FLAG_IS_AFTER_PHYSICS_DEFORM BoneFlag = 0x1000
	// 外部親変形
	BONE_FLAG_IS_EXTERNAL_PARENT_DEFORM BoneFlag = 0x2000
)

type BoneMorphOffset

type BoneMorphOffset struct {
	BoneIndex     int              // ボーンIndex
	Position      *mmath.MVec3     // グローバル移動量(x,y,z)
	Rotation      *mmath.MRotation // グローバル回転量-クォータニオン(x,y,z,w)
	Scale         *mmath.MVec3     // グローバル縮尺量(x,y,z) ※システム独自
	LocalPosition *mmath.MVec3     // ローカル軸に沿った移動量(x,y,z) ※システム独自
	LocalRotation *mmath.MRotation // ローカル軸に沿った回転量-クォータニオン(x,y,z,w) ※システム独自
	LocalScale    *mmath.MVec3     // ローカル軸に沿った縮尺量(x,y,z) ※システム独自
}

BoneMorphOffset represents a bone morph.

func NewBoneMorphOffset

func NewBoneMorphOffset(boneIndex int, position *mmath.MVec3, rotation *mmath.MRotation) *BoneMorphOffset

func (*BoneMorphOffset) GetType

func (v *BoneMorphOffset) GetType() int

type Bones

type Bones struct {
	*mcore.IndexNameModels[*Bone]
	IkTreeIndexes     map[int][]int
	LayerSortedBones  map[bool][]*Bone
	LayerSortedNames  map[bool]map[string]int
	DeformBoneIndexes map[int][]int
}

ボーンリスト

func NewBones

func NewBones(count int) *Bones

func (*Bones) GetLayerIndexes

func (b *Bones) GetLayerIndexes(isAfterPhysics bool) []int

type CollisionGroup

type CollisionGroup struct {
	IsCollisions []uint16
}

func NewCollisionGroupFromSlice

func NewCollisionGroupFromSlice(collisionGroup []uint16) CollisionGroup

type Deform

type Deform struct {
	Indexes []int     // ボーンINDEXリスト
	Weights []float64 // ウェイトリスト
	Count   int       // デフォームボーン個数
}

Deform デフォーム既定構造体

func NewDeform

func NewDeform(indexes []int, weights []float64, count int) Deform

NewDeform creates a new Deform instance.

func (*Deform) GetAllIndexes

func (d *Deform) GetAllIndexes() []int

func (*Deform) GetAllWeights

func (d *Deform) GetAllWeights() []float64

func (*Deform) GetIndexes

func (d *Deform) GetIndexes(weightThreshold float64) []int

GetIndexes ウェイト閾値以上のウェイトを持っているINDEXのみを取得する

func (*Deform) GetSdefParams

func (d *Deform) GetSdefParams() (mgl32.Vec3, mgl32.Vec3, mgl32.Vec3)

SDEF用パラメーターを返す

func (*Deform) GetWeights

func (d *Deform) GetWeights(weightThreshold float64) []float64

GetWeights ウェイト閾値以上のウェイトを持っているウェイトのみを取得する

func (*Deform) Normalize

func (d *Deform) Normalize(align bool)

Normalize ウェイト正規化

func (*Deform) NormalizedDeform

func (d *Deform) NormalizedDeform() [8]float32

NormalizedDeform 4つのボーンINDEXとウェイトを返す(合計8個)

type DeformType

type DeformType byte

DeformType ウェイト変形方式

const (
	BDEF1 DeformType = 0
	BDEF2 DeformType = 1
	BDEF4 DeformType = 2
	SDEF  DeformType = 3
)

type DisplaySlot

type DisplaySlot struct {
	*mcore.IndexNameModel
	SpecialFlag SpecialFlag // 特殊枠フラグ - 0:通常枠 1:特殊枠
	References  []Reference // 表示枠要素
	IsSystem    bool        // ツール側で追加した表示枠
}

func NewDisplaySlot

func NewDisplaySlot() *DisplaySlot

NewDisplaySlot

func (*DisplaySlot) Copy

func (v *DisplaySlot) Copy() mcore.IIndexModel

Copy

type DisplaySlots

type DisplaySlots struct {
	*mcore.IndexModels[*DisplaySlot]
}

表示枠リスト

func NewDisplaySlots

func NewDisplaySlots(count int) *DisplaySlots

type DisplayType

type DisplayType int

表示枠要素タイプ

const (
	DISPLAY_TYPE_BONE  DisplayType = 0 // ボーン
	DISPLAY_TYPE_MORPH DisplayType = 1 // モーフ
)

type DrawFlag

type DrawFlag byte
const (
	// 初期値
	DRAW_FLAG_NONE DrawFlag = 0x0000
	// 0x01:両面描画
	DRAW_FLAG_DOUBLE_SIDED_DRAWING DrawFlag = 0x0001
	// 0x02:地面影
	DRAW_FLAG_GROUND_SHADOW DrawFlag = 0x0002
	// 0x04:セルフシャドウマップへの描画
	DRAW_FLAG_DRAWING_ON_SELF_SHADOW_MAPS DrawFlag = 0x0004
	// 0x08:セルフシャドウの描画
	DRAW_FLAG_DRAWING_SELF_SHADOWS DrawFlag = 0x0008
	// 0x10:エッジ描画
	DRAW_FLAG_DRAWING_EDGE DrawFlag = 0x0010
)

func (DrawFlag) IsDoubleSidedDrawing

func (d DrawFlag) IsDoubleSidedDrawing() bool

0x01:両面描画

func (DrawFlag) IsDrawingEdge

func (d DrawFlag) IsDrawingEdge() bool

0x10:エッジ描画

func (DrawFlag) IsDrawingOnSelfShadowMaps

func (d DrawFlag) IsDrawingOnSelfShadowMaps() bool

0x04:セルフシャドウマップへの描画

func (DrawFlag) IsDrawingSelfShadows

func (d DrawFlag) IsDrawingSelfShadows() bool

0x08:セルフシャドウの描画

func (DrawFlag) IsGroundShadow

func (d DrawFlag) IsGroundShadow() bool

0x02:地面影

func (DrawFlag) SetDoubleSidedDrawing

func (d DrawFlag) SetDoubleSidedDrawing(flag bool) DrawFlag

func (DrawFlag) SetDrawingEdge

func (d DrawFlag) SetDrawingEdge(flag bool) DrawFlag

func (DrawFlag) SetDrawingOnSelfShadowMaps

func (d DrawFlag) SetDrawingOnSelfShadowMaps(flag bool) DrawFlag

func (DrawFlag) SetDrawingSelfShadows

func (d DrawFlag) SetDrawingSelfShadows(flag bool) DrawFlag

func (DrawFlag) SetGroundShadow

func (d DrawFlag) SetGroundShadow(flag bool) DrawFlag

type Face

type Face struct {
	*mcore.IndexModel
	VertexIndexes [3]int // 頂点INDEXリスト
}

面データ

func NewFace

func NewFace() *Face

func (*Face) Copy

func (f *Face) Copy() mcore.IIndexModel

type FaceGL

type FaceGL struct {
	VertexIndexes [3]uint32
}

type Faces

type Faces struct {
	*mcore.IndexModels[*Face]
}

面リスト

func NewFaces

func NewFaces(count int) *Faces

type GroupMorphOffset

type GroupMorphOffset struct {
	MorphIndex  int     // モーフINDEX
	MorphFactor float64 // モーフ変動量
}

GroupMorphOffset represents a group morph.

func NewGroupMorphOffset

func NewGroupMorphOffset(morphIndex int, morphFactor float64) *GroupMorphOffset

func (*GroupMorphOffset) GetType

func (v *GroupMorphOffset) GetType() int

type IDeform

type IDeform interface {
	GetType() DeformType
	GetAllIndexes() []int
	GetAllWeights() []float64
	GetIndexes(weightThreshold float64) []int
	GetWeights(weightThreshold float64) []float64
	NormalizedDeform() [8]float32
	GetSdefParams() (mgl32.Vec3, mgl32.Vec3, mgl32.Vec3)
}

type Ik

type Ik struct {
	BoneIndex    int              // IKターゲットボーンのボーンIndex
	LoopCount    int              // IKループ回数 (最大255)
	UnitRotation *mmath.MRotation // IKループ計算時の1回あたりの制限角度
	Links        []*IkLink        // IKリンクリスト
}

func NewIk

func NewIk() *Ik

func (*Ik) Copy

func (t *Ik) Copy() *Ik
type IkLink struct {
	BoneIndex          int              // リンクボーンのボーンIndex
	AngleLimit         bool             // 角度制限有無
	MinAngleLimit      *mmath.MRotation // 下限
	MaxAngleLimit      *mmath.MRotation // 上限
	LocalAngleLimit    bool             // ローカル軸の角度制限有無
	LocalMinAngleLimit *mmath.MRotation // ローカル軸制限の下限
	LocalMaxAngleLimit *mmath.MRotation // ローカル軸制限の上限
}
func NewIkLink() *IkLink

func (*IkLink) Copy

func (v *IkLink) Copy() *IkLink

type Joint

type Joint struct {
	*mcore.IndexNameModel
	JointType       byte             // Joint種類 - 0:スプリング6DOF   | PMX2.0では 0 のみ(拡張用)
	RigidbodyIndexA int              // 関連剛体AのIndex
	RigidbodyIndexB int              // 関連剛体BのIndex
	Position        *mmath.MVec3     // 位置(x,y,z)
	Rotation        *mmath.MRotation // 回転
	JointParam      *JointParam      // ジョイントパラメーター
	IsSystem        bool
}

func NewJoint

func NewJoint() *Joint

func NewJointByName

func NewJointByName(name string) *Joint

func (*Joint) Copy

func (j *Joint) Copy() mcore.IIndexNameModel

type JointParam

type JointParam struct {
	TranslationLimitMin       *mmath.MVec3     // 移動制限-下限(x,y,z)
	TranslationLimitMax       *mmath.MVec3     // 移動制限-上限(x,y,z)
	RotationLimitMin          *mmath.MRotation // 回転制限-下限
	RotationLimitMax          *mmath.MRotation // 回転制限-上限
	SpringConstantTranslation *mmath.MVec3     // バネ定数-移動(x,y,z)
	SpringConstantRotation    *mmath.MRotation // バネ定数-回転(x,y,z)
}

func NewJointParam

func NewJointParam() *JointParam

type Joints

type Joints struct {
	*mcore.IndexNameModels[*Joint]
}

ジョイントリスト

func NewJoints

func NewJoints(count int) *Joints

type LayerIndex

type LayerIndex struct {
	Layer int
	Index int
}

変形階層とINDEXのソート用構造体

type LayerIndexes

type LayerIndexes []LayerIndex

func (LayerIndexes) Contains

func (p LayerIndexes) Contains(index int) bool

func (LayerIndexes) Len

func (p LayerIndexes) Len() int

func (LayerIndexes) Less

func (p LayerIndexes) Less(i, j int) bool

func (LayerIndexes) Swap

func (p LayerIndexes) Swap(i, j int)

type Material

type Material struct {
	*mcore.IndexNameModel
	Diffuse             *mmath.MVec4 // Diffuse (R,G,B,A)(拡散色+非透過度)
	Specular            *mmath.MVec4 // Specular (R,G,B,A)(反射色 + 反射強度)
	Ambient             *mmath.MVec3 // Ambient (R,G,B)(環境色)
	DrawFlag            DrawFlag     // 描画フラグ(8bit) - 各bit 0:OFF 1:ON
	Edge                *mmath.MVec4 // エッジ色 (R,G,B,A)
	EdgeSize            float64      // エッジサイズ
	TextureIndex        int          // 通常テクスチャINDEX
	SphereTextureIndex  int          // スフィアテクスチャINDEX
	SphereMode          SphereMode   // スフィアモード
	ToonSharingFlag     ToonSharing  // 共有Toonフラグ
	ToonTextureIndex    int          // ToonテクスチャINDEX
	Memo                string       // メモ
	VerticesCount       int          // 材質に対応する面(頂点)数 (必ず3の倍数になる)
	TextureFactor       *mmath.MVec4 // テクスチャ係数
	SphereTextureFactor *mmath.MVec4 // スフィアテクスチャ係数
	ToonTextureFactor   *mmath.MVec4 // トゥーンテクスチャ係数
}

func NewMaterial

func NewMaterial() *Material

func NewMaterialByName

func NewMaterialByName(name string) *Material

func (*Material) Copy

func (m *Material) Copy() mcore.IIndexNameModel

type MaterialMorphCalcMode

type MaterialMorphCalcMode int

MaterialMorphCalcMode 材質モーフ:計算モード

const (
	CALC_MODE_MULTIPLICATION MaterialMorphCalcMode = 0 // 乗算
	CALC_MODE_ADDITION       MaterialMorphCalcMode = 1 // 加算
)

type MaterialMorphOffset

type MaterialMorphOffset struct {
	MaterialIndex       int                   // 材質Index -> -1:全材質対象
	CalcMode            MaterialMorphCalcMode // 0:乗算, 1:加算
	Diffuse             *mmath.MVec4          // Diffuse (R,G,B,A)
	Specular            *mmath.MVec4          // SpecularColor (R,G,B, 係数)
	Ambient             *mmath.MVec3          // AmbientColor (R,G,B)
	Edge                *mmath.MVec4          // エッジ色 (R,G,B,A)
	EdgeSize            float64               // エッジサイズ
	TextureFactor       *mmath.MVec4          // テクスチャ係数 (R,G,B,A)
	SphereTextureFactor *mmath.MVec4          // スフィアテクスチャ係数 (R,G,B,A)
	ToonTextureFactor   *mmath.MVec4          // Toonテクスチャ係数 (R,G,B,A)
}

MaterialMorphOffset represents a material morph.

func NewMaterialMorphOffset

func NewMaterialMorphOffset(
	materialIndex int,
	calcMode MaterialMorphCalcMode,
	diffuse *mmath.MVec4,
	specular *mmath.MVec4,
	ambient *mmath.MVec3,
	edge *mmath.MVec4,
	edgeSize float64,
	textureFactor *mmath.MVec4,
	sphereTextureFactor *mmath.MVec4,
	toonTextureFactor *mmath.MVec4,
) *MaterialMorphOffset

func (*MaterialMorphOffset) GetType

func (v *MaterialMorphOffset) GetType() int

type Materials

type Materials struct {
	*mcore.IndexNameModels[*Material]
	Vertices map[int][]int
	Faces    map[int][]int
}

材質リスト

func NewMaterials

func NewMaterials(count int) *Materials

type Meshes

type Meshes struct {
	// contains filtered or unexported fields
}

type Morph

type Morph struct {
	*mcore.IndexNameModel
	Panel       MorphPanel     // モーフパネル
	MorphType   MorphType      // モーフ種類
	Offsets     []TMorphOffset // モーフオフセット
	DisplaySlot int            // 表示枠
	IsSystem    bool           // ツール側で追加したモーフ
}

Morph represents a morph.

func NewMorph

func NewMorph() *Morph

NewMorph

func (*Morph) Copy

func (m *Morph) Copy() mcore.IIndexNameModel

type MorphPanel

type MorphPanel byte

MorphPanel 操作パネル

const (
	MORPH_PANEL_SYSTEM             MorphPanel = 0 // システム予約
	MORPH_PANEL_EYEBROW_LOWER_LEFT MorphPanel = 1 // 眉(左下)
	MORPH_PANEL_EYE_UPPER_LEFT     MorphPanel = 2 // 目(左上)
	MORPH_PANEL_LIP_UPPER_RIGHT    MorphPanel = 3 // 口(右上)
	MORPH_PANEL_OTHER_LOWER_RIGHT  MorphPanel = 4 // その他(右下)
)

func (MorphPanel) PanelName

func (p MorphPanel) PanelName() string

PanelName returns the name of the operation panel.

type MorphType

type MorphType int

MorphType モーフ種類

const (
	MORPH_TYPE_GROUP        MorphType = 0 // グループ
	MORPH_TYPE_VERTEX       MorphType = 1 // 頂点
	MORPH_TYPE_BONE         MorphType = 2 // ボーン
	MORPH_TYPE_UV           MorphType = 3 // UV
	MORPH_TYPE_EXTENDED_UV1 MorphType = 4 // 追加UV1
	MORPH_TYPE_EXTENDED_UV2 MorphType = 5 // 追加UV2
	MORPH_TYPE_EXTENDED_UV3 MorphType = 6 // 追加UV3
	MORPH_TYPE_EXTENDED_UV4 MorphType = 7 // 追加UV4
	MORPH_TYPE_MATERIAL     MorphType = 8 // 材質
	MORPH_TYPE_AFTER_VERTEX MorphType = 9 // ボーン変形後頂点(システム独自)
)

type Morphs

type Morphs struct {
	*mcore.IndexNameModels[*Morph]
}

モーフリスト

func NewMorphs

func NewMorphs(count int) *Morphs

type PhysicsType

type PhysicsType int

剛体物理の計算モード

const (
	PHYSICS_TYPE_STATIC       PhysicsType = 0 // ボーン追従(static)
	PHYSICS_TYPE_DYNAMIC      PhysicsType = 1 // 物理演算(dynamic)
	PHYSICS_TYPE_DYNAMIC_BONE PhysicsType = 2 // 物理演算 + Bone位置合わせ
)

type PmxModel

type PmxModel struct {
	*mcore.HashModel

	Signature          string
	Version            float64
	ExtendedUVCount    int
	VertexCountType    int
	TextureCountType   int
	MaterialCountType  int
	BoneCountType      int
	MorphCountType     int
	RigidBodyCountType int
	Name               string
	EnglishName        string
	Comment            string
	EnglishComment     string
	JsonData           map[string]interface{}
	Vertices           *Vertices
	Faces              *Faces
	Textures           *Textures
	ToonTextures       *ToonTextures
	Materials          *Materials
	Bones              *Bones
	Morphs             *Morphs
	DisplaySlots       *DisplaySlots
	RigidBodies        *RigidBodies
	Joints             *Joints
	Meshes             *Meshes
	DrawInitialized    bool
	Index              int // モデルインデックス(複数人モデル対応)
	// contains filtered or unexported fields
}

func NewPmxModel

func NewPmxModel(path string) *PmxModel

func (*PmxModel) Copy

func (m *PmxModel) Copy() mcore.IHashModel

func (*PmxModel) InitializeDisplaySlots

func (pm *PmxModel) InitializeDisplaySlots()

func (*PmxModel) Save

func (model *PmxModel) Save(includeSystem bool, overridePath string) error

func (*PmxModel) Setup

func (pm *PmxModel) Setup()

type PmxReader

type PmxReader struct {
	mcore.BaseReader[*PmxModel]
}

func (*PmxReader) ReadByFilepath

func (r *PmxReader) ReadByFilepath(path string) (mcore.IHashModel, error)

指定されたパスのファイルからデータを読み込む

func (*PmxReader) ReadNameByFilepath

func (r *PmxReader) ReadNameByFilepath(path string) (string, error)

type Reference

type Reference struct {
	DisplayType  DisplayType // 要素対象 0:ボーン 1:モーフ
	DisplayIndex int         // ボーンIndex or モーフIndex
}

func NewDisplaySlotReference

func NewDisplaySlotReference() *Reference

type RigidBodies

type RigidBodies struct {
	*mcore.IndexNameModels[*RigidBody]
}

剛体リスト

func NewRigidBodies

func NewRigidBodies(count int) *RigidBodies

type RigidBody

type RigidBody struct {
	*mcore.IndexNameModel
	BoneIndex               int              // 関連ボーンIndex
	CollisionGroup          byte             // グループ
	CollisionGroupMask      CollisionGroup   // 非衝突グループフラグ
	CollisionGroupMaskValue int              // 非衝突グループフラグ値
	ShapeType               Shape            // 形状
	Size                    *mmath.MVec3     // サイズ(x,y,z)
	Position                *mmath.MVec3     // 位置(x,y,z)
	Rotation                *mmath.MRotation // 回転(x,y,z) -> ラジアン角
	RigidBodyParam          *RigidBodyParam  // 剛体パラ
	PhysicsType             PhysicsType      // 剛体の物理演算
	// CorrectPhysicsType      PhysicsType      // 剛体の物理演算(補正後)
	XDirection  *mmath.MVec3 // X軸方向
	YDirection  *mmath.MVec3 // Y軸方向
	ZDirection  *mmath.MVec3 // Z軸方向
	IsSystem    bool         // システムで追加した剛体か
	Matrix      *mmath.MMat4 // 剛体の行列
	Bone        *Bone        // 繋がっているボーン
	JointedBone *Bone        // ジョイントで繋がってるボーン
}

func NewRigidBody

func NewRigidBody() *RigidBody

NewRigidBody creates a new rigid body.

func (*RigidBody) Copy

func (r *RigidBody) Copy() mcore.IIndexNameModel

type RigidBodyParam

type RigidBodyParam struct {
	Mass           float64 // 質量
	LinearDamping  float64 // 移動減衰
	AngularDamping float64 // 回転減衰
	Restitution    float64 // 反発力
	Friction       float64 // 摩擦力
}

func NewRigidBodyParam

func NewRigidBodyParam() *RigidBodyParam

type Sdef

type Sdef struct {
	Deform
	SdefC  *mmath.MVec3
	SdefR0 *mmath.MVec3
	SdefR1 *mmath.MVec3
}

Sdef represents the SDEF deformation.

func NewSdef

func NewSdef(index0, index1 int, weight0 float64, sdefC, sdefR0, sdefR1 *mmath.MVec3) *Sdef

NewSdef creates a new Sdef instance.

func (*Sdef) GetType

func (s *Sdef) GetType() DeformType

GetType returns the deformation type.

func (*Sdef) NormalizedDeform

func (d *Sdef) NormalizedDeform() [8]float32

NormalizedDeform 4つのボーンINDEXとウェイトを返す(合計8個)

type Shape

type Shape int

剛体の形状

const (
	SHAPE_SPHERE  Shape = 0 // 球
	SHAPE_BOX     Shape = 1 // 箱
	SHAPE_CAPSULE Shape = 2 // カプセル
)

type SpecialFlag

type SpecialFlag int

特殊枠フラグ - 0:通常枠 1:特殊枠

const (
	SPECIAL_FLAG_OFF SpecialFlag = 0 // 通常枠
	SPECIAL_FLAG_ON  SpecialFlag = 1 // 特殊枠(Rootと表情)
)

type SphereMode

type SphereMode byte

スフィアモード

const (
	// 無効
	SPHERE_MODE_INVALID SphereMode = 0
	// 乗算(sph)
	SPHERE_MODE_MULTIPLICATION SphereMode = 1
	// 加算(spa)
	SPHERE_MODE_ADDITION SphereMode = 2
	// サブテクスチャ(追加UV1のx,yをUV参照して通常テクスチャ描画を行う)
	SPHERE_MODE_SUBTEXTURE SphereMode = 3
)

type StandardBoneNames

type StandardBoneNames string
const (
	ROOT          StandardBoneNames = "全ての親"
	CENTER        StandardBoneNames = "センター"
	GROOVE        StandardBoneNames = "グルーブ"
	WAIST         StandardBoneNames = "腰"
	LOWER         StandardBoneNames = "下半身"
	LEG_CENTER    StandardBoneNames = "足中心"
	UPPER         StandardBoneNames = "上半身"
	UPPER2        StandardBoneNames = "上半身2"
	UPPER3        StandardBoneNames = "上半身3"
	NECK_ROOT     StandardBoneNames = "首根元"
	NECK          StandardBoneNames = "首"
	HEAD          StandardBoneNames = "頭"
	EYES          StandardBoneNames = "両目"
	EYE           StandardBoneNames = "{d}目"
	BUST          StandardBoneNames = "{d}胸"
	SHOULDER_ROOT StandardBoneNames = "{d}肩根元"
	SHOULDER_P    StandardBoneNames = "{d}肩P"
	SHOULDER      StandardBoneNames = "{d}肩"
	SHOULDER_C    StandardBoneNames = "{d}肩C"
	ARM           StandardBoneNames = "{d}腕"
	ARM_TWIST     StandardBoneNames = "{d}腕捩"
	ELBOW         StandardBoneNames = "{d}ひじ"
	WRIST_TWIST   StandardBoneNames = "{d}手捩"
	WRIST         StandardBoneNames = "{d}手首"
	THUMB0        StandardBoneNames = "{d}親指0"
	THUMB1        StandardBoneNames = "{d}親指1"
	THUMB2        StandardBoneNames = "{d}親指2"
	THUMB_TAIL    StandardBoneNames = "{d}親指先"
	INDEX1        StandardBoneNames = "{d}人指1"
	INDEX2        StandardBoneNames = "{d}人指2"
	INDEX3        StandardBoneNames = "{d}人指3"
	INDEX_TAIL    StandardBoneNames = "{d}人指先"
	MIDDLE1       StandardBoneNames = "{d}中指1"
	MIDDLE2       StandardBoneNames = "{d}中指2"
	MIDDLE3       StandardBoneNames = "{d}中指3"
	MIDDLE_TAIL   StandardBoneNames = "{d}中指先"
	RING1         StandardBoneNames = "{d}薬指1"
	RING2         StandardBoneNames = "{d}薬指2"
	RING3         StandardBoneNames = "{d}薬指3"
	RING_TAIL     StandardBoneNames = "{d}薬指先"
	PINKY1        StandardBoneNames = "{d}小指1"
	PINKY2        StandardBoneNames = "{d}小指2"
	PINKY3        StandardBoneNames = "{d}小指3"
	PINKY_TAIL    StandardBoneNames = "{d}小指先"
	WAIST_CANCEL  StandardBoneNames = "腰キャンセル{d}"
	LEG           StandardBoneNames = "{d}足"
	KNEE          StandardBoneNames = "{d}ひざ"
	ANKLE         StandardBoneNames = "{d}足首"
	TOE           StandardBoneNames = "{d}つま先"
	LEG_D         StandardBoneNames = "{d}足D"
	KNEE_D        StandardBoneNames = "{d}ひざD"
	ANKLE_D       StandardBoneNames = "{d}足首D"
	TOE_EX        StandardBoneNames = "{d}足先EX"
	LEG_IK_PARENT StandardBoneNames = "{d}足IK親"
	LEG_IK        StandardBoneNames = "{d}足IK"
	TOE_IK        StandardBoneNames = "{d}つま先IK"
	HEEL          StandardBoneNames = "{d}かかと"
)

func (StandardBoneNames) Left

func (s StandardBoneNames) Left() string

func (StandardBoneNames) Right

func (s StandardBoneNames) Right() string

func (StandardBoneNames) String

func (s StandardBoneNames) String() string

func (StandardBoneNames) StringFromDirection

func (s StandardBoneNames) StringFromDirection(direction string) string

type TMorphOffset

type TMorphOffset interface {
	GetType() int
}

TMorphOffset represents a morph offset.

type Texture

type Texture struct {
	*mcore.IndexModel
	Name        string      // テクスチャ名
	TextureType TextureType // テクスチャ種別
	Path        string      // テクスチャフルパス
	Valid       bool        // テクスチャフルパスが有効であるか否か

	Initialized bool         // 描画初期化済みフラグ
	Image       *image.NRGBA // テクスチャイメージ

	IsGeneratedMipmap bool // ミップマップが生成されているか否か
	// contains filtered or unexported fields
}

func NewTexture

func NewTexture() *Texture

func (*Texture) Copy

func (t *Texture) Copy() mcore.IIndexModel

type TextureType

type TextureType int

テクスチャ種別

const (
	TEXTURE_TYPE_TEXTURE TextureType = 0 // テクスチャ
	TEXTURE_TYPE_TOON    TextureType = 1 // Toonテクスチャ
	TEXTURE_TYPE_SPHERE  TextureType = 2 // スフィアテクスチャ
)

type Textures

type Textures struct {
	*mcore.IndexModels[*Texture]
}

テクスチャリスト

func NewTextures

func NewTextures(count int) *Textures

type ToonSharing

type ToonSharing byte

共有Toonフラグ

const (
	// 0:継続値は個別Toon
	TOON_SHARING_INDIVIDUAL ToonSharing = 0
	// 1:継続値は共有Toon
	TOON_SHARING_SHARING ToonSharing = 1
)

type ToonTextures

type ToonTextures struct {
	*mcore.IndexModels[*Texture]
}

共有テクスチャ辞書

func NewToonTextures

func NewToonTextures() *ToonTextures

type UvMorphOffset

type UvMorphOffset struct {
	VertexIndex int          // 頂点INDEX
	Uv          *mmath.MVec4 // UVオフセット量(x,y,z,w)
}

UvMorphOffset represents a UV morph.

func NewUvMorphOffset

func NewUvMorphOffset(vertexIndex int, uv *mmath.MVec4) *UvMorphOffset

func (*UvMorphOffset) GetType

func (v *UvMorphOffset) GetType() int

type Vertex

type Vertex struct {
	*mcore.IndexModel
	Position        *mmath.MVec3   // 頂点位置
	Normal          *mmath.MVec3   // 頂点法線
	Uv              *mmath.MVec2   // UV
	ExtendedUvs     []*mmath.MVec4 // 追加UV
	DeformType      DeformType     // ウェイト変形方式
	Deform          IDeform        // デフォーム
	EdgeFactor      float64        // エッジ倍率
	MaterialIndexes []int          // 割り当て材質インデックス
}

func NewVertex

func NewVertex() *Vertex

func (*Vertex) Copy

func (v *Vertex) Copy() mcore.IIndexModel

type VertexMorphOffset

type VertexMorphOffset struct {
	VertexIndex int          // 頂点INDEX
	Position    *mmath.MVec3 // 座標オフセット量(x,y,z)
}

VertexMorphOffset represents a vertex morph.

func NewVertexMorphOffset

func NewVertexMorphOffset(vertexIndex int, position *mmath.MVec3) *VertexMorphOffset

func (*VertexMorphOffset) GetType

func (v *VertexMorphOffset) GetType() int

type Vertices

type Vertices struct {
	*mcore.IndexModels[*Vertex]
}

頂点リスト

func NewVertices

func NewVertices(count int) *Vertices

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL